Index: /vendors/AGRIF/r_00/AA_make
===================================================================
--- /vendors/AGRIF/r_00/AA_make	(revision 1902)
+++ /vendors/AGRIF/r_00/AA_make	(revision 1902)
@@ -0,0 +1,133 @@
+#- $Id: AA_make 1791 2009-12-15 02:02:04Z smasson $
+
+TMP=../../../tmp
+
+SRM=/bin/rm -f
+
+#-Q- sx8mercure C_L	= $(FC_L) 
+#-Q- sx8mercure C_O	= $(FC_O) 
+#-Q- sx9mercure C_L	= $(FC_L) 
+#-Q- sx9mercure C_O	= $(FC_O) 
+#-Q- sx8brodie C_L= $(FC_L) 
+#-Q- sx8brodie C_O= $(FC_O) 
+#-Q- sxdkrz C_L	= $(FC_L) 
+#-Q- sxdkrz C_O	= $(FC_O) 
+#-Q- es2 C_L	= $(FC_L) 
+#-Q- es2 C_O	= $(FC_O) 
+#-Q- sx8mercure F_O +=  -Wf"-init heap=zero"
+#-Q- sx9mercure F_O +=  -Wf"-init heap=zero" 
+#-Q- sx8brodie F_O +=   -Wf"-init heap=zero" 
+#-Q- sxdkrz F_O +=  -Wf"-init heap=zero" 
+#-Q- es2 F_O +=  -Wf"-init heap=zero" 
+#-Q- aix F_O = $(w_w) -I$(MODDIR) -qmoddir=$(MODDIR) -qextname
+#-Q- aix6 F_O = $(w_w) -I$(MODDIR) -qmoddir=$(MODDIR) -qextname
+#-Q- osxxlf F_O = $(w_w) -I$(MODDIR) -qmoddir=$(MODDIR) -qextname
+#-Q- linux F_O = $(F_D) $(F_P) -Mfixed -module $(MODDIR)
+
+AGRIFOBJS=AGRIF_OBJS
+AGRIFFILES=AGRIF_FILES
+AGRIFYOURFILES=AGRIF_YOURFILES
+
+FILENAMES= modbc modmpp modcluster modinit modinitvars modinterp  \
+	   modtypes modbcfunction modutil modcurgridfunctions \
+	   modmask modsauv modupdate modinterpbasic\
+	   modupdatebasic modlinktomodel modarrays modflux
+	   
+OBJS1=$(addprefix $(AGRIFOBJS)/,$(FILENAMES))
+OBJS=$(addsuffix .o,$(OBJS1))
+
+
+AGRIF_FILES1=$(addprefix $(AGRIFFILES)/,$(FILENAMES))
+AGRIF_FILES=$(addsuffix .F,$(AGRIF_FILES1))
+
+all :   conv_exe key $(MODDIR)/libagrif.a $(SXMODEL_LIB)
+	@echo AGRIF is OK
+
+conv_exe : 
+	@( cd LIB ; $(M_K) -f Makefile C_L="$(C_L)" C_O="$(C_O)" )
+
+key : 
+	-@if [ "`cat KEY_CPP`" != "$(P_P)" ] ; then \
+	echo "$(P_P)" > KEY_CPP ; fi
+
+$(MODDIR)/libagrif.a : $(OBJS)
+	@$(A_C) $@ $(OBJS)
+
+$(SXMODEL_LIB) : $(OBJS)
+#-Q- sxdkrz     @$(A_X) $@ $(OBJS)
+#-Q- es2     @$(A_X) $@ $(OBJS)
+
+$(AGRIFOBJS)/%.o : $(AGRIFFILES)/%.F KEY_CPP
+	@$(SRM) $(AGRIFYOURFILES)/$(*F).f
+	@$(P_C) $(P_O) $(AGRIFFILES)/$(*F).F > $(AGRIFYOURFILES)/$(*F).f
+	@$(F_C) $(F_O) $(FFLAGS_EXTEND) $(AGRIF_OPTS) -c $(AGRIFYOURFILES)/$(*F).f -o $(AGRIFOBJS)/$(*F).o
+#-Q- linux	@$(SRM) $*.lst
+#-Q- ibm	@$(SRM) $*.lst
+#-Q- aix	@$(SRM) $*.lst
+#-Q- aix6	@$(SRM) $*.lst
+#-Q- sx8mercure	mv *.mod $(MODDIR)
+#-Q- sx9mercure	mv *.mod $(MODDIR)
+#-Q- sx8brodie	mv *.mod $(MODDIR)
+#-Q- sxdkrz	mv *.mod $(MODDIR)
+#-Q- es2	mv *.mod $(MODDIR)
+#-Q- solaris	mv *.mod $(MODDIR)
+
+
+$(AGRIFOBJS)/modarrays.o: $(AGRIFOBJS)/modtypes.o
+
+$(AGRIFOBJS)/modbc.o: $(AGRIFOBJS)/modinterp.o
+
+$(AGRIFOBJS)/modbcfunction.o: $(AGRIFOBJS)/modupdate.o \
+			 $(AGRIFOBJS)/modflux.o  \
+			 $(AGRIFOBJS)/modbc.o 
+
+$(AGRIFOBJS)/modcluster.o: $(AGRIFOBJS)/modsauv.o \
+			$(AGRIFOBJS)/modinitvars.o \
+			$(AGRIFOBJS)/modcurgridfunctions.o
+
+$(AGRIFOBJS)/modcurgridfunctions.o: $(AGRIFOBJS)/modinit.o
+
+$(AGRIFOBJS)/modinit.o: $(AGRIFOBJS)/modlinktomodel.o \
+			$(AGRIFOBJS)/modtypes.o
+
+$(AGRIFOBJS)/modinitvars.o: $(AGRIFOBJS)/modlinktomodel.o \
+			$(AGRIFOBJS)/modtypes.o
+
+$(AGRIFOBJS)/modinterpbasic.o: $(AGRIFOBJS)/modtypes.o
+
+$(AGRIFOBJS)/modinterp.o: $(AGRIFOBJS)/modcurgridfunctions.o \
+			$(AGRIFOBJS)/modmask.o \
+			$(AGRIFOBJS)/modarrays.o \
+			$(AGRIFOBJS)/modmpp.o \
+			$(AGRIFOBJS)/modinterpbasic.o
+
+$(AGRIFOBJS)/modlinktomodel.o: $(AGRIFOBJS)/modtypes.o
+
+$(AGRIFOBJS)/modmask.o: $(AGRIFOBJS)/modtypes.o
+
+$(AGRIFOBJS)/modsauv.o: $(AGRIFOBJS)/modarrays.o \
+			$(AGRIFOBJS)/modlinktomodel.o \
+			$(AGRIFOBJS)/modtypes.o
+
+$(AGRIFOBJS)/modupdatebasic.o: $(AGRIFOBJS)/modtypes.o
+
+$(AGRIFOBJS)/modupdate.o: $(AGRIFOBJS)/modmask.o \
+			$(AGRIFOBJS)/modcurgridfunctions.o \
+			$(AGRIFOBJS)/modarrays.o \
+			$(AGRIFOBJS)/modmpp.o \
+			$(AGRIFOBJS)/modupdatebasic.o
+
+$(AGRIFOBJS)/modutil.o: $(AGRIFOBJS)/modcurgridfunctions.o \
+			$(AGRIFOBJS)/modcluster.o
+
+$(AGRIFOBJS)/modmpp.o: $(AGRIFOBJS)/modtypes.o \
+			$(AGRIFOBJS)/modarrays.o
+
+clean : FORCE
+	$(SRM) $(OBJS) $(MODOBJS)$(LIBDIR)/libagrif.a 
+	
+cleanall : FORCE
+	$(SRM) $(OBJS) $(MODOBJS)$(LIBDIR)/libagrif.a 
+	@(cd LIB ; $(M_K) -f Makefile clean )
+
+FORCE :
Index: /vendors/AGRIF/r_00/AA_make.ldef
===================================================================
--- /vendors/AGRIF/r_00/AA_make.ldef	(revision 1902)
+++ /vendors/AGRIF/r_00/AA_make.ldef	(revision 1902)
@@ -0,0 +1,29 @@
+#- $Id: AA_make.ldef 1791 2009-12-15 02:02:04Z smasson $
+#---------------------------------------------------------------------
+#- Creation des elements relatifs a AGRIF (lib, config)
+#---------------------------------------------------------------------
+SHELL = /bin/sh
+#---------------------------------------------------------------------
+LIBDIR = ../../lib
+MODDIR = $(LIBDIR)
+#---------------------------------------------------------------------
+#--- -DNC_REAL option is needed if compiled in simple precision
+#--- In case you switch to double precision use -DNC_DOUBLE
+#-
+# Compilation:
+#-Q- lxiv7 FFLAGS_EXTEND=  -I..
+#-Q- lxiv8 FFLAGS_EXTEND=  -I..
+#-Q- sun   FFLAGS_EXTEND= -I..
+#-Q- aix   FFLAGS_EXTEND = -I.. -I$(HOME)/include/ -qsuffix=f=f
+#-Q- aix   AGRIF_OPTS = -qfixed -qrecur
+#-Q- aix6  FFLAGS_EXTEND = -I.. -I$(HOME)/include/ -qsuffix=f=f
+#-Q- aix6  AGRIF_OPTS = -qfixed -qrecur
+#-Q- ibm   FFLAGS_EXTEND = -I.. -I$(HOME)/include/ -qsuffix=f=f
+#-Q- ibm   AGRIF_OPTS = -qfixed -qrecur
+#-
+MODEL_LIB = $(LIBDIR)/libagrif.a
+SXMODEL_LIB = $(MODEL_LIB)
+#-Q- sxdkrz SXMODEL_LIB = $(LIBDIR)/libsxagrif.a
+#-Q- es2 SXMODEL_LIB = $(LIBDIR)/libsxagrif.a
+#-
+P_P=$(AGRIF_MPI)
Index: /vendors/AGRIF/r_00/AGRIF_FILES/modarrays.F
===================================================================
--- /vendors/AGRIF/r_00/AGRIF_FILES/modarrays.F	(revision 1902)
+++ /vendors/AGRIF/r_00/AGRIF_FILES/modarrays.F	(revision 1902)
@@ -0,0 +1,1193 @@
+!
+! $Id: modarrays.F 1200 2008-09-24 13:05:20Z rblod $
+!
+C     AGRIF (Adaptive Grid Refinement In Fortran)
+C
+C     Copyright (C) 2003 Laurent Debreu (Laurent.Debreu@imag.fr)
+C                        Christophe Vouland (Christophe.Vouland@imag.fr)    
+C
+C     This program is free software; you can redistribute it and/or modify
+C     it under the terms of the GNU General Public License as published by
+C     the Free Software Foundation; either version 2 of the License, or
+C     (at your option) any later version.
+C
+C     This program is distributed in the hope that it will be useful,
+C     but WITHOUT ANY WARRANTY; without even the implied warranty of
+C     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+C     GNU General Public License for more details.
+C
+C     You should have received a copy of the GNU General Public License
+C     along with this program; if not, write to the Free Software
+C     Foundation, Inc., 59 Temple Place- Suite 330, Boston, MA 02111-1307, USA.
+C
+C
+C
+CCC   Module Agrif_Arrays
+C      
+      Module Agrif_Arrays
+      Use Agrif_Types
+C
+      implicit none
+C      
+      Contains
+C     **************************************************************************
+CCC   Subroutine Agrif_Childbounds
+C     **************************************************************************
+C
+      Subroutine Agrif_Childbounds(nbdim,lboundloc,uboundloc,
+     &                 pttab,petab,pttruetab,cetruetab,memberin)
+C
+CCC   Description:
+CCC   Subroutine calculating the global indices of the child grid
+C
+C
+C     Declarations:
+C
+
+C
+C     Arguments
+      INTEGER :: nbdim
+      INTEGER,DIMENSION(nbdim) :: lboundloc,uboundloc
+      INTEGER,DIMENSION(nbdim) :: pttab,petab,pttruetab,cetruetab
+      LOGICAL :: memberin
+C
+C     Local variables
+      INTEGER :: i,lbglob,ubglob
+C
+#ifdef AGRIF_MPI
+      INTEGER :: indglob1,indglob2
+#endif
+C
+C
+      do i = 1,nbdim
+C
+        lbglob = lboundloc(i)
+        ubglob = uboundloc(i)
+C
+#ifdef AGRIF_MPI
+C
+        Call AGRIF_InvLoc(lbglob,Agrif_ProcRank,i,indglob1)
+C
+        Call AGRIF_InvLoc(ubglob,Agrif_ProcRank,i,indglob2)
+C
+        pttruetab(i) = max(pttab(i),indglob1)        
+C
+        cetruetab(i) = min(petab(i),indglob2)                 
+C
+#else
+C
+        pttruetab(i) = max(pttab(i),lbglob)        
+C
+        cetruetab(i) = min(petab(i),ubglob)
+C
+#endif
+C
+      enddo
+
+      memberin = .TRUE.
+
+      do i=1,nbdim
+        IF (cetruetab(i) < pttruetab(i)) THEN
+          memberin = .FALSE.
+          EXIT
+        ENDIF
+      enddo
+C
+      Return
+C
+C
+      End Subroutine Agrif_Childbounds
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_nbdim_Get_bound
+C     **************************************************************************
+C
+      Subroutine Agrif_nbdim_Get_bound(Variable,
+     &                           lower,upper,indice,nbdim)
+C
+CCC   Description:
+CCC   This subroutine is used to get the lower and the upper boundaries of a
+C     table. Output datas are scalar.
+C
+C     Declarations:
+C      
+      
+C
+C     Arguments      
+C
+      ! we want extract boundaries of this table
+      TYPE(AGRIF_Variable), Pointer :: Variable    
+      INTEGER              :: lower,upper ! output data
+      ! direction in wich we want to know the dimension
+      INTEGER              :: indice      
+      INTEGER              :: nbdim       ! dimension of the table
+C
+C     Local variables
+C
+      SELECT CASE (nbdim)
+      CASE (1)
+           lower = lbound(Variable % array1,indice)
+           upper = ubound(Variable % array1,indice)
+      CASE (2)
+           lower = lbound(Variable % array2,indice)
+           upper = ubound(Variable % array2,indice)
+      CASE (3)
+           lower = lbound(Variable % array3,indice)
+           upper = ubound(Variable % array3,indice)
+      CASE (4)
+           lower = lbound(Variable % array4,indice)
+           upper = ubound(Variable % array4,indice)
+      CASE (5)
+           lower = lbound(Variable % array5,indice)
+           upper = ubound(Variable % array5,indice)
+      CASE (6)
+           lower = lbound(Variable % array6,indice)
+           upper = ubound(Variable % array6,indice)
+      END SELECT
+C
+      return
+C
+      End Subroutine Agrif_nbdim_Get_bound       
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Get_bound_dimension
+C     **************************************************************************
+C
+      Subroutine Agrif_nbdim_Get_bound_dimension(Variable,
+     &                              lower,upper,nbdim)
+C
+CCC   Description:
+CCC   This subroutine is used to get the lower and the upper boundaries of a
+C        table. Output datas are scalar.
+C
+C     Declarations:
+C      
+      
+C
+C     Arguments      
+C
+      ! we want extract boundaries of this table
+      TYPE(AGRIF_Variable), Pointer     :: Variable    
+      INTEGER                  :: nbdim       ! dimension of the table
+      INTEGER,DIMENSION(nbdim) :: lower,upper ! output data
+C
+C     Local variables       
+C
+      lower = Variable % lb(1:nbdim)
+      upper = Variable % ub(1:nbdim)
+      return
+C
+      End Subroutine Agrif_nbdim_Get_bound_dimension     
+      
+C     **************************************************************************
+CCC   Subroutine Agrif_nbdim_allocation
+C     **************************************************************************
+C
+      Subroutine Agrif_nbdim_allocation(Variable,inf,sup,nbdim)
+C
+CCC   Description:
+CCC   This subroutine is used to Allocate the table Variable
+C
+C     Declarations:
+C      
+      
+C
+C     Arguments      
+C
+      TYPE(AGRIF_Variable), Pointer     :: Variable    
+      INTEGER                  :: nbdim       ! dimension of the table
+      INTEGER,DIMENSION(nbdim) :: inf,sup
+C
+C     Local variables       
+C
+      SELECT CASE (nbdim)
+      CASE (1)
+         allocate(Variable%array1(
+     &            inf(1):sup(1)))
+      CASE (2)
+          allocate(Variable%array2(
+     &            inf(1):sup(1),
+     &            inf(2):sup(2)))
+      CASE (3)
+         allocate(Variable%array3(
+     &            inf(1):sup(1),
+     &            inf(2):sup(2),
+     &            inf(3):sup(3)))
+      CASE (4)
+         allocate(Variable%array4(
+     &            inf(1):sup(1),
+     &            inf(2):sup(2),
+     &            inf(3):sup(3),
+     &            inf(4):sup(4)))
+      CASE (5)
+         allocate(Variable%array5(
+     &            inf(1):sup(1),
+     &            inf(2):sup(2),
+     &            inf(3):sup(3),
+     &            inf(4):sup(4),
+     &            inf(5):sup(5)))
+      CASE (6)
+         allocate(Variable%array6(
+     &            inf(1):sup(1),
+     &            inf(2):sup(2),
+     &            inf(3):sup(3),
+     &            inf(4):sup(4),
+     &            inf(5):sup(5),
+     &            inf(6):sup(6)))
+      END SELECT
+C
+      return
+C
+      End Subroutine Agrif_nbdim_allocation
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_nbdim_deallocation
+C     **************************************************************************
+C
+      Subroutine Agrif_nbdim_deallocation(Variable,nbdim)
+C
+CCC   Description:
+CCC   This subroutine is used to give the same value to the table Variable
+C
+C     Declarations:
+C      
+      
+C
+C     Arguments      
+C
+      TYPE(AGRIF_Variable), Pointer     :: Variable    
+      INTEGER                  :: nbdim       ! dimension of the table
+C
+C     Local variables       
+C
+
+      SELECT CASE (nbdim)
+      CASE (1)
+         Deallocate(Variable%array1)
+      CASE (2)
+         Deallocate(Variable%array2)
+      CASE (3)
+         Deallocate(Variable%array3)
+      CASE (4)
+         Deallocate(Variable%array4)
+      CASE (5)
+         Deallocate(Variable%array5)
+      CASE (6)
+         Deallocate(Variable%array6)
+      END SELECT
+C
+      return
+C
+      End Subroutine Agrif_nbdim_deallocation
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_nbdim_Full_VarEQreal
+C     **************************************************************************
+C
+      Subroutine Agrif_nbdim_Full_VarEQreal(Variable,Value,nbdim)
+C
+CCC   Description:
+CCC   This subroutine is used to get the lower and the upper boundaries of a
+C        table. Output datas are scalar.
+C
+C     Declarations:
+C      
+      
+C
+C     Arguments      
+C
+      TYPE(AGRIF_Variable), Pointer :: Variable    
+      REAL                 :: Value       
+      INTEGER              :: nbdim       ! dimension of the table
+C
+C     Local variables       
+C
+      SELECT CASE (nbdim)
+      CASE (1)
+        Variable%array1 = Value      
+      CASE (2)
+        Variable%array2 = Value
+      CASE (3)
+        Call Agrif_set_tozero3D(Variable%array3)
+!        Variable%array3 = Value
+      CASE (4)
+        Variable%array4 = Value
+      CASE (5)
+        Variable%array5 = Value
+      CASE (6)
+        Variable%array6 = Value
+      END SELECT
+C
+      return
+C
+      End Subroutine Agrif_nbdim_Full_VarEQreal   
+      
+      Subroutine Agrif_set_tozero3D(tab3D)
+      real,dimension(:,:,:),target :: tab3D
+      
+      tab3D = 0.
+      
+      end subroutine agrif_set_tozero3D    
+C
+C
+#if !defined AGRIF_MPI
+C     **************************************************************************
+CCC   Subroutine Agrif_nbdim_VarEQreal
+C     **************************************************************************
+C
+      Subroutine Agrif_nbdim_VarEQreal(Variable,inf,sup,Value,nbdim)
+C
+CCC   Description:
+CCC   This subroutine is used to give the same value to a part of 
+C        the table Variable
+C
+C     Declarations:
+C      
+      
+C
+C     Arguments      
+C
+      TYPE(AGRIF_Variable), Pointer :: Variable    
+      REAL                 :: Value       
+      INTEGER              :: nbdim       ! dimension of the table
+      INTEGER,DIMENSION(nbdim) :: inf,sup
+C
+C     Local variables       
+C
+      SELECT CASE (nbdim)
+      CASE (1)
+         Variable%array1(
+     &             inf(1):sup(1)
+     &             )  = Value
+      CASE (2)
+         Variable%array2(
+     &             inf(1):sup(1),
+     &             inf(2):sup(2)
+     &             )  = Value
+      CASE (3)
+         Variable%array3(
+     &             inf(1):sup(1),
+     &             inf(2):sup(2),
+     &             inf(3):sup(3)
+     &             )  = Value
+      CASE (4)
+         Variable%array4(
+     &             inf(1):sup(1),
+     &             inf(2):sup(2),
+     &             inf(3):sup(3),
+     &             inf(4):sup(4)
+     &             )  = Value
+      CASE (5)
+         Variable%array5(
+     &             inf(1):sup(1),
+     &             inf(2):sup(2),
+     &             inf(3):sup(3),
+     &             inf(4):sup(4),
+     &             inf(5):sup(5)
+     &             )  = Value
+      CASE (6)
+         Variable%array6(
+     &             inf(1):sup(1),
+     &             inf(2):sup(2),
+     &             inf(3):sup(3),
+     &             inf(4):sup(4),
+     &             inf(5):sup(5),
+     &             inf(6):sup(6)
+     &             )  = Value
+      END SELECT
+C
+      return
+C
+      End Subroutine Agrif_nbdim_VarEQreal       
+#endif
+C
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_nbdim_VarEQvar
+C     **************************************************************************
+C
+      Subroutine Agrif_nbdim_VarEQvar(Variable,inf,sup,
+     &                                Variable2,inf2,sup2,
+     &                                nbdim)
+C
+CCC   Description:
+CCC   This subroutine is used to give the value of a part of the table 
+C        Variable2 to the table Variable
+C
+C     Declarations:
+C      
+      
+C
+C     Arguments      
+C
+      TYPE(AGRIF_Variable), Pointer     :: Variable
+      TYPE(AGRIF_Variable), Pointer     :: Variable2
+      INTEGER                  :: nbdim       ! dimension of the table
+      INTEGER,DIMENSION(nbdim) :: inf,sup
+      INTEGER,DIMENSION(nbdim) :: inf2,sup2
+C
+C     Local variables       
+C
+      SELECT CASE (nbdim)
+      CASE (1)
+         Variable%array1(inf(1):sup(1)) = 
+     &         Variable2%array1(inf2(1):sup2(1))
+      CASE (2)
+     
+      Call Agrif_Copy_2d(Variable%array2,Variable2%array2,
+     &  lbound(Variable%array2),
+     &  lbound(Variable2%array2),
+     &  inf,sup,inf2,sup2)
+          
+      CASE (3)
+
+      Call Agrif_Copy_3d(Variable%array3,Variable2%array3,
+     &  lbound(Variable%array3),
+     &  lbound(Variable2%array3),
+     &  inf,sup,inf2,sup2)
+
+      CASE (4)
+      
+      Call Agrif_Copy_4d(Variable%array4,Variable2%array4,
+     &  lbound(Variable%array4),
+     &  lbound(Variable2%array4),
+     &  inf,sup,inf2,sup2)
+     
+      CASE (5)
+        Variable%array5(inf(1):sup(1),
+     &                         inf(2):sup(2), 
+     &                         inf(3):sup(3),
+     &                         inf(4):sup(4), 
+     &                         inf(5):sup(5)) = 
+     &         Variable2%array5(inf2(1):sup2(1),
+     &                          inf2(2):sup2(2),
+     &                          inf2(3):sup2(3),
+     &                          inf2(4):sup2(4),
+     &                          inf2(5):sup2(5))
+      CASE (6)
+        Variable%array6(inf(1):sup(1),
+     &                         inf(2):sup(2),
+     &                         inf(3):sup(3),
+     &                         inf(4):sup(4),
+     &                         inf(5):sup(5),
+     &                         inf(6):sup(6)) = 
+     &         Variable2%array6(inf2(1):sup2(1),
+     &                          inf2(2):sup2(2),
+     &                          inf2(3):sup2(3),
+     &                          inf2(4):sup2(4),
+     &                          inf2(5):sup2(5),
+     &                          inf2(6):sup2(6))
+      END SELECT
+C
+      return
+C
+      End Subroutine Agrif_nbdim_VarEQvar
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_nbdim_Full_VarEQvar
+C     **************************************************************************
+C
+      Subroutine Agrif_nbdim_Full_VarEQvar(Variable,Variable2,
+     &                                nbdim)
+C
+CCC   Description:
+CCC   This subroutine is used to give the value of the table Variable2 
+C        to the table Variable
+C
+C     Declarations:
+C      
+      
+C
+C     Arguments      
+C
+      TYPE(AGRIF_Variable), Pointer     :: Variable
+      TYPE(AGRIF_Variable), Pointer     :: Variable2
+      INTEGER                  :: nbdim       ! dimension of the table
+C
+C     Local variables       
+C
+      SELECT CASE (nbdim)
+      CASE (1)
+          Variable%array1 = Variable2%array1
+      CASE (2)
+          Variable%array2 = Variable2%array2
+      CASE (3)
+          Variable%array3 = Variable2%array3
+      CASE (4)
+          Variable%array4 = Variable2%array4
+      CASE (5)
+          Variable%array5 = Variable2%array5
+      CASE (6)
+          Variable%array6 = Variable2%array6
+      END SELECT
+C
+      return
+C
+      End Subroutine Agrif_nbdim_Full_VarEQvar
+C
+C
+
+C     **************************************************************************
+CCC   Subroutine GiveAgrif_SpecialValueToTab_mpi
+C     **************************************************************************
+C
+      Subroutine GiveAgrif_SpecialValueToTab_mpi(Variable1,Variable2,
+     &                  bound1,lower,upper,Value,nbdim)
+C
+CCC   Description:
+CCC   
+C
+C     Declarations:
+C      
+      
+C
+C     Arguments      
+C
+      TYPE(AGRIF_VARIABLE), Pointer    :: Variable1
+      TYPE(AGRIF_VARIABLE), Pointer    :: Variable2
+      INTEGER                  :: nbdim
+      INTEGER,DIMENSION(:,:,:) :: bound1
+      INTEGER,DIMENSION(nbdim) :: lower,upper
+      REAL                     :: Value
+C
+C     Local variables       
+C
+      SELECT CASE (nbdim)
+      CASE (1)
+             Where (Variable1 % array1(
+     &           bound1(1,1,2):bound1(1,2,2)) 
+     &            == Value)
+             Variable2 % array1(bound1(1,1,1):bound1(1,2,1))
+     &                        = Value
+C      
+              End Where
+      CASE (2)
+             Where (Variable1 % array2(
+     &           bound1(1,1,2):bound1(1,2,2),
+     &           bound1(2,1,2):bound1(2,2,2)) 
+     &            == Value)
+             Variable2 % array2(bound1(1,1,1):bound1(1,2,1),
+     &                       bound1(2,1,1):bound1(2,2,1))
+     &                        = Value
+C      
+              End Where
+      CASE (3)
+             Where (Variable1 % array3(
+     &           bound1(1,1,2):bound1(1,2,2),
+     &                       bound1(2,1,2):bound1(2,2,2),
+     &                       bound1(3,1,2):bound1(3,2,2)) 
+     &            == Value)
+             Variable2 % array3(bound1(1,1,1):bound1(1,2,1),
+     &                       bound1(2,1,1):bound1(2,2,1),
+     &                       bound1(3,1,1):bound1(3,2,1))
+     &                         = Value
+C      
+              End Where
+      CASE (4)
+             Where (Variable1 % array4(
+     &           bound1(1,1,2):bound1(1,2,2),
+     &                       bound1(2,1,2):bound1(2,2,2),
+     &                       bound1(3,1,2):bound1(3,2,2),
+     &                       bound1(4,1,2):bound1(4,2,2)) 
+     &            == Value)
+             Variable2 % array4(bound1(1,1,1):bound1(1,2,1),
+     &                       bound1(2,1,1):bound1(2,2,1),
+     &                       bound1(3,1,1):bound1(3,2,1),
+     &                       bound1(4,1,1):bound1(4,2,1))
+     &                        = Value
+C      
+              End Where
+      CASE (5)
+             Where (Variable1 % array5(
+     &           bound1(1,1,2):bound1(1,2,2),
+     &                       bound1(2,1,2):bound1(2,2,2),
+     &                       bound1(3,1,2):bound1(3,2,2),
+     &                       bound1(4,1,2):bound1(4,2,2),
+     &                       bound1(5,1,2):bound1(5,2,2)) 
+     &            == Value)
+             Variable2 % array5(bound1(1,1,1):bound1(1,2,1),
+     &                       bound1(2,1,1):bound1(2,2,1),
+     &                       bound1(3,1,1):bound1(3,2,1),
+     &                       bound1(4,1,1):bound1(4,2,1),
+     &                       bound1(5,1,1):bound1(5,2,1))
+     &                        = Value
+C      
+              End Where
+      CASE (6)
+             Where (Variable1 % array6(
+     &           bound1(1,1,2):bound1(1,2,2),
+     &                       bound1(2,1,2):bound1(2,2,2),
+     &                       bound1(3,1,2):bound1(3,2,2),
+     &                       bound1(4,1,2):bound1(4,2,2),
+     &                       bound1(5,1,2):bound1(5,2,2),
+     &                       bound1(6,1,2):bound1(6,2,2)) 
+     &            == Value)
+             Variable2 % array6(bound1(1,1,1):bound1(1,2,1),
+     &                       bound1(2,1,1):bound1(2,2,1),
+     &                       bound1(3,1,1):bound1(3,2,1),
+     &                       bound1(4,1,1):bound1(4,2,1),
+     &                       bound1(5,1,1):bound1(5,2,1),
+     &                       bound1(6,1,1):bound1(6,2,1))
+     &                        = Value
+C      
+              End Where
+      END SELECT
+C
+      return
+C
+      End Subroutine GiveAgrif_SpecialValueToTab_mpi    
+
+C     **************************************************************************
+CCC   Subroutine GiveAgrif_SpecialValueToTab
+C     **************************************************************************
+C
+      Subroutine GiveAgrif_SpecialValueToTab(Variable1,Variable2,
+     &                  lower,upper,Value,nbdim)
+C
+CCC   Description:
+CCC   
+C
+C     Declarations:
+C      
+      
+C
+C     Arguments      
+C
+      TYPE(AGRIF_VARIABLE), Pointer    :: Variable1
+      TYPE(AGRIF_VARIABLE), Pointer    :: Variable2
+      INTEGER                  :: nbdim
+      INTEGER,DIMENSION(nbdim) :: lower,upper
+      REAL                     :: Value
+C
+C     Local variables       
+C
+      SELECT CASE (nbdim)
+      CASE (1)
+             Where (Variable1 % array1(
+     &           lower(1):upper(1))
+     &            == Value)
+             Variable2 % array1(lower(1):upper(1))
+     &                        = Value
+C      
+              End Where
+      CASE (2)
+             Where (Variable1 % array2(
+     &           lower(1):upper(1),
+     &           lower(2):upper(2)) 
+     &            == Value)
+             Variable2 % array2(lower(1):upper(1),
+     &                          lower(2):upper(2))
+     &                        = Value
+C      
+              End Where
+      CASE (3)
+             Where (Variable1 % array3(
+     &           lower(1):upper(1),
+     &           lower(2):upper(2), 
+     &           lower(3):upper(3)) 
+     &            == Value)
+             Variable2 % array3(lower(1):upper(1),
+     &                          lower(2):upper(2),
+     &                          lower(3):upper(3))
+     &                         = Value
+C      
+              End Where
+      CASE (4)
+             Where (Variable1 % array4(
+     &           lower(1):upper(1),
+     &           lower(2):upper(2), 
+     &           lower(3):upper(3),
+     &           lower(4):upper(4)) 
+     &            == Value)
+             Variable2 % array4(lower(1):upper(1),
+     &                          lower(2):upper(2),
+     &                          lower(3):upper(3),
+     &                          lower(4):upper(4))
+     &                        = Value
+C      
+              End Where
+      CASE (5)
+             Where (Variable1 % array5(
+     &           lower(1):upper(1),
+     &           lower(2):upper(2),
+     &           lower(3):upper(3),
+     &           lower(4):upper(4),
+     &           lower(5):upper(5)) 
+     &            == Value)
+             Variable2 % array5(lower(1):upper(1),
+     &                          lower(2):upper(2),
+     &                          lower(3):upper(3),
+     &                          lower(4):upper(4),
+     &                          lower(5):upper(5))
+     &                        = Value
+C      
+              End Where
+      CASE (6)
+             Where (Variable1 % array6(
+     &           lower(1):upper(1),
+     &           lower(2):upper(2),
+     &           lower(2):upper(3),
+     &           lower(4):upper(4),
+     &           lower(5):upper(5),
+     &           lower(6):upper(6)) 
+     &            == Value)
+             Variable2 % array6(lower(1):upper(1),
+     &                          lower(2):upper(2),
+     &                          lower(3):upper(3),
+     &                          lower(4):upper(4),
+     &                          lower(5):upper(5),
+     &                          lower(6):upper(6))
+     &                        = Value
+C      
+              End Where
+      END SELECT
+C
+      return
+C
+      End Subroutine GiveAgrif_SpecialValueToTab   
+
+C
+C
+#ifdef AGRIF_MPI
+C     **************************************************************************
+CCC   Subroutine Where_ValTabToTab_mpi
+C     **************************************************************************
+C
+      Subroutine Where_ValTabToTab_mpi(
+     &                  Variable1,Variable2,
+     &                  lower,upper,Value,nbdim)
+C
+CCC   Description:
+CCC   
+C
+C     Declarations:
+C      
+      
+C
+C     Arguments      
+C
+      TYPE(AGRIF_VARIABLE), Pointer     :: Variable1
+      TYPE(AGRIF_VARIABLE), Pointer     :: Variable2
+      INTEGER                  :: nbdim
+      INTEGER,DIMENSION(nbdim) :: lower,upper
+      REAL                     :: Value
+      INTEGER :: i,j,k,l,m,n
+C
+C     Local variables       
+C
+      SELECT CASE (nbdim)
+      CASE (1)
+            DO i = lower(1),upper(1)
+              IF (variable1%array1(i) == Value) then
+                variable1%array1(i)=Variable2%array1(i)
+              ENDIF
+            ENDDO
+      CASE (2)
+            DO j = lower(2),upper(2)
+            DO i = lower(1),upper(1)
+              IF (variable1%array2(i,j) == Value) then
+                variable1%array2(i,j)=Variable2%array2(i,j)
+              ENDIF
+            ENDDO
+            ENDDO
+      CASE (3)
+            DO k = lower(3),upper(3)
+            DO j = lower(2),upper(2)
+            DO i = lower(1),upper(1)
+              IF (variable1%array3(i,j,k) == Value) then
+                variable1%array3(i,j,k)=Variable2%array3(i,j,k)
+              ENDIF
+            ENDDO
+            ENDDO
+            ENDDO
+      CASE (4)
+            DO l = lower(4),upper(4)
+            DO k = lower(3),upper(3)
+            DO j = lower(2),upper(2)
+            DO i = lower(1),upper(1)
+              IF (variable1%array4(i,j,k,l) == Value) then
+                variable1%array4(i,j,k,l)=Variable2%array4(i,j,k,l)
+              ENDIF
+            ENDDO
+            ENDDO
+            ENDDO
+            ENDDO
+      CASE (5)
+            DO m = lower(5),upper(5)
+            DO l = lower(4),upper(4)
+            DO k = lower(3),upper(3)
+            DO j = lower(2),upper(2)
+            DO i = lower(1),upper(1)
+              IF (variable1%array5(i,j,k,l,m) == Value) then
+              variable1%array5(i,j,k,l,m)=Variable2%array5(i,j,k,l,m)
+              ENDIF
+            ENDDO
+            ENDDO
+            ENDDO
+            ENDDO
+            ENDDO
+      CASE (6)
+            DO n = lower(6),upper(6)
+            DO m = lower(5),upper(5)
+            DO l = lower(4),upper(4)
+            DO k = lower(3),upper(3)
+            DO j = lower(2),upper(2)
+            DO i = lower(1),upper(1)
+              IF (variable1%array6(i,j,k,l,m,n) == Value) then
+            variable1%array6(i,j,k,l,m,n)=Variable2%array6(i,j,k,l,m,n)
+              ENDIF
+            ENDDO
+            ENDDO
+            ENDDO
+            ENDDO
+            ENDDO
+            ENDDO
+      END SELECT
+C
+      return
+C
+      End Subroutine Where_ValTabToTab_mpi    
+#endif
+
+C     **************************************************************************
+CCC   Subroutine PreProcessToInterpOrUpdate
+C     **************************************************************************
+C
+      Subroutine PreProcessToInterpOrUpdate(parent,child,
+     &             petab_Child,
+     &             pttab_Child,pttab_Parent,
+     &             s_Child,s_Parent,
+     &             ds_Child,ds_Parent,
+     &             nbdim)
+C
+CCC   Description:
+CCC   
+C
+C     Declarations:
+C      
+C     arguments                                   
+      TYPE(AGRIF_PVariable) :: parent   ! Variable on the parent grid
+      TYPE(AGRIF_PVariable) :: child    ! Variable on the child grid
+      INTEGER :: nbdim                  
+      INTEGER,DIMENSION(6) :: pttab_child  
+      INTEGER,DIMENSION(6) :: petab_child      
+      INTEGER,DIMENSION(6) :: pttab_parent  
+      TYPE(AGRIF_Variable), Pointer :: root ! Pointer on the variable of the 
+                                            ! root grid
+      TYPE(Agrif_Grid), Pointer :: Agrif_Child_Gr,Agrif_Parent_Gr
+      REAL, DIMENSION(6) :: s_child,s_parent
+      REAL, DIMENSION(6) :: ds_child,ds_parent
+C     locals variables
+      INTEGER :: n
+      
+C
+C     Arguments      
+C
+
+C
+C     Local variables       
+C
+      Agrif_Child_Gr => Agrif_Curgrid
+      Agrif_Parent_Gr => Agrif_Curgrid % parent
+C
+      root => child % var % root_var 
+C
+C     Number of dimensions of the current grid
+      nbdim = root % nbdim
+C      
+      do n=1,nbdim
+C            
+        Select case(root % interptab(n))
+C
+C       Value of interptab(n) can be either x,y,z or N for a no space 
+C       DIMENSION            
+C
+C         The DIMENSION is 'x'
+          case('x')
+C
+            pttab_Child(n) = root % point(1)
+C            
+            pttab_Parent(n) = root % point(1)
+C        
+            s_Child(n) = Agrif_Child_Gr % Agrif_x(1)
+C
+            s_Parent(n) = Agrif_Parent_Gr % Agrif_x(1)
+C        
+            ds_Child(n) = Agrif_Child_Gr % Agrif_d(1)
+C
+            ds_Parent(n) = Agrif_Parent_Gr % Agrif_d(1)
+C                      
+            if (root % posvar(n).EQ.1) then
+C          
+              petab_Child(n) = pttab_Child(n) + Agrif_Child_Gr%nb(1)
+C        
+              else
+C          
+                petab_Child(n) = pttab_Child(n) + 
+     &                              Agrif_Child_Gr%nb(1) - 1
+C          
+                s_Child(n) = s_Child(n) + ds_Child(n)/2.
+C
+                s_Parent(n) = s_Parent(n) + ds_Parent(n)/2.
+C        
+            endif                  
+C
+C         The DIMENSION is 'y'
+          case('y')
+C
+            pttab_Child(n) = root % point(2)
+C            
+            pttab_Parent(n) = root % point(2)
+C        
+            s_Child(n) = Agrif_Child_Gr % Agrif_x(2)
+C
+            s_Parent(n) = Agrif_Parent_Gr % Agrif_x(2) 
+C        
+            ds_Child(n) = Agrif_Child_Gr % Agrif_d(2)
+C
+            ds_Parent(n) = Agrif_Parent_Gr % Agrif_d(2)
+C                      
+            if (root % posvar(n).EQ.1) then
+C          
+             petab_Child(n) = pttab_Child(n) + Agrif_Child_Gr%nb(2)
+C          
+              else
+C          
+                petab_Child(n) = pttab_Child(n) + 
+     &                       Agrif_Child_Gr%nb(2) - 1
+C          
+                s_Child(n) = s_Child(n) + ds_Child(n)/2.
+C
+                s_Parent(n) = s_Parent(n) + ds_Parent(n)/2.
+C        
+            endif
+            
+C
+C         The DIMENSION is 'z'                            
+          case('z')
+C
+            pttab_Child(n) = root % point(3)
+C            
+            pttab_Parent(n) = root % point(3)
+C        
+            s_Child(n) = Agrif_Child_Gr % Agrif_x(3)
+C
+            s_Parent(n) = Agrif_Parent_Gr % Agrif_x(3)
+C        
+            ds_Child(n) = Agrif_Child_Gr % Agrif_d(3)
+C
+            ds_Parent(n) = Agrif_Parent_Gr % Agrif_d(3)
+C                      
+            if (root % posvar(n).EQ.1) then
+C          
+             petab_Child(n) = pttab_Child(n) + Agrif_Child_Gr%nb(3)
+C          
+              else
+C          
+                petab_Child(n) = pttab_Child(n) + 
+     &                      Agrif_Child_Gr%nb(3) - 1
+C
+                s_Child(n) = s_Child(n) + ds_Child(n)/2.
+C
+                s_Parent(n) = s_Parent(n) + ds_Parent(n)/2.
+C        
+            endif       
+C 
+C         The DIMENSION is not space                            
+          case('N')
+C
+C         The next coefficients are calculated in order to do a simple copy of 
+C         values of the grid variable when the procedure of interpolation is 
+C         called for this DIMENSION 
+C      
+            Call Agrif_nbdim_Get_bound(child % var,
+     &                           pttab_Child(n),petab_Child(n),n,nbdim)
+C
+C           No interpolation but only a copy of the values of the grid variable
+C
+            pttab_Parent(n) = pttab_Child(n)
+C              
+            s_Child(n)=0.
+C      
+            s_Parent(n)=0. 
+C      
+            ds_Child(n)=1.
+C      
+            ds_Parent(n)=1.
+C
+        End select
+C            
+      enddo     
+C
+      return
+C
+      End Subroutine PreProcessToInterpOrUpdate     
+
+#ifdef AGRIF_MPI
+C
+C     **************************************************************************
+CCC   Subroutine GetLocalBoundaries
+C     **************************************************************************
+C
+      Subroutine GetLocalBoundaries(tab1,tab2,i,lb,ub,deb,fin)
+C
+CCC   Descritpion:
+C 
+C
+C     Declarations:
+C
+
+C
+C
+C     Scalar arguments
+      INTEGER  ::  tab1,tab2
+      INTEGER  ::  i
+      INTEGER  ::  lb,ub
+      INTEGER  ::  deb,fin
+C
+C     Local scalars
+      INTEGER  ::  imin,imax
+      INTEGER  ::  i1,i2
+C
+C
+      Call AGRIF_InvLoc(lb,AGRIF_ProcRank,i,imin)
+C
+      Call AGRIF_InvLoc(ub,AGRIF_ProcRank,i,imax)
+C
+C
+      if (imin > tab2) then
+C
+          i1 = imax - imin
+C
+        else
+C
+          i1 = max(tab1 - imin,0)
+C
+      endif
+C
+      if (imax < tab1) then
+C
+          i2 = -(imax - imin)
+C
+        else
+C
+          i2 = min(tab2 - imax,0)
+C
+      endif
+C
+      deb = lb + i1
+C
+      fin = ub + i2
+C
+C
+      End Subroutine GetLocalBoundaries
+C
+#endif
+C
+C
+#ifdef AGRIF_MPI
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_GlobtoLocInd2
+C     **************************************************************************
+C
+      Subroutine Agrif_GlobtoLocInd2(tabarray,lboundl,uboundl,tab1,tab2,
+     &                              nbdim,rank,member)
+C
+CCC   Description:
+CCC   For a global index located on the current processor, tabarray gives the 
+CCC   corresponding local index   
+C
+C
+C     Declarations:
+C
+
+C
+C     Arguments
+      INTEGER :: nbdim
+      INTEGER,DIMENSION(nbdim) :: tab1,tab2
+      INTEGER,DIMENSION(nbdim,2,2 ) :: tabarray
+      INTEGER,DIMENSION(nbdim) :: lboundl,uboundl
+      INTEGER :: rank
+      LOGICAL :: member
+C    
+C     Local variables
+      INTEGER :: i,i1,k
+      INTEGER :: nbloc(nbdim)
+C
+C
+      tabarray(:,1,:) =  HUGE(1)
+      tabarray(:,2,:) =  -HUGE(1)
+
+      nbloc = 0
+C        
+      do i = 1,nbdim
+C       
+        Call Agrif_Invloc(lboundl(i),rank,i,i1)
+        
+        do k=tab1(i)+lboundl(i)-i1,tab2(i)+lboundl(i)-i1
+          IF ((k .GE. lboundl(i)) .AND. (k.LE.uboundl(i))) THEN
+            nbloc(i) = 1
+            tabarray(i,1,1) = min(tabarray(i,1,1),k-lboundl(i)+i1)
+            tabarray(i,2,1) = max(tabarray(i,2,1),k-lboundl(i)+i1)
+        
+            tabarray(i,1,2) = min(tabarray(i,1,2),k)
+            tabarray(i,2,2) = max(tabarray(i,2,2),k)
+          ENDIF
+        enddo
+C
+      enddo
+
+      member = .FALSE.
+      IF (sum(nbloc) == nbdim) member = .TRUE.
+C
+      Return
+C
+C
+      End Subroutine Agrif_GlobtoLocInd2
+C
+#endif      
+
+      Subroutine Agrif_Copy_2d(tabout,tabin,l,m,inf,sup,inf2,sup2)
+      integer,dimension(2) :: l,m,inf,sup,inf2,sup2
+      real,target,dimension(l(1):,l(2):) :: tabout
+      real,target,dimension(m(1):,m(2):) :: tabin
+          tabout(inf(1):sup(1),
+     &                         inf(2):sup(2)) = 
+     &         tabin(inf2(1):sup2(1),
+     &                          inf2(2):sup2(2))
+      End Subroutine Agrif_Copy_2d
+      
+      Subroutine Agrif_Copy_3d(tabout,tabin,l,m,inf,sup,inf2,sup2)
+      integer,dimension(3) :: l,m,inf,sup,inf2,sup2
+      real,target,dimension(l(1):,l(2):,l(3):) :: tabout
+      real,target,dimension(m(1):,m(2):,m(3):) :: tabin
+          tabout(inf(1):sup(1),
+     &                         inf(2):sup(2), 
+     &                         inf(3):sup(3)) = 
+     &         tabin(inf2(1):sup2(1),
+     &                          inf2(2):sup2(2),
+     &                          inf2(3):sup2(3))
+      End Subroutine Agrif_Copy_3d
+      
+      Subroutine Agrif_Copy_4d(tabout,tabin,l,m,inf,sup,inf2,sup2)
+      integer,dimension(4) :: l,m,inf,sup,inf2,sup2
+      real,target,dimension(l(1):,l(2):,l(3):,l(4):) :: tabout
+      real,target,dimension(m(1):,m(2):,m(3):,m(4):) :: tabin
+          tabout(inf(1):sup(1),
+     &                         inf(2):sup(2), 
+     &                         inf(3):sup(3), 
+     &                         inf(4):sup(4)) = 
+     &         tabin(inf2(1):sup2(1),
+     &                          inf2(2):sup2(2),
+     &                          inf2(3):sup2(3),
+     &                          inf2(4):sup2(4))
+      End Subroutine Agrif_Copy_4d      
+
+      End Module Agrif_Arrays
Index: /vendors/AGRIF/r_00/AGRIF_FILES/modbc.F
===================================================================
--- /vendors/AGRIF/r_00/AGRIF_FILES/modbc.F	(revision 1902)
+++ /vendors/AGRIF/r_00/AGRIF_FILES/modbc.F	(revision 1902)
@@ -0,0 +1,1337 @@
+!
+! $Id: modbc.F 1793 2010-01-06 19:20:12Z rblod $
+!
+C     AGRIF (Adaptive Grid Refinement In Fortran)
+C
+C     Copyright (C) 2003 Laurent Debreu (Laurent.Debreu@imag.fr)
+C                        Christophe Vouland (Christophe.Vouland@imag.fr)    
+C
+C     This program is free software; you can redistribute it and/or modify
+C     it under the terms of the GNU General Public License as published by
+C     the Free Software Foundation; either version 2 of the License, or
+C     (at your option) any later version.
+C
+C     This program is distributed in the hope that it will be useful,
+C     but WITHOUT ANY WARRANTY; without even the implied warranty of
+C     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+C     GNU General Public License for more details.
+C
+C     You should have received a copy of the GNU General Public License
+C     along with this program; if not, write to the Free Software
+C     Foundation, Inc., 59 Temple Place- Suite 330, Boston, MA 02111-1307, USA.
+C
+C
+C
+CCC   Module Agrif_Boundary 
+C 
+      Module Agrif_Boundary  
+C
+CCC   Description:
+CCC   Module to calculate the boundary conditions on the child grids from their
+CCC   parent grids.
+C
+C     Modules used:  
+C   
+      Use Agrif_Interpolation        
+C
+      IMPLICIT NONE
+C        
+      CONTAINS   
+C     Define procedures contained in this module
+C
+C
+      
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Interp_bc_1d
+C     **************************************************************************
+C 
+      Subroutine Agrif_Interp_bc_1d(TypeInterp,parent,child,tab,deb,fin,
+     &                              weight,pweight,procname)
+C
+CCC   Description:
+CCC   Subroutine to calculate the boundary conditions on a fine grid for a 1D 
+CCC   grid variable.
+C
+C     Declarations:
+C      
+      
+C
+C     Arguments      
+      External :: procname
+      Optional :: procname
+      INTEGER,DIMENSION(6,6) :: TypeInterp    ! TYPE of interpolation (linear, 
+                                            ! lagrange, spline, ... )
+      TYPE(AGRIF_PVariable) :: parent       ! Variable on the parent grid
+      TYPE(AGRIF_PVariable) :: child        ! Variable on the child grid
+      TYPE(AGRIF_PVariable) :: childtemp    ! Temporary variable on the child 
+                                            ! grid
+      INTEGER :: deb,fin                    ! Positions where interpolations are
+                                            ! done on the fine grid 
+      REAL, DIMENSION(
+     &         child%var%lb(1):child%var%ub(1) 
+     &    ), Target :: tab ! Values of the grid variable
+      LOGICAL :: pweight                    ! Indicates if weight is used for  
+                                            ! the temporal interpolation 
+      REAL :: weight                        ! Coefficient for the time 
+                                            ! interpolation
+C
+C
+C     Definition of a temporary AGRIF_PVariable data TYPE representing the grid
+C     variable.   
+C
+      allocate(childtemp % var)  
+C
+      childtemp % var % root_var => child % var % root_var
+C      
+C     Values of the grid variable
+      childtemp % var % array1 => tab  
+C
+C     Temporary results for the time interpolation before and after the space 
+C     interpolation 
+      childtemp % var % oldvalues2D => child % var % oldvalues2D
+C 
+C     Index indicating if a space interpolation is necessary
+      childtemp % var % interpIndex => child % var % interpIndex       
+      childtemp % var % Interpolationshouldbemade = 
+     &                 child % var % Interpolationshouldbemade   
+      childtemp % var % list_interp => child % var% list_interp 
+      
+      childtemp % var% lb = child % var % lb
+      childtemp % var% ub = child % var % ub         
+C
+C     Call to the procedure for the calculations of the boundary conditions
+      IF (present(procname)) THEN
+      Call Agrif_CorrectVariable
+     &     (TypeInterp,parent,childtemp,deb,fin,pweight,weight,procname)
+      ELSE
+      Call Agrif_CorrectVariable
+     &     (TypeInterp,parent,childtemp,deb,fin,pweight,weight)
+      ENDIF
+
+C   
+      child % var % oldvalues2D => childtemp % var % oldvalues2D
+      child % var % list_interp => childtemp % var %list_interp
+C         
+      deallocate(childtemp % var)
+C
+C       
+      End Subroutine Agrif_Interp_bc_1D
+C
+      
+C
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Interp_bc_2d
+C     **************************************************************************
+C 
+      Subroutine Agrif_Interp_bc_2d(TypeInterp,parent,child,tab,deb,fin,
+     &                              weight,pweight,procname)
+C
+CCC   Description:
+CCC   Subroutine to calculate the boundary conditions on a fine grid for a 2D 
+CCC   grid variable.
+C
+C     Declarations:
+C      
+      
+C
+C     Arguments      
+      External :: procname
+      Optional :: procname
+      INTEGER,DIMENSION(6,6) :: TypeInterp    ! TYPE of interpolation (linear, 
+                                            ! lagrange, spline, ... )
+      TYPE(AGRIF_PVariable) :: parent       ! Variable on the parent grid
+      TYPE(AGRIF_PVariable) :: child        ! Variable on the child grid
+      TYPE(AGRIF_PVariable) :: childtemp    ! Temporary variable on the child 
+                                            ! grid
+      INTEGER :: deb,fin                    ! Positions where interpolations are
+                                            ! done on the fine grid 
+      REAL, DIMENSION(
+     &         child%var%lb(1):child%var%ub(1),
+     &         child%var%lb(2):child%var%ub(2) 
+     &    ), Target :: tab ! Values of the grid variable
+      LOGICAL :: pweight                    ! Indicates if weight is used for  
+                                            ! the temporal interpolation 
+      REAL :: weight                        ! Coefficient for the time 
+                                            ! interpolation
+C
+C
+C     Definition of a temporary AGRIF_PVariable data TYPE representing the grid
+C     variable.   
+C
+      allocate(childtemp % var)  
+C
+      childtemp % var % root_var => child % var % root_var
+C      
+C     Values of the grid variable
+      childtemp % var % array2 => tab  
+C
+C     Temporary results for the time interpolation before and after the space 
+C     interpolation 
+      childtemp % var % oldvalues2D => child % var % oldvalues2D
+C 
+C     Index indicating if a space interpolation is necessary
+      childtemp % var % interpIndex => child % var % interpIndex       
+      childtemp % var % Interpolationshouldbemade = 
+     &                 child % var % Interpolationshouldbemade   
+      childtemp % var % list_interp => child % var% list_interp 
+      
+      childtemp % var% lb = child % var % lb
+      childtemp % var% ub = child % var % ub         
+C
+C     Call to the procedure for the calculations of the boundary conditions
+      IF (present(procname)) THEN
+      Call Agrif_CorrectVariable
+     &     (TypeInterp,parent,childtemp,deb,fin,pweight,weight,procname)
+      ELSE
+      Call Agrif_CorrectVariable
+     &     (TypeInterp,parent,childtemp,deb,fin,pweight,weight)
+      ENDIF
+
+C   
+      child % var % oldvalues2D => childtemp % var % oldvalues2D
+      child % var % list_interp => childtemp % var %list_interp
+C         
+      deallocate(childtemp % var)
+C
+C       
+      End Subroutine Agrif_Interp_bc_2D
+C
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Interp_bc_3d
+C     **************************************************************************
+C 
+      Subroutine Agrif_Interp_bc_3d(TypeInterp,parent,child,tab,deb,fin,
+     &                              weight,pweight,procname)            
+C
+CCC   Description:
+CCC   Subroutine to calculate the boundary conditions on a fine grid for a 3D 
+CCC   variable.
+C
+C     Declarations:
+C      
+      
+C
+C     Arguments 
+      External :: procname
+      Optional :: procname     
+      INTEGER,DIMENSION(6,6) :: TypeInterp    ! TYPE of interpolation (linear, 
+                                            ! lagrange, spline, ... )
+      TYPE(AGRIF_PVariable) :: parent       ! Variable on the parent grid
+      TYPE(AGRIF_PVariable) :: child        ! Variable on the child grid
+      TYPE(AGRIF_PVariable) :: childtemp    ! Temporary variable on the child
+                                            ! grid
+      INTEGER :: deb,fin                    ! Positions where interpolations 
+                                            ! are done on the fine grid 
+      REAL, DIMENSION(
+     &         child%var%lb(1):child%var%ub(1),
+     &         child%var%lb(2):child%var%ub(2),
+     &         child%var%lb(3):child%var%ub(3)
+     &         ), Target :: tab ! Values of the grid variable
+      LOGICAL :: pweight                    ! Indicates if weight is used for 
+                                            ! the temporal interpolation 
+      REAL :: weight                        ! Coefficient for the time 
+                                            ! interpolation
+C
+C
+C     Definition of a temporary AGRIF_PVariable data TYPE representing the grid 
+C     variable.  
+C
+      allocate(childtemp % var)  
+C
+      childtemp % var % root_var => child % var % root_var       
+C      
+C     Values of the grid variable
+      childtemp % var % array3 => tab
+C
+C     Temporary results for the time interpolation before and after the space 
+C     interpolation  
+      childtemp % var % oldvalues2D => child % var % oldvalues2D
+C 
+C     Index indicating if a space interpolation is necessary
+      childtemp % var % interpIndex => child % var % interpIndex
+      childtemp % var % Interpolationshouldbemade = 
+     &                 child % var % Interpolationshouldbemade 
+      childtemp % var % list_interp => child % var% list_interp 
+      
+      childtemp % var% lb = child % var % lb
+      childtemp % var% ub = child % var % ub
+C
+C     Call to the procedure for the calculations of the boundary conditions     
+      IF (present(procname)) THEN
+      Call Agrif_CorrectVariable
+     &     (TypeInterp,parent,childtemp,deb,fin,pweight,weight,procname)
+      ELSE
+      Call Agrif_CorrectVariable
+     &     (TypeInterp,parent,childtemp,deb,fin,pweight,weight)
+      ENDIF
+C
+      child % var % oldvalues2D => childtemp % var % oldvalues2D
+      child % var % list_interp => childtemp % var %list_interp      
+C      
+      deallocate(childtemp % var)
+C
+C       
+      End Subroutine Agrif_Interp_bc_3D               
+C
+C
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Interp_bc_4d
+C     **************************************************************************
+C 
+      Subroutine Agrif_Interp_bc_4d(TypeInterp,parent,child,tab,deb,fin,
+     &                             weight,pweight,procname)            
+C
+CCC   Description:
+CCC   Subroutine to calculate the boundary conditions on a fine grid for a 4D 
+CCC   grid variable.
+C
+C     Declarations:
+C      
+      
+C
+C     Arguments      
+      External :: procname
+      Optional :: procname     
+      INTEGER,DIMENSION(6,6) :: TypeInterp      ! TYPE of interpolation (linear, 
+                                              ! lagrange, spline, ... )
+      TYPE(AGRIF_PVariable) :: parent         ! Variable on the parent grid
+      TYPE(AGRIF_PVariable) :: child          ! Variable on the child grid
+      TYPE(AGRIF_PVariable) :: childtemp      ! Temporary varaiable on the child
+                                              ! grid
+      INTEGER :: deb,fin                      ! Positions where interpolations 
+                                              ! are done on the fine grid 
+      REAL, DIMENSION(
+     &         child%var%lb(1):child%var%ub(1),
+     &         child%var%lb(2):child%var%ub(2),
+     &         child%var%lb(3):child%var%ub(3),
+     &         child%var%lb(4):child%var%ub(4)
+     &        ), Target :: tab ! Values of the grid variable
+      LOGICAL :: pweight                      ! Indicates if weight is used for 
+                                              ! the temporal interpolation 
+      REAL :: weight                          ! Coefficient for the time 
+                                              ! interpolation
+C
+C
+C     Definition of a temporary AGRIF_PVariable data TYPE representing the grid 
+C     variable.  
+C
+      allocate(childtemp % var)  
+C
+      childtemp % var % root_var => child % var % root_var 
+C      
+C     Values of the grid variable
+      childtemp % var % array4 => tab  
+C
+C     Temporary results for the time interpolation before and after the space 
+C     interpolation       
+      childtemp % var % oldvalues2D => child % var % oldvalues2D
+C 
+C     Index indicating if a space interpolation is necessary
+      childtemp % var % interpIndex => child % var % interpIndex       
+      childtemp % var % Interpolationshouldbemade = 
+     &                 child % var % Interpolationshouldbemade  
+      childtemp % var % list_interp => child % var% list_interp 
+      
+      childtemp % var% lb = child % var % lb
+      childtemp % var% ub = child % var % ub               
+C
+C     Call to the procedure for the calculations of the boundary conditions
+      IF (present(procname)) THEN
+      Call Agrif_CorrectVariable
+     &     (TypeInterp,parent,childtemp,deb,fin,pweight,weight,procname)
+      ELSE
+      Call Agrif_CorrectVariable
+     &     (TypeInterp,parent,childtemp,deb,fin,pweight,weight)
+      ENDIF
+C
+      child % var % oldvalues2D => childtemp % var % oldvalues2D
+      child % var % list_interp => childtemp % var %list_interp      
+C      
+      deallocate(childtemp % var)
+C
+C       
+      End Subroutine Agrif_Interp_bc_4D
+C
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Interp_bc_5d
+C     **************************************************************************
+C 
+      Subroutine Agrif_Interp_bc_5d(TypeInterp,parent,child,tab,deb,fin,
+     &                             weight,pweight,procname)            
+C
+CCC   Description:
+CCC   Subroutine to calculate the boundary conditions on a fine grid for a 5D 
+CCC   grid variable.
+C
+C     Declarations:
+C      
+      
+C
+C     Arguments      
+      External :: procname
+      Optional :: procname     
+      INTEGER,DIMENSION(6,6) :: TypeInterp      ! TYPE of interpolation (linear, 
+                                              ! lagrange, spline, ... )
+      TYPE(AGRIF_PVariable) :: parent         ! Variable on the parent grid
+      TYPE(AGRIF_PVariable) :: child          ! Variable on the child grid
+      TYPE(AGRIF_PVariable) :: childtemp      ! Temporary varaiable on the child
+                                              ! grid
+      INTEGER :: deb,fin                      ! Positions where interpolations 
+                                              ! are done on the fine grid 
+      REAL, DIMENSION(
+     &         child%var%lb(1):child%var%ub(1),
+     &         child%var%lb(2):child%var%ub(2),
+     &         child%var%lb(3):child%var%ub(3),
+     &         child%var%lb(4):child%var%ub(4),
+     &         child%var%lb(5):child%var%ub(5)
+     &         ), Target :: tab ! Values of the grid variable
+      LOGICAL :: pweight                      ! Indicates if weight is used for 
+                                              ! the temporal interpolation 
+      REAL :: weight                          ! Coefficient for the time 
+                                              ! interpolation
+C
+C
+C     Definition of a temporary AGRIF_PVariable data TYPE representing the grid 
+C     variable.  
+C
+      allocate(childtemp % var)  
+C
+      childtemp % var % root_var => child % var % root_var 
+C      
+C     Values of the grid variable
+      childtemp % var % array5 => tab  
+C
+C     Temporary results for the time interpolation before and after the space 
+C     interpolation       
+      childtemp % var % oldvalues2D => child % var % oldvalues2D
+C 
+C     Index indicating if a space interpolation is necessary
+      childtemp % var % interpIndex => child % var % interpIndex       
+      childtemp % var % Interpolationshouldbemade = 
+     &                 child % var % Interpolationshouldbemade 
+      childtemp % var % list_interp => child % var% list_interp  
+      
+      childtemp % var% lb = child % var % lb
+      childtemp % var% ub = child % var % ub
+                     
+C
+C     Call to the procedure for the calculations of the boundary conditions  
+      IF (present(procname)) THEN
+      Call Agrif_CorrectVariable
+     &     (TypeInterp,parent,childtemp,deb,fin,pweight,weight,procname)
+      ELSE
+      Call Agrif_CorrectVariable
+     &     (TypeInterp,parent,childtemp,deb,fin,pweight,weight)
+      ENDIF
+C
+      child % var % oldvalues2D => childtemp % var % oldvalues2D
+      child % var % list_interp => childtemp % var %list_interp      
+C      
+      deallocate(childtemp % var)
+C
+C       
+      End Subroutine Agrif_Interp_bc_5D
+C
+C
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Interp_bc_6d
+C     **************************************************************************
+C 
+      Subroutine Agrif_Interp_bc_6d(TypeInterp,parent,child,tab,deb,fin,
+     &                             weight,pweight)            
+C
+CCC   Description:
+CCC   Subroutine to calculate the boundary conditions on a fine grid for a 6D 
+CCC   grid variable.
+C
+C     Declarations:
+C      
+      
+C
+C     Arguments      
+      INTEGER,DIMENSION(6,6) :: TypeInterp      ! TYPE of interpolation (linear, 
+                                              ! lagrange, spline, ... )
+      TYPE(AGRIF_PVariable) :: parent         ! Variable on the parent grid
+      TYPE(AGRIF_PVariable) :: child          ! Variable on the child grid
+      TYPE(AGRIF_PVariable) :: childtemp      ! Temporary varaiable on the child
+                                              ! grid
+      INTEGER :: deb,fin                      ! Positions where interpolations 
+                                              ! are done on the fine grid 
+      REAL, DIMENSION(
+     &         child%var%lb(1):child%var%ub(1),
+     &         child%var%lb(2):child%var%ub(2),
+     &         child%var%lb(3):child%var%ub(3),
+     &         child%var%lb(4):child%var%ub(4),
+     &         child%var%lb(5):child%var%ub(5),
+     &         child%var%lb(6):child%var%ub(6)
+     &         ), Target :: tab ! Values of the grid variable
+      LOGICAL :: pweight                      ! Indicates if weight is used for 
+                                              ! the temporal interpolation 
+      REAL :: weight                          ! Coefficient for the time 
+                                              ! interpolation
+C
+C
+C     Definition of a temporary AGRIF_PVariable data TYPE representing the grid 
+C     variable.  
+C
+      allocate(childtemp % var)  
+C
+      childtemp % var % root_var => child % var % root_var 
+C      
+C     Values of the grid variable
+      childtemp % var % array6 => tab  
+C
+C     Temporary results for the time interpolation before and after the space 
+C     interpolation       
+      childtemp % var % oldvalues2D => child % var % oldvalues2D
+C 
+C     Index indicating if a space interpolation is necessary
+      childtemp % var % interpIndex => child % var % interpIndex       
+      childtemp % var % Interpolationshouldbemade = 
+     &                 child % var % Interpolationshouldbemade 
+      childtemp % var % list_interp => child % var% list_interp  
+      
+      childtemp % var% lb = child % var % lb
+      childtemp % var% ub = child % var % ub               
+C
+C     Call to the procedure for the calculations of the boundary conditions
+      Call Agrif_CorrectVariable
+     &     (TypeInterp,parent,childtemp,deb,fin,pweight,weight)
+C
+      child % var % oldvalues2D => childtemp % var % oldvalues2D
+      child % var % list_interp => childtemp % var %list_interp      
+C      
+      deallocate(childtemp % var)
+C
+C       
+      End Subroutine Agrif_Interp_bc_6D
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_CorrectVariable
+C     **************************************************************************
+C
+      Subroutine AGRIF_CorrectVariable(TypeInterp,parent,child,deb,fin,
+     &                                 pweight,weight,procname)
+C
+CCC   Description:
+CCC   Subroutine to calculate the boundary conditions on a fine grid.
+C
+C     Declarations:
+C      
+      
+C
+C     Arguments
+      External :: procname
+      Optional :: procname
+      TYPE(AGRIF_PVariable) :: parent         ! Variable on the parent grid
+      TYPE(AGRIF_PVariable) :: child          ! Variable on the child grid
+      INTEGER,DIMENSION(6,6)  :: TypeInterp     ! TYPE of interpolation
+                                              !    (linear,lagrange,...)
+      INTEGER               :: deb,fin        ! Positions where boundary
+                                              !    conditions are calculated
+      LOGICAL               :: pweight        ! Indicates if weight is used 
+                                              !    for the time interpolation 
+      REAL                  :: weight         ! Coefficient for the time
+                                              !    interpolation
+C
+C     Local scalars
+      TYPE(Agrif_Grid)    , Pointer :: Agrif_Child_Gr,Agrif_Parent_Gr
+      TYPE(AGRIF_Variable), Pointer :: root   ! Variable on the root grid
+      INTEGER                       :: nbdim  ! Number of dimensions of 
+                                              !    the grid variable 
+      INTEGER                       :: n
+      INTEGER,DIMENSION(6)          :: pttab_child  ! Index of the first point
+                                                    !    inside the domain for
+                                                    !    the child grid variable
+      INTEGER,DIMENSION(6)          :: pttab_parent ! Index of the first point
+                                                    !    inside the domain for
+                                                    !    the parent grid
+                                                    !    variable
+      INTEGER,DIMENSION(6)          :: nbtab_Child  ! Number of the cells
+      INTEGER,DIMENSION(6)          :: posvartab_Child    ! Position of the
+                                                    !    variable on the cell 
+      INTEGER,DIMENSION(6)          :: loctab_Child ! Indicates if the child
+                                                    !    grid has a common
+                                                    !    border with the root
+                                                    !    grid      
+      REAL, DIMENSION(6)            :: s_child,s_parent   ! Positions of the
+                                                    !    parent and child grids
+      REAL, DIMENSION(6)            :: ds_child,ds_parent ! Space steps of the
+                                                    !    parent and child grids 
+C
+C
+      loctab_child(:) = 0
+C
+      Agrif_Child_Gr => Agrif_Curgrid
+      Agrif_Parent_Gr => Agrif_Curgrid % parent
+      root => child % var % root_var 
+      nbdim = root % nbdim
+C
+      do n = 1,nbdim
+        posvartab_child(n) = root % posvar(n)      
+      enddo
+C
+C
+      do n = 1,nbdim
+C
+        Select case(root % interptab(n))
+C
+          case('x') ! x DIMENSION
+C
+            nbtab_Child(n) = Agrif_Child_Gr % nb(1)
+            pttab_Child(n) = root % point(1)
+            pttab_Parent(n) = root % point(1)
+            s_Child(n) = Agrif_Child_Gr % Agrif_x(1)
+            s_Parent(n) = Agrif_Parent_Gr % Agrif_x(1)
+            ds_Child(n) = Agrif_Child_Gr % Agrif_d(1)
+            ds_Parent(n) = Agrif_Parent_Gr % Agrif_d(1)
+            if (root % posvar(n) == 2) then
+                s_Child(n) = s_Child(n) + ds_Child(n)/2.
+                s_Parent(n) = s_Parent(n) + ds_Parent(n)/2.
+            endif
+C
+            if (Agrif_CURGRID % NearRootBorder(1)) 
+     &         loctab_child(n) = -1
+            if (Agrif_CURGRID % DistantRootBorder(1))
+     &         loctab_child(n) = -2
+            if ((Agrif_CURGRID % NearRootBorder(1)) .AND. 
+     &          (Agrif_CURGRID % DistantRootBorder(1))) 
+     &         loctab_child(n) = -3
+C
+          case('y') ! y DIMENSION      
+C
+            nbtab_Child(n) = Agrif_Child_Gr % nb(2)
+            pttab_Child(n) = root % point(2)
+            pttab_Parent(n) = root % point(2)
+            s_Child(n) = Agrif_Child_Gr % Agrif_x(2)
+            s_Parent(n) = Agrif_Parent_Gr % Agrif_x(2) 
+            ds_Child(n) = Agrif_Child_Gr % Agrif_d(2)
+            ds_Parent(n) = Agrif_Parent_Gr % Agrif_d(2)
+            if (root % posvar(n) == 2) then        
+                s_Child(n) = s_Child(n) + ds_Child(n)/2.
+                s_Parent(n) = s_Parent(n) + ds_Parent(n)/2.
+            endif        
+C
+            if (Agrif_CURGRID % NearRootBorder(2)) 
+     &         loctab_child(n) = -1
+            if (Agrif_CURGRID % DistantRootBorder(2)) 
+     &         loctab_child(n) = -2
+            if ((Agrif_CURGRID % NearRootBorder(2)) .AND. 
+     &          (Agrif_CURGRID % DistantRootBorder(2))) 
+     &         loctab_child(n) = -3
+C
+          case('z') ! z DIMENSION
+C
+            nbtab_Child(n) = Agrif_Child_Gr % nb(3)
+            pttab_Child(n) = root % point(3)
+            pttab_Parent(n) = root % point(3)
+            s_Child(n) = Agrif_Child_Gr % Agrif_x(3)
+            s_Parent(n) = Agrif_Parent_Gr % Agrif_x(3)
+            ds_Child(n) = Agrif_Child_Gr % Agrif_d(3)
+            ds_Parent(n) = Agrif_Parent_Gr % Agrif_d(3)
+            if (root % posvar(n) == 2) then        
+                s_Child(n) = s_Child(n) + ds_Child(n)/2.
+                s_Parent(n) = s_Parent(n) + ds_Parent(n)/2.
+            endif        
+C
+            if (Agrif_CURGRID % NearRootBorder(3)) 
+     &         loctab_child(n) = -1
+            if (Agrif_CURGRID % DistantRootBorder(3)) 
+     &         loctab_child(n) = -2
+            if ((Agrif_CURGRID % NearRootBorder(3)) .AND. 
+     &          (Agrif_CURGRID % DistantRootBorder(3))) 
+     &         loctab_child(n) = -3
+C
+          case('N') ! No space DIMENSION      
+C
+            nbtab_Child(n) = child % var % ub(n) - child % var % lb(n)
+            pttab_Child(n) = child % var % lb(n)
+C
+C           No interpolation but only a copy of the values of the grid variable
+C      
+            posvartab_child(n) = 1
+            pttab_Parent(n)= pttab_Child(n)
+            s_Child(n)=0.
+            s_Parent(n)=0. 
+            ds_Child(n)=1.
+            ds_Parent(n)=1.
+            loctab_child(n) = -3
+C
+        End select
+C
+      enddo
+C
+         IF (present(procname)) THEN
+          Call AGRIF_CorrectnD
+     &         (TypeInterp,parent,child,deb,fin,pweight,weight,
+     &          pttab_Child(1:nbdim),pttab_Parent(1:nbdim),
+     &          nbtab_Child(1:nbdim),posvartab_Child(1:nbdim),
+     &          loctab_Child(1:nbdim),
+     &          s_Child(1:nbdim),s_Parent(1:nbdim),
+     &          ds_Child(1:nbdim),ds_Parent(1:nbdim),nbdim,procname)
+        ELSE
+          Call AGRIF_CorrectnD
+     &         (TypeInterp,parent,child,deb,fin,pweight,weight,
+     &          pttab_Child(1:nbdim),pttab_Parent(1:nbdim),
+     &          nbtab_Child(1:nbdim),posvartab_Child(1:nbdim),
+     &          loctab_Child(1:nbdim),
+     &          s_Child(1:nbdim),s_Parent(1:nbdim),
+     &          ds_Child(1:nbdim),ds_Parent(1:nbdim),nbdim)
+         ENDIF
+C
+C
+      End subroutine AGRIF_CorrectVariable
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Correctnd
+C     **************************************************************************
+C
+      Subroutine AGRIF_Correctnd(TypeInterp,parent,child,deb,fin,
+     &                           pweight,weight,
+     &                           pttab_child,pttab_Parent,
+     &                           nbtab_Child,posvartab_Child,
+     &                           loctab_Child,
+     &                           s_Child,s_Parent,
+     &                           ds_Child,ds_Parent,nbdim,procname)
+C
+CCC   Description:
+CCC   Subroutine to calculate the boundary conditions for a nD grid variable on 
+CCC   a fine grid by using a space and time interpolations; it is called by the 
+CCC   Agrif_CorrectVariable procedure.
+C
+C
+C     Declarations:
+C
+      
+C
+#ifdef AGRIF_MPI
+C
+#include "mpif.h"
+C
+#endif
+C
+C     Arguments
+      External :: procname
+      Optional :: procname
+      INTEGER,DIMENSION(6,6) :: TypeInterp ! TYPE of interpolation (linear, 
+                                         !   spline,...)  
+      TYPE(AGRIF_PVariable)    :: parent ! Variable on the parent grid
+      TYPE(AGRIF_PVariable)    :: child  ! Variable on the child grid 
+      INTEGER                  :: deb,fin ! Positions where interpolations 
+                                         !    are done
+      LOGICAL                  :: pweight ! Indicates if weight is used for 
+                                         !    the temporal interpolation
+      REAL                     :: weight ! Coefficient for the temporal
+                                         !    interpolation
+      INTEGER                  :: nbdim  ! Number of dimensions of the grid
+                                         !    variable
+      INTEGER,DIMENSION(nbdim) :: pttab_child ! Index of the first point inside
+                                         !    the domain for the parent 
+                                         !    grid variable
+      INTEGER,DIMENSION(nbdim) :: pttab_Parent ! Index of the first point 
+                                         !   inside the domain for the 
+                                         !   child grid variable
+      INTEGER,DIMENSION(nbdim) :: nbtab_Child ! Number of cells of the child
+                                         !    grid
+      INTEGER,DIMENSION(nbdim) :: posvartab_Child ! Position of the grid
+                                         !    variable (1 or 2)
+      INTEGER,DIMENSION(nbdim) :: loctab_Child ! Indicates if the child 
+                                        !    grid has a common border with 
+                                        !    the root grid
+      REAL   ,DIMENSION(nbdim) :: s_Child,s_Parent ! Positions of the parent 
+                                        !   and child grids 
+      REAL   ,DIMENSION(nbdim) :: ds_Child,ds_Parent ! Space steps of the 
+                                        !    parent and child grids
+C
+C     Local variables
+      TYPE(AGRIF_PVariable)        :: restore ! Variable on the parent     
+      INTEGER,DIMENSION(nbdim,2)   :: lubglob
+      INTEGER                      :: i          
+      INTEGER                      :: kindex  ! Index used for safeguard 
+                                       !    and time interpolation
+      INTEGER,DIMENSION(nbdim,2,2) :: indtab ! Arrays indicating the limits 
+                                       !    of the child     
+      INTEGER,DIMENSION(nbdim,2,2) :: indtruetab ! grid variable where 
+                                       !   boundary conditions are 
+      INTEGER,DIMENSION(nbdim,2,2,nbdim)   :: ptres,ptres2 ! calculated
+      INTEGER                      :: nb,ndir,n,sizetab(1)
+      REAL, DIMENSION(:), Allocatable :: tab ! Array used for the interpolation
+      REAL    :: c1t,c2t               ! Coefficients for the time interpolation
+                                       !    (c2t=1-c1t) 
+C
+#ifdef AGRIF_MPI
+C
+      INTEGER,DIMENSION(nbdim)   :: lower,upper
+      INTEGER,DIMENSION(nbdim)   :: ltab,utab
+      INTEGER,DIMENSION(nbdim)   :: lb,ub
+      INTEGER,DIMENSION(nbdim,2) :: iminmaxg
+      INTEGER                    :: code
+C
+#endif            
+C      
+C
+      indtab(1:nbdim,2,1) = pttab_child(1:nbdim) + nbtab_child(1:nbdim)
+     &          + deb
+      indtab(1:nbdim,2,2) = indtab(1:nbdim,2,1) + ( fin - deb )
+       
+      indtab(1:nbdim,1,1) = pttab_child(1:nbdim) - fin
+      indtab(1:nbdim,1,2) = pttab_child(1:nbdim) - deb
+                  
+      WHERE (posvartab_child(1:nbdim) == 2)
+        indtab(1:nbdim,1,1) = indtab(1:nbdim,1,1) - 1
+        indtab(1:nbdim,1,2) = indtab(1:nbdim,1,2) - 1
+      END WHERE
+      
+
+#if !defined AGRIF_MPI
+      Call Agrif_nbdim_Get_bound_dimension(child%var,lubglob(:,1),
+     &              lubglob(:,2),nbdim)
+C
+#else
+C     
+      Call Agrif_nbdim_Get_bound_dimension(child%var,lb,ub,nbdim)
+      
+      DO i = 1,nbdim
+C
+        Call Agrif_Invloc(lb(i),Agrif_Procrank,i,iminmaxg(i,1))
+        Call Agrif_Invloc(ub(i),Agrif_Procrank,i,iminmaxg(i,2))
+C
+      ENDDO
+C
+      iminmaxg(1:nbdim,2) = - iminmaxg(1:nbdim,2)
+      
+      CALL MPI_ALLREDUCE(iminmaxg,lubglob,2*nbdim,MPI_INTEGER,MPI_MIN,
+     &                     MPI_COMM_AGRIF,code)  
+     
+      lubglob(1:nbdim,2) = - lubglob(1:nbdim,2)      
+C
+#endif 
+C     
+      indtruetab(1:nbdim,1,1) = max(indtab(1:nbdim,1,1),
+     &     lubglob(1:nbdim,1))
+      indtruetab(1:nbdim,1,2) = max(indtab(1:nbdim,1,2),
+     &     lubglob(1:nbdim,1))
+      indtruetab(1:nbdim,2,1) = min(indtab(1:nbdim,2,1),
+     &     lubglob(1:nbdim,2))
+      indtruetab(1:nbdim,2,2) = min(indtab(1:nbdim,2,2),
+     &     lubglob(1:nbdim,2))
+
+                              
+C 
+C
+      do nb = 1,nbdim
+C
+        do ndir = 1,2      
+C
+          if (loctab_child(nb) /= (-ndir) 
+     &        .AND. loctab_child(nb) /= -3) then
+C           
+              do n = 1,2
+C
+                ptres(nb,n,ndir,nb) = indtruetab(nb,ndir,n)  
+C
+              enddo              
+C
+              do i = 1,nbdim
+C     
+                if (i .NE. nb) then      
+C
+                    if (loctab_child(i) == -1 
+     &                                 .OR. loctab_child(i) == -3) then
+C
+                        ptres(i,1,ndir,nb) = pttab_child(i)
+C
+                      else
+C
+                        ptres(i,1,ndir,nb) = indtruetab(i,1,1)
+C
+                    endif
+C
+                    if (loctab_child(i) == -2 
+     &                                 .OR. loctab_child(i) == -3) then
+C
+                        if (posvartab_child(i) == 1) then
+C
+                            ptres(i,2,ndir,nb) = pttab_child(i)
+     &                                                 + nbtab_child(i)
+C
+                          else
+C
+                            ptres(i,2,ndir,nb) = pttab_child(i)
+     &                                             + nbtab_child(i) - 1
+C
+                        endif                             
+C
+                      else
+C
+                        ptres(i,2,ndir,nb) = indtruetab(i,2,2)
+C
+                    endif                        
+C      
+                endif
+C      
+              enddo
+      
+C
+#if defined AGRIF_MPI
+                 Call Agrif_nbdim_Get_bound_dimension
+     &                    (child%var,lower,upper,nbdim)
+
+              do i = 1,nbdim
+C
+                 Call GetLocalBoundaries(ptres(i,1,ndir,nb),
+     &                                  ptres(i,2,ndir,nb),i,
+     &                                  lower(i),upper(i),
+     &                                  ltab(i),utab(i))
+                 ptres2(i,1,ndir,nb) = max(ltab(i),lower(i)) 
+                 ptres2(i,2,ndir,nb) = min(utab(i),upper(i))
+                 if ((i == nb) .AND. (ndir == 1)) then 
+                     ptres2(i,2,ndir,nb) = max(utab(i),lower(i))
+                 elseif ((i == nb) .AND. (ndir == 2)) then
+                     ptres2(i,1,ndir,nb) = min(ltab(i),upper(i)) 
+                 endif
+C
+              enddo
+#else
+              ptres2(:,:,ndir,nb) = ptres(:,:,ndir,nb)
+#endif      
+            
+        endif
+      
+        enddo
+       enddo
+C
+      if (child % var % interpIndex 
+     &        /= Agrif_Curgrid % parent % ngridstep .OR.
+     &    child%var%Interpolationshouldbemade ) then
+C
+C     Space interpolation 
+C      
+      kindex = 1    
+      
+
+C
+      do nb = 1,nbdim
+C
+        do ndir = 1,2
+C
+          if (loctab_child(nb) /= (-ndir) 
+     &        .AND. loctab_child(nb) /= -3) then  
+C
+              IF (present(procname)) THEN
+              Call Agrif_InterpnD
+     &             (TYPEInterp(nb,:),parent,child,
+     &              ptres(1:nbdim,1,ndir,nb),ptres(1:nbdim,2,ndir,nb),
+     &              pttab_child(1:nbdim),pttab_Parent(1:nbdim),
+     &              s_Child(1:nbdim),s_Parent(1:nbdim),
+     &              ds_Child(1:nbdim),ds_Parent(1:nbdim),
+     &              restore,.FALSE.,nbdim,procname)
+              ELSE
+              Call Agrif_InterpnD              
+     &             (TYPEInterp(nb,:),parent,child,
+     &              ptres(1:nbdim,1,ndir,nb),ptres(1:nbdim,2,ndir,nb),
+     &              pttab_child(1:nbdim),pttab_Parent(1:nbdim),
+     &              s_Child(1:nbdim),s_Parent(1:nbdim),
+     &              ds_Child(1:nbdim),ds_Parent(1:nbdim),
+     &              restore,.FALSE.,nbdim)
+              ENDIF
+     
+              IF (.NOT. child%var%interpolationshouldbemade) THEN
+C     
+C             Safeguard of the values of the grid variable (at times n and n+1
+C                on the parent grid)
+C      
+              sizetab(1) = 1
+C
+              do i = 1,nbdim
+C          
+                sizetab(1) = sizetab(1)
+     &              * (ptres2(i,2,ndir,nb)-ptres2(i,1,ndir,nb)+1)
+C      
+              enddo
+
+              Call saveAfterInterp(child,
+     &           ptres2(:,:,ndir,nb),kindex,sizetab(1),nbdim)
+C
+           ENDIF
+C
+          endif
+C
+        enddo       
+C
+      enddo     
+C
+C
+      child % var % interpIndex = Agrif_Curgrid % parent % ngridstep
+C
+C
+      endif  
+      
+              IF (.NOT. child%var%interpolationshouldbemade) THEN
+C
+C
+C     Calculation of the coefficients c1t and c2t for the temporary
+C        interpolation
+      if (pweight) then
+C
+          c1t = weight
+C
+        else
+C
+          c1t = (REAL(AGRIF_Nbstepint()) + 1.) / Agrif_Rhot()
+C
+      endif
+C                                  
+      c2t = 1. - c1t
+C           
+C     Time interpolation
+C
+      kindex = 1
+C
+      do nb = 1,nbdim
+C
+        do ndir = 1,2      
+C
+          if (loctab_child(nb) /= (-ndir) 
+     &        .AND. loctab_child(nb) /= -3) then
+
+              Call timeInterpolation
+     &             (child,ptres2(:,:,ndir,nb),kindex,c1t,c2t,nbdim)
+          endif
+C
+        enddo
+C      
+      enddo
+C      
+
+       ENDIF
+C  
+      End Subroutine Agrif_Correctnd
+C
+C
+C     **************************************************************************
+CCC   Subroutine saveAfterInterp
+C     **************************************************************************
+C
+      Subroutine saveAfterInterp(child,bounds,kindex,newsize,nbdim)
+C
+CCC   Descritpion:
+CCC   Subroutine used to save the values of the grid variable on the fine grid 
+CCC   after the space interpolation. 
+C
+C     Declarations:
+C
+      
+C
+C     argument
+      TYPE (AGRIF_PVariable) :: child   ! The fine grid variable
+      INTEGER                :: kindex  ! Index indicating where this safeguard 
+                                        ! is done on the fine grid
+      INTEGER :: nbdim, newsize
+      INTEGER,DIMENSION(nbdim,2) :: bounds
+C
+C     Local scalars
+      INTEGER                      :: ir,jr,kr,lr,mr,nr
+C
+C
+C     Allocation of the array oldvalues2d
+
+C
+      if (newsize .LE. 0) return
+C
+      Call Agrif_Checksize
+     &     (child,kindex+newsize)  
+
+      if (child % var % interpIndex 
+     &        /= Agrif_Curgrid % parent % ngridstep ) then
+       child%var%oldvalues2d(1,kindex:kindex+newsize-1)=
+     &        child%var%oldvalues2d(2,kindex:kindex+newsize-1)
+      endif
+
+      SELECT CASE (nbdim)
+      CASE (1)
+
+!CDIR ALTCODE
+         do ir=bounds(1,1),bounds(1,2)
+            child%var%oldvalues2d(2,kindex) =
+     &           child%var%array1(ir)
+            kindex = kindex + 1
+         enddo       
+C
+      CASE (2)
+
+        do jr=bounds(2,1),bounds(2,2)
+!CDIR ALTCODE
+           do ir=bounds(1,1),bounds(1,2)
+            child%var%oldvalues2d(2,kindex) =
+     &           child%var%array2(ir,jr)
+            kindex = kindex + 1
+           enddo
+         enddo      
+C
+      CASE (3)
+        do kr=bounds(3,1),bounds(3,2)
+          do jr=bounds(2,1),bounds(2,2)
+!CDIR ALTCODE
+             do ir=bounds(1,1),bounds(1,2)
+            child%var%oldvalues2d(2,kindex) =
+     &           child%var%array3(ir,jr,kr)
+            kindex = kindex + 1
+             enddo
+           enddo
+         enddo       
+C
+      CASE (4)
+          do lr=bounds(4,1),bounds(4,2)
+           do kr=bounds(3,1),bounds(3,2)
+             do jr=bounds(2,1),bounds(2,2)
+!CDIR ALTCODE
+               do ir=bounds(1,1),bounds(1,2)
+            child%var%oldvalues2d(2,kindex) =
+     &           child%var%array4(ir,jr,kr,lr)
+            kindex = kindex + 1
+               enddo
+             enddo
+           enddo
+         enddo         
+C
+      CASE (5)
+         do mr=bounds(5,1),bounds(5,2)
+           do lr=bounds(4,1),bounds(4,2)
+            do kr=bounds(3,1),bounds(3,2) 
+              do jr=bounds(2,1),bounds(2,2)
+!CDIR ALTCODE
+                 do ir=bounds(1,1),bounds(1,2)
+            child%var%oldvalues2d(2,kindex) =
+     &           child%var%array5(ir,jr,kr,lr,mr)
+            kindex = kindex + 1
+                 enddo
+               enddo
+             enddo
+           enddo
+         enddo   
+C
+      CASE (6)
+        do nr=bounds(6,1),bounds(6,2)
+           do mr=bounds(5,1),bounds(5,2)
+             do lr=bounds(4,1),bounds(4,2)
+               do kr=bounds(3,1),bounds(3,2)
+                do jr=bounds(2,1),bounds(2,2)
+!CDIR ALTCODE
+                   do ir=bounds(1,1),bounds(1,2)
+            child%var%oldvalues2d(2,kindex) =
+     &           child%var%array6(ir,jr,kr,lr,mr,nr)
+            kindex = kindex + 1
+                   enddo
+                 enddo
+               enddo
+             enddo
+           enddo
+         enddo       
+      END SELECT
+C
+C                                                  
+      End subroutine saveAfterInterp
+C
+C
+C
+C     **************************************************************************
+CCC   Subroutine timeInterpolation
+C     **************************************************************************
+C
+      Subroutine timeInterpolation(child,bounds,kindex,c1t,c2t,nbdim) 
+C
+CCC   Descritpion:
+CCC   Subroutine for a linear time interpolation on the child grid. 
+C
+C     Declarations:
+C
+      
+C
+C     argument
+      TYPE (AGRIF_PVariable) :: child  ! The fine grid variable
+      INTEGER :: nbdim
+      INTEGER,DIMENSION(nbdim,2) :: bounds
+      INTEGER                :: kindex ! Index indicating the values of the fine
+                                       ! grid got before and after the space 
+                                       ! interpolation and used for the time 
+                                       ! interpolation
+      REAL                   :: c1t,c2t! coefficients for the time interpolation
+                                       ! (c2t=1-c1t)  
+C
+C     Local aruments      
+      INTEGER :: i
+C     Local scalars
+      INTEGER                      :: ir,jr,kr,lr,mr,nr      
+C
+C
+      
+      SELECT CASE (nbdim)
+      CASE (1)
+
+!CDIR ALTCODE
+         do ir=bounds(1,1),bounds(1,2)
+                child%var%array1(ir) =
+     &           c2t*child % var % oldvalues2d(1,kindex)   
+     &         + c1t*child % var % oldvalues2d(2,kindex)    
+            kindex = kindex + 1
+         enddo       
+C
+      CASE (2)
+
+        do jr=bounds(2,1),bounds(2,2)
+!CDIR ALTCODE
+           do ir=bounds(1,1),bounds(1,2)
+                child%var%array2(ir,jr) =
+     &           c2t*child % var % oldvalues2d(1,kindex)   
+     &         + c1t*child % var % oldvalues2d(2,kindex) 
+            kindex = kindex + 1
+           enddo
+         enddo      
+C
+      CASE (3)
+        do kr=bounds(3,1),bounds(3,2)
+          do jr=bounds(2,1),bounds(2,2)
+!CDIR ALTCODE
+             do ir=bounds(1,1),bounds(1,2)
+                child%var%array3(ir,jr,kr) =
+     &           c2t*child % var % oldvalues2d(1,kindex)   
+     &         + c1t*child % var % oldvalues2d(2,kindex) 
+            kindex = kindex + 1
+             enddo
+           enddo
+         enddo       
+C
+      CASE (4)
+          do lr=bounds(4,1),bounds(4,2)
+           do kr=bounds(3,1),bounds(3,2)
+             do jr=bounds(2,1),bounds(2,2)
+!CDIR ALTCODE
+               do ir=bounds(1,1),bounds(1,2)
+                child%var%array4(ir,jr,kr,lr) =
+     &           c2t*child % var % oldvalues2d(1,kindex)   
+     &         + c1t*child % var % oldvalues2d(2,kindex) 
+            kindex = kindex + 1
+               enddo
+             enddo
+           enddo
+         enddo         
+C
+      CASE (5)
+         do mr=bounds(5,1),bounds(5,2)
+           do lr=bounds(4,1),bounds(4,2)
+            do kr=bounds(3,1),bounds(3,2) 
+              do jr=bounds(2,1),bounds(2,2)
+!CDIR ALTCODE
+                 do ir=bounds(1,1),bounds(1,2)
+                child%var%array5(ir,jr,kr,lr,mr) =
+     &           c2t*child % var % oldvalues2d(1,kindex)   
+     &         + c1t*child % var % oldvalues2d(2,kindex) 
+            kindex = kindex + 1
+                 enddo
+               enddo
+             enddo
+           enddo
+         enddo   
+C
+      CASE (6)
+        do nr=bounds(6,1),bounds(6,2)
+           do mr=bounds(5,1),bounds(5,2)
+             do lr=bounds(4,1),bounds(4,2)
+               do kr=bounds(3,1),bounds(3,2)
+                do jr=bounds(2,1),bounds(2,2)
+!CDIR ALTCODE
+                   do ir=bounds(1,1),bounds(1,2)
+                child%var%array6(ir,jr,kr,lr,mr,nr) =
+     &           c2t*child % var % oldvalues2d(1,kindex)   
+     &         + c1t*child % var % oldvalues2d(2,kindex) 
+            kindex = kindex + 1
+                   enddo
+                 enddo
+               enddo
+             enddo
+           enddo
+         enddo       
+      END SELECT
+                                                   
+C
+C
+      End subroutine timeInterpolation      
+C
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Checksize
+C     **************************************************************************
+C
+      Subroutine Agrif_Checksize(child,newsize)
+C
+CCC   Descritpion:
+CCC   Subroutine used in the saveAfterInterp procedure to allocate the 
+CCC   oldvalues2d array. 
+C
+C     Declarations:
+C
+      
+C      
+C     TYPE argument
+      TYPE (AGRIF_PVariable) :: child  ! The fine grid variable
+C 
+C     Scalar arguments
+      INTEGER :: newsize               ! Size of the domains where the boundary 
+                                       ! conditions are calculated  
+C
+C     Local arrays
+      REAL, DIMENSION(:,:), Allocatable :: tempoldvalues ! Temporary array
+C                
+C
+      if (.NOT. associated(child % var % oldvalues2d)) then
+C
+          allocate(child % var % oldvalues2d(2,newsize))
+C  
+          child % var % oldvalues2d=0.
+C
+        else
+C
+          if (SIZE(child % var % oldvalues2d,2) < newsize) then   
+C
+              allocate(tempoldvalues(2,SIZE(child % var %
+     &                                    oldvalues2d,2)))
+C
+              tempoldvalues = child % var % oldvalues2d
+C
+              deallocate(child % var % oldvalues2d)
+C
+              allocate(child % var % oldvalues2d(2,newsize))
+C            
+              child%var%oldvalues2d=0.
+C
+              child % var % oldvalues2d(:,1:SIZE(tempoldvalues,2)) = 
+     &        tempoldvalues(:,:)
+C
+              deallocate(tempoldvalues)
+C
+          endif 
+C
+      endif                                                    
+C
+C
+      End  Subroutine Agrif_Checksize
+C
+C
+C
+C      
+      End Module AGRIF_boundary
+
Index: /vendors/AGRIF/r_00/AGRIF_FILES/modbcfunction.F
===================================================================
--- /vendors/AGRIF/r_00/AGRIF_FILES/modbcfunction.F	(revision 1902)
+++ /vendors/AGRIF/r_00/AGRIF_FILES/modbcfunction.F	(revision 1902)
@@ -0,0 +1,2075 @@
+!
+! $Id: modbcfunction.F 1200 2008-09-24 13:05:20Z rblod $
+!
+C     AGRIF (Adaptive Grid Refinement In Fortran)
+C
+C     Copyright (C) 2003 Laurent Debreu (Laurent.Debreu@imag.fr)
+C                        Christophe Vouland (Christophe.Vouland@imag.fr)    
+C
+C     This program is free software; you can redistribute it and/or modify
+C     it under the terms of the GNU General Public License as published by
+C     the Free Software Foundation; either version 2 of the License, or
+C     (at your option) any later version.
+C
+C     This program is distributed in the hope that it will be useful,
+C     but WITHOUT ANY WARRANTY; without even the implied warranty of
+C     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+C     GNU General Public License for more details.
+C
+C     You should have received a copy of the GNU General Public License
+C     along with this program; if not, write to the Free Software
+C     Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+C
+C
+C
+CCC   Module AGRIF_bcfunction
+C
+C 
+      Module  Agrif_bcfunction
+CCC   Description:
+CCC   
+C
+C     Modules used:
+C  
+      Use Agrif_Boundary
+      Use Agrif_Update
+      Use Agrif_fluxmod
+C             
+      IMPLICIT NONE
+C
+      interface Agrif_Bc_variable
+          module procedure Agrif_Bc_variable0d,
+     &                     Agrif_Bc_variable1d,
+     &                     Agrif_Bc_variable2d,
+     &                     Agrif_Bc_variable3d,
+     &                     Agrif_Bc_variable4d,
+     &                     Agrif_Bc_variable5d
+      end interface       
+C
+      interface Agrif_Set_Parent
+          module procedure Agrif_Set_Parent_int,
+     &                     Agrif_Set_Parent_real
+      end interface       
+C
+      interface Agrif_Interp_variable
+          module procedure Agrif_Interp_var0d,
+     &                     Agrif_Interp_var1d,
+     &                     Agrif_Interp_var2d,
+     &                     Agrif_Interp_var3d,
+     &                     Agrif_Interp_var4d,
+     &                     Agrif_Interp_var5d
+      end interface       
+C
+      interface Agrif_Init_variable
+          module procedure Agrif_Init_variable0d,
+     &                     Agrif_Init_variable1d,
+     &                     Agrif_Init_variable2d,
+     &                     Agrif_Init_variable3d
+      end interface       
+C
+      interface Agrif_update_variable
+          module procedure Agrif_update_var0d,
+     &                     Agrif_update_var1d,
+     &                     Agrif_update_var2d,
+     &                     Agrif_update_var3d,
+     &                     Agrif_update_var4d,
+     &                     Agrif_update_var5d
+      end interface       
+C
+      Contains 
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Set_type
+C     **************************************************************************
+C 
+      Subroutine Agrif_Set_type(tabvarsindic,posvar,point)
+C
+CCC   Description:
+CCC   To set the TYPE of the variable.
+C
+C     Modules used:
+C      
+
+C
+C     Declarations:
+C      
+C
+C
+C     Arguments      
+C
+      INTEGER, DIMENSION(:) :: posvar
+      INTEGER, DIMENSION(:) :: point
+C
+      INTEGER :: tabvarsindic ! indice of the variable in tabvars
+      INTEGER :: dimensio ! DIMENSION of the variable
+      INTEGER :: i
+C
+C
+C     Begin 
+C
+      dimensio = Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim
+C
+      if (.not.associated(Agrif_Mygrid % tabvars(tabvarsindic)
+     &                                 %var % posvar)) then
+      Allocate( 
+     & Agrif_Mygrid % tabvars(tabvarsindic)%var % posvar(dimensio))
+      endif 
+            
+      do i = 1 , dimensio
+         Agrif_Mygrid % tabvars(tabvarsindic) %var % posvar(i)
+     &                       = posvar(i)
+         Agrif_Mygrid % tabvars(tabvarsindic) %var % point(i) 
+     &                       = point(i)
+      enddo
+C
+C
+      End Subroutine Agrif_Set_type
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Set_parent_int
+C     **************************************************************************
+C 
+      Subroutine Agrif_Set_parent_int(tabvarsindic,value)
+C
+CCC   Description:
+CCC   To set the TYPE of the variable.
+C
+C     Modules used:
+C      
+
+C
+C     Declarations:
+C      
+C
+C
+C     Arguments      
+C
+      INTEGER :: tabvarsindic ! indice of the variable in tabvars
+      INTEGER :: Value
+C
+C     Begin 
+C
+      Agrif_Curgrid % parent % tabvars(tabvarsindic) % 
+     &         var % iarray0 = value
+C
+C
+      End Subroutine Agrif_Set_parent_int
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Set_parent_real
+C     **************************************************************************
+C 
+      Subroutine Agrif_Set_parent_real(tabvarsindic,value)
+C
+CCC   Description:
+CCC   To set the TYPE of the variable.
+C
+C     Modules used:
+C      
+
+C
+C     Declarations:
+C      
+C
+C
+C     Arguments      
+C
+      INTEGER :: tabvarsindic ! indice of the variable in tabvars
+      REAL :: Value
+C
+C     Begin 
+C
+      Agrif_Curgrid % parent % tabvars(tabvarsindic) % 
+     &          var % array0 = value
+C
+C
+      End Subroutine Agrif_Set_parent_real
+C
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Set_raf
+C     **************************************************************************
+C 
+      Subroutine Agrif_Set_raf(tabvarsindic,tabraf)
+C
+CCC   Description:
+CCC   Attention tabraf est de taille trois si on ne raffine pas suivant z la
+CCC             troisieme entree du tableau tabraf est 'N'
+C
+C     Modules used:
+C      
+
+C
+C     Declarations:
+C      
+C     Arguments      
+C
+      CHARACTER(*) ,DIMENSION(:) :: tabraf
+C
+      INTEGER :: tabvarsindic ! indice of the variable in tabvars
+      INTEGER :: dimensio ! DIMENSION of the variable
+      INTEGER :: i
+C
+C
+C     Begin 
+C
+      dimensio = Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim
+C        
+      if (.not.associated(Agrif_Mygrid % tabvars(tabvarsindic)
+     &                                 %var % interptab)) then 
+      Allocate(
+     & Agrif_Mygrid % tabvars(tabvarsindic)%var% interptab(dimensio))
+      endif
+
+      do i = 1 , dimensio
+         Agrif_Mygrid % tabvars(tabvarsindic) %var % interptab(i) 
+     &                 = TRIM(tabraf(i))
+      enddo
+C
+      End Subroutine Agrif_Set_raf
+C
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Set_bc
+C     **************************************************************************
+C 
+      Subroutine Agrif_Set_bc(tabvarsindic,point,
+     &          Interpolationshouldbemade)
+C
+CCC   Description:
+CCC
+C
+C     Modules used:
+C      
+
+C
+C     Declarations:
+C      
+C     Arguments      
+C
+      INTEGER, DIMENSION(2) :: point
+      LOGICAL, OPTIONAL :: Interpolationshouldbemade
+C
+      INTEGER :: tabvarsindic ! indice of the variable in tabvars
+      TYPE(Agrif_PVariable),Pointer ::tabvars
+      
+    
+C
+C
+C     Begin 
+C
+C     
+
+      if (tabvarsindic <=0) then
+      tabvars => Agrif_Search_Variable(Agrif_Curgrid,-tabvarsindic)
+      else
+      tabvars=>Agrif_Curgrid % tabvars(tabvarsindic)
+      endif  
+      
+      if (Agrif_Curgrid % fixedrank .NE. 0) then  
+       IF (.Not.Associated(tabvars%var% interpIndex)) THEN
+        Allocate(tabvars%var % interpIndex)
+          tabvars%var % interpIndex = -1
+
+        Allocate(tabvars%var % oldvalues2D(2,1))
+          tabvars%var % oldvalues2D = 0. 
+       ENDIF      
+       if ( PRESENT(Interpolationshouldbemade) ) then
+         tabvars%var %
+     &     Interpolationshouldbemade = Interpolationshouldbemade
+       endif
+
+      endif
+C
+      tabvars%var % bcinf = point(1)
+      tabvars%var % bcsup = point(2)
+C
+      End Subroutine Agrif_Set_bc
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Set_interp
+C     **************************************************************************
+C 
+      Subroutine Agrif_Set_interp(tabvarsindic,interp,interp1,interp2,
+     &                interp3)
+C
+CCC   Description:
+C
+C     Declarations:
+C      
+C     Arguments      
+C
+      INTEGER, OPTIONAL      :: interp,interp1,interp2,interp3
+C
+      INTEGER :: tabvarsindic ! indice of the variable in tabvars
+C
+C     Begin 
+C
+      Agrif_Mygrid % tabvars(tabvarsindic)% var % Typeinterp = 
+     &    Agrif_Constant
+      IF (present(interp)) THEN
+      Agrif_Mygrid % tabvars(tabvarsindic)% var % Typeinterp = 
+     &           interp
+      ENDIF
+      IF (present(interp1)) THEN
+      Agrif_Mygrid % tabvars(tabvarsindic)% var % Typeinterp(1) = 
+     &           interp1
+      ENDIF
+      IF (present(interp2)) THEN
+      Agrif_Mygrid % tabvars(tabvarsindic)% var % Typeinterp(2) = 
+     &           interp2
+      ENDIF
+      IF (present(interp3)) THEN
+      Agrif_Mygrid % tabvars(tabvarsindic)% var % Typeinterp(3) = 
+     &           interp3
+      ENDIF
+C
+      End Subroutine Agrif_Set_interp
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Set_bcinterp
+C     **************************************************************************
+C 
+      Subroutine Agrif_Set_bcinterp(tabvarsindic,interp,interp1,
+     &      interp2,interp3,interp11,interp12,interp21,interp22)
+C
+CCC   Description:
+
+C
+C     Modules used:
+C      
+
+C
+C     Declarations:
+C      
+C     Arguments      
+C
+      INTEGER, OPTIONAL      :: interp,interp1,interp2,interp3
+      INTEGER, OPTIONAL      :: interp11,interp12,interp21,interp22
+C
+      INTEGER :: tabvarsindic ! indice of the variable in tabvars
+      TYPE(Agrif_PVariable),Pointer ::tabvars
+      
+    
+C
+C
+C     Begin 
+C
+C     
+
+      if (tabvarsindic <=0) then
+      tabvars => Agrif_Search_Variable(Agrif_Mygrid,-tabvarsindic)
+      else
+      tabvars=>Agrif_Mygrid % tabvars(tabvarsindic)
+      endif 
+C
+      tabvars% var % bctypeinterp = 
+     &           Agrif_Constant   
+      IF (present(interp)) THEN
+      tabvars% var % bctypeinterp = 
+     &           interp
+      ENDIF       
+      IF (present(interp1)) THEN
+      tabvars% var % bctypeinterp(1:2,1) = 
+     &           interp1
+      ENDIF       
+      IF (present(interp11)) THEN
+      tabvars% var % bctypeinterp(1,1) = 
+     &           interp11
+      ENDIF
+      IF (present(interp12)) THEN
+      tabvars% var % bctypeinterp(1,2) = 
+     &           interp12
+      ENDIF          
+      IF (present(interp2)) THEN
+      tabvars% var % bctypeinterp(1:2,2) = 
+     &           interp2
+      ENDIF
+      IF (present(interp21)) THEN
+      tabvars% var % bctypeinterp(2,1) = 
+     &           interp21
+      ENDIF      
+      IF (present(interp22)) THEN
+      tabvars% var % bctypeinterp(2,2) = 
+     &           interp22
+      ENDIF            
+      IF (present(interp3)) THEN
+      tabvars% var % bctypeinterp(1:2,3) =
+     &           interp3
+      ENDIF
+C
+      End Subroutine Agrif_Set_bcinterp
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Set_Update
+C     **************************************************************************
+C 
+      Subroutine Agrif_Set_Update(tabvarsindic,point)
+C
+CCC   Description:
+CCC
+C
+C     Modules used:
+C      
+
+C
+C     Declarations:
+C      
+C     Arguments      
+C
+      INTEGER, DIMENSION(2) :: point
+C
+      INTEGER :: tabvarsindic ! indice of the variable in tabvars
+C
+C
+C     Begin 
+C
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf = point(1)
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup = point(2)
+C
+      End Subroutine Agrif_Set_Update
+C
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Set_UpdateType
+C     **************************************************************************
+C 
+      Subroutine Agrif_Set_UpdateType(tabvarsindic,
+     &                                  update,update1,update2,
+     &                                  update3,update4,update5)
+C
+CCC   Description:
+
+C
+C     Modules used:
+C      
+
+C
+C     Declarations:
+C      
+C     Arguments      
+C
+      INTEGER, OPTIONAL           :: update, update1,
+     &       update2, update3,update4,update5
+C
+      INTEGER :: tabvarsindic ! indice of the variable in tabvars
+C
+C
+C     Begin 
+C
+      Agrif_Mygrid % tabvars(tabvarsindic) % var % typeupdate = 
+     &                   Agrif_Update_Copy
+      
+      IF (present(update)) THEN
+        Agrif_Mygrid % tabvars(tabvarsindic)% var % typeupdate = 
+     &           update
+      ENDIF
+      IF (present(update1)) THEN
+        Agrif_Mygrid % tabvars(tabvarsindic)% var % typeupdate(1) = 
+     &           update1
+      ENDIF  
+      IF (present(update2)) THEN
+        Agrif_Mygrid % tabvars(tabvarsindic)% var % typeupdate(2) = 
+     &           update2
+      ENDIF  
+      IF (present(update3)) THEN
+        Agrif_Mygrid % tabvars(tabvarsindic)% var % typeupdate(3) = 
+     &           update3
+      ENDIF 
+      IF (present(update4)) THEN
+        Agrif_Mygrid % tabvars(tabvarsindic)% var % typeupdate(4) = 
+     &           update4
+      ENDIF       
+      IF (present(update5)) THEN
+        Agrif_Mygrid % tabvars(tabvarsindic)% var % typeupdate(5) = 
+     &           update5
+      ENDIF                  
+C
+      End Subroutine Agrif_Set_UpdateType           
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Set_restore
+C     **************************************************************************
+C 
+      Subroutine Agrif_Set_restore(tabvarsindic)
+C
+CCC   Description:
+CCC   
+C
+C     Modules used:
+C      
+
+C
+C     Declarations:
+C      
+C     Arguments      
+C
+      INTEGER :: tabvarsindic ! indice of the variable in tabvars
+C
+C     Begin 
+C
+C
+      Agrif_Mygrid%tabvars(tabvarsindic)%var % restaure = .TRUE.
+C
+      End Subroutine Agrif_Set_restore
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Init_variable0d
+C     **************************************************************************
+      Subroutine Agrif_Init_variable0d(tabvarsindic0,tabvarsindic,
+     &        procname)
+
+      INTEGER :: tabvarsindic0 ! indice of the variable in tabvars
+      INTEGER :: tabvarsindic ! indice of the variable in tabvars
+      External :: procname
+      Optional ::  procname
+C
+      if (Agrif_Root()) Return
+C      
+      if (present(procname)) then
+      CALL Agrif_Interp_variable(tabvarsindic0,tabvarsindic,procname)
+      CALL Agrif_Bc_variable(tabvarsindic0,tabvarsindic,1.,procname)
+      else
+      CALL Agrif_Interp_variable(tabvarsindic0,tabvarsindic)
+      CALL Agrif_Bc_variable(tabvarsindic0,tabvarsindic,1.)
+      endif
+
+      End Subroutine Agrif_Init_variable0d
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Init_variable1d
+C     **************************************************************************
+      Subroutine Agrif_Init_variable1d(q,tabvarsindic,procname)
+
+      REAL, DIMENSION(:) :: q
+      INTEGER :: tabvarsindic ! indice of the variable in tabvars
+      External :: procname
+      Optional ::  procname
+
+C
+      if (Agrif_Root()) Return
+C
+      if (present(procname)) then
+      CALL Agrif_Interp_variable(q,tabvarsindic,procname)
+      CALL Agrif_Bc_variable(q,tabvarsindic,1.,procname)
+      else
+      CALL Agrif_Interp_variable(q,tabvarsindic)
+      CALL Agrif_Bc_variable(q,tabvarsindic,1.)
+      endif
+
+      End Subroutine Agrif_Init_variable1d
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Init_variable2d
+C     **************************************************************************
+      Subroutine Agrif_Init_variable2d(q,tabvarsindic,procname)
+
+      REAL,  DIMENSION(:,:) :: q
+      INTEGER :: tabvarsindic ! indice of the variable in tabvars
+      External :: procname
+      Optional ::  procname
+
+C
+      if (Agrif_Root()) Return
+C
+      if (present(procname)) then
+      CALL Agrif_Interp_variable(q,tabvarsindic,procname)
+      CALL Agrif_Bc_variable(q,tabvarsindic,1.,procname)
+      else
+      CALL Agrif_Interp_variable(q,tabvarsindic)
+      CALL Agrif_Bc_variable(q,tabvarsindic,1.)
+      endif
+
+
+      End Subroutine Agrif_Init_variable2d
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Init_variable3d
+C     **************************************************************************
+      Subroutine Agrif_Init_variable3d(q,tabvarsindic,procname)
+
+      REAL,  DIMENSION(:,:,:) :: q
+      INTEGER :: tabvarsindic ! indice of the variable in tabvars
+      External :: procname
+      Optional ::  procname
+C
+      if (Agrif_Root()) Return
+C
+      if (present(procname)) then
+      CALL Agrif_Interp_variable(q,tabvarsindic,procname)
+      CALL Agrif_Bc_variable(q,tabvarsindic,1.,procname)
+      else
+      CALL Agrif_Interp_variable(q,tabvarsindic)
+      CALL Agrif_Bc_variable(q,tabvarsindic,1.)
+      endif
+
+C
+      End Subroutine Agrif_Init_variable3d
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Init_variable4d
+C     **************************************************************************
+      Subroutine Agrif_Init_variable4d(q,tabvarsindic,procname)
+
+      REAL,  DIMENSION(:,:,:,:) :: q
+      INTEGER :: tabvarsindic ! indice of the variable in tabvars
+      External :: procname
+      Optional ::  procname
+C
+      if (Agrif_Root()) Return
+C
+      if (present(procname)) then
+      CALL Agrif_Interp_variable(q,tabvarsindic,procname)
+      CALL Agrif_Bc_variable(q,tabvarsindic,1.,procname)
+      else
+      CALL Agrif_Interp_variable(q,tabvarsindic)
+      CALL Agrif_Bc_variable(q,tabvarsindic,1.)
+      endif
+
+C
+      End Subroutine Agrif_Init_variable4d      
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Bc_variable0d
+C     **************************************************************************
+      Subroutine Agrif_Bc_variable0d(tabvarsindic0,tabvarsindic,
+     &                               calledweight,procname)
+
+      INTEGER :: tabvarsindic0 ! indice of the variable in tabvars
+      INTEGER :: tabvarsindic ! indice of the variable in tabvars
+C        
+      External :: procname
+      Optional ::  procname
+      REAL, OPTIONAL :: calledweight
+      REAL    :: weight
+      LOGICAL :: pweight
+C
+      INTEGER :: dimensio      
+
+      if (Agrif_Root()) Return
+C
+      dimensio =  Agrif_Mygrid % tabvars(tabvarsindic) % var % nbdim    
+C
+      if ( PRESENT(calledweight) ) then
+        weight=calledweight      
+        pweight = .TRUE.
+      else
+        weight = 0.
+        pweight = .FALSE.
+      endif
+C      
+C
+
+      
+      if ( dimensio .EQ. 1 ) Call Agrif_Interp_Bc_1D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % bctypeinterp,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic0) %var % array1,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % bcinf,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % bcsup,
+     & weight,
+     & pweight)
+C
+      if ( dimensio .EQ. 2 ) then
+      IF (present(procname)) THEN
+      Call Agrif_Interp_Bc_2D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % bctypeinterp,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic0) %var % array2,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % bcinf,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % bcsup,
+     & weight,pweight,procname)
+      ELSE
+          
+      Call Agrif_Interp_Bc_2D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % bctypeinterp,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic0) %var % array2,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % bcinf,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % bcsup,
+     & weight,pweight)
+      ENDIF
+      endif
+C
+      if ( dimensio .EQ. 3 ) then
+      IF (present(procname)) THEN
+
+      Call Agrif_Interp_Bc_3D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % bctypeinterp,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic0) %var % array3,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % bcinf,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % bcsup,
+     & weight,pweight,procname)      
+      ELSE
+      Call Agrif_Interp_Bc_3D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % bctypeinterp,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic0) %var % array3,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % bcinf,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % bcsup,
+     & weight,pweight)
+      ENDIF
+      endif
+C
+      if ( dimensio .EQ. 4 ) then
+      IF (present(procname)) THEN
+      Call Agrif_Interp_Bc_4D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % bctypeinterp,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic0) %var % array4,     
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % bcinf,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % bcsup,
+     & weight,pweight,procname)      
+      ELSE
+      Call Agrif_Interp_Bc_4D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % bctypeinterp,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic0) %var % array4,     
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % bcinf,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % bcsup,
+     & weight,pweight)
+      ENDIF
+      endif
+C
+      if ( dimensio .EQ. 5 ) then
+      IF (present(procname)) THEN
+      Call Agrif_Interp_Bc_5D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % bctypeinterp,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic0) %var % array5,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % bcinf,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % bcsup,
+     & weight,pweight,procname)      
+      ELSE
+      Call Agrif_Interp_Bc_5D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % bctypeinterp,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic0) %var % array5,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % bcinf,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % bcsup,
+     & weight,pweight)
+      ENDIF
+      endif
+C
+      if ( dimensio .EQ. 6 ) Call Agrif_Interp_Bc_6D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % bctypeinterp,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic0) %var % array6,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % bcinf,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % bcsup,
+     & weight,
+     & pweight)
+C
+C
+      End Subroutine Agrif_Bc_variable0d
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Bc_variable1d
+C     **************************************************************************
+      Subroutine Agrif_Bc_variable1d(q,tabvarsindic,calledweight,
+     &                               procname)
+
+      REAL   , Dimension(:)          :: q
+      External :: procname
+      Optional ::  procname
+      INTEGER :: tabvarsindic ! indice of the variable in tabvars
+C        
+      REAL, OPTIONAL :: calledweight
+      REAL    :: weight
+      LOGICAL :: pweight
+      TYPE(Agrif_PVariable),Pointer ::tabvars,parenttabvars,roottabvars
+C
+C      
+C      
+      If (Agrif_Root()) Return
+      
+      if ( PRESENT(calledweight) ) then
+        weight=calledweight      
+        pweight = .TRUE.
+      else
+        weight = 0.
+        pweight = .FALSE.
+      endif
+      
+      if (tabvarsindic <=0) then
+      tabvars => Agrif_Search_Variable(Agrif_Curgrid,-tabvarsindic)
+      parenttabvars => tabvars%parent_var
+      roottabvars => Agrif_Search_Variable(Agrif_Mygrid,-tabvarsindic)
+      else
+      tabvars=>Agrif_Curgrid % tabvars(tabvarsindic)
+      parenttabvars => Agrif_Curgrid % parent % tabvars(tabvarsindic)
+      roottabvars => Agrif_Mygrid % tabvars(tabvarsindic)
+      endif
+            
+      IF (present(procname)) THEN
+      Call Agrif_Interp_Bc_1D(
+     & roottabvars % var % bctypeinterp,
+     & parenttabvars,
+     & tabvars,q,
+     & tabvars % var % bcinf,
+     & tabvars % var % bcsup,
+     & weight,pweight,procname)      
+      ELSE
+      Call Agrif_Interp_Bc_1D(
+     & roottabvars % var % bctypeinterp,
+     & parenttabvars,
+     & tabvars,q,
+     & tabvars % var % bcinf,
+     & tabvars % var % bcsup,
+     & weight,pweight)
+      ENDIF
+      End Subroutine Agrif_Bc_variable1d 
+      
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Bc_variable2d
+C     **************************************************************************
+      Subroutine Agrif_Bc_variable2d(q,tabvarsindic,calledweight,
+     &                               procname)
+
+      REAL   , Dimension(:,:)          :: q
+      External :: procname
+      Optional ::  procname
+      INTEGER :: tabvarsindic ! indice of the variable in tabvars
+C        
+      REAL, OPTIONAL :: calledweight
+      REAL    :: weight
+      LOGICAL :: pweight
+      TYPE(Agrif_PVariable),Pointer ::tabvars,parenttabvars,roottabvars
+C
+C      
+C      
+      If (Agrif_Root()) Return
+      
+      if ( PRESENT(calledweight) ) then
+        weight=calledweight      
+        pweight = .TRUE.
+      else
+        weight = 0.
+        pweight = .FALSE.
+      endif
+      
+      if (tabvarsindic <=0) then
+      tabvars => Agrif_Search_Variable(Agrif_Curgrid,-tabvarsindic)
+      parenttabvars => tabvars%parent_var
+      roottabvars => Agrif_Search_Variable(Agrif_Mygrid,-tabvarsindic)
+      else
+      tabvars=>Agrif_Curgrid % tabvars(tabvarsindic)
+      parenttabvars => Agrif_Curgrid % parent % tabvars(tabvarsindic)
+      roottabvars => Agrif_Mygrid % tabvars(tabvarsindic)
+      endif
+            
+      IF (present(procname)) THEN
+      Call Agrif_Interp_Bc_2D(
+     & roottabvars % var % bctypeinterp,
+     & parenttabvars,
+     & tabvars,q,
+     & tabvars % var % bcinf,
+     & tabvars % var % bcsup,
+     & weight,pweight,procname)      
+      ELSE
+      Call Agrif_Interp_Bc_2D(
+     & roottabvars % var % bctypeinterp,
+     & parenttabvars,
+     & tabvars,q,
+     & tabvars % var % bcinf,
+     & tabvars % var % bcsup,
+     & weight,pweight)
+      ENDIF
+      End Subroutine Agrif_Bc_variable2d
+            
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Bc_variable3d
+C     **************************************************************************
+      Subroutine Agrif_Bc_variable3d(q,tabvarsindic,calledweight,
+     &                               procname)
+
+      REAL   , Dimension(:,:,:)          :: q
+      External :: procname
+      Optional ::  procname
+      INTEGER :: tabvarsindic ! indice of the variable in tabvars
+C        
+      REAL, OPTIONAL :: calledweight
+      REAL    :: weight
+      LOGICAL :: pweight
+      TYPE(Agrif_PVariable),Pointer ::tabvars,parenttabvars,roottabvars
+C
+C      
+C      
+      If (Agrif_Root()) Return
+      
+      if ( PRESENT(calledweight) ) then
+        weight=calledweight      
+        pweight = .TRUE.
+      else
+        weight = 0.
+        pweight = .FALSE.
+      endif
+      
+      if (tabvarsindic <=0) then
+      tabvars => Agrif_Search_Variable(Agrif_Curgrid,-tabvarsindic)
+      parenttabvars => tabvars%parent_var
+      roottabvars => Agrif_Search_Variable(Agrif_Mygrid,-tabvarsindic)
+      else
+      tabvars=>Agrif_Curgrid % tabvars(tabvarsindic)
+      parenttabvars => Agrif_Curgrid % parent % tabvars(tabvarsindic)
+      roottabvars => Agrif_Mygrid % tabvars(tabvarsindic)
+      endif
+            
+      IF (present(procname)) THEN
+      Call Agrif_Interp_Bc_3D(
+     & roottabvars % var % bctypeinterp,
+     & parenttabvars,
+     & tabvars,q,
+     & tabvars % var % bcinf,
+     & tabvars % var % bcsup,
+     & weight,pweight,procname)      
+      ELSE
+      Call Agrif_Interp_Bc_3D(
+     & roottabvars % var % bctypeinterp,
+     & parenttabvars,
+     & tabvars,q,
+     & tabvars % var % bcinf,
+     & tabvars % var % bcsup,
+     & weight,pweight)
+      ENDIF
+      End Subroutine Agrif_Bc_variable3d
+      
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Bc_variable4d
+C     **************************************************************************
+      Subroutine Agrif_Bc_variable4d(q,tabvarsindic,calledweight,
+     &                               procname)
+
+      REAL   , Dimension(:,:,:,:)          :: q
+      External :: procname
+      Optional ::  procname
+      INTEGER :: tabvarsindic ! indice of the variable in tabvars
+C        
+      REAL, OPTIONAL :: calledweight
+      REAL    :: weight
+      LOGICAL :: pweight
+      TYPE(Agrif_PVariable),Pointer ::tabvars,parenttabvars,roottabvars
+C
+C      
+C      
+      If (Agrif_Root()) Return
+      
+      if ( PRESENT(calledweight) ) then
+        weight=calledweight      
+        pweight = .TRUE.
+      else
+        weight = 0.
+        pweight = .FALSE.
+      endif
+      
+      if (tabvarsindic <=0) then
+      tabvars => Agrif_Search_Variable(Agrif_Curgrid,-tabvarsindic)
+      parenttabvars => tabvars%parent_var
+      roottabvars => Agrif_Search_Variable(Agrif_Mygrid,-tabvarsindic)
+      else
+      tabvars=>Agrif_Curgrid % tabvars(tabvarsindic)
+      parenttabvars => Agrif_Curgrid % parent % tabvars(tabvarsindic)
+      roottabvars => Agrif_Mygrid % tabvars(tabvarsindic)
+      endif
+            
+      IF (present(procname)) THEN
+      Call Agrif_Interp_Bc_4D(
+     & roottabvars % var % bctypeinterp,
+     & parenttabvars,
+     & tabvars,q,
+     & tabvars % var % bcinf,
+     & tabvars % var % bcsup,
+     & weight,pweight,procname)      
+      ELSE
+      Call Agrif_Interp_Bc_4D(
+     & roottabvars % var % bctypeinterp,
+     & parenttabvars,
+     & tabvars,q,
+     & tabvars % var % bcinf,
+     & tabvars % var % bcsup,
+     & weight,pweight)
+      ENDIF
+      End Subroutine Agrif_Bc_variable4d
+            
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Bc_variable5d
+C     **************************************************************************
+      Subroutine Agrif_Bc_variable5d(q,tabvarsindic,calledweight,
+     &                               procname)
+
+      REAL   , Dimension(:,:,:,:,:)          :: q
+      External :: procname
+      Optional ::  procname
+      INTEGER :: tabvarsindic ! indice of the variable in tabvars
+C        
+      REAL, OPTIONAL :: calledweight
+      REAL    :: weight
+      LOGICAL :: pweight
+      TYPE(Agrif_PVariable),Pointer ::tabvars,parenttabvars,roottabvars
+C
+C      
+C      
+      If (Agrif_Root()) Return
+      
+      if ( PRESENT(calledweight) ) then
+        weight=calledweight      
+        pweight = .TRUE.
+      else
+        weight = 0.
+        pweight = .FALSE.
+      endif
+      
+      if (tabvarsindic <=0) then
+      tabvars => Agrif_Search_Variable(Agrif_Curgrid,-tabvarsindic)
+      parenttabvars => tabvars%parent_var
+      roottabvars => Agrif_Search_Variable(Agrif_Mygrid,-tabvarsindic)
+      else
+      tabvars=>Agrif_Curgrid % tabvars(tabvarsindic)
+      parenttabvars => Agrif_Curgrid % parent % tabvars(tabvarsindic)
+      roottabvars => Agrif_Mygrid % tabvars(tabvarsindic)
+      endif
+            
+      IF (present(procname)) THEN
+      Call Agrif_Interp_Bc_5d(
+     & roottabvars % var % bctypeinterp,
+     & parenttabvars,
+     & tabvars,q,
+     & tabvars % var % bcinf,
+     & tabvars % var % bcsup,
+     & weight,pweight,procname)      
+      ELSE
+      Call Agrif_Interp_Bc_5d(
+     & roottabvars % var % bctypeinterp,
+     & parenttabvars,
+     & tabvars,q,
+     & tabvars % var % bcinf,
+     & tabvars % var % bcsup,
+     & weight,pweight)
+      ENDIF
+      End Subroutine Agrif_Bc_variable5d
+      
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Interp_var0D
+C     **************************************************************************
+C 
+      Subroutine Agrif_Interp_var0d(tabvarsindic0,tabvarsindic,procname)
+
+      INTEGER :: tabvarsindic0 ! indice of the variable in tabvars
+      INTEGER :: tabvarsindic  ! indice of the variable in tabvars
+      INTEGER :: dimensio  ! indice of the variable in tabvars
+      External :: procname
+      Optional ::  procname
+C      
+      if (Agrif_Root()) Return
+C     
+      dimensio = Agrif_Mygrid % tabvars(tabvarsindic) % var % nbdim 
+C
+      if ( dimensio .EQ. 1 ) then
+       if (present(procname)) then
+       Call Agrif_Interp_1D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic0) % var % array1 ,     
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure,
+     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim,procname)
+       else
+       Call Agrif_Interp_1D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic0) % var % array1 ,     
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure,
+     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim)
+       endif
+       endif
+C
+      if ( dimensio .EQ. 2 ) then
+      if (present(procname)) then
+       Call Agrif_Interp_2D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic0) % var % array2 ,     
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure,
+     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim,procname)
+      else
+       Call Agrif_Interp_2D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic0) % var % array2 ,     
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure,
+     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim)
+      endif
+      endif
+C
+      if ( dimensio .EQ. 3 ) then
+      if (present(procname)) then
+       Call Agrif_Interp_3D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic0) % var % array3 ,     
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure,
+     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim,procname)
+      else
+       Call Agrif_Interp_3D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic0) % var % array3 ,     
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure,
+     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim)
+      endif
+      endif
+C
+      if ( dimensio .EQ. 4 ) then
+      if (present(procname)) then
+       Call Agrif_Interp_4D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic0) % var % array4 ,     
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure,
+     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim,procname)
+      else
+       Call Agrif_Interp_4D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic0) % var % array4 ,     
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure,
+     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim)
+      endif
+      endif
+C
+      if ( dimensio .EQ. 5 ) then
+      if (present(procname)) then
+       Call Agrif_Interp_5D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic0) % var % array5 ,     
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure,
+     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim,procname)
+      else
+       Call Agrif_Interp_5D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic0) % var % array5 ,     
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure,
+     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim)
+       endif
+       endif
+C
+      if ( dimensio .EQ. 6 ) then
+      if (present(procname)) then
+       Call Agrif_Interp_6D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic0) % var % array6 ,     
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure,
+     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim,procname)
+      else
+       Call Agrif_Interp_6D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic0) % var % array6 ,     
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure,
+     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim)
+      endif
+      endif
+C
+      Return
+      End Subroutine Agrif_Interp_var0d
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Interp_var1d
+C     **************************************************************************
+C 
+      Subroutine Agrif_Interp_var1d(q,tabvarsindic,procname)
+
+      REAL, DIMENSION(:) :: q
+      INTEGER :: tabvarsindic ! indice of the variable in tabvars
+      External :: procname
+      Optional ::  procname
+C
+      if (Agrif_Root()) Return
+C      
+      if (present(procname)) then
+      Call Agrif_Interp_1D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),q,
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure,
+     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim,procname)
+      else
+      Call Agrif_Interp_1D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),q,
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure,
+     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim)
+      endif
+      Return
+      End Subroutine Agrif_Interp_var1d
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Interp_var2d
+C     **************************************************************************
+C 
+      Subroutine Agrif_Interp_var2d(q,tabvarsindic,procname)
+
+      REAL,  DIMENSION(:,:) :: q
+      INTEGER :: tabvarsindic ! indice of the variable in tabvars
+      External :: procname
+      Optional ::  procname
+
+C
+       if (Agrif_Root()) Return
+C
+       if (present(procname)) then
+       Call Agrif_Interp_2D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),q,
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure,
+     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim,procname)
+       else
+       Call Agrif_Interp_2D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),q,
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure,
+     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim)
+       endif
+      Return
+      End Subroutine Agrif_Interp_var2d
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Interp_var3d
+C     **************************************************************************
+C 
+      Subroutine Agrif_Interp_var3d(q,tabvarsindic,procname)
+
+      REAL,  DIMENSION(:,:,:) :: q
+      INTEGER :: tabvarsindic ! indice of the variable in tabvars
+      External :: procname
+      Optional ::  procname
+
+C
+      if (Agrif_Root()) Return
+C
+      if (present(procname)) then
+      Call Agrif_Interp_3D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),q,
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure,
+     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim,procname)
+      else
+      Call Agrif_Interp_3D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),q,
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure,
+     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim)
+      endif
+      Return
+      End Subroutine Agrif_Interp_var3d
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Interp_var4d
+C     **************************************************************************
+C 
+      Subroutine Agrif_Interp_var4d(q,tabvarsindic,procname)
+
+      REAL,  DIMENSION(:,:,:,:) :: q
+      INTEGER :: tabvarsindic ! indice of the variable in tabvars
+      External :: procname
+      Optional ::  procname
+
+C
+      if (Agrif_Root()) Return
+C
+      if (present(procname)) then
+      Call Agrif_Interp_4D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),q,
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure,
+     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim,procname)
+      else
+      Call Agrif_Interp_4D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),q,
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure,
+     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim)
+      endif
+      Return
+      End Subroutine Agrif_Interp_var4d     
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Interp_var5d
+C     **************************************************************************
+C 
+      Subroutine Agrif_Interp_var5d(q,tabvarsindic,procname)
+
+      REAL,  DIMENSION(:,:,:,:,:) :: q
+      INTEGER :: tabvarsindic ! indice of the variable in tabvars
+      External :: procname
+      Optional ::  procname
+
+C
+      if (Agrif_Root()) Return
+C
+      if (present(procname)) then
+      Call Agrif_Interp_5D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),q,
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure,
+     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim,procname)
+      else
+      Call Agrif_Interp_5D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),q,
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure,
+     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim)
+      endif
+      Return
+      End Subroutine Agrif_Interp_var5d       
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_update_var0d
+C     **************************************************************************
+C 
+      Subroutine Agrif_update_var0d(tabvarsindic0,tabvarsindic,
+     &                              locupdate,locupdate1,
+     &                  locupdate2,procname)
+
+      INTEGER :: tabvarsindic ! indice of the variable in tabvars
+      INTEGER :: tabvarsindic0 ! indice of the variable in tabvars
+      External :: procname
+      Optional ::  procname      
+      INTEGER :: dimensio
+      INTEGER, DIMENSION(2), OPTIONAL :: locupdate
+      INTEGER, DIMENSION(2), OPTIONAL :: locupdate1
+      INTEGER, DIMENSION(2), OPTIONAL :: locupdate2            
+C
+      dimensio = Agrif_Mygrid % tabvars(tabvarsindic) % var % nbdim 
+C      
+      if (Agrif_Root()) Return
+      
+C     
+      IF (present(locupdate)) THEN
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(1:dimensio)
+     &      = locupdate(1)
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(1:dimensio) 
+     &      = locupdate(2)
+      ELSE
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(1:dimensio) 
+     &      = -99
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(1:dimensio) 
+     &      = -99
+      ENDIF
+      
+      IF (present(locupdate1)) THEN
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(1) 
+     &      = locupdate1(1)
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(1) 
+     &      = locupdate1(2)
+      ENDIF  
+      
+      IF (present(locupdate2)) THEN
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(2) 
+     &      = locupdate2(1)
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(2) 
+     &      = locupdate2(2)
+      ENDIF             
+ 
+      if ( dimensio .EQ. 1 ) then
+      IF (present(procname)) THEN
+      Call Agrif_Update_1D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % typeupdate,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic0) % var % array1 ,     
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % updateinf,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % updatesup,
+     & procname)
+      ELSE
+      Call Agrif_Update_1D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % typeupdate,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic0) % var % array1 ,     
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % updateinf,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % updatesup)      
+      ENDIF
+      endif
+      if ( dimensio .EQ. 2 ) then
+      IF (present(procname)) THEN
+      Call Agrif_Update_2D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % typeupdate,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic0) % var % array2 ,     
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % updateinf,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % updatesup,
+     & procname)
+      ELSE
+      Call Agrif_Update_2D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % typeupdate,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic0) % var % array2 ,     
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % updateinf,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % updatesup)      
+      ENDIF
+      endif
+      if ( dimensio .EQ. 3 ) then
+      IF (present(procname)) THEN
+      Call Agrif_Update_3D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % typeupdate,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic0) % var % array3 ,     
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % updateinf,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % updatesup,
+     & procname)
+      ELSE
+      Call Agrif_Update_3D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % typeupdate,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic0) % var % array3 ,     
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % updateinf,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % updatesup)      
+      ENDIF
+      endif
+      if ( dimensio .EQ. 4 ) then
+      IF (present(procname)) THEN
+      Call Agrif_Update_4D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % typeupdate,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic0) % var % array4 ,     
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % updateinf,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % updatesup,
+     & procname)
+      ELSE
+      Call Agrif_Update_4D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % typeupdate,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic0) % var % array4 ,     
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % updateinf,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % updatesup)      
+      ENDIF
+      endif
+      if ( dimensio .EQ. 5 ) then
+      IF (present(procname)) THEN
+      Call Agrif_Update_5D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % typeupdate,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic0) % var % array5 ,     
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % updateinf,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % updatesup,
+     & procname)
+      ELSE
+      Call Agrif_Update_5D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % typeupdate,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic0) % var % array5 ,     
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % updateinf,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % updatesup)      
+      ENDIF
+      endif
+
+      Return
+      End Subroutine Agrif_update_var0d
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_update_var1d
+C     **************************************************************************
+C 
+      Subroutine Agrif_update_var1d(q,tabvarsindic,locupdate,
+     &  locupdate1,locupdate2,procname)
+
+      REAL,  DIMENSION(:) :: q
+      INTEGER :: tabvarsindic ! indice of the variable in tabvars
+      External :: procname
+      Optional ::  procname      
+      INTEGER, DIMENSION(2), OPTIONAL :: locupdate
+      INTEGER, DIMENSION(2), OPTIONAL :: locupdate1
+      INTEGER, DIMENSION(2), OPTIONAL :: locupdate2        
+C      
+      if (Agrif_Root()) Return
+C     
+      IF (present(locupdate)) THEN
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(1:1) 
+     &      = locupdate(1)
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(1:1) 
+     &      = locupdate(2)
+      ELSE
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(1:1) 
+     &      = -99
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(1:1) 
+     &      = -99
+      ENDIF
+      
+      IF (present(locupdate1)) THEN
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(1) 
+     &      = locupdate1(1)
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(1) 
+     &      = locupdate1(2)
+      ENDIF  
+      
+      IF (present(locupdate2)) THEN
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(2) 
+     &      = locupdate2(1)
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(2) 
+     &      = locupdate2(2)
+      ENDIF       
+ 
+      IF (present(procname)) THEN
+      Call Agrif_Update_1D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % typeupdate,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),q,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % updateinf,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % updatesup,
+     & procname)
+      ELSE
+      Call Agrif_Update_1D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % typeupdate,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),q,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % updateinf,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % updatesup)      
+      ENDIF
+
+      Return
+      End Subroutine Agrif_update_var1d
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_update_var2d
+C     **************************************************************************
+C 
+      Subroutine Agrif_update_var2d(q,tabvarsindic,locupdate,
+     &  locupdate1,locupdate2,procname)
+
+      REAL,  DIMENSION(:,:) :: q
+      External :: procname
+      Optional ::  procname
+      INTEGER, DIMENSION(2), OPTIONAL :: locupdate 
+      INTEGER, DIMENSION(2), OPTIONAL :: locupdate1
+      INTEGER, DIMENSION(2), OPTIONAL :: locupdate2        
+      INTEGER :: tabvarsindic ! indice of the variable in tabvars
+C      
+      IF (Agrif_Root()) RETURN
+      
+C 
+      IF (present(locupdate)) THEN
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(1:2) 
+     &      = locupdate(1)
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(1:2) 
+     &      = locupdate(2)
+      ELSE
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(1:2) 
+     &      = -99
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(1:2) 
+     &      = -99
+      ENDIF
+      
+      IF (present(locupdate1)) THEN
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(1) 
+     &      = locupdate1(1)
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(1) 
+     &      = locupdate1(2)
+      ENDIF  
+      
+      IF (present(locupdate2)) THEN
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(2) 
+     &      = locupdate2(1)
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(2) 
+     &      = locupdate2(2)
+      ENDIF
+ 
+      IF (present(procname)) THEN
+      Call Agrif_Update_2D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % typeupdate,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),q,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % updateinf,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % updatesup,
+     & procname)
+      ELSE
+      Call Agrif_Update_2D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % typeupdate,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),q,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % updateinf,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % updatesup)      
+      ENDIF
+
+      Return
+      End Subroutine Agrif_update_var2d
+C 
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_update_var3d
+C     **************************************************************************
+C 
+      Subroutine Agrif_update_var3d(q,tabvarsindic,locupdate,
+     &  locupdate1,locupdate2,procname)
+
+      REAL,  DIMENSION(:,:,:) :: q
+      External :: procname
+      Optional ::  procname
+      INTEGER, DIMENSION(2), OPTIONAL :: locupdate
+      INTEGER, DIMENSION(2), OPTIONAL :: locupdate1
+      INTEGER, DIMENSION(2), OPTIONAL :: locupdate2        
+      INTEGER :: tabvarsindic ! indice of the variable in tabvars
+C      
+      IF (Agrif_Root()) RETURN 
+C      
+
+      IF (present(locupdate)) THEN
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(1:3) 
+     &      = locupdate(1)
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(1:3) 
+     &      = locupdate(2)
+      ELSE
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(1:3) 
+     &      = -99
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(1:3) 
+     &      = -99
+      ENDIF      
+      
+      IF (present(locupdate1)) THEN
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(1) 
+     &      = locupdate1(1)
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(1) 
+     &      = locupdate1(2)
+      ENDIF  
+      
+      IF (present(locupdate2)) THEN
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(2) 
+     &      = locupdate2(1)
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(2) 
+     &      = locupdate2(2)
+      ENDIF
+
+      IF (present(procname)) THEN
+      Call Agrif_Update_3D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % typeupdate,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),q,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % updateinf,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % updatesup,
+     & procname)
+      ELSE
+      Call Agrif_Update_3D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % typeupdate,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),q,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % updateinf,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % updatesup)      
+      ENDIF
+
+      Return
+      End Subroutine Agrif_update_var3d
+C 
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_update_var4d
+C     **************************************************************************
+C 
+      Subroutine Agrif_update_var4d(q,tabvarsindic,locupdate,
+     &  locupdate1,locupdate2,procname)
+
+      REAL,  DIMENSION(:,:,:,:) :: q
+      External :: procname
+      Optional ::  procname
+      INTEGER, DIMENSION(2), OPTIONAL :: locupdate
+      INTEGER, DIMENSION(2), OPTIONAL :: locupdate1
+      INTEGER, DIMENSION(2), OPTIONAL :: locupdate2        
+      INTEGER :: tabvarsindic ! indice of the variable in tabvars
+C      
+      IF (Agrif_Root()) RETURN
+C      
+      IF (present(locupdate)) THEN
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(1:4) 
+     &      = locupdate(1)
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(1:4) 
+     &      = locupdate(2)
+      ELSE
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(1:4) 
+     &      = -99
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(1:4) 
+     &      = -99
+      ENDIF
+      
+      IF (present(locupdate1)) THEN
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(1) 
+     &      = locupdate1(1)
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(1) 
+     &      = locupdate1(2)
+      ENDIF  
+      
+      IF (present(locupdate2)) THEN
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(2) 
+     &      = locupdate2(1)
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(2) 
+     &      = locupdate2(2)
+      ENDIF
+
+      IF (present(procname)) THEN
+      Call Agrif_Update_4D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % typeupdate,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),q,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % updateinf,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % updatesup,
+     & procname)
+      ELSE
+      Call Agrif_Update_4D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % typeupdate,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),q,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % updateinf,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % updatesup)      
+      ENDIF
+
+      Return
+      End Subroutine Agrif_update_var4d  
+C 
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_update_var5d
+C     **************************************************************************
+C 
+      Subroutine Agrif_update_var5d(q,tabvarsindic,locupdate,
+     &  locupdate1,locupdate2,procname)
+
+      REAL,  DIMENSION(:,:,:,:,:) :: q
+      External :: procname
+      Optional ::  procname
+      INTEGER, DIMENSION(2), OPTIONAL :: locupdate
+      INTEGER, DIMENSION(2), OPTIONAL :: locupdate1
+      INTEGER, DIMENSION(2), OPTIONAL :: locupdate2        
+      INTEGER :: tabvarsindic ! indice of the variable in tabvars
+C
+      IF (Agrif_Root()) RETURN
+C      
+      IF (present(locupdate)) THEN
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(1:5) 
+     &      = locupdate(1)
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(1:5) 
+     &      = locupdate(2)
+      ELSE
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(1:5) 
+     &      = -99
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(1:5) 
+     &      = -99
+      ENDIF
+      
+      IF (present(locupdate1)) THEN
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(1) 
+     &      = locupdate1(1)
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(1) 
+     &      = locupdate1(2)
+      ENDIF  
+      
+      IF (present(locupdate2)) THEN
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(2) 
+     &      = locupdate2(1)
+      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(2) 
+     &      = locupdate2(2)
+      ENDIF
+
+      IF (present(procname)) THEN
+      Call Agrif_Update_5D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % typeupdate,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),q,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % updateinf,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % updatesup,
+     & procname)
+      ELSE
+      Call Agrif_Update_5D(
+     & Agrif_Mygrid % tabvars(tabvarsindic) % var % typeupdate,
+     & Agrif_Curgrid % parent % tabvars(tabvarsindic),
+     & Agrif_Curgrid % tabvars(tabvarsindic),q,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % updateinf,
+     & Agrif_Curgrid % tabvars(tabvarsindic) % var % updatesup)      
+      ENDIF
+
+      Return
+      End Subroutine Agrif_update_var5d  
+          
+      Subroutine Agrif_Declare_Flux(fluxname,profilename) 
+      character*(*) :: fluxname, profilename
+      Type(Agrif_Flux), pointer :: newflux
+      Type(Agrif_Profile), pointer  :: parcours
+      logical :: foundprofile
+      integer :: i,j,n
+            
+      foundprofile = .FALSE.
+      parcours => Agrif_Myprofiles
+      
+      Do While (Associated(parcours))
+         IF (parcours % profilename == profilename) THEN
+           foundprofile = .TRUE.
+           EXIT
+         ENDIF
+         parcours => parcours%nextprofile
+      End Do      
+      
+      IF (.NOT.foundprofile) THEN
+      write(*,*) 'The profile '''
+     &           //TRIM(profilename)//''' has not been declared'  
+      stop    
+      ENDIF
+      
+      Allocate(Newflux)
+      
+      Newflux % fluxname = fluxname
+      
+      Newflux % profile => parcours
+      
+      Newflux % nextflux => Agrif_Curgrid % fluxes
+      
+      Agrif_Curgrid % fluxes => Newflux
+      
+      End Subroutine Agrif_Declare_Flux  
+       
+      Subroutine Agrif_Save_Flux(fluxname, fluxtab)
+      character*(*) :: fluxname
+      REAL, DIMENSION(:,:) :: fluxtab
+      
+      
+      Type(Agrif_Flux), pointer :: Flux
+      
+      Type(Agrif_pgrid), pointer :: parcours_child
+      
+      Type(Agrif_grid), Pointer :: currentgrid,oldcurgrid
+      
+      IF (.Not.Agrif_Root()) THEN
+      Flux => Agrif_Search_Flux(fluxname)
+
+      IF (.NOT.Flux%fluxallocated) THEN
+        CALL Agrif_AllocateFlux(Flux,fluxtab)
+      ENDIF
+      
+      Call Agrif_Save_Fluxtab(Flux,fluxtab)
+      
+      ENDIF
+      
+      oldcurgrid=> Agrif_Curgrid
+      
+      parcours_child => Agrif_Curgrid%child_grids
+      
+      Do While (Associated(parcours_child))
+        currentgrid => parcours_child%gr
+        Agrif_Curgrid => parcours_child%gr
+        Flux => Agrif_Search_Flux(fluxname)
+        IF (.NOT.Flux%fluxallocated) THEN
+          CALL Agrif_AllocateFlux(Flux,fluxtab)
+        ENDIF        
+        Call Agrif_Save_Fluxtab_child(Flux,fluxtab)
+        parcours_child=> parcours_child%next
+      End Do
+      
+      Agrif_Curgrid=>oldcurgrid
+      
+      End Subroutine Agrif_Save_Flux
+
+      Subroutine Agrif_Cancel_Flux(fluxname)
+      character*(*) :: fluxname
+      
+      Type(Agrif_Flux), pointer :: Flux
+      
+      Flux => Agrif_Search_Flux(fluxname)
+
+      IF (Flux%FluxAllocated) Call Agrif_Cancel_Fluxarray(Flux)
+      
+      End Subroutine Agrif_Cancel_Flux
+ 
+      Subroutine Agrif_Flux_Correction(fluxname, procname)
+      character*(*) :: fluxname
+      external :: procname
+      
+      Type(Agrif_Flux), pointer :: Flux
+      
+      Flux => Agrif_Search_Flux(fluxname)
+      
+      Call Agrif_FluxCorrect(Flux, procname)
+
+      
+      End Subroutine Agrif_Flux_Correction
+
+      Subroutine Agrif_Declare_Variable(posvar,firstpoint,
+     &    raf,lb,ub,varid)
+      character*(80) :: variablename
+      Type(Agrif_List_Variables), Pointer :: newvariable,newvariablep
+      INTEGER, DIMENSION(:) :: posvar
+      INTEGER, DIMENSION(:) :: lb,ub
+      INTEGER, DIMENSION(:) :: firstpoint
+      CHARACTER(*) ,DIMENSION(:) :: raf        
+      TYPE(Agrif_Pvariable), Pointer :: parent_var,root_var
+      INTEGER :: dimensio
+      INTEGER :: varid
+            
+      if (agrif_root()) return
+
+      dimensio = SIZE(posvar)
+C
+C    
+      Allocate(newvariable)
+      Allocate(newvariable%pvar)
+      Allocate(newvariable%pvar%var)
+      Allocate(newvariable%pvar%var%posvar(dimensio))
+      Allocate(newvariable%pvar%var%interptab(dimensio))
+      newvariable%pvar%var%variablename = variablename
+      newvariable%pvar%var%interptab = raf
+      newvariable%pvar%var%nbdim = dimensio
+      newvariable%pvar%var%posvar = posvar
+      newvariable%pvar%var%point(1:dimensio) = firstpoint
+      newvariable%pvar%var%lb(1:dimensio) = lb(1:dimensio)
+      newvariable%pvar%var%ub(1:dimensio) = ub(1:dimensio)
+      
+      newvariable % nextvariable => Agrif_Curgrid%variables
+      
+      Agrif_Curgrid%variables => newvariable
+      Agrif_Curgrid%Nbvariables = Agrif_Curgrid%Nbvariables + 1
+      
+      varid = -Agrif_Curgrid%Nbvariables
+      
+       if (agrif_curgrid%parent%nbvariables < agrif_curgrid%nbvariables)
+     &       then
+      Allocate(newvariablep)
+      Allocate(newvariablep%pvar)
+      Allocate(newvariablep%pvar%var)      
+      Allocate(newvariablep%pvar%var%posvar(dimensio))
+      Allocate(newvariablep%pvar%var%interptab(dimensio))
+      newvariablep%pvar%var%variablename = variablename
+      newvariablep%pvar%var%interptab = raf
+      newvariablep%pvar%var%nbdim = dimensio
+      newvariablep%pvar%var%posvar = posvar
+      newvariablep%pvar%var%point(1:dimensio) = firstpoint
+      
+      newvariablep % nextvariable => Agrif_Curgrid%parent%variables
+      
+      Agrif_Curgrid%parent%variables => newvariablep       
+      
+      Agrif_Curgrid%parent%Nbvariables = 
+     &    Agrif_Curgrid%parent%Nbvariables + 1
+      parent_var=>newvariablep%pvar
+      else
+      parent_var=>Agrif_Search_Variable
+     &              (Agrif_Curgrid%parent,Agrif_Curgrid%nbvariables)
+       endif
+       
+       newvariable%pvar%parent_var=>parent_var
+      
+      root_var=>Agrif_Search_Variable
+     &              (Agrif_Mygrid,Agrif_Curgrid%nbvariables)
+     
+      newvariable%pvar%var%root_var=>root_var%var
+      
+           
+      End Subroutine Agrif_Declare_Variable
+
+      FUNCTION Agrif_Search_Variable(grid,varid)
+      integer :: varid
+      Type(Agrif_Pvariable), Pointer :: Agrif_Search_variable
+      Type(Agrif_grid), Pointer :: grid
+      
+      Type(Agrif_List_Variables), pointer :: parcours
+      Logical :: foundvariable
+      integer nb
+      
+      foundvariable = .FALSE.
+      parcours => grid%variables
+      
+      do nb=1,varid-1
+         parcours => parcours%nextvariable
+      End Do
+      
+      Agrif_Search_variable => parcours%pvar
+      
+      
+      End Function Agrif_Search_variable
+                              
+      Subroutine Agrif_Declare_Profile_flux(profilename,posvar,
+     &    firstpoint,raf)
+      character*(*) :: profilename
+      Type(Agrif_Profile), Pointer :: newprofile
+      INTEGER, DIMENSION(:) :: posvar
+      INTEGER, DIMENSION(:) :: firstpoint
+      CHARACTER(*) ,DIMENSION(:) :: raf      
+      INTEGER :: dimensio
+            
+      dimensio = SIZE(posvar)
+C
+C    
+      Allocate(newprofile)
+      Allocate(newprofile%posvar(dimensio))
+      Allocate(newprofile%interptab(dimensio))
+      newprofile%profilename = profilename
+      newprofile%interptab = raf
+      newprofile%nbdim = dimensio
+      newprofile%posvar = posvar
+      newprofile%point(1:dimensio) = firstpoint
+      
+      newprofile % nextprofile => Agrif_myprofiles
+      
+      Agrif_myprofiles => newprofile
+      
+      End Subroutine Agrif_Declare_Profile_flux
+              
+C
+      End module Agrif_bcfunction
Index: /vendors/AGRIF/r_00/AGRIF_FILES/modcluster.F
===================================================================
--- /vendors/AGRIF/r_00/AGRIF_FILES/modcluster.F	(revision 1902)
+++ /vendors/AGRIF/r_00/AGRIF_FILES/modcluster.F	(revision 1902)
@@ -0,0 +1,1445 @@
+!
+! $Id: modcluster.F 1200 2008-09-24 13:05:20Z rblod $
+!
+C     AGRIF (Adaptive Grid Refinement In Fortran)
+C
+C     Copyright (C) 2003 Laurent Debreu (Laurent.Debreu@imag.fr)
+C                        Christophe Vouland (Christophe.Vouland@imag.fr)    
+C
+C     This program is free software; you can redistribute it and/or modify
+C     it under the terms of the GNU General Public License as published by
+C     the Free Software Foundation; either version 2 of the License, or
+C     (at your option) any later version.
+C
+C     This program is distributed in the hope that it will be useful,
+C     but WITHOUT ANY WARRANTY; without even the implied warranty of
+C     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+C     GNU General Public License for more details.
+C
+C     You should have received a copy of the GNU General Public License
+C     along with this program; if not, write to the Free Software
+C     Foundation, Inc., 59 Temple Place- Suite 330, Boston, MA 02111-1307, USA.
+C
+C
+C
+CCC   Module AGRIF_Clustering  
+C
+C
+      Module Agrif_Clustering 
+C
+CCC   Description:
+CCC   Module to create and initialize the grid hierarchy from the 
+CCC   AGRIF_FixedGrids.in file.
+C
+C     Modules used:
+C  
+      Use Agrif_Curgridfunctions 
+      Use Agrif_Init_Vars
+      Use Agrif_Save
+C             
+      IMPLICIT NONE
+C        
+      Contains 
+C     Define procedures contained in this module
+C
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Cluster_All  
+C     **************************************************************************
+C
+      Recursive Subroutine Agrif_Cluster_All(g,coarsegrid)
+C
+CCC   Description:
+CCC   Subroutine for the clustering. A temporary grid hierarchy, pointed by 
+CCC   coarsegrid, is created.
+C
+CC    Method:
+CC            
+C
+C     Declarations:
+C
+C     Pointer arguments    
+      TYPE(AGRIF_grid)     ,pointer   :: g        ! Pointer on the current grid
+      TYPE(AGRIF_rectangle),pointer   :: coarsegrid
+C      
+C     Local pointer         
+      TYPE(AGRIF_lrectangle),pointer  :: parcours 
+      TYPE(AGRIF_grid)      ,pointer  :: newgrid 
+      REAL                            :: g_eps
+      INTEGER                         :: iii
+C      
+      g_eps = huge(1.)
+      do iii = 1 , Agrif_Probdim
+         g_eps = min(g_eps,g%Agrif_d(iii))
+      enddo
+C
+      g_eps = g_eps/100.                  
+C
+C     Necessary condition for clustering 
+      do iii = 1 , Agrif_Probdim
+         if (g%Agrif_d(iii)/Agrif_coeffref(iii).LT.
+     &                   (Agrif_mind(iii)-g_eps)) Return
+      enddo
+C
+      Nullify(coarsegrid%childgrids)
+C
+      Call Agrif_ClusterGridnD(g,coarsegrid) 
+C
+      parcours => coarsegrid % childgrids                   
+C      
+      do while (associated(parcours))
+C      
+C       Newgrid is created. It is a copy of a fine grid created previously by
+C          clustering.      
+        Allocate(newgrid)
+C      
+        Nullify(newgrid%child_grids)
+C
+        do iii = 1 , Agrif_Probdim
+           newgrid % nb(iii) = (parcours % r % imax(iii) - 
+     &                          parcours % r % imin(iii)) *
+     &                          Agrif_Coeffref(iii)
+C        
+           newgrid % Agrif_x(iii) = g%Agrif_x(iii) + 
+     &                         (parcours %r % imin(iii) -1) 
+     &                         *g%Agrif_d(iii)
+C 
+           newgrid % Agrif_d(iii) = g%Agrif_d(iii) / Agrif_Coeffref(iii)
+C
+        enddo
+C
+        if ( Agrif_Probdim .EQ. 1 ) then
+           allocate(newgrid%tabpoint1D(newgrid%nb(1)+1))
+           newgrid%tabpoint1D = 0
+        endif
+C
+        if ( Agrif_Probdim .EQ. 2 ) then
+           allocate(newgrid%tabpoint2D(newgrid%nb(1)+1,
+     &                                 newgrid%nb(2)+1))
+           newgrid%tabpoint2D = 0      
+        endif
+C
+        if ( Agrif_Probdim .EQ. 3 ) then
+           allocate(newgrid%tabpoint3D(newgrid%nb(1)+1,
+     &                                 newgrid%nb(2)+1,
+     &                                 newgrid%nb(3)+1))
+           newgrid%tabpoint3D = 0
+        endif
+C       Points detection on newgrid
+        Call Agrif_TabpointsnD(Agrif_mygrid,newgrid) 
+C
+C       Recursive call to Agrif_Cluster_All            
+        Call Agrif_Cluster_All (newgrid, parcours % r)     
+C
+        parcours => parcours % next 
+C      
+        if ( Agrif_Probdim .EQ. 1 ) Deallocate(newgrid%tabpoint1D)
+        if ( Agrif_Probdim .EQ. 2 ) Deallocate(newgrid%tabpoint2D)
+        if ( Agrif_Probdim .EQ. 3 ) Deallocate(newgrid%tabpoint3D)
+C
+        Deallocate(newgrid)   
+C
+      enddo
+C
+C      
+      End Subroutine Agrif_Cluster_All
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_TabpointsnD
+C     **************************************************************************
+C
+      Recursive Subroutine Agrif_TabpointsnD(g,newgrid)
+C
+CCC   Description:
+CCC   Copy on newgrid of points detected on the grid hierarchy pointed by g.   
+C
+CC    Method:
+CC            
+C
+C     Declarations:
+C
+C     Arguments
+      TYPE(Agrif_Grid),pointer   :: g,newgrid
+C
+C     Local variables      
+      TYPE(Agrif_Pgrid),pointer  :: parcours
+C
+      REAL                  :: g_eps,newgrid_eps,eps
+      REAL   , DIMENSION(3) :: newmin,newmax
+      REAL   , DIMENSION(3) :: gmin,gmax
+      REAL   , DIMENSION(3) :: xmin
+      INTEGER, DIMENSION(3) :: igmin,inewmin
+      INTEGER, DIMENSION(3) :: inewmax
+      INTEGER               :: iii
+      INTEGER               :: i,j,k
+      INTEGER               :: i0,j0,k0
+C
+C     
+      parcours => g % child_grids
+C
+      do While(associated(parcours))
+        Call Agrif_TabpointsnD(parcours%gr,newgrid)
+        parcours => parcours % next
+      enddo      
+C
+      g_eps = 10.
+      newgrid_eps = 10.
+C      
+      do iii = 1 , Agrif_probdim
+         g_eps = min( g_eps , g % Agrif_d(iii) )
+         newgrid_eps = min(newgrid_eps,newgrid%Agrif_d(iii))
+      enddo
+C
+      eps = min(g_eps,newgrid_eps)/100.                  
+C                   
+      do iii = 1 , Agrif_probdim
+         if (newgrid%Agrif_d(iii) .LT. (g%Agrif_d(iii)-eps)) Return
+C                   
+         gmin(iii) = g%Agrif_x(iii)
+         gmax(iii) = g%Agrif_x(iii) + g%nb(iii) * g%Agrif_d(iii)
+C 
+         newmin(iii) = newgrid%Agrif_x(iii)
+         newmax(iii) = newgrid%Agrif_x(iii) + newgrid%nb(iii) *
+     &                 newgrid%Agrif_d(iii)
+C      
+         if (gmax(iii) .LT. newmin(iii)) Return
+C
+         if (gmin(iii) .GT. newmax(iii)) Return
+C           
+         inewmin(iii) = 1 - floor(-(max(gmin(iii),newmin(iii))-
+     &                    newmin(iii))
+     &                   /newgrid%Agrif_d(iii)) 
+C          
+         xmin(iii) = newgrid%Agrif_x(iii) + (inewmin(iii)-1)*
+     &              newgrid%Agrif_d(iii)          
+C        
+         igmin(iii) = 1 + nint((xmin(iii)-gmin(iii))/g%Agrif_d(iii))
+C
+         inewmax(iii) = 1 + int((min(gmax(iii),newmax(iii))-
+     &                  newmin(iii))/newgrid%Agrif_d(iii))
+      enddo
+C                
+      if ( Agrif_probdim .EQ. 1 ) then
+         i0 = igmin(1)
+         do i = inewmin(1),inewmax(1)
+            newgrid%tabpoint1D(i) = max(
+     &                           newgrid%tabpoint1D(i),
+     &                           g%tabpoint1D(i0))
+         enddo
+         i0 = i0 + int(newgrid%Agrif_d(1)/g%Agrif_d(1))
+      endif
+C
+      if ( Agrif_probdim .EQ. 2 ) then
+         i0 = igmin(1)
+         do i = inewmin(1),inewmax(1)
+            j0 = igmin(2)
+            do j = inewmin(2),inewmax(2)
+               newgrid%tabpoint2D(i,j) = max(
+     &                           newgrid%tabpoint2D(i,j),
+     &                           g%tabpoint2D(i0,j0))
+               j0 = j0 + int(newgrid%Agrif_d(2)/g%Agrif_d(2))
+            enddo
+            i0 = i0 + int(newgrid%Agrif_d(1)/g%Agrif_d(1))
+         enddo
+      endif
+C
+      if ( Agrif_probdim .EQ. 3 ) then
+         i0 = igmin(1)
+         do i = inewmin(1),inewmax(1)
+            j0 = igmin(2)
+            do j = inewmin(2),inewmax(2)
+               k0 = igmin(3)
+               do k = inewmin(3),inewmax(3)
+                  newgrid%tabpoint3D(i,j,k) = max(
+     &                           newgrid%tabpoint3D(i,j,k),
+     &                           g%tabpoint3D(i0,j0,k0))
+                  k0 = k0 + int(newgrid%Agrif_d(3)/g%Agrif_d(3))
+               enddo                                        
+               j0 = j0 + int(newgrid%Agrif_d(2)/g%Agrif_d(2))
+            enddo
+            i0 = i0 + int(newgrid%Agrif_d(1)/g%Agrif_d(1))
+         enddo
+      endif
+C
+      Return
+C
+C
+      End Subroutine Agrif_TabpointsnD
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_ClusterGridnD
+C     **************************************************************************
+C      
+      Subroutine Agrif_ClusterGridnD(g,coarsegrid)
+C
+CCC   Description:
+CCC   Clustering on the grid pointed by g.
+C
+CC    Method:
+CC            
+C
+C     Declarations:
+C
+C     Pointer arguments
+      TYPE(AGRIF_grid)     ,pointer  :: g          ! Pointer on the current grid
+      TYPE(AGRIF_rectangle),pointer  :: coarsegrid
+C
+C     Local variables      
+      TYPE(Agrif_rectangle) :: newrect
+      TYPE(Agrif_Variable)  :: newflag
+C
+      INTEGER               :: i,j,k
+      INTEGER ,DIMENSION(3) :: sx
+      INTEGER               :: bufferwidth,flagpoints
+      INTEGER               :: n1,n2,m1,m2,o1,o2
+      INTEGER               :: iii
+C
+C      
+      bufferwidth = int(Agrif_Minwidth/5.)
+C      
+      do iii = 1 , Agrif_probdim
+         sx(iii) = g % nb(iii) + 1
+      enddo
+C                  
+      if ( Agrif_probdim .EQ. 1 ) then
+         allocate(newflag%iarray1(sx(1)))
+         newflag%iarray1 = 0      
+      endif
+      if ( Agrif_probdim .EQ. 2 ) then
+         allocate(newflag%iarray2(sx(1),sx(2)))
+         newflag%iarray2 = 0      
+      endif
+      if ( Agrif_probdim .EQ. 3 ) then
+         allocate(newflag%iarray3(sx(1),sx(2),sx(3)))
+         newflag%iarray3 = 0      
+      endif
+C
+      flagpoints = 0 
+C      
+      if (bufferwidth>0) then 
+C      
+         if ( Agrif_probdim .EQ. 1 ) then
+            do i = bufferwidth,sx(1)-bufferwidth+1      
+               if (g % tabpoint1D(i) .EQ. 1) then
+                  m1 = i - bufferwidth + 1
+                  m2 = i + bufferwidth - 1                  
+                  flagpoints = flagpoints + 1
+                  newflag%iarray1(m1:m2)=1 
+               endif 
+            enddo    
+         endif
+C
+        if ( Agrif_probdim .EQ. 2 ) then
+           do i = bufferwidth,sx(1)-bufferwidth+1      
+               do j = bufferwidth,sx(2)-bufferwidth+1
+                  if (g % tabpoint2D(i,j) .EQ. 1) then
+                     n1 = j - bufferwidth + 1
+                     n2 = j + bufferwidth - 1
+                     m1 = i - bufferwidth + 1
+                     m2 = i + bufferwidth - 1                  
+                     flagpoints = flagpoints + 1
+                     newflag%iarray2(m1:m2,n1:n2)=1 
+                  endif  
+               enddo    
+            enddo
+         endif
+C
+        if ( Agrif_probdim .EQ. 3 ) then
+            do i = bufferwidth,sx(1)-bufferwidth+1      
+               do j = bufferwidth,sx(2)-bufferwidth+1
+                  do k = bufferwidth,sx(3)-bufferwidth+1
+                     if (g % tabpoint3D(i,j,k) .EQ. 1) then
+                        o1 = k - bufferwidth + 1
+                        o2 = k + bufferwidth - 1
+                        n1 = j - bufferwidth + 1
+                        n2 = j + bufferwidth - 1
+                        m1 = i - bufferwidth + 1
+                        m2 = i + bufferwidth - 1                  
+                        flagpoints = flagpoints + 1
+                        newflag%iarray3(m1:m2,n1:n2,o1:o2)=1 
+                     endif 
+                  enddo  
+               enddo    
+            enddo
+        endif
+      else
+          flagpoints = 1       
+C
+          if ( Agrif_probdim .EQ. 1 ) then
+          newflag%iarray1 = g % tabpoint1D
+          endif
+          if ( Agrif_probdim .EQ. 2 ) then
+          newflag%iarray2 = g % tabpoint2D
+          endif
+          if ( Agrif_probdim .EQ. 3 ) then
+          newflag%iarray3 = g % tabpoint3D
+          endif
+      endif
+C       
+      if (flagpoints .EQ. 0) then       
+          if ( Agrif_probdim .EQ. 1 ) deallocate(newflag%iarray1) 
+          if ( Agrif_probdim .EQ. 2 ) deallocate(newflag%iarray2) 
+          if ( Agrif_probdim .EQ. 3 ) deallocate(newflag%iarray3) 
+          Return 
+      endif       
+C      
+      do iii = 1 , Agrif_probdim
+         newrect % imin(iii) = 1
+         newrect % imax(iii) = sx(iii)
+      enddo
+C      
+      Call Agrif_Clusternd(newflag,
+     &                     coarsegrid%childgrids,newrect) 
+C      
+      if ( Agrif_probdim .EQ. 1 ) deallocate(newflag%iarray1)
+      if ( Agrif_probdim .EQ. 2 ) deallocate(newflag%iarray2)
+      if ( Agrif_probdim .EQ. 3 ) deallocate(newflag%iarray3)
+C  
+C    
+      End Subroutine Agrif_ClusterGridnD
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_ClusternD
+C     **************************************************************************
+C
+      Recursive subroutine Agrif_Clusternd(flag,boxlib,oldB) 
+C
+CCC   Description:
+CCC   Clustering on the grid pointed by oldB.
+C
+CC    Method:
+CC            
+C
+C     Declarations:
+C
+C     Arguments  
+      TYPE(Agrif_rectangle) ::  oldB    
+      TYPE(Agrif_Variable)  :: flag
+c      INTEGER,DIMENSION(oldB%imin(1):oldB%imax(1),
+c     &                  oldB%imin(2):oldB%imax(2)) :: flag
+      TYPE(Agrif_lrectangle),pointer :: boxlib      
+C
+C     Local variables      
+      TYPE(Agrif_lrectangle),pointer :: tempbox,parcbox,parcbox2       
+      TYPE(Agrif_rectangle) :: newB,newB2
+      INTEGER :: i,j,k,iii
+      INTEGER,DIMENSION(:),allocatable :: i_sig 
+      INTEGER,DIMENSION(:),allocatable :: j_sig       
+      INTEGER,DIMENSION(:),allocatable :: k_sig       
+      INTEGER,DIMENSION(3) :: ipu,ipl
+      INTEGER,DIMENSION(3) :: istr,islice
+      REAL :: cureff
+      REAL :: neweff
+      INTEGER :: ValMax,ValSum,TailleTab
+      INTEGER :: nbpoints,nbpointsflag  
+      LOGICAL :: test
+C          
+      allocate(i_sig(oldB%imin(1):oldB%imax(1)))
+      if ( Agrif_probdim .GE. 2 ) 
+     & allocate(j_sig(oldB%imin(2):oldB%imax(2)))
+      if ( Agrif_probdim .EQ. 3 ) 
+     & allocate(k_sig(oldB%imin(3):oldB%imax(3)))
+C
+      test = .FALSE.
+      do iii = 1 , Agrif_probdim
+         test = test .OR. ( (oldB%imax(iii)-oldB%imin(iii)+1) 
+     &                    .LT. Agrif_Minwidth)
+      enddo
+      if ( test ) Return
+C     
+      if ( Agrif_probdim .EQ. 1 ) i_sig = flag%iarray1
+      if ( Agrif_probdim .EQ. 2 ) then
+         do i = oldB%imin(1),oldB%imax(1)
+           i_sig(i) = SUM(flag%iarray2(i,
+     &                            oldB%imin(2):oldB%imax(2)))
+         enddo
+         do j = oldB%imin(2),oldB%imax(2)
+           j_sig(j) = SUM(flag%iarray2(
+     &                            oldB%imin(1):oldB%imax(1),j))
+         enddo      
+      endif
+      if ( Agrif_probdim .EQ. 3 ) then
+         do i = oldB%imin(1),oldB%imax(1)
+            i_sig(i) = SUM(flag%iarray3(i,
+     &                            oldB%imin(2):oldB%imax(2),
+     &                            oldB%imin(3):oldB%imax(3)))
+         enddo
+         do j = oldB%imin(2),oldB%imax(2)
+            j_sig(j) = SUM(flag%iarray3(
+     &                          oldB%imin(1):oldB%imax(1),j,
+     &                          oldB%imin(3):oldB%imax(3)))
+         enddo
+         do k = oldB%imin(3),oldB%imax(3)
+            k_sig(k) = SUM(flag%iarray3(
+     &                          oldB%imin(1):oldB%imax(1),
+     &                          oldB%imin(2):oldB%imax(2),k))
+         enddo      
+      endif
+C                    
+      do iii = 1 , Agrif_probdim
+         ipl(iii) = oldB%imin(iii)
+         ipu(iii) = oldB%imax(iii)
+      enddo
+C           
+      Call Agrif_Clusterprune(i_sig,ipl(1),ipu(1)) 
+      if ( Agrif_probdim .GE. 2 ) 
+     &   Call Agrif_Clusterprune(j_sig,ipl(2),ipu(2))      
+      if ( Agrif_probdim .EQ. 3 ) 
+     &   Call Agrif_Clusterprune(k_sig,ipl(3),ipu(3))      
+C     
+      test = .TRUE.
+      do iii = 1 , Agrif_probdim
+         test = test .AND. (ipl(iii).EQ.oldB%imin(iii))
+         test = test .AND. (ipu(iii).EQ.oldB%imax(iii))
+      enddo
+      
+      if (.NOT. test) then 
+          do iii = 1 , Agrif_probdim
+             newB%imin(iii) = ipl(iii)
+             newB%imax(iii) = ipu(iii)
+          enddo
+C        
+          if ( Agrif_probdim .EQ. 1 ) 
+     &       nbpoints = SUM(flag%iarray1(newB%imin(1):newB%imax(1)))   
+          if ( Agrif_probdim .EQ. 2 ) 
+     &       nbpoints = SUM(flag%iarray2(newB%imin(1):newB%imax(1),
+     &                           newB%imin(2):newB%imax(2)))   
+          if ( Agrif_probdim .EQ. 3 ) 
+     &       nbpoints = SUM(flag%iarray3(newB%imin(1):newB%imax(1),
+     &                           newB%imin(2):newB%imax(2),   
+     &                           newB%imin(3):newB%imax(3)))
+C   
+          if ( Agrif_probdim .EQ. 1 ) 
+     &       TailleTab = newB%imax(1)-newB%imin(1)+1
+          if ( Agrif_probdim .EQ. 2 ) 
+     &       TailleTab = (newB%imax(1)-newB%imin(1)+1)*
+     &                   (newB%imax(2)-newB%imin(2)+1)
+          if ( Agrif_probdim .EQ. 3 ) 
+     &       TailleTab = (newB%imax(1)-newB%imin(1)+1)*
+     &                   (newB%imax(2)-newB%imin(2)+1)*
+     &                   (newB%imax(3)-newB%imin(3)+1)
+C
+          neweff = REAL(nbpoints)/TailleTab
+C     
+          if (nbpoints.GT.0) then
+C        
+              if ((neweff .GT .Agrif_efficiency)) then
+                  Call Agrif_Add_Rectangle(newB,boxlib)
+                  Return
+              else
+C            
+                  tempbox => boxlib
+                  newB2 = newB
+                  Call Agrif_Clusternd(flag,
+     &                      boxlib,newB)
+C     
+C                 Compute new efficiency
+C
+                  cureff = neweff
+                  parcbox2 => boxlib
+                  nbpoints = 0
+                  nbpointsflag = 0
+C
+                  do While (associated(parcbox2))
+                    if (associated(parcbox2,tempbox)) Exit
+                    newB = parcbox2%r
+C
+                    if ( Agrif_probdim .EQ. 1 ) Valsum = 
+     &                                 SUM(flag%iarray1(
+     &                                 newB%imin(1):newB%imax(1)))
+                    if ( Agrif_probdim .EQ. 2 ) Valsum = 
+     &                                 SUM(flag%iarray2(
+     &                                 newB%imin(1):newB%imax(1),
+     &                                 newB%imin(2):newB%imax(2)))
+                    if ( Agrif_probdim .EQ. 3 ) Valsum = 
+     &                                 SUM(flag%iarray3(
+     &                                 newB%imin(1):newB%imax(1),
+     &                                 newB%imin(2):newB%imax(2),
+     &                                 newB%imin(3):newB%imax(3)))
+C
+                    nbpointsflag = nbpointsflag + ValSum
+                    if ( Agrif_probdim .EQ. 1 ) 
+     &                 TailleTab = newB%imax(1)-newB%imin(1)+1
+                    if ( Agrif_probdim .EQ. 2 ) 
+     &                 TailleTab = (newB%imax(1)-newB%imin(1)+1)*
+     &                             (newB%imax(2)-newB%imin(2)+1)
+                    if ( Agrif_probdim .EQ. 3 ) 
+     &                 TailleTab = (newB%imax(1)-newB%imin(1)+1)*
+     &                             (newB%imax(2)-newB%imin(2)+1)*
+     &                             (newB%imax(3)-newB%imin(3)+1)
+                    nbpoints = nbpoints + TailleTab
+                    parcbox2 => parcbox2%next  
+                  enddo  
+C coefficient 1.05 avant 1.15 possibilité de laisser choix à l utilisateur
+                  if  (REAL(nbpointsflag)/REAL(nbpoints)
+     &                 .LT.(1.0001*cureff)) then
+                      parcbox2 => boxlib            
+                      do While (associated(parcbox2))
+                        if (associated(parcbox2,tempbox)) Exit
+                        deallocate(parcbox2%r)
+                        parcbox2 => parcbox2%next             
+                      enddo      
+                      boxlib => tempbox
+                      Call Agrif_Add_Rectangle(newB2,boxlib)
+                      Return
+                  endif
+              endif         
+          endif
+          Return
+      endif 
+C       
+      do iii = 1 , Agrif_Probdim
+         istr(iii) = oldB%imax(iii)
+         islice(iii) = oldB%imin(iii)
+      enddo     
+C      
+      Call Agrif_Clusterslice(i_sig,islice(1),istr(1)) 
+      if ( Agrif_probdim .GE. 2 ) 
+     & Call Agrif_Clusterslice(j_sig,islice(2),istr(2)) 
+      if ( Agrif_probdim .EQ. 3 ) 
+     & Call Agrif_Clusterslice(k_sig,islice(3),istr(3)) 
+C      
+      ValSum = 0
+      do iii = 1 , Agrif_Probdim
+         Valsum = valSum + islice(iii)
+      enddo
+C      
+      if ( Valsum .EQ. -Agrif_Probdim ) then 
+          Call Agrif_Add_Rectangle(oldB,boxlib) 
+          Return 
+      endif 
+C       
+      nullify(tempbox)
+      tempbox => boxlib
+      if ( Agrif_probdim .EQ. 1 ) 
+     &      cureff  = oldB%imax(1)-oldB%imin(1)+1
+      if ( Agrif_probdim .EQ. 2 ) 
+     &      cureff  = (oldB%imax(1)-oldB%imin(1)+1)*
+     &                (oldB%imax(2)-oldB%imin(2)+1)
+      if ( Agrif_probdim .EQ. 3 ) 
+     &       cureff = (oldB%imax(1)-oldB%imin(1)+1)*
+     &                (oldB%imax(2)-oldB%imin(2)+1)*
+     &                (oldB%imax(3)-oldB%imin(3)+1)
+      Nullify(parcbox)
+C 
+      do iii = 1 , Agrif_Probdim
+          newB%imax(iii) = oldB%imax(iii)            
+          newB%imin(iii) = oldB%imin(iii)
+      enddo     
+C
+      ValMax = 0
+      do iii = 1 , Agrif_Probdim
+         ValMax = Max(ValMax,istr(iii))
+      enddo
+C
+      if (istr(1) .EQ. ValMax ) then
+          newB%imax(1) = islice(1)
+          Call Agrif_Add_Rectangle(newB,parcbox)                   
+          newB%imin(1) = islice(1)+1
+          newB%imax(1) = oldB%imax(1)
+          Call Agrif_Add_Rectangle(newB,parcbox)
+      elseif ( Agrif_probdim .GE. 2 ) then
+         if (istr(2) .EQ. ValMax ) then
+            newB%imax(2) = islice(2)
+            Call Agrif_Add_Rectangle(newB,parcbox)
+            newB%imin(2) = islice(2)+1
+            newB%imax(2) = oldB%imax(2)
+            Call Agrif_Add_Rectangle(newB,parcbox)
+         elseif ( Agrif_probdim .EQ. 3 ) then
+            newB%imax(3) = islice(3)
+            Call Agrif_Add_Rectangle(newB,parcbox)
+            newB%imin(3) = islice(3)+1
+            newB%imax(3) = oldB%imax(3)
+            Call Agrif_Add_Rectangle(newB,parcbox)
+         endif
+      endif
+C      
+      do While (associated(parcbox))
+        newB = parcbox%r            
+C
+        if ( Agrif_probdim .EQ. 1 ) nbpoints = 
+     &                                 SUM(flag%iarray1(
+     &                                 newB%imin(1):newB%imax(1)))
+        if ( Agrif_probdim .EQ. 2 ) nbpoints = 
+     &                                 SUM(flag%iarray2(
+     &                                 newB%imin(1):newB%imax(1),
+     &                                 newB%imin(2):newB%imax(2)))
+        if ( Agrif_probdim .EQ. 3 ) nbpoints = 
+     &                                 SUM(flag%iarray3(
+     &                                 newB%imin(1):newB%imax(1),
+     &                                 newB%imin(2):newB%imax(2),
+     &                                 newB%imin(3):newB%imax(3)))
+C      
+       if ( Agrif_probdim .EQ. 1 ) 
+     &                 TailleTab = newB%imax(1)-newB%imin(1)+1
+       if ( Agrif_probdim .EQ. 2 ) 
+     &                 TailleTab = (newB%imax(1)-newB%imin(1)+1)*
+     &                             (newB%imax(2)-newB%imin(2)+1)
+       if ( Agrif_probdim .EQ. 3 ) 
+     &                 TailleTab = (newB%imax(1)-newB%imin(1)+1)*
+     &                             (newB%imax(2)-newB%imin(2)+1)*
+     &                             (newB%imax(3)-newB%imin(3)+1)
+
+        neweff = REAL(nbpoints) / TailleTab
+C     
+        if (nbpoints .GT. 0) then
+C      
+            if ((neweff .GT .Agrif_efficiency)) then
+                Call Agrif_Add_Rectangle(newB,boxlib)
+            else
+                tempbox => boxlib
+                newB2 = newB
+                Call Agrif_Clusternd(flag,
+     &                      boxlib,newB)
+C
+C               Compute new efficiency
+C
+                cureff = neweff
+                parcbox2 => boxlib
+                nbpoints = 0
+                nbpointsflag = 0
+C
+                do While (associated(parcbox2))
+                  if (associated(parcbox2,tempbox)) Exit
+                  newB = parcbox2%r
+C
+                  if ( Agrif_probdim .EQ. 1 ) ValSum = 
+     &                                 SUM(flag%iarray1(
+     &                                 newB%imin(1):newB%imax(1)))
+                  if ( Agrif_probdim .EQ. 2 ) ValSum = 
+     &                                 SUM(flag%iarray2(
+     &                                 newB%imin(1):newB%imax(1),
+     &                                 newB%imin(2):newB%imax(2)))
+                  if ( Agrif_probdim .EQ. 3 ) ValSum = 
+     &                                 SUM(flag%iarray3(
+     &                                 newB%imin(1):newB%imax(1),
+     &                                 newB%imin(2):newB%imax(2),
+     &                                 newB%imin(3):newB%imax(3)))
+C
+                  nbpointsflag = nbpointsflag + ValSum
+C
+                    if ( Agrif_probdim .EQ. 1 ) 
+     &                 TailleTab = newB%imax(1)-newB%imin(1)+1
+                    if ( Agrif_probdim .EQ. 2 ) 
+     &                 TailleTab = (newB%imax(1)-newB%imin(1)+1)*
+     &                             (newB%imax(2)-newB%imin(2)+1)
+                    if ( Agrif_probdim .EQ. 3 ) 
+     &                 TailleTab = (newB%imax(1)-newB%imin(1)+1)*
+     &                             (newB%imax(2)-newB%imin(2)+1)*
+     &                             (newB%imax(3)-newB%imin(3)+1)
+
+                  nbpoints = nbpoints + TailleTab
+C              
+                  parcbox2 => parcbox2%next  
+                enddo   
+C            
+                if  (REAL(nbpointsflag)/REAL(nbpoints)
+     &               .LT.(1.15*cureff)) then
+                    parcbox2 => boxlib            
+                    do While (associated(parcbox2))
+                      if (associated(parcbox2,tempbox)) Exit
+                      deallocate(parcbox2%r)
+                      parcbox2 => parcbox2%next             
+                    enddo
+                    boxlib => tempbox
+                    Call Agrif_Add_Rectangle(newB2,boxlib)
+                endif
+            endif
+        endif
+        parcbox => parcbox%next
+      enddo
+C      
+C      
+      Return
+C      
+      End Subroutine Agrif_Clusternd 
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Clusterslice
+C     **************************************************************************
+C                           
+      Subroutine Agrif_Clusterslice(sig,slice,str) 
+C
+C
+CCC   Description:
+CCC   
+C
+CC    Method:
+CC            
+C
+C     Declarations:
+C
+C     Arguments 
+      INTEGER                      :: slice,str
+      INTEGER,DIMENSION(slice:str) :: sig 
+C
+C     Local variables      
+      INTEGER                      :: ideb,ifin
+      INTEGER                      :: i,t,a,di,ts 
+      INTEGER,DIMENSION(slice:str) :: lap 
+C
+C    
+      ideb = slice
+      ifin = str
+C    
+      if (SIZE(sig) <= 2*Agrif_Minwidth) then
+          str = -1 
+          slice = -1 
+          Return
+      endif
+C      
+      t = -1 
+      a = -1 
+C
+      do i = ideb+Agrif_Minwidth-1,ifin-Agrif_Minwidth
+          if (sig(i) .EQ. 0) then
+              if ((i-ideb) < (ifin-i)) then
+                  di = i - ideb
+                else 
+                  di = ifin - i 
+              endif
+C
+              if (di > t) then
+                a = i 
+                t = di 
+              endif
+         endif
+      enddo
+C      
+      if (a .NE. (-1)) then
+          slice = a 
+          str = t 
+          Return
+      endif
+C      
+      t = -1 
+      a = -1 
+C      
+      do i = ideb+1,ifin-1 
+        lap(i) = sig(i+1) + sig(i-1) - 2*sig(i) 
+      enddo
+C      
+      do i = ideb + Agrif_Minwidth-1,ifin-Agrif_Minwidth
+        if ((lap(i+1)*lap(i)) .LE. 0) then
+            ts = ABS(lap(i+1) - lap(i)) 
+            if (ts > t) then
+                t = ts 
+                a = i
+            endif
+       endif
+      enddo
+C      
+      if (a .EQ. (ideb + Agrif_Minwidth - 1)) then
+          a = -1
+          t = -1
+      endif
+C      
+      slice = a 
+      str = t 
+C
+C      
+      End Subroutine Agrif_Clusterslice       
+C
+C
+C    
+C     **************************************************************************
+CCC   Subroutine Agrif_Clusterprune
+C     **************************************************************************
+C      
+      Subroutine Agrif_Clusterprune(sig,pl,pu) 
+C
+C
+CCC   Description:
+CCC   
+C
+CC    Method:
+CC            
+C
+C     Declarations:
+C
+C     Arguments
+      INTEGER                  :: pl,pu 
+      INTEGER,DIMENSION(pl:pu) :: sig
+C
+C     Local variables      
+      INTEGER :: ideb,ifin       
+      INTEGER :: diff,addl,addu,udist,ldist  
+C
+C      
+      ideb = pl
+      ifin = pu
+C      
+      if (SIZE(sig) <= Agrif_Minwidth) then
+          return 
+      endif 
+C       
+      do While ((sig(pl) .EQ. 0) .AND. (pl < ifin)) 
+        pl = pl + 1 
+      enddo 
+C       
+      do While ((sig(pu) .EQ. 0) .AND. (pu > ideb)) 
+        pu = pu - 1 
+      enddo 
+C       
+      if ((pu-pl) < Agrif_Minwidth) then
+          diff = Agrif_Minwidth - (pu - pl + 1) 
+          udist = ifin - pu 
+          ldist = pl - ideb
+          addl = diff / 2 
+          addu = diff - addl 
+          if (addu > udist) then
+              addu = udist 
+              addl = diff - addu 
+          endif
+C         
+          if (addl > ldist) then
+              addl = ldist 
+              addu = diff - addl
+          endif
+C         
+          pu = pu + addu 
+          pl = pl - addl         
+C      
+      endif 
+C       
+C
+      End Subroutine Agrif_Clusterprune
+C
+C
+C              
+C     **************************************************************************
+CCC   Subroutine Agrif_Add_Rectangle 
+C     **************************************************************************
+C        
+      Subroutine Agrif_Add_Rectangle(R,LR)
+C
+CCC   Description:
+CCC   Subroutine to add the Agrif_Rectangle R in a list managed by LR.
+C
+C     Declarations:
+C
+C     Arguments               
+      TYPE(AGRIF_rectangle)           :: R  
+      TYPE(AGRIF_lrectangle), Pointer :: LR
+C
+C     Local variable        
+      TYPE(AGRIF_lrectangle), Pointer :: newrect  
+C
+      INTEGER                         :: iii 
+C
+C        
+      allocate(newrect)
+      allocate(newrect % r)
+C
+      newrect % r = R
+C      
+      do iii = 1 , Agrif_Probdim
+         newrect % r % spaceref(iii) = Agrif_Coeffref(iii)
+         newrect % r % timeref(iii) = Agrif_Coeffreft(iii)
+      enddo
+C              
+      newrect % r % number = -1            
+      Nullify(newrect % r % childgrids)
+      newrect % next => LR  
+      LR => newrect  
+C
+C      
+      End Subroutine Agrif_Add_Rectangle   
+C  
+C
+C  
+C     **************************************************************************
+CCC   Subroutine Agrif_Read_Fix_Grd  
+C     **************************************************************************
+C      
+      Recursive Subroutine Agrif_Read_Fix_Grd(coarsegrid,j,nunit)
+C
+CCC   Description:
+CCC   Subroutine to create the grid hierarchy from the reading of the 
+CCC   AGRIF_FixedGrids.in file.
+C
+CC    Method:
+CC    Recursive subroutine and creation of a first grid hierarchy from the
+CC    reading of the AGRIF_FixedGrids.in file.        
+C
+C     Declarations:
+C
+C     Pointer argument      
+      TYPE(AGRIF_rectangle), Pointer   :: coarsegrid ! Pointer on the first grid
+                                                     ! of the grid hierarchy
+C                                    
+C     Scalar arguments                                    
+      INTEGER                          :: j          ! Number of the new grid
+      INTEGER                          :: nunit      ! unit associated with file
+C      
+C     Local variables      
+      TYPE(AGRIF_rectangle)            :: newrect    ! Pointer on a new grid   
+      TYPE(AGRIF_lrectangle), Pointer  :: parcours   ! Pointer for the recursive
+                                                     !    procedure
+      TYPE(AGRIF_lrectangle), Pointer  :: newlrect
+      TYPE(AGRIF_lrectangle), Pointer  :: end_list       
+      INTEGER                          :: i          ! for each child grid
+      INTEGER                          :: nb_grids   ! Number of child grids
+      INTEGER                          :: iii
+C          
+C
+      Nullify(newrect%childgrids)
+C      
+C     Reading of the number of child grids        
+      read(nunit,*) nb_grids
+C      
+C     coarsegrid%nbgridchild = nb_grids
+C      
+      allocate(end_list)
+C
+      nullify(end_list % r)
+      nullify(end_list % next)
+C      
+      coarsegrid % childgrids => end_list
+C
+C     Reading of imin(1),imax(1),imin(2),imax(2),imin(3),imax(3), and space and
+C        time refinement factors for each child grid.
+C     Creation and addition of the new grid to the grid hierarchy. 
+C
+      do i = 1,nb_grids
+        allocate(newlrect)      
+        newrect % number = j   ! Number of the grid
+C
+        if ( Agrif_USE_ONLY_FIXED_GRIDS .EQ. 0 ) then
+           if (Agrif_Probdim == 3) then  
+            read(nunit,*) newrect % imin(1), newrect % imax(1),
+     &                    newrect % imin(2), newrect % imax(2),
+     &                    newrect % imin(3), newrect % imax(3),
+     &                    newrect % spaceref(1),newrect % spaceref(2),
+     &                    newrect % spaceref(3),
+     &                    newrect % timeref(1),newrect % timeref(2),
+     &                    newrect % timeref(3)
+           elseif (Agrif_Probdim == 2) then            
+            read(nunit,*) newrect % imin(1),newrect % imax(1),
+     &                  newrect % imin(2),newrect % imax(2),
+     &                    newrect % spaceref(1),newrect % spaceref(2),
+     &                    newrect % timeref(1),newrect % timeref(2)
+           elseif (Agrif_Probdim == 1) then
+            read(nunit,*) newrect % imin(1), newrect % imax(1),
+     &                    newrect % spaceref(1),
+     &                    newrect % timeref(1)
+           endif
+        else
+           if (Agrif_Probdim == 3) then  
+            read(nunit,*) newrect % imin(1), newrect % imax(1),
+     &                    newrect % imin(2), newrect % imax(2),
+     &                    newrect % imin(3), newrect % imax(3),
+     &                    newrect % spaceref(1),newrect % spaceref(2),
+     &                    newrect % spaceref(3),
+     &                    newrect % timeref(1)
+           elseif (Agrif_Probdim == 2) then            
+            read(nunit,*) newrect % imin(1),newrect % imax(1),
+     &                  newrect % imin(2),newrect % imax(2),
+     &                    newrect % spaceref(1),newrect % spaceref(2),
+     &                    newrect % timeref(1)
+           elseif (Agrif_Probdim == 1) then
+            read(nunit,*) newrect % imin(1), newrect % imax(1),
+     &                    newrect % spaceref(1),
+     &                    newrect % timeref(1)
+           endif
+C
+           if ( Agrif_probdim .GE. 2 ) then
+              do iii = 2 , Agrif_probdim
+                 newrect % timeref(iii) = newrect % timeref(1) 
+              enddo
+           endif
+C
+        endif
+C
+C       Addition to the grid hierarchy
+C
+        nullify(newrect % childgrids)
+        j = j + 1
+        Allocate(newlrect%r)
+        newlrect % r = newrect 
+        nullify(newlrect % next)
+        end_list % next => newlrect
+        end_list => end_list % next
+      enddo
+C      
+      coarsegrid % childgrids => coarsegrid % childgrids % next
+      parcours => coarsegrid % childgrids
+C
+C     Recursive operation to create the grid hierarchy branch by branch
+C
+      do while (associated(parcours))
+        call Agrif_Read_Fix_Grd (parcours % r,j,nunit)
+        parcours => parcours % next
+      enddo
+C      
+C
+      End Subroutine Agrif_Read_Fix_Grd        
+C        
+C 
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Create_Grids  
+C     **************************************************************************
+C
+      Recursive Subroutine Agrif_Create_Grids(g,coarsegrid)
+C
+CCC   Description:
+CCC   Subroutine to create the grid hierarchy (g) from the one created with the
+CCC   Agrif_Read_Fix_Grd or Agrif_Cluster_All procedures (coarsegrid).
+C
+CC    Method:
+CC    Recursive subroutine.        
+C
+C     Declarations:
+C
+C     Pointer arguments        
+      TYPE(AGRIF_grid)     , Pointer  :: g          ! Pointer on the root coarse
+                                                    ! grid
+      TYPE(AGRIF_rectangle), Pointer  :: coarsegrid ! Pointer on the root coarse
+                                                    ! grid of the grid hierarchy
+                                                    ! created with the
+                                                    ! Agrif_Read_Fix_Grd
+                                                    ! subroutine
+C
+C     Local pointers
+      TYPE(Agrif_grid)      , Pointer :: newgrid    ! New grid
+      TYPE(Agrif_pgrid)     , Pointer :: newpgrid
+      TYPE(Agrif_pgrid)     , Pointer :: parcours2
+      TYPE(Agrif_lrectangle), Pointer :: parcours
+      TYPE(Agrif_pgrid)     , Pointer :: end_list
+      TYPE(Agrif_pgrid)     , Pointer :: parcours3
+C
+C     Local scalars      
+      LOGICAL                         :: nullliste
+      INTEGER                         :: iii
+      INTEGER                         :: moving_grid_id = 0      
+
+C
+      parcours3 => g % child_grids
+C     
+      if (associated(parcours3)) then
+          do While (associated(parcours3 % next))
+            parcours3 => parcours3 % next
+          enddo
+          end_list => parcours3
+          nullliste=.FALSE.
+        else
+          allocate(end_list)
+          nullify(end_list % gr)
+          nullify(end_list % next)      
+          g % child_grids => end_list 
+          parcours3 => end_list      
+          nullliste=.TRUE.
+      endif
+C      
+      parcours => coarsegrid % childgrids
+C      
+C     Creation of the grid hierarchy from the one created by using the 
+C     Agrif_Read_Fix_Grd subroutine 
+C
+      do while (associated(parcours))
+        allocate(newgrid)        
+        moving_grid_id=moving_grid_id+1
+        newgrid % grid_id = moving_grid_id
+        do iii = 1 , Agrif_Probdim
+           newgrid % spaceref(iii) = parcours % r % spaceref(iii)
+           newgrid % timeref(iii) = parcours % r % timeref(iii)
+        enddo
+C
+        do iii = 1 , Agrif_Probdim
+          newgrid % nb(iii) = (parcours % r % imax(iii) 
+     &                       - parcours % r % imin(iii)) 
+     &                       * parcours % r % spaceref(iii)
+C     
+          newgrid % ix(iii) =  parcours % r % imin(iii)
+C
+          newgrid % Agrif_d(iii) = g % Agrif_d(iii) 
+     &                  / REAL(newgrid % spaceref(iii))
+C
+          newgrid % Agrif_x(iii) = g % Agrif_x(iii) +
+     &      (parcours % r % imin(iii) - 1)* g % Agrif_d(iii)
+C      
+        enddo
+C
+C       Pointer on the parent grid                        
+C
+        newgrid % parent => g      
+C      
+C       Grid pointed by newgrid is a fixed grid      
+C
+        if (parcours % r % number .GT. 0) then      
+            newgrid % fixed = .true.  
+          else
+            newgrid % fixed = .false.
+        endif
+C
+C       Number of the grid pointed by newgrid
+        newgrid % fixedrank = parcours % r % number
+C           
+C       No time calculation on this grid         
+        newgrid % ngridstep = 0      
+C
+C       Test indicating if the current grid has a common border with the root 
+C       coarse grid in the x direction
+        do iii = 1 , Agrif_Probdim
+           newgrid % NearRootBorder(iii) = .FALSE.
+C        
+           if ((newgrid % parent % NearRootBorder(iii)) .AND. 
+     &         (newgrid % ix(iii) == 1)) then
+               newgrid % NearRootBorder(iii) = .TRUE.
+           endif
+C
+           newgrid % DistantRootBorder(iii) = .FALSE.
+C 
+           if ((newgrid % parent % DistantRootBorder(iii)) .AND. 
+     &         (newgrid % ix(iii) + 
+     &         (newgrid % nb(iii)/newgrid % spaceref(iii))  
+     &          - 1  == newgrid % parent % nb(iii))) then
+               newgrid % DistantRootBorder(iii) = .TRUE.
+           endif
+        enddo
+C
+C       Writing in output files
+C
+        newgrid % oldgrid = .FALSE.      
+C
+C     
+C       Definition of the CHARACTERistics of the variable of the grid pointed by
+C       newgrid 
+        Call Agrif_Create_Var (newgrid)
+C      
+C       Instanciation of the grid pointed by newgrid and its variables
+        Call Agrif_Instance (newgrid)
+C       
+C       Nullify the variable of the grid pointed by newgrid
+C
+C
+C       Addition of this grid to the grid hierarchy 
+C      
+        nullify(newgrid % child_grids)
+        allocate(newpgrid)  
+        newpgrid % gr => newgrid
+        nullify(newpgrid % next)
+        end_list % next => newpgrid
+        end_list => end_list % next               
+        parcours => parcours % next
+C
+C       Updating the total number of fixed grids
+        if (newgrid % fixed) then
+            AGRIF_nbfixedgrids = AGRIF_nbfixedgrids + 1
+        endif
+C                  
+      enddo
+C
+C
+      if (nullliste) then
+          g % child_grids => g % child_grids % next
+          parcours2 => g % child_grids
+          deallocate(parcours3)
+        else
+          parcours2 => parcours3 % next
+      endif
+C      
+      parcours => coarsegrid % childgrids
+C
+C     Recursive call to the subroutine Agrif_Create_Fixed_Grids to create the
+C     grid hierarchy
+C      
+      do while (associated(parcours))
+        Call Agrif_Create_Grids (parcours2 % gr,parcours % r)
+        parcours => parcours % next
+        parcours2 => parcours2 % next
+      enddo 
+C      
+      Return      
+C                  
+      End Subroutine Agrif_Create_Grids
+C
+C      
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Init_Hierarchy  
+C     **************************************************************************
+C
+      Recursive Subroutine Agrif_Init_Hierarchy(g) 
+C
+CCC   Description:
+CCC   Subroutine to initialize all the grids except the root coarse grid (this 
+CCC   one, pointed by AGRIF_mygrid, is initialized by the subroutine 
+CCC   Agrif_Init_Grids defi ned in the module Agrif_Util and called in the main 
+CCC   program ). 
+C
+CC    Method:
+CC    Recursive subroutine.        
+C
+C     Declarations:
+C
+C     Pointer argument      
+      TYPE(AGRIF_grid), Pointer  :: g         ! Pointer on the root coarse grid 
+C      
+C     Local variables      
+      TYPE(AGRIF_pgrid), Pointer :: parcours  ! Pointer for the recursive call
+      LOGICAL                    :: Init_Hierarchy
+C      
+C
+      parcours=>g%child_grids
+C      
+      do while (associated(parcours))
+        Init_Hierarchy = .false.
+        if ( AGRIF_USE_FIXED_GRIDS .EQ. 1 .OR. 
+     &       AGRIF_USE_ONLY_FIXED_GRIDS .EQ. 1 ) then
+           if ((parcours%gr%fixed) 
+     &         .AND. (Agrif_mygrid%ngridstep == 0)) then
+              Init_Hierarchy = .true.
+           endif      
+       endif
+C
+       if (.NOT. parcours%gr%fixed) Init_Hierarchy = .true.
+       if (parcours % gr % oldgrid) Init_Hierarchy = .false.
+C
+       if (Init_Hierarchy) then 
+C
+C           Instanciation of the grid pointed by parcours%gr and its variables 
+            Call Agrif_Instance (parcours % gr)
+C    
+C           Allocation of the arrays containing values of the variables of the
+C           grid pointed by parcours%gr      
+C      
+            Call Agrif_Allocation (parcours % gr)   
+C            
+            Call Agrif_initialisations(parcours % gr)              
+C       
+            Call Agrif_Instance(parcours % gr)
+C
+            if ( Agrif_USE_ONLY_FIXED_GRIDS .EQ. 0 ) then
+              Call Agrif_Allocate_Restore (parcours % gr)
+            endif
+C
+            if ( Agrif_USE_ONLY_FIXED_GRIDS .EQ. 0 ) then
+C              Initialization by copy of the grids created by clustering 
+               Call AGRIF_CopyFromold_All (parcours%gr,
+     &                                     Agrif_oldmygrid)
+            endif
+C
+C           Initialization by interpolation 
+C           (this routine is written by the user) 
+            Call Agrif_InitValues()
+C
+            if ( Agrif_USE_ONLY_FIXED_GRIDS .EQ. 0 ) then
+               Call Agrif_Free_Restore (parcours % gr)
+            endif
+C
+       endif                                  
+       parcours => parcours % next 
+C         
+      enddo
+C
+      parcours => g % child_grids
+C      
+C     Recursive operation to initialize all the grids
+      do while (associated(parcours))
+        Call Agrif_Init_Hierarchy (parcours%gr)
+        parcours => parcours%next
+      enddo
+C      
+      End Subroutine Agrif_Init_Hierarchy 
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Allocate_Restore  
+C     **************************************************************************
+C
+      Subroutine Agrif_Allocate_Restore(Agrif_Gr)
+C      
+C      
+C     Modules used:
+C
+      TYPE(AGRIF_grid), Pointer  :: Agrif_Gr   ! Pointer on the root coarse grid
+C     
+      INTEGER                    :: i
+C
+        do i = 1 , Agrif_NbVariables
+            if ( Agrif_Mygrid%tabvars(i)%var % restaure ) then
+            if ( Agrif_Gr%tabvars(i)%var % nbdim .EQ. 1 ) then    
+            Allocate( Agrif_Gr%tabvars(i)%var%  
+     &    Restore1D(lbound(Agrif_Gr%tabvars(i)%var%array1,1) 
+     &    :ubound(Agrif_Gr%tabvars(i)%var%array1,1))) 
+            Agrif_Gr%tabvars(i)%var%Restore1D = 0
+C
+            endif
+            if ( Agrif_Gr%tabvars(i)%var % nbdim .EQ. 2 ) then
+            Allocate( Agrif_Gr%tabvars(i)%var%Restore2D(  
+     &      lbound(Agrif_Gr%tabvars(i)%var%array2,1):         
+     &      ubound(Agrif_Gr%tabvars(i)%var%array2,1),         
+     &      lbound(Agrif_Gr%tabvars(i)%var%array2,2)          
+     &      :ubound(Agrif_Gr%tabvars(i)%var%array2,2)))         
+            Agrif_Gr%tabvars(i)%var%Restore2D = 0
+C
+            endif
+            if ( Agrif_Mygrid%tabvars(i)%var % nbdim .EQ. 3 ) then
+C     
+            Allocate( Agrif_Gr%tabvars(i)%var%Restore3D( 
+     &      lbound(Agrif_Gr%tabvars(i)%var%array3,1):        
+     &      ubound(Agrif_Gr%tabvars(i)%var%array3,1),        
+     &      lbound(Agrif_Gr%tabvars(i)%var%array3,2):        
+     &      ubound(Agrif_Gr%tabvars(i)%var%array3,2),        
+     &      lbound(Agrif_Gr%tabvars(i)%var%array3,3):        
+     &      ubound(Agrif_Gr%tabvars(i)%var%array3,3)))  
+            Agrif_Gr%tabvars(i)%var%Restore3D = 0
+            endif
+C 
+            endif
+          enddo
+C
+      Return
+C
+C      
+      End Subroutine Agrif_Allocate_Restore      
+C
+C
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Free_Restore  
+C     **************************************************************************
+C
+      Subroutine Agrif_Free_Restore(Agrif_Gr)
+C
+C      
+C     Pointer argument      
+      TYPE(AGRIF_grid), Pointer  :: Agrif_Gr   ! Pointer on the root coarse grid
+      INTEGER :: i     
+C
+      do i = 1 , Agrif_NbVariables
+         if ( Agrif_Mygrid % tabvars(i) % var % restaure) then
+C  
+            if (associated(Agrif_Gr%tabvars(i)%var%Restore1D)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%Restore1D)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%Restore2D)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%Restore2D)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%Restore3D)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%Restore3D)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%Restore4D)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%Restore4D)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%Restore5D)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%Restore5D)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%Restore6D)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%Restore6D)
+            endif
+C 
+        endif
+      enddo
+C 
+      Return
+C
+C      
+      End Subroutine Agrif_Free_Restore
+C
+C
+C
+      End Module Agrif_Clustering
Index: /vendors/AGRIF/r_00/AGRIF_FILES/modcurgridfunctions.F
===================================================================
--- /vendors/AGRIF/r_00/AGRIF_FILES/modcurgridfunctions.F	(revision 1902)
+++ /vendors/AGRIF/r_00/AGRIF_FILES/modcurgridfunctions.F	(revision 1902)
@@ -0,0 +1,970 @@
+!
+! $Id: modcurgridfunctions.F 1200 2008-09-24 13:05:20Z rblod $
+!
+C     AGRIF (Adaptive Grid Refinement In Fortran)
+C
+C     Copyright (C) 2003 Laurent Debreu (Laurent.Debreu@imag.fr)
+C                        Christophe Vouland (Christophe.Vouland@imag.fr)    
+C
+C     This program is free software; you can redistribute it and/or modify
+C     it under the terms of the GNU General Public License as published by
+C     the Free Software Foundation; either version 2 of the License, or
+C     (at your option) any later version.
+C
+C     This program is distributed in the hope that it will be useful,
+C     but WITHOUT ANY WARRANTY; without even the implied warranty of
+C     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+C     GNU General Public License for more details.
+C
+C     You should have received a copy of the GNU General Public License
+C     along with this program; if not, write to the Free Software
+C     Foundation, Inc., 59 Temple Place-  Suite 330, Boston, MA 02111-1307, USA.
+C
+C
+C
+CCC   Module Agrif_CurgridFunctions      
+C      
+      Module Agrif_CurgridFunctions    
+C  
+CCC   Description:
+CCC   Module to define some procedures concerning the current grid
+C
+C     Modules used: 
+C
+      Use Agrif_Init
+C
+      IMPLICIT NONE
+C
+C
+      Contains
+C     Define procedures contained in this module
+C
+C     **************************************************************************
+CCC   Function Agrif_Rhot
+C     **************************************************************************
+C
+      Function Agrif_Rhot()
+C  
+CCC   Description:
+CCC   Function returning the time refinement factor of the current grid.
+C
+C     Declarations:
+C  
+      
+C
+      REAL :: Agrif_Rhot  ! Result
+C
+C     Local scalar      
+      INTEGER :: res         ! Intermediate result
+      INTEGER :: iii
+C
+C
+      res=1
+C
+      do iii = 1 , Agrif_Probdim
+         res = max(res, AGRIF_Curgrid % timeref(iii))
+      enddo
+C
+      Agrif_Rhot = float(res)
+C
+C
+      End function Agrif_rhot
+C
+C
+C
+C
+C     **************************************************************************
+CCC   Function Agrif_IRhot
+C     **************************************************************************
+C
+      Function Agrif_IRhot()
+C  
+CCC   Description:
+CCC   Function returning the time refinement factor of the current grid.
+C
+C     Declarations:
+C  
+      
+C
+      INTEGER :: Agrif_IRhot  ! Result
+C
+C     Local scalar      
+      INTEGER :: res         ! Intermediate result
+      INTEGER :: iii
+C
+C
+      res=1
+C
+      do iii = 1 , Agrif_Probdim
+         res = max(res, AGRIF_Curgrid % timeref(iii))
+      enddo
+C
+      Agrif_IRhot = res
+C
+C
+      End function Agrif_IRhot
+C
+C
+C
+C     **************************************************************************
+CCC   Function Agrif_Parent_Rhot
+C     **************************************************************************
+C
+      Function Agrif_Parent_Rhot()
+C  
+CCC   Description:
+CCC   Function returning the time refinement factor of the parent grid of the 
+CCC   current grid.
+C
+C     Declarations:
+C  
+      
+C
+      REAL :: Agrif_Parent_Rhot  ! Result
+C
+C     Local scalar      
+      INTEGER :: res         ! Intermediate result
+      INTEGER :: iii
+C
+C
+      res=1
+C
+      do iii = 1 , Agrif_Probdim
+         res = max(res, AGRIF_Curgrid % parent % timeref(iii))
+      enddo
+C
+      Agrif_Parent_Rhot = float(res)
+C
+C
+      End function Agrif_Parent_Rhot      
+C
+C
+C     **************************************************************************
+CCC   Function Agrif_Parent_IRhot
+C     **************************************************************************
+C
+      Function Agrif_Parent_IRhot()
+C  
+CCC   Description:
+CCC   Function returning the time refinement factor of the parent grid of the 
+CCC   current grid.
+C
+C     Declarations:
+C  
+      
+C
+      INTEGER :: Agrif_Parent_IRhot  ! Result
+C
+C     Local scalar      
+      INTEGER :: res         ! Intermediate result
+      INTEGER :: iii
+C
+C
+      res=1
+C
+      do iii = 1 , Agrif_Probdim
+         res = max(res, AGRIF_Curgrid % parent % timeref(iii))
+      enddo
+C
+      Agrif_Parent_IRhot = res
+C
+C
+      End function Agrif_Parent_IRhot      
+C
+C
+C     **************************************************************************
+CCC   Function Agrif_Nbstepint
+C     **************************************************************************
+C
+      Function Agrif_Nbstepint()
+C  
+CCC   Description:
+CCC   Function for the calculation of the coefficients used for the time 
+CCC   interpolation (module Agrif_Boundary).
+C
+C     Declarations:
+C  
+      
+C            
+      INTEGER :: Agrif_nbstepint  ! result
+C
+C
+      Agrif_nbstepint = mod(AGRIF_CURGRID % ngridstep,
+     &                      int(AGRIF_rhot()))
+C
+C
+      End function Agrif_Nbstepint
+C
+C
+C
+CC    **************************************************************************
+CCC   Function Agrif_Parent_Nbstepint
+C     **************************************************************************
+C
+      Function Agrif_Parent_Nbstepint()
+C  
+CCC   Description:
+CCC   Function for the calculation of the coefficients used for the time 
+CCC   interpolation (module Agrif_Boundary).
+C
+C     Declarations:
+C  
+      
+C            
+      INTEGER :: Agrif_Parent_Nbstepint  ! result
+C
+C
+      Agrif_Parent_Nbstepint = mod(AGRIF_CURGRID % parent % ngridstep, 
+     &                             int(AGRIF_Parent_Rhot()))
+C
+C
+      End function Agrif_Parent_Nbstepint
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_InterpNearBorderX
+C     **************************************************************************
+C
+      Subroutine Agrif_InterpNearBorderX()
+C  
+CCC   Description:
+CCC   Subroutine allowing to interpole (in the x direction) on a near border of 
+CCC   the current grid if this one has a common border with the root coarse 
+CCC   grid.   
+C
+C     Declarations:
+C  
+      
+C
+C
+      AGRIF_CURGRID % NearRootBorder(1) = .FALSE.             
+C
+C
+      End Subroutine Agrif_InterpNearBorderX 
+C
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_InterpDistantBorderX
+C     **************************************************************************
+C
+      Subroutine Agrif_InterpDistantBorderX()
+C  
+CCC   Description:
+CCC   Subroutine allowing to interpole (in the x direction) on a distant border 
+CCC   of the current grid if this one has a common border with the root coarse  
+CCC   grid.
+C
+C     Declarations:
+C  
+
+C
+C
+      AGRIF_CURGRID % DistantRootBorder(1) = .FALSE.             
+C
+C
+      End Subroutine Agrif_InterpDistantBorderX                 
+C
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_InterpNearBorderY
+C     **************************************************************************
+C
+      Subroutine Agrif_InterpNearBorderY()
+C  
+CCC   Description:
+CCC   Subroutine allowing to interpole (in the y direction) on a near border of 
+CCC   the current grid if this one has a common border with the root coarse 
+CCC   grid.
+C
+C     Declarations:
+C  
+      
+C
+C
+      AGRIF_CURGRID % NearRootBorder(2) = .FALSE.             
+C
+C
+      End Subroutine Agrif_InterpNearBorderY
+C
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_InterpDistantBorderY
+C     **************************************************************************
+C
+      Subroutine Agrif_InterpDistantBorderY()
+C  
+CCC   Description:
+CCC   Subroutine allowing to interpole (in the y direction) on a distant border 
+CCC   of the current grid if this one has a common border with the root coarse  
+CCC   grid.
+C
+C     Declarations:
+C  
+      
+C
+C
+      AGRIF_CURGRID % DistantRootBorder(2) = .FALSE.             
+C
+C
+      End Subroutine Agrif_InterpDistantBorderY      
+C
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_InterpNearBorderZ
+C     **************************************************************************
+C
+      Subroutine Agrif_InterpNearBorderZ()
+C  
+CCC   Description:
+CCC   Subroutine allowing to interpole (in the z direction) on a near border of 
+CCC   the current grid if this one has a common border with the root coarse 
+CCC   grid.
+C
+C     Declarations:
+C  
+      
+C
+C
+      AGRIF_CURGRID % NearRootBorder(3) = .FALSE.             
+C
+C
+      End Subroutine Agrif_InterpNearBorderZ
+C
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_InterpDistantBorderZ
+C     **************************************************************************
+C
+      Subroutine Agrif_InterpDistantBorderZ()
+C  
+CCC   Description:
+CCC   Subroutine allowing to interpole (in the z direction) on a distant border 
+CCC   of the current grid if this one has a common border with the root coarse  
+CCC   grid.
+C
+C     Declarations:
+C  
+      
+C
+C
+      AGRIF_CURGRID % DistantRootBorder(3) = .FALSE.             
+C
+C
+      End Subroutine Agrif_InterpDistantBorderZ
+C 
+C     **************************************************************************
+CCC   Function Agrif_Parent_Nb_Step
+C     ************************************************************************** 
+C 
+      Function AGRIF_Parent_Nb_Step() 
+C  
+CCC   Description:
+CCC   Function returning the number of time steps of the parent grid of the
+CCC   current grid.
+C
+C     Declarations:
+C    
+      
+C
+      INTEGER :: AGRIF_Parent_Nb_Step ! Result 
+C
+C
+      if (Agrif_Root()) then  
+C     
+          Agrif_Parent_Nb_Step = -1 
+C       
+        else
+C       
+          Agrif_Parent_Nb_Step = Agrif_Curgrid % parent % ngridstep
+C     
+      endif
+C
+C     
+      End function Agrif_Parent_Nb_Step    
+C 
+C
+C 
+C     **************************************************************************
+CCC   Function Agrif_Root
+C     **************************************************************************
+C
+      Function Agrif_Root()
+C     
+CCC   Description:
+CCC   Function indicating if the current grid is or not the root grid.
+C
+C     Declarations:
+C
+      
+C
+      LOGICAL :: Agrif_Root   ! Result
+C    
+C
+      if (AGRIF_CURGRID % fixedrank .EQ. 0) then
+C          
+          Agrif_Root = .TRUE.
+C    
+        else
+C    
+          Agrif_Root = .FALSE.
+C     
+      endif
+C
+C    
+      End function Agrif_Root
+C
+C
+C
+C     **************************************************************************
+CCC   Function Agrif_Parent_Root
+C     **************************************************************************
+C
+      Function Agrif_Parent_Root()
+C     
+CCC   Description:
+CCC   Function indicating if the parent grid of the current grid is or not the 
+CCC   root grid.
+C
+C     Declarations:
+C
+      
+C
+      LOGICAL :: Agrif_Parent_Root   ! Result
+C    
+C
+      if (AGRIF_CURGRID % parent % fixedrank .EQ. 0) then
+C          
+          Agrif_Parent_Root = .TRUE.
+C    
+        else
+C    
+          Agrif_Parent_Root = .FALSE.
+C     
+      endif
+C
+C    
+      End function Agrif_Parent_Root     
+C 
+C
+C 
+C     **************************************************************************
+CCC   Function Agrif_Fixed
+C     **************************************************************************
+C 
+      Function Agrif_Fixed()
+C  
+CCC   Description:
+CCC   Function returning the number of the current grid.
+C
+C     Declarations:
+C   
+      
+C
+      INTEGER Agrif_Fixed   ! Result 
+C 
+C
+      if (Agrif_Curgrid % fixed) then
+C     
+          Agrif_Fixed = Agrif_Curgrid % fixedrank 
+C
+        else
+C     
+         Agrif_Fixed = -1
+C        
+      endif
+C
+C     
+      End function Agrif_Fixed 
+C
+C
+C
+C     **************************************************************************
+CCC   Function Agrif_Parent_Fixed
+C     **************************************************************************
+ 
+      Function Agrif_Parent_Fixed()
+C  
+CCC   Description:
+CCC   Function returning the number of the parent grid of the current grid.
+C
+C     Declarations:
+C   
+      
+C
+      INTEGER Agrif_Parent_Fixed   ! Result 
+C 
+C
+      if (Agrif_Curgrid % parent % fixed) then
+C     
+          Agrif_Parent_Fixed = AGRIF_CURGRID % parent % fixedrank 
+C
+        else
+C     
+         Agrif_Parent_Fixed = 0
+C        
+      endif
+C
+C     
+      End function Agrif_Parent_Fixed
+C
+C
+C
+C     **************************************************************************
+CCC   Function Agrif_Is_Fixed
+C     **************************************************************************
+ 
+      Function Agrif_Is_Fixed()
+C  
+CCC   Description:
+CCC   Function returning true if the current grid is fixed.
+C
+C     Declarations:
+C   
+      
+C
+      LOGICAL Agrif_Is_Fixed   ! Result 
+C 
+C
+      if (Agrif_Curgrid % fixed) then
+C     
+          Agrif_Is_Fixed = .true.
+C
+        else
+C     
+          Agrif_Is_Fixed = .false.
+C        
+      endif
+C
+C     
+      End function Agrif_Is_Fixed
+C
+C
+C
+C     **************************************************************************
+CCC   Function Agrif_Parent_Is_Fixed
+C     **************************************************************************
+ 
+      Function Agrif_Parent_Is_Fixed()
+C  
+CCC   Description:
+CCC   Function returning true if the parent grid of the current grid is fixed.
+C
+C     Declarations:
+C   
+      
+C
+      LOGICAL Agrif_Parent_Is_Fixed   ! Result 
+C 
+C
+      if (Agrif_Curgrid % parent % fixed) then
+C     
+          Agrif_Parent_Is_Fixed = .true.
+C
+        else
+C     
+          Agrif_Parent_Is_Fixed = .false.
+C        
+      endif
+C
+C     
+      End function Agrif_Parent_Is_Fixed            
+C
+C 
+C
+C     **************************************************************************
+CCC   Function AGRIF_CFixed
+C     **************************************************************************
+ 
+            Function AGRIF_CFixed()
+C  
+CCC   Description:
+CCC   Function returning the number of the current grid.
+C
+C     Declarations:
+C   
+      
+C
+      CHARACTER(3) AGRIF_CFixed   ! Result 
+C
+C     Local variables      
+      CHARACTER(3) cfixed
+      INTEGER fixed
+C 
+C
+      fixed = Agrif_Fixed()
+C      
+      if(fixed.NE.-1) then
+C
+           if (fixed .LE. 9) then
+C
+               write(cfixed,'(i1)')fixed
+C 
+           else
+C   
+               write(cfixed,'(i2)')fixed
+C      
+           endif
+C
+           AGrif_Cfixed=cfixed
+C      
+      else
+C
+      print*,'Call to AGRIF_CFixed() on a moving grid'
+      stop
+C
+      endif     
+
+      End function AGRIF_CFixed
+C
+C
+C
+C     **************************************************************************
+CCC   Function AGRIF_Parent_CFixed
+C     **************************************************************************
+ 
+      Function AGRIF_Parent_CFixed()
+C  
+CCC   Description:
+CCC   Function returning the number of the parent grid of the current grid.
+C
+C     Declarations:
+C   
+      
+C
+      CHARACTER(3) AGRIF_Parent_CFixed   ! Result 
+C
+C     Local variables      
+      CHARACTER(3) cfixed
+      INTEGER fixed
+C 
+C
+      fixed = Agrif_Parent_Fixed()
+C      
+      if(fixed.NE.-1) then
+C
+          if (fixed .LE. 9) then
+C
+              write(cfixed,'(i1)')fixed
+C      
+          else
+C        
+              write(cfixed,'(i2)')fixed
+C      
+          endif
+C
+          AGrif_Parent_Cfixed=cfixed
+C
+      else
+C
+      print*,'Illegal call to AGRIF_Parent_CFixed()'
+      stop     
+C
+      endif
+
+      End function AGRIF_Parent_CFixed      
+C
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_ChildGrid_to_ParentGrid
+C     **************************************************************************
+C
+      Subroutine Agrif_ChildGrid_to_ParentGrid()
+C  
+CCC   Description:
+CCC   Subroutine allowing to make the pointer AGRIF_CURGRID point on the parent
+CCC   grid of the current grid.
+C
+C     Declarations:
+C  
+      
+C
+C
+      AGRIF_saveCURGRID => AGRIF_CURGRID
+C
+      Call AGRIF_INSTANCE(AGRIF_CURGRID%parent)            
+C
+C
+      End Subroutine Agrif_ChildGrid_to_ParentGrid
+C
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_ParentGrid_to_ChildGrid
+C     **************************************************************************
+C
+      Subroutine Agrif_ParentGrid_to_ChildGrid()
+C  
+CCC   Description:
+CCC   Subroutine allowing to make the pointer AGRIF_CURGRID point on the child 
+CCC   grid after having called the Agrif_ChildGrid_to_ParentGrid subroutine.
+C
+C     Declarations:
+C  
+      
+C
+C
+      Call AGRIF_INSTANCE(AGRIF_saveCURGRID)            
+C
+C
+      End Subroutine Agrif_ParentGrid_to_ChildGrid
+C
+C
+C
+C     **************************************************************************
+CCC   Function Agrif_Get_Unit
+C     **************************************************************************
+C
+      Function Agrif_Get_Unit()
+
+CCC   Description : return a unit not connected to any file
+C
+C     Declarations
+C
+      
+C
+      INTEGER Agrif_Get_Unit
+C
+C     Local scalars
+      INTEGER n
+      LOGICAL op
+C
+      INTEGER :: nunit
+      INTEGER :: iii,out,iiimax
+      Logical :: BEXIST
+      INTEGER,DIMENSION(1:10) :: ForbiddenUnit
+C
+C
+C     Load forbidden Unit if the file Agrif_forbidenUnit exist
+C      
+
+      INQUIRE(FILE='Agrif_forbiddenUnit.txt',EXIST=BEXIST)
+      If (.not. BEXIST) Then
+c          File Agrif_forbiddenUnit.txt not found
+      Else
+           nunit = 777
+           open(nunit,file='Agrif_forbiddenUnit.txt',form='formatted',
+     &          status="old")
+              iii = 1
+              do while ( .TRUE. )
+                 read(nunit,*,END = 99) ForbiddenUnit(iii)
+                 iii = iii + 1
+              enddo
+   99         CONTINUE
+              iiimax = iii
+           close(nunit)
+      endif     
+C 
+      do n = 7,1000
+C 
+        Inquire(Unit=n,Opened=op)
+C
+        out = 0
+        if ( BEXIST .AND. .NOT.op) then
+           do iii = 1 , iiimax
+              if ( n .EQ. ForbiddenUnit(iii) ) out = 1
+           enddo
+        endif
+C
+        if (.NOT.op .AND. out .EQ. 0) exit
+C      
+      enddo
+C
+      Agrif_Get_Unit=n
+C
+C
+      End Function Agrif_Get_Unit
+      
+      Subroutine Agrif_Set_Efficiency(eff)
+      REAL :: eff
+      
+      IF ((eff.LT.0.).OR.(eff.GT.1)) THEN
+      write(*,*)'Error Efficiency should be between 0 and 1'
+      stop
+      ELSE
+      Agrif_efficiency = eff
+      ENDIF
+      End Subroutine Agrif_Set_Efficiency
+      
+      Subroutine Agrif_Set_Regridding(regfreq)
+      INTEGER :: regfreq
+      
+      IF (regfreq.LT.0) THEN
+      write(*,*)'Regridding frequency should be positive'
+      stop
+      ELSE
+      Agrif_regridding = regfreq
+      ENDIF
+      End Subroutine Agrif_Set_Regridding
+C
+C
+C     **************************************************************************
+CCC   subroutine Agrif_Set_coeffref_x
+C     **************************************************************************
+      subroutine Agrif_Set_coeffref_x(coefref)
+
+      integer :: coefref
+
+      if (coefref.LT.0) then
+         write(*,*)'Coefficient of raffinement should be positive'
+         stop
+      else
+         AGRIF_coeffref(1) = coefref
+      endif
+      end subroutine Agrif_Set_coeffref_x
+C
+C     **************************************************************************
+CCC   subroutine Agrif_Set_coeffref_y
+C     **************************************************************************
+      subroutine Agrif_Set_coeffref_y(coefref)
+
+      integer :: coefref
+
+      if (coefref.LT.0) then
+         write(*,*)'Coefficient of raffinement should be positive'
+         stop
+      else
+         AGRIF_coeffref(2) = coefref
+      endif
+      end subroutine Agrif_Set_coeffref_y
+C
+C     **************************************************************************
+CCC   subroutine Agrif_Set_coeffref_z
+C     **************************************************************************
+      subroutine Agrif_Set_coeffref_z(coefref)
+
+      integer :: coefref
+
+      if (coefref.LT.0) then
+         write(*,*)'Coefficient of raffinement should be positive'
+         stop
+      else
+         AGRIF_coeffref(3) = coefref
+      endif
+      end subroutine Agrif_Set_coeffref_z
+C
+C     **************************************************************************
+CCC   subroutine Agrif_Set_coeffreft_x
+C     **************************************************************************
+      subroutine Agrif_Set_coeffreft_x(coefref)
+
+      integer :: coefref
+
+      if (coefref.LT.0) then
+         write(*,*)'Coefficient of time raffinement should be positive'
+         stop
+      else
+         AGRIF_coeffreft(1) = coefref
+      endif
+      end subroutine Agrif_Set_coeffreft_x
+C
+C     **************************************************************************
+CCC   subroutine Agrif_Set_coeffreft_y
+C     **************************************************************************
+      subroutine Agrif_Set_coeffreft_y(coefref)
+
+      integer :: coefref
+
+      if (coefref.LT.0) then
+         write(*,*)'Coefficient of time raffinement should be positive'
+         stop
+      else
+         AGRIF_coeffreft(2) = coefref
+      endif
+      end subroutine Agrif_Set_coeffreft_y
+C
+C     **************************************************************************
+CCC   subroutine Agrif_Set_coeffreft_z
+C     **************************************************************************
+      subroutine Agrif_Set_coeffreft_z(coefref)
+
+      integer :: coefref
+
+      if (coefref.LT.0) then
+         write(*,*)'Coefficient of time raffinement should be positive'
+         stop
+      else
+         AGRIF_coeffreft(3) = coefref
+      endif
+      end subroutine Agrif_Set_coeffreft_z
+C
+C     **************************************************************************
+CCC   subroutine Agrif_Set_Minwidth
+C     **************************************************************************
+      subroutine Agrif_Set_Minwidth(coefminwidth)
+
+      integer :: coefminwidth
+
+      if (coefminwidth.LT.0) then
+         write(*,*)'Coefficient of Minwidth should be positive'
+         stop
+      else
+         Agrif_Minwidth = coefminwidth
+      endif
+      end subroutine Agrif_Set_Minwidth
+C
+C     **************************************************************************
+CCC   subroutine Agrif_Set_Rafmax
+C     **************************************************************************
+      subroutine Agrif_Set_Rafmax(coefrafmax)
+
+      integer :: coefrafmax
+      integer :: i
+      real :: res
+
+      if (coefrafmax.LT.0) then
+         write(*,*)'Coefficient of  should be positive'
+         stop
+      else
+         res = 1.
+         do i = 1 , coefrafmax - 1
+            res = res * FLOAT(AGRIF_coeffref(1))
+         enddo
+         if ( res .EQ. 0 ) res = 1
+         Agrif_Mind(1) = 1. / res
+C
+         res = 1.
+         do i = 1 , coefrafmax - 1
+            res = res * FLOAT(AGRIF_coeffref(2))
+         enddo
+         if ( res .EQ. 0 ) res = 1
+         Agrif_Mind(2) = 1. / res
+C
+         res = 1.
+         do i = 1 , coefrafmax - 1
+            res = res * FLOAT(AGRIF_coeffref(3))
+         enddo
+         if ( res .EQ. 0 ) res = 1
+         Agrif_Mind(3) = 1. / res
+C
+      endif
+      end subroutine Agrif_Set_Rafmax
+C
+C     **************************************************************************
+CCC   subroutine Agrif_Open_File
+C     **************************************************************************
+      subroutine Agrif_Open_File(num_id,name_file)
+
+      integer :: num_id
+      character(*) :: name_file
+
+      num_id = Agrif_Get_Unit()
+      if ( .NOT. Agrif_Root() ) then
+         name_file = TRIM(Agrif_CFixed())//'_'//TRIM(name_file)
+      endif
+
+      end subroutine Agrif_Open_File
+
+C     **************************************************************************
+CCC    subroutine Agrif_Set_MaskMaxSearch
+C     **************************************************************************
+      subroutine Agrif_Set_MaskMaxSearch(mymaxsearch)
+      integer mymaxsearch
+      MaxSearch = mymaxsearch
+      end subroutine Agrif_Set_MaskMaxSearch
+
+      End Module Agrif_CurgridFunctions 
Index: /vendors/AGRIF/r_00/AGRIF_FILES/modflux.F
===================================================================
--- /vendors/AGRIF/r_00/AGRIF_FILES/modflux.F	(revision 1902)
+++ /vendors/AGRIF/r_00/AGRIF_FILES/modflux.F	(revision 1902)
@@ -0,0 +1,339 @@
+C     Agrif (Adaptive Grid Refinement In Fortran)
+C
+C     Copyright (C) 2003 Laurent Debreu (Laurent.Debreu@imag.fr)
+C                        Christophe Vouland (Christophe.Vouland@imag.fr)    
+C
+C     This program is free software; you can redistribute it and/or modify
+C     it under the terms of the GNU General Public License as published by
+C     the Free Software Foundation; either version 2 of the License, or
+C     (at your option) any later version.
+C
+C     This program is distributed in the hope that it will be useful,
+C     but WITHOUT ANY WARRANTY; without even the implied warranty of
+C     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+C     GNU General Public License for more details.
+C
+C     You should have received a copy of the GNU General Public License
+C     along with this program; if not, write to the Free Software
+C     Foundation, Inc., 59 Temple Place-Suite 330, Boston, MA 02111-1307, USA.
+C
+C
+C
+CCC   Module Agrif_fluxmod
+C
+      Module Agrif_fluxmod
+      Use Agrif_types
+      Use Agrif_Arrays
+      Use Agrif_Curgridfunctions
+      
+      CONTAINS  
+      
+      
+      Subroutine Agrif_AllocateFlux(Flux,fluxtab)
+      Type(Agrif_Flux), Pointer :: Flux
+      Real, Dimension(:,:) :: fluxtab
+      Type(Agrif_Profile), Pointer :: Profile
+      Integer :: dimensio,n,n2
+      INTEGER, DIMENSION(:,:), Pointer :: normalsizes
+      INTEGER, DIMENSION(6) :: unitarray
+      Type(Agrif_Variable), Pointer :: fluxtabvar
+      Integer :: nbout
+      
+      Profile => Flux%profile
+      dimensio = Profile%nbdim
+      
+      unitarray = 1
+      
+      do n=1,dimensio
+        IF (Profile%posvar(n) == 1) THEN
+          IF (Profile%interptab(n) == 'x') THEN
+            Allocate(Flux%fluxtabx)
+            fluxtabvar => Flux%fluxtabx
+          ELSE IF (Profile%interptab(n) == 'y') THEN
+            Allocate(Flux%fluxtaby)
+            fluxtabvar => Flux%fluxtaby
+          ELSE IF (Profile%interptab(n) == 'z') THEN
+            Allocate(Flux%fluxtabz)
+            fluxtabvar => Flux%fluxtabz
+          ENDIF
+          ALLOCATE(fluxtabvar%iarray2(2,6))
+          normalsizes=>fluxtabvar%iarray2
+          normalsizes(1,1) = 2
+          nbout = 1
+          DO n2 = 1,dimensio
+            IF (n2 .NE. n) THEN
+              nbout = nbout + 1
+              If ((Profile%posvar(n2) == 1)
+     &            .OR.(Profile%posvar(n2) == 2)) THEN
+                IF (Profile%interptab(n2) == 'x') THEN
+                  normalsizes(2,n2) = 
+     &                Agrif_Curgrid%nb(1)/agrif_Curgrid%spaceref(1)
+                  normalsizes(1,nbout) = 
+     &                Agrif_Curgrid%nb(1)/agrif_Curgrid%spaceref(1)
+                ELSE IF (Profile%interptab(n2) == 'y') THEN
+                  normalsizes(2,n2) = 
+     &                Agrif_Curgrid%nb(2)/agrif_Curgrid%spaceref(2)
+                  normalsizes(1,nbout) = 
+     &                Agrif_Curgrid%nb(2)/agrif_Curgrid%spaceref(2)
+                ELSE IF (Profile%interptab(n2) == 'z') THEN
+                  normalsizes(2,n2) = 
+     &                Agrif_Curgrid%nb(3)/agrif_Curgrid%spaceref(3)
+                  normalsizes(1,nbout) = 
+     &                Agrif_Curgrid%nb(3)/agrif_Curgrid%spaceref(3)
+                ENDIF
+              ELSE
+                normalsizes(2,n2) = SIZE(fluxtab,n2)
+                normalsizes(1,nbout) = SIZE(fluxtab,n2)
+              ENDIF
+            ENDIF
+          ENDDO          
+        ENDIF
+      enddo
+      
+      
+      do n=1,dimensio
+        IF (Profile%posvar(n) == 1) THEN
+          IF (Profile%interptab(n) == 'x') THEN
+            fluxtabvar => Flux%fluxtabx
+          ELSE IF (Profile%interptab(n) == 'y') THEN
+            fluxtabvar => Flux%fluxtaby
+          ELSE IF (Profile%interptab(n) == 'z') THEN
+            fluxtabvar => Flux%fluxtabz
+          ENDIF
+          Call Agrif_nbdim_allocation(fluxtabvar,unitarray(1:dimensio),
+     &          fluxtabvar%iarray2(1,1:dimensio),dimensio)
+        ENDIF
+      enddo
+      
+      Flux%fluxallocated = .TRUE.
+      
+      End Subroutine Agrif_AllocateFlux
+      
+      FUNCTION Agrif_Search_Flux(fluxname)
+      character*(*) fluxname
+      Type(Agrif_Flux), Pointer :: Agrif_Search_Flux
+      
+      Type(Agrif_Flux), pointer :: parcours
+      Logical :: foundflux
+      
+      foundflux = .FALSE.
+      parcours => Agrif_Curgrid%fluxes
+      
+      Do While (Associated(parcours))
+         IF (parcours % fluxname == fluxname) THEN
+           foundflux = .TRUE.
+           EXIT
+         ENDIF
+         parcours => parcours%nextflux
+      End Do
+      
+      IF (.NOT.foundflux) THEN
+      write(*,*) 'The array flux '''
+     &           //TRIM(fluxname)//''' has not been declared'
+      stop
+      ENDIF      
+      
+      Agrif_Search_Flux => parcours
+      
+      End Function Agrif_Search_Flux
+      
+      Subroutine Agrif_Save_Fluxtab(Flux,Fluxtab)
+      Type(Agrif_Flux), Pointer :: Flux
+      Real, Dimension(:,:) :: Fluxtab
+      INTEGER, DIMENSION(:,:), Pointer :: normalsizes
+      INTEGER, DIMENSION(6) :: normalsizes2, normalsizes3
+      INTEGER, DIMENSION(6) :: unitarray2, unitarray3
+      Type(Agrif_Variable), Pointer :: fluxtabvar
+      Type(Agrif_Profile), Pointer :: Profile
+      Integer :: dimensio,n,n2,j,j1,j2
+      
+      Profile => Flux%profile
+      dimensio = Profile%nbdim
+            
+      do n=1,dimensio
+        IF (Profile%posvar(n) == 1) THEN
+          IF (Profile%interptab(n) == 'x') THEN
+            fluxtabvar => Flux%fluxtabx
+          ELSE IF (Profile%interptab(n) == 'y') THEN
+            fluxtabvar => Flux%fluxtaby
+          ELSE IF (Profile%interptab(n) == 'z') THEN
+            fluxtabvar => Flux%fluxtabz
+          ENDIF 
+          normalsizes => fluxtabvar%iarray2
+          unitarray2 = 1
+          unitarray3 = 1
+          normalsizes2 = normalsizes(1,:)
+          normalsizes3 = normalsizes(2,:)
+          
+          unitarray3(n) = Profile%point(n)
+          normalsizes3(n) = Profile%point(n) 
+                              
+          SELECT CASE(dimensio)
+          CASE(1)
+          CASE(2)
+            j1 = unitarray3(2)
+            Do j=unitarray3(2),normalsizes3(2)
+            do j2 = j1,j1+Agrif_curgrid%spaceref(2)
+!            print *,'flux stocke fiun = ',j2,fluxtab(unitarray3(1),j2)
+            enddo
+            fluxtabvar%array2(1:1,j) = 
+     &      fluxtabvar%array2(1:1,j) +
+     &             SUM(fluxtab(unitarray3(1):normalsizes3(1),
+     &                        j1:j1+Agrif_Curgrid%spaceref(2)))
+             j1 = j1+Agrif_Curgrid%spaceref(2)
+            EndDo
+          END SELECT
+          
+          unitarray3(n) = Profile%point(n)+Agrif_Curgrid%nb(n)
+          normalsizes3(n) = Profile%point(n)+Agrif_Curgrid%nb(n) 
+          SELECT CASE(dimensio)
+          CASE(1)
+          CASE(2)
+            j1 = unitarray3(2)
+            Do j=unitarray3(2),normalsizes3(2)
+            fluxtabvar%array2(2:2,j) = 
+     &      fluxtabvar%array2(2:2,j) +
+     &             SUM(fluxtab(unitarray3(1):normalsizes3(1),
+     &                        j1:j1+Agrif_Curgrid%spaceref(2)))
+             j1 = j1+Agrif_Curgrid%spaceref(2)
+            EndDo
+         END SELECT
+        ENDIF
+      enddo
+                  
+      End Subroutine Agrif_Save_Fluxtab
+
+      Subroutine Agrif_Save_Fluxtab_child(Flux,Fluxtab)
+      Type(Agrif_Flux), Pointer :: Flux
+      Real, Dimension(:,:) :: Fluxtab
+      INTEGER, DIMENSION(:,:), Pointer :: normalsizes
+      INTEGER, DIMENSION(6) :: normalsizes2, normalsizes3
+      INTEGER, DIMENSION(6) :: unitarray2, unitarray3
+      Type(Agrif_Variable), Pointer :: fluxtabvar
+      Type(Agrif_Profile), Pointer :: Profile
+      Integer :: dimensio,n,n2
+      
+      Profile => Flux%profile
+      dimensio = Profile%nbdim
+            
+      do n=1,dimensio
+        IF (Profile%posvar(n) == 1) THEN
+          IF (Profile%interptab(n) == 'x') THEN
+            fluxtabvar => Flux%fluxtabx
+          ELSE IF (Profile%interptab(n) == 'y') THEN
+            fluxtabvar => Flux%fluxtaby
+          ELSE IF (Profile%interptab(n) == 'z') THEN
+            fluxtabvar => Flux%fluxtabz
+          ENDIF 
+          normalsizes => fluxtabvar%iarray2
+          unitarray2 = 1
+          unitarray3 = 1
+          normalsizes2 = normalsizes(1,:)
+          normalsizes3 = normalsizes(2,:)
+          
+          unitarray3(n) = Profile%point(n)+Agrif_Curgrid%ix(n)
+          normalsizes3(n) = unitarray3(n)
+                              
+          SELECT CASE(dimensio)
+          CASE(1)
+          CASE(2)
+            fluxtabvar%array2(1:1,
+     &                        unitarray2(2):normalsizes2(2)) = 
+     &      - fluxtab(unitarray3(1):normalsizes3(1),
+     &                        unitarray3(2):normalsizes3(2))
+!        print *,'flux stocke = ',fluxtab(unitarray3(1):normalsizes3(1),
+!     &                        unitarray3(2):normalsizes3(2))
+          END SELECT
+          
+          unitarray3(n) = unitarray3(n)+
+     &         Agrif_Curgrid%nb(n)/Agrif_Curgrid%spaceref(n)
+          normalsizes3(n) = unitarray3(n)
+          SELECT CASE(dimensio)
+          CASE(1)
+          CASE(2)
+            fluxtabvar%array2(2:2,
+     &                        unitarray2(2):normalsizes2(2)) = 
+     &      - fluxtab(unitarray3(1):normalsizes3(1),
+     &                        unitarray3(2):normalsizes3(2))    
+         END SELECT
+        ENDIF
+      enddo
+                  
+      End Subroutine Agrif_Save_Fluxtab_child
+      
+      Subroutine Agrif_Cancel_Fluxarray(Flux)
+      Type(Agrif_Flux), Pointer :: Flux
+      Type(Agrif_Variable), Pointer :: fluxtabvar
+      Type(Agrif_Profile), Pointer :: Profile
+      Integer :: dimensio,n,n2
+      
+      Profile => Flux%profile
+      dimensio = Profile%nbdim
+            
+      do n=1,dimensio
+        IF (Profile%posvar(n) == 1) THEN
+          IF (Profile%interptab(n) == 'x') THEN
+            fluxtabvar => Flux%fluxtabx
+          ELSE IF (Profile%interptab(n) == 'y') THEN
+            fluxtabvar => Flux%fluxtaby
+          ELSE IF (Profile%interptab(n) == 'z') THEN
+            fluxtabvar => Flux%fluxtabz
+          ENDIF 
+                              
+          SELECT CASE(dimensio)
+          CASE(1)
+          CASE(2)
+            fluxtabvar%array2 = 0.
+          END SELECT
+        ENDIF
+      enddo
+                  
+      End Subroutine Agrif_Cancel_Fluxarray  
+      
+      Subroutine Agrif_FluxCorrect(Flux, procname)
+      Type(Agrif_Flux), Pointer :: Flux
+      External :: procname
+      Type(Agrif_Variable), Pointer :: fluxtabvar
+      Type(Agrif_Profile), Pointer :: Profile
+      Integer :: dimensio,n,n2,j1,j2
+      Integer, Dimension(:), Allocatable :: Loctab
+      Integer :: locind
+      
+      Profile => Flux%profile
+      dimensio = Profile%nbdim
+
+      do n=1,dimensio
+        IF (Profile%posvar(n) == 1) THEN
+          IF (Profile%interptab(n) == 'x') THEN
+            fluxtabvar => Flux%fluxtabx
+            locind = 1
+          ELSE IF (Profile%interptab(n) == 'y') THEN
+            fluxtabvar => Flux%fluxtaby
+            locind = 2
+          ELSE IF (Profile%interptab(n) == 'z') THEN
+            fluxtabvar => Flux%fluxtabz
+            locind = 3
+          ENDIF 
+                              
+          SELECT CASE(dimensio)
+          CASE(1)
+          CASE(2)
+           Allocate(Loctab(2))
+           Loctab(1) = Agrif_Curgrid%ix(locind)
+           Loctab(2) = Agrif_Curgrid%ix(locind)+
+     &         Agrif_Curgrid%nb(locind)/Agrif_Curgrid%spaceref(locind)
+           j1 = agrif_curgrid%ix(2)
+           j2 = agrif_curgrid%ix(2)+
+     &        agrif_curgrid%nb(2)/Agrif_curgrid%spaceref(2)
+           Call Agrif_ChildGrid_to_ParentGrid()
+            Call procname(fluxtabvar%array2,Loctab(1),Loctab(2),j1,j2)
+           Call Agrif_ParentGrid_to_ChildGrid()
+          END SELECT
+        ENDIF
+      enddo
+      
+      If (Allocated(Loctab)) Deallocate(Loctab)
+                  
+      End Subroutine Agrif_FluxCorrect 
+          
+      End Module Agrif_fluxmod
Index: /vendors/AGRIF/r_00/AGRIF_FILES/modinit.F
===================================================================
--- /vendors/AGRIF/r_00/AGRIF_FILES/modinit.F	(revision 1902)
+++ /vendors/AGRIF/r_00/AGRIF_FILES/modinit.F	(revision 1902)
@@ -0,0 +1,252 @@
+C     AGRIF (Adaptive Grid Refinement In Fortran)
+C
+C     Copyright (C) 2003 Laurent Debreu (Laurent.Debreu@imag.fr)
+C                        Christophe Vouland (Christophe.Vouland@imag.fr)    
+C
+C     This program is free software; you can redistribute it and/or modify
+C     it under the terms of the GNU General Public License as published by
+C     the Free Software Foundation; either version 2 of the License, or
+C     (at your option) any later version.
+C
+C     This program is distributed in the hope that it will be useful,
+C     but WITHOUT ANY WARRANTY; without even the implied warranty of
+C     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+C     GNU General Public License for more details.
+C
+C     You should have received a copy of the GNU General Public License
+C     along with this program; if not, write to the Free Software
+C     Foundation, Inc., 59 Temple Place-  Suite 330, Boston, MA 02111-1307, USA.
+C
+C
+C
+CCC   Module Agrif_Init
+C
+      Module Agrif_Init 
+C
+CCC   Description:
+CCC   Several operations on the variables of the current grid (creation,
+CCC   instanciation, ...) used during the creation of the grid hierarchy and
+CCC   during the time integration.
+C
+C     Modules used: 
+C
+      Use Agrif_Types 
+      Use Agrif_link
+C   
+      IMPLICIT NONE
+C
+      Contains
+C     Defininition of the procedures contained in this module
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Allocation  
+C     **************************************************************************
+C  
+      Subroutine Agrif_Allocation(Agrif_Gr)
+C
+CCC   Description:
+CCC   Subroutine to allocate the arrays containing the values of the variables 
+CCC   of the current grd.
+C
+CC    Method:
+CC    Use of the allocate function.  
+C
+C     Declarations:
+C      
+C     Pointer argument:
+      TYPE(AGRIF_grid), Pointer :: Agrif_Gr  ! Pointer on the current grid
+C 
+C     Allocation of the arrays of the variables  
+C     We cut this in several files to avoid long compilation timings
+C
+      Call Agrif_Allocationcalls(Agrif_Gr)
+C
+      if ( Agrif_USE_ONLY_FIXED_GRIDS .EQ. 0 ) then
+C
+         if ( Agrif_Probdim .EQ. 1 ) 
+     &      Allocate(Agrif_Gr%tabpoint1D(Agrif_Gr%nb(1)+1))
+         if ( Agrif_Probdim .EQ. 2 ) 
+     &      Allocate(Agrif_Gr%tabpoint2D(Agrif_Gr%nb(1)+1,
+     &       Agrif_Gr%nb(2)+1))      
+         if ( Agrif_Probdim .EQ. 3 ) 
+     &      Allocate(Agrif_Gr%tabpoint3D(Agrif_Gr%nb(1)+1,
+     &       Agrif_Gr%nb(2)+1,Agrif_Gr%nb(3)+1))      
+C
+      endif
+C 
+      End Subroutine Agrif_Allocation
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Instance 
+C     **************************************************************************
+C 
+      Subroutine Agrif_Instance(Agrif_Gr)
+C
+CCC   Description:
+CCC   Subroutine to do an instance of the common variables to the variables of  
+CCC   the current grid.
+C
+CC    Method:
+CC    Pointing the common variables on these of the current grid.  
+C
+C     Declarations:
+C        
+
+C
+C
+
+C
+C     Pointer argument: 
+      Type(Agrif_Grid), Pointer :: Agrif_Gr   ! Pointer on the current grid  
+C 
+C
+      Agrif_Curgrid => Agrif_Gr
+      Agrif_tabvars => Agrif_Curgrid % tabvars
+C
+      Call Agrif_Get_numberofcells(Agrif_Gr)
+C
+C
+C     Calculation of isf,jsf,nzsf and of the index of the output file 
+      Call Agrif_InitWorkSpace() 
+C
+C 
+      End Subroutine Agrif_Instance
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_initialisations  
+C     **************************************************************************
+      Subroutine Agrif_initialisations(Agrif_Gr)
+C
+CCC   Description:
+C
+CC    Method:
+C
+C     Declarations:
+C        
+      INTEGER :: i
+C
+C     Pointer argument: 
+      Type(Agrif_Grid), Pointer  :: Agrif_Gr
+      
+C
+      do i = 1 , Agrif_NbVariables
+C 
+         Agrif_Gr % tabvars(i) % var % nbdim = 0
+C
+         if (associated(Agrif_Gr%tabvars(i)%var%array1)) then
+             Agrif_Gr % tabvars(i) % var % nbdim = 1
+             Agrif_Gr % tabvars(i) % var % lb(1:1) = 
+     &         lbound(Agrif_Gr%tabvars(i)%var%array1)
+             Agrif_Gr % tabvars(i) % var % ub(1:1) = 
+     &         ubound(Agrif_Gr%tabvars(i)%var%array1)     
+         endif
+         if (associated(Agrif_Gr%tabvars(i)%var%array2)) then
+             Agrif_Gr % tabvars(i) % var % nbdim = 2
+             Agrif_Gr % tabvars(i) % var % lb(1:2) = 
+     &         lbound(Agrif_Gr%tabvars(i)%var%array2)
+             Agrif_Gr % tabvars(i) % var % ub(1:2) = 
+     &         ubound(Agrif_Gr%tabvars(i)%var%array2)
+         endif
+         if (associated(Agrif_Gr%tabvars(i)%var%array3)) then
+             Agrif_Gr % tabvars(i) % var % nbdim = 3
+             Agrif_Gr % tabvars(i) % var % lb(1:3) = 
+     &         lbound(Agrif_Gr%tabvars(i)%var%array3)
+             Agrif_Gr % tabvars(i) % var % ub(1:3) = 
+     &         ubound(Agrif_Gr%tabvars(i)%var%array3)
+         endif
+         if (associated(Agrif_Gr%tabvars(i)%var%array4)) then
+             Agrif_Gr % tabvars(i) % var % nbdim = 4
+             Agrif_Gr % tabvars(i) % var % lb(1:4) = 
+     &         lbound(Agrif_Gr%tabvars(i)%var%array4)
+             Agrif_Gr % tabvars(i) % var % ub(1:4) = 
+     &         ubound(Agrif_Gr%tabvars(i)%var%array4)
+         endif
+         if (associated(Agrif_Gr%tabvars(i)%var%array5)) then
+             Agrif_Gr % tabvars(i) % var % nbdim = 5
+             Agrif_Gr % tabvars(i) % var % lb(1:5) = 
+     &         lbound(Agrif_Gr%tabvars(i)%var%array5)
+             Agrif_Gr % tabvars(i) % var % ub(1:5) = 
+     &         ubound(Agrif_Gr%tabvars(i)%var%array5)
+         endif
+         if (associated(Agrif_Gr%tabvars(i)%var%array6)) then
+             Agrif_Gr % tabvars(i) % var % nbdim = 6
+             Agrif_Gr % tabvars(i) % var % lb(1:6) = 
+     &         lbound(Agrif_Gr%tabvars(i)%var%array6)
+             Agrif_Gr % tabvars(i) % var % ub(1:6) = 
+     &         ubound(Agrif_Gr%tabvars(i)%var%array6)
+         endif
+C
+         if (associated(Agrif_Gr%tabvars(i)%var%darray1)) then
+             Agrif_Gr % tabvars(i) % var % nbdim = 1
+         endif
+         if (associated(Agrif_Gr%tabvars(i)%var%darray2)) then
+             Agrif_Gr % tabvars(i) % var % nbdim = 2
+         endif
+         if (associated(Agrif_Gr%tabvars(i)%var%darray3)) then
+             Agrif_Gr % tabvars(i) % var % nbdim = 3
+         endif
+         if (associated(Agrif_Gr%tabvars(i)%var%darray4)) then
+             Agrif_Gr % tabvars(i) % var % nbdim = 4
+         endif
+         if (associated(Agrif_Gr%tabvars(i)%var%darray5)) then
+             Agrif_Gr % tabvars(i) % var % nbdim = 5
+         endif
+         if (associated(Agrif_Gr%tabvars(i)%var%darray6)) then
+             Agrif_Gr % tabvars(i) % var % nbdim = 6
+         endif
+C
+         if (associated(Agrif_Gr%tabvars(i)%var%larray1)) then
+             Agrif_Gr % tabvars(i) % var % nbdim = 1
+         endif
+         if (associated(Agrif_Gr%tabvars(i)%var%larray2)) then
+             Agrif_Gr % tabvars(i) % var % nbdim = 2
+         endif
+         if (associated(Agrif_Gr%tabvars(i)%var%larray3)) then
+             Agrif_Gr % tabvars(i) % var % nbdim = 3
+         endif
+         if (associated(Agrif_Gr%tabvars(i)%var%larray4)) then
+             Agrif_Gr % tabvars(i) % var % nbdim = 4
+         endif
+         if (associated(Agrif_Gr%tabvars(i)%var%larray5)) then
+             Agrif_Gr % tabvars(i) % var % nbdim = 5
+         endif
+         if (associated(Agrif_Gr%tabvars(i)%var%larray6)) then
+             Agrif_Gr % tabvars(i) % var % nbdim = 6
+         endif
+C
+         if (associated(Agrif_Gr%tabvars(i)%var%iarray1)) then
+             Agrif_Gr % tabvars(i) % var % nbdim = 1
+         endif
+         if (associated(Agrif_Gr%tabvars(i)%var%iarray2)) then
+             Agrif_Gr % tabvars(i) % var % nbdim = 2
+         endif
+         if (associated(Agrif_Gr%tabvars(i)%var%iarray3)) then
+             Agrif_Gr % tabvars(i) % var % nbdim = 3
+         endif
+         if (associated(Agrif_Gr%tabvars(i)%var%iarray4)) then
+             Agrif_Gr % tabvars(i) % var % nbdim = 4
+         endif
+         if (associated(Agrif_Gr%tabvars(i)%var%iarray5)) then
+             Agrif_Gr % tabvars(i) % var % nbdim = 5
+         endif
+         if (associated(Agrif_Gr%tabvars(i)%var%iarray6)) then
+             Agrif_Gr % tabvars(i) % var % nbdim = 6
+         endif
+C
+         if (associated(Agrif_Gr%tabvars(i)%var%carray1)) then
+             Agrif_Gr % tabvars(i) % var % nbdim = 1
+         endif
+         if (associated(Agrif_Gr%tabvars(i)%var%carray2)) then
+             Agrif_Gr % tabvars(i) % var % nbdim = 2
+         endif
+C 
+      enddo
+C
+      Return
+C 
+C
+      End Subroutine Agrif_initialisations
+C 
+C
+      End Module AGRIF_Init 
Index: /vendors/AGRIF/r_00/AGRIF_FILES/modinitvars.F
===================================================================
--- /vendors/AGRIF/r_00/AGRIF_FILES/modinitvars.F	(revision 1902)
+++ /vendors/AGRIF/r_00/AGRIF_FILES/modinitvars.F	(revision 1902)
@@ -0,0 +1,125 @@
+!
+! $Id: modinitvars.F 662 2007-05-25 15:58:52Z opalod $
+!
+C     Agrif (Adaptive Grid Refinement In Fortran)
+C
+C     Copyright (C) 2003 Laurent Debreu (Laurent.Debreu@imag.fr)
+C                        Christophe Vouland (Christophe.Vouland@imag.fr)    
+C
+C     This program is free software; you can redistribute it and/or modify
+C     it under the terms of the GNU General Public License as published by
+C     the Free Software Foundation; either version 2 of the License, or
+C     (at your option) any later version.
+C
+C     This program is distributed in the hope that it will be useful,
+C     but WITHOUT ANY WARRANTY; without even the implied warranty of
+C     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+C     GNU General Public License for more details.
+C
+C     You should have received a copy of the GNU General Public License
+C     along with this program; if not, write to the Free Software
+C     Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+C
+C
+C
+CCC   Module Agrif_Init_Vars
+C
+      Module Agrif_Init_Vars
+C
+CCC   Description:
+CCC   Initialization of the variables of the current grid.
+C
+C     Modules used: 
+C      
+      Use Agrif_Types
+      Use Agrif_link
+C   
+      IMPLICIT NONE
+C
+      Contains
+C     Defininition of the procedures contained in this module 
+C  
+C 
+C     **************************************************************************
+CCC   Subroutine Agrif_Create_var 
+C     **************************************************************************
+C  
+      Subroutine Agrif_Create_Var(Agrif_Gr)
+C
+CCC   Description:
+CCC   Allocation of the field "var" of the grid variables.
+CCC   Fields "root_var", "nbdim" and "parent_var" of the grid variables.
+CCC   Array "tabvars" of the current grid. 
+C
+CC    Method:                  
+C 
+C     Declarations:
+C
+      
+C
+C     Pointer argument:
+      TYPE(Agrif_Grid),pointer   :: Agrif_Gr  ! Pointer on the current grid
+      INTEGER :: nb
+C
+C     Array "tabvars" of the current grid. 
+C
+      Allocate(Agrif_Gr % tabvars(Agrif_NbVariables))
+C      
+      do nb = 1, Agrif_NbVariables
+        Allocate(Agrif_Gr % tabvars(nb) % var)
+      enddo
+
+C     Fields "root_var", "nbdim" and "parent_var" of the grid variables.     
+      if (Agrif_Gr % fixedrank .NE.0) then
+         do nb = 1, Agrif_NbVariables     
+            Agrif_Gr % tabvars(nb) % parent_var => 
+     &      Agrif_Gr % parent %tabvars(nb)
+            Agrif_Gr % tabvars(nb) % var % nbdim =
+     &      Agrif_Mygrid % tabvars(nb) % var % nbdim
+            Agrif_Gr % tabvars(nb) % var % root_var =>
+     &      Agrif_Mygrid % tabvars(nb) % var          
+         enddo
+      endif
+C           
+      End Subroutine Agrif_Create_Var
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_CreateVar
+C     **************************************************************************
+C 
+      Subroutine Agrif_CreateVar(Agrif_Gr)            
+C
+CCC   Description:
+CCC   This subroutine allows to make a link between Mygrid and the current grid 
+C
+C     Modules used:
+C      
+C
+C     Declarations:
+C      
+C
+C
+C     Arguments      
+C
+      TYPE(Agrif_Grid),pointer   :: Agrif_Gr    ! Pointer on the current grid
+      INTEGER                    :: i           ! Loop
+C
+      if (Agrif_Gr % fixedrank .NE. 0) then
+C  
+         do i = 1 , Agrif_NbVariables 
+            Agrif_Gr % tabvars(i) % parent_var => 
+     &      Agrif_Gr % parent % tabvars(i) 
+            Agrif_Gr % tabvars(i) % var % root_var => 
+     &      Agrif_Mygrid % tabvars(i) % var
+            Agrif_Gr % tabvars(i) % var % nbdim  = 
+     &      Agrif_Gr % parent % tabvars(i) % var % nbdim
+         enddo 
+C	 
+      endif 
+C       
+      End Subroutine Agrif_CreateVar
+C
+C
+C
+      End Module Agrif_Init_Vars
Index: /vendors/AGRIF/r_00/AGRIF_FILES/modinterp.F
===================================================================
--- /vendors/AGRIF/r_00/AGRIF_FILES/modinterp.F	(revision 1902)
+++ /vendors/AGRIF/r_00/AGRIF_FILES/modinterp.F	(revision 1902)
@@ -0,0 +1,2272 @@
+!
+! $Id: modinterp.F 1793 2010-01-06 19:20:12Z rblod $
+!
+C     AGRIF (Adaptive Grid Refinement In Fortran)
+C
+C     Copyright (C) 2003 Laurent Debreu (Laurent.Debreu@imag.fr)
+C                        Christophe Vouland (Christophe.Vouland@imag.fr)    
+C
+C     This program is free software; you can redistribute it and/or modify
+C     it under the terms of the GNU General Public License as published by
+C     the Free Software Foundation; either version 2 of the License, or
+C     (at your option) any later version.
+C
+C     This program is distributed in the hope that it will be useful,
+C     but WITHOUT ANY WARRANTY; without even the implied warranty of
+C     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+C     GNU General Public License for more details.
+C
+C     You should have received a copy of the GNU General Public License
+C     along with this program; if not, write to the Free Software
+C     Foundation, Inc., 59 Temple Place- Suite 330, Boston, MA 02111-1307, USA.
+C
+C
+C
+CCC   Module Agrif_Interpolation
+C
+      Module Agrif_Interpolation
+C
+CCC   Description:
+CCC   Module to initialize a fine grid from its parent grid, by using a space 
+CCC   interpolation
+C
+C     Modules used:
+C  
+      Use Agrif_Interpbasic
+      Use Agrif_Arrays
+      Use Agrif_Mask 
+      Use Agrif_CurgridFunctions
+#if defined AGRIF_MPI
+      Use Agrif_mpp
+#endif
+C      
+      IMPLICIT NONE
+      logical,  private:: precomputedone(7) = .FALSE.
+C
+      CONTAINS
+C     Define procedures contained in this module        
+C
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Interp_1d
+C     **************************************************************************
+C 
+      Subroutine Agrif_Interp_1d(TypeInterp,parent,child,tab,
+     &    torestore,nbdim,procname)            
+C
+CCC   Description:
+CCC   Subroutine to calculate the boundary conditions of a fine grid for a 1D
+C        grid variable.
+C
+C     Declarations:
+C      
+      
+C
+C     Arguments      
+      INTEGER :: nbdim
+      INTEGER,DIMENSION(6) :: TypeInterp     ! Kind of interpolation
+                                             !    (linear,lagrange,spline)
+      TYPE(AGRIF_PVariable) :: parent        ! Variable on the parent grid
+      TYPE(AGRIF_PVariable) :: child         ! Variable on the child grid
+      TYPE(AGRIF_PVariable) :: childtemp     ! Temporary variable on the child
+                                             !    grid
+      LOGICAL :: torestore
+      REAL, DIMENSION(
+     &         child%var%lb(1):child%var%ub(1)
+     &         ), Target :: tab    ! Result
+      External :: procname
+      Optional ::  procname
+C
+C
+      allocate(childtemp % var)  
+C      
+C     Pointer on the root variable
+      childtemp % var % root_var => child % var %root_var
+C      
+C     Number of dimensions of the grid variable
+      childtemp % var % nbdim = nbdim
+C
+C     Tab is the result of the interpolation
+      childtemp % var % array1 => tab 
+      
+      childtemp % var % lb = child % var % lb
+      childtemp % var % ub = child % var % ub  
+            
+C      
+      if (torestore) then
+C 
+          childtemp % var % array1 = child % var % array1
+C          
+          childtemp % var % restore1D => child % var % restore1D
+C      
+        else
+C        
+          Nullify(childtemp % var % restore1D)
+C      
+      endif     
+C 
+C     Index indicating (in the Agrif_Interp1D procedure) if a space
+C        interpolation is necessary
+      childtemp % var % interpIndex => child % var % interpIndex       
+      childtemp % var % Interpolationshouldbemade = 
+     &    child % var % Interpolationshouldbemade 
+      childtemp % var % list_interp => child % var% list_interp            
+C      
+      if (present(procname)) then
+      Call Agrif_InterpVariable
+     &     (TypeInterp,parent,childtemp,torestore,procname)
+      else
+      Call Agrif_InterpVariable
+     &     (TypeInterp,parent,childtemp,torestore)
+      endif
+      child % var % list_interp => childtemp % var %list_interp     
+C      
+      deallocate(childtemp % var)
+C
+C       
+      End Subroutine Agrif_Interp_1D
+C
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Interp_2d
+C     **************************************************************************
+C 
+      Subroutine Agrif_Interp_2d(TypeInterp,parent,child,tab,
+     &                           torestore,nbdim,procname)            
+C
+CCC   Description:
+CCC   Subroutine to calculate the boundary conditions of a fine grid for a 2D
+C        grid variable.
+C
+C     Declarations:
+C      
+      
+C
+C     Arguments      
+      INTEGER :: nbdim
+      INTEGER,DIMENSION(6) :: TypeInterp     ! Kind of interpolation
+                                             !    (linear,lagrange,spline)
+      TYPE(AGRIF_PVariable) :: parent        ! Variable on the parent grid
+      TYPE(AGRIF_PVariable) :: child         ! Variable on the child grid
+      TYPE(AGRIF_PVariable) :: childtemp     ! Temporary variable on the child
+                                             !    grid
+      LOGICAL :: torestore
+      REAL, DIMENSION(
+     &         child%var%lb(1):child%var%ub(1),
+     &         child%var%lb(2):child%var%ub(2)
+     &    ), Target :: tab    ! Result
+      External :: procname
+      Optional ::  procname
+C
+C
+      allocate(childtemp % var)  
+C      
+C     Pointer on the root variable
+      childtemp % var % root_var => child % var %root_var
+C      
+C     Number of dimensions of the grid variable
+      childtemp % var % nbdim = nbdim
+C
+C     Tab is the result of the interpolation
+      childtemp % var % array2 => tab  
+      
+      childtemp % var % lb = child % var % lb
+      childtemp % var % ub = child % var % ub
+      
+C
+      if (torestore) then      
+C 
+          childtemp % var % array2 = child % var % array2          
+C 
+          childtemp % var % restore2D => child % var % restore2D        
+C      
+        else
+C        
+          Nullify(childtemp % var % restore2D)
+C      
+      endif       
+C 
+C     Index indicating (in the Agrif_Interp2D procedure) if a space
+C        interpolation is necessary
+      childtemp % var % interpIndex => child % var % interpIndex       
+      childtemp % var % Interpolationshouldbemade = 
+     &    child % var % Interpolationshouldbemade   
+      childtemp % var % list_interp => child % var% list_interp          
+C     
+      if (present(procname)) then
+      Call Agrif_InterpVariable
+     &     (TypeInterp,parent,childtemp,torestore,procname)
+      else
+      Call Agrif_InterpVariable
+     &     (TypeInterp,parent,childtemp,torestore)
+      endif
+
+      child % var % list_interp => childtemp % var %list_interp     
+C      
+      deallocate(childtemp % var)
+C
+C       
+      End Subroutine Agrif_Interp_2D
+C
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Interp_3d
+C     **************************************************************************
+C 
+      Subroutine Agrif_Interp_3d(TypeInterp,parent,child,tab,
+     &   torestore,nbdim,procname)            
+C
+CCC   Description:
+CCC   Subroutine to calculate the boundary conditions of a fine grid for a 3D
+C        grid variable.
+C
+C     Declarations:
+C      
+      
+C
+C     Arguments      
+      INTEGER :: nbdim
+      INTEGER,DIMENSION(6) :: TypeInterp     ! Kind of interpolation
+                                             !    (linear,lagrange,spline)
+      TYPE(AGRIF_PVariable) :: parent        ! Variable on the parent grid
+      TYPE(AGRIF_PVariable) :: child         ! Variable on the child grid
+      TYPE(AGRIF_PVariable) :: childtemp     ! Temporary variable on the child
+                                             !    grid
+      LOGICAL :: torestore
+      REAL, DIMENSION(
+     &         child%var%lb(1):child%var%ub(1),
+     &         child%var%lb(2):child%var%ub(2),
+     &         child%var%lb(3):child%var%ub(3)
+     &      ), Target :: tab  ! Results
+      External :: procname
+      Optional ::  procname
+C
+C
+      allocate(childtemp % var)  
+C
+C     Pointer on the root variable
+      childtemp % var % root_var => child % var %root_var
+C      
+C     Number of dimensions of the grid variable
+      childtemp % var % nbdim = nbdim  
+C     
+C     Tab is the result of the interpolation 
+      childtemp % var % array3 => tab 
+      
+      childtemp % var % lb = child % var % lb
+      childtemp % var % ub = child % var % ub        
+C      
+      if (torestore) then
+C     
+          childtemp % var % array3 = child % var % array3
+C
+          childtemp % var % restore3D => child % var % restore3D
+C      
+        else
+C        
+          Nullify(childtemp % var % restore3D)
+C      
+      endif
+C 
+C     Index indicating (in the Agrif_Interp3D procedure) if a space
+C        interpolation is necessary
+      childtemp % var % interpIndex => child % var % interpIndex    
+      childtemp % var % Interpolationshouldbemade = 
+     &    child % var % Interpolationshouldbemade   
+      childtemp % var % list_interp => child % var% list_interp          
+C     
+
+      if (present(procname)) then
+      Call Agrif_InterpVariable
+     &     (TypeInterp,parent,childtemp,torestore,procname)
+      else
+      Call Agrif_InterpVariable
+     &     (TypeInterp,parent,childtemp,torestore)
+      endif
+
+
+      child % var % list_interp => childtemp % var %list_interp     
+C      
+      deallocate(childtemp % var)
+C
+C       
+      End Subroutine Agrif_Interp_3D               
+C
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Interp_4d
+C     **************************************************************************
+C 
+      Subroutine Agrif_Interp_4d(TypeInterp,parent,child,tab,
+     &   torestore,nbdim,procname)            
+C
+CCC   Description:
+CCC   Subroutine to calculate the boundary conditions of a fine grid for a 4D
+C        grid variable.
+C
+C     Declarations:
+C      
+      
+C
+C     Arguments      
+      INTEGER :: nbdim
+      INTEGER,DIMENSION(6) :: TypeInterp     ! Kind of interpolation
+                                             !    (linear,lagrange,spline)
+      TYPE(AGRIF_PVariable) :: parent        ! Variable on the parent grid
+      TYPE(AGRIF_PVariable) :: child         ! Variable on the child grid
+      TYPE(AGRIF_PVariable) :: childtemp     ! Temporary variable on the child
+                                             !    grid
+      LOGICAL :: torestore
+      REAL, DIMENSION(
+     &         child%var%lb(1):child%var%ub(1),
+     &         child%var%lb(2):child%var%ub(2),
+     &         child%var%lb(3):child%var%ub(3),
+     &         child%var%lb(4):child%var%ub(4)
+     &      ), Target :: tab  ! Results
+      External :: procname
+      Optional ::  procname
+C
+C
+      allocate(childtemp % var)  
+C
+C     Pointer on the root variable
+      childtemp % var % root_var => child % var %root_var
+C      
+C     Number of dimensions of the grid variable
+      childtemp % var % nbdim = nbdim  
+C      
+C     Tab is the result of the interpolation
+      childtemp % var % array4 => tab 
+      
+      childtemp % var % lb = child % var % lb
+      childtemp % var % ub = child % var % ub  
+            
+C 
+      if (torestore) then
+C 
+          childtemp % var % array4 = child % var % array4
+C
+          childtemp % var % restore4D => child % var % restore4D
+C      
+        else
+C        
+          Nullify(childtemp % var % restore4D)
+C      
+      endif        
+C 
+C     Index indicating (in the Agrif_Interp4D procedure) if a space
+C        interpolation is necessary
+      childtemp % var % interpIndex => child % var % interpIndex    
+      childtemp % var % Interpolationshouldbemade = 
+     &    child % var % Interpolationshouldbemade  
+      childtemp % var % list_interp => child % var% list_interp           
+C     
+      if (present(procname)) then
+      Call Agrif_InterpVariable
+     &     (TypeInterp,parent,childtemp,torestore,procname)
+      else
+      Call Agrif_InterpVariable
+     &     (TypeInterp,parent,childtemp,torestore)
+      endif
+
+
+      child % var % list_interp => childtemp % var %list_interp
+C      
+      deallocate(childtemp % var)
+C
+C       
+      End Subroutine Agrif_Interp_4D
+C
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Interp_5d
+C     **************************************************************************
+C 
+      Subroutine Agrif_Interp_5d(TypeInterp,parent,child,tab,
+     &   torestore,nbdim,procname)            
+C
+CCC   Description:
+CCC   Subroutine to calculate the boundary conditions of a fine grid for a 5D
+C        grid variable.
+C
+C     Declarations:
+C      
+      
+C
+C     Arguments      
+      INTEGER :: nbdim
+      INTEGER,DIMENSION(6) :: TypeInterp     ! Kind of interpolation
+                                             !    (linear,lagrange,spline)
+      TYPE(AGRIF_PVariable) :: parent        ! Variable on the parent grid
+      TYPE(AGRIF_PVariable) :: child         ! Variable on the child grid
+      TYPE(AGRIF_PVariable) :: childtemp     ! Temporary variable on the child
+                                             !    grid
+      LOGICAL :: torestore
+      REAL, DIMENSION(
+     &         child%var%lb(1):child%var%ub(1),
+     &         child%var%lb(2):child%var%ub(2),
+     &         child%var%lb(3):child%var%ub(3),
+     &         child%var%lb(4):child%var%ub(4),
+     &         child%var%lb(5):child%var%ub(5)
+     &      ),  Target :: tab  ! Results
+      External :: procname
+      Optional ::  procname
+C
+C
+      allocate(childtemp % var)  
+C
+C     Pointer on the root variable
+      childtemp % var % root_var => child % var %root_var
+C      
+C     Number of dimensions of the grid variable
+      childtemp % var % nbdim = nbdim  
+C      
+C     Tab is the result of the interpolation
+      childtemp % var % array5 => tab  
+      
+      childtemp % var % lb = child % var % lb
+      childtemp % var % ub = child % var % ub  
+            
+C      
+      if (torestore) then
+C 
+          childtemp % var % array5 = child % var % array5
+C
+          childtemp % var % restore5D => child % var % restore5D
+C      
+        else
+C        
+          Nullify(childtemp % var % restore5D)
+C      
+      endif       
+C 
+C     Index indicating (in the Agrif_Interp5D procedure) if a space
+C        interpolation is necessary
+      childtemp % var % interpIndex => child % var % interpIndex    
+      childtemp % var % Interpolationshouldbemade = 
+     &    child % var % Interpolationshouldbemade   
+      childtemp % var % list_interp => child % var% list_interp          
+C      
+      if (present(procname)) then
+      Call Agrif_InterpVariable
+     &     (TypeInterp,parent,childtemp,torestore,procname)
+      else
+      Call Agrif_InterpVariable
+     &     (TypeInterp,parent,childtemp,torestore)
+      endif
+
+     
+      child % var % list_interp => childtemp % var %list_interp
+C      
+      deallocate(childtemp % var)
+C
+C       
+      End Subroutine Agrif_Interp_5D
+C
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Interp_6d
+C     **************************************************************************
+C 
+      Subroutine Agrif_Interp_6d(TypeInterp,parent,child,tab,
+     &  torestore,nbdim,procname)            
+C
+CCC   Description:
+CCC   Subroutine to calculate the boundary conditions of a fine grid for a 6D
+C        grid variable.
+C
+C     Declarations:
+C      
+      
+C
+C     Arguments      
+      INTEGER :: nbdim
+      INTEGER,DIMENSION(6) :: TypeInterp     ! Kind of interpolation
+                                             !    (linear,lagrange,spline)
+      TYPE(AGRIF_PVariable) :: parent        ! Variable on the parent grid
+      TYPE(AGRIF_PVariable) :: child         ! Variable on the child grid
+      TYPE(AGRIF_PVariable) :: childtemp     ! Temporary variable on the child
+                                             !    grid
+      LOGICAL :: torestore
+      REAL, DIMENSION(
+     &         child%var%lb(1):child%var%ub(1),
+     &         child%var%lb(2):child%var%ub(2),
+     &         child%var%lb(3):child%var%ub(3),
+     &         child%var%lb(4):child%var%ub(4),
+     &         child%var%lb(5):child%var%ub(5),
+     &         child%var%lb(6):child%var%ub(6)
+     &      ),  Target :: tab  ! Results
+      External :: procname
+      Optional ::  procname
+C
+C
+      allocate(childtemp % var)  
+C
+C     Pointer on the root variable
+      childtemp % var % root_var => child % var %root_var
+C      
+C     Number of dimensions of the grid variable
+      childtemp % var % nbdim = nbdim  
+C      
+C     Tab is the result of the interpolation
+      childtemp % var % array6 => tab  
+      
+      childtemp % var % lb = child % var % lb
+      childtemp % var % ub = child % var % ub  
+            
+C      
+      if (torestore) then
+C 
+          childtemp % var % array6 = child % var % array6
+C
+          childtemp % var % restore6D => child % var % restore6D
+C      
+        else
+C        
+          Nullify(childtemp % var % restore6D)
+C      
+      endif       
+C 
+C     Index indicating (in the Agrif_Interp6D procedure) if a space
+C        interpolation is necessary
+      childtemp % var % interpIndex => child % var % interpIndex    
+      childtemp % var % Interpolationshouldbemade = 
+     &    child % var % Interpolationshouldbemade  
+     
+      childtemp % var % list_interp => child % var% list_interp           
+C      
+
+      if (present(procname)) then
+      Call Agrif_InterpVariable
+     &     (TypeInterp,parent,childtemp,torestore,procname)
+      else
+      Call Agrif_InterpVariable
+     &     (TypeInterp,parent,childtemp,torestore)
+      endif
+
+
+C      
+      child % var % list_interp => childtemp % var %list_interp
+      deallocate(childtemp % var)
+C
+C       
+      End Subroutine Agrif_Interp_6D
+C
+C
+C
+C     **************************************************************************
+C     Subroutine Agrif_InterpVariable    
+C     **************************************************************************
+C   
+      Subroutine Agrif_InterpVariable(TYPEinterp,parent,child,torestore,
+     &            procname)
+C
+CCC   Description:
+CCC   Subroutine to set some arguments of subroutine Agrif_InterpnD, n being the
+CCC   DIMENSION of the grid variable.
+C
+CC    Declarations:
+C      
+c      
+C      
+C
+C     Scalar argument
+      INTEGER,DIMENSION(6) :: TYPEinterp! TYPE of interpolation
+                                        !    (linear,spline,...)
+C     Data TYPE arguments                                   
+      TYPE(AGRIF_PVariable) :: parent   ! Variable on the parent grid
+      TYPE(AGRIF_PVariable) :: child    ! Variable on the child grid
+C
+C     LOGICAL argument      
+      LOGICAL:: torestore               ! Its value is .false., it indicates the
+                                        ! results of the interpolation are    
+                                        ! applied on the whole current grid   
+C
+C     Local scalars      
+      INTEGER               :: nbdim          ! Number of dimensions of the
+                                              !    current grid
+      INTEGER ,DIMENSION(6) :: pttab_child  
+      INTEGER ,DIMENSION(6) :: petab_child      
+      INTEGER ,DIMENSION(6) :: pttab_parent  
+      REAL    ,DIMENSION(6) :: s_child,s_parent
+      REAL    ,DIMENSION(6) :: ds_child,ds_parent
+      External :: procname
+      Optional ::  procname
+
+C
+      Call PreProcessToInterpOrUpdate(parent,child,
+     &             petab_Child(1:nbdim),
+     &             pttab_Child(1:nbdim),pttab_Parent(1:nbdim),
+     &             s_Child(1:nbdim),s_Parent(1:nbdim),
+     &             ds_Child(1:nbdim),ds_Parent(1:nbdim),
+     &             nbdim)
+C
+C
+C     Call to a procedure of interpolation against the number of dimensions of 
+C     the grid variable
+C
+
+      if (present(procname)) then
+      call Agrif_InterpnD
+     &            (TYPEinterp,parent,child,
+     &             pttab_Child(1:nbdim),petab_Child(1:nbdim),
+     &             pttab_Child(1:nbdim),pttab_Parent(1:nbdim),
+     &             s_Child(1:nbdim),s_Parent(1:nbdim),
+     &             ds_Child(1:nbdim),ds_Parent(1:nbdim),
+     &             child,torestore,nbdim,procname)
+      else
+      call Agrif_InterpnD
+     &            (TYPEinterp,parent,child,
+     &             pttab_Child(1:nbdim),petab_Child(1:nbdim),
+     &             pttab_Child(1:nbdim),pttab_Parent(1:nbdim),
+     &             s_Child(1:nbdim),s_Parent(1:nbdim),
+     &             ds_Child(1:nbdim),ds_Parent(1:nbdim),
+     &             child,torestore,nbdim)
+
+      endif
+C
+      Return
+C
+C
+      End subroutine Agrif_InterpVariable       
+C
+C
+C     **************************************************************************
+C     Subroutine Agrif_InterpnD  
+C     **************************************************************************
+C  
+      Subroutine Agrif_InterpnD(TYPEinterp,parent,child,
+     &                          pttab,petab,
+     &                          pttab_Child,pttab_Parent,
+     &                          s_Child,s_Parent,ds_Child,ds_Parent,
+     &                          restore,torestore,nbdim,procname)
+C
+C     Description:
+C     Subroutine to interpolate a nD grid variable from its parent grid,
+C     by using a space interpolation. 
+C
+C     Declarations:
+C
+      
+C
+#ifdef AGRIF_MPI
+C
+#include "mpif.h"
+C
+#endif
+C
+C     Arguments
+      External :: procname
+      Optional :: procname
+      INTEGER                    :: nbdim
+      INTEGER,DIMENSION(6)       :: TYPEinterp         ! TYPE of interpolation
+                                                       !    (linear,...)
+      TYPE(AGRIF_PVARIABLE)      :: parent             ! Variable of the parent
+                                                       !    grid
+      TYPE(AGRIF_PVARIABLE)      :: child              ! Variable of the child
+                                                       !    grid
+      INTEGER,DIMENSION(nbdim)   :: pttab              ! Index of the first
+                                                       !    point inside the
+                                                       !    domain
+      INTEGER,DIMENSION(nbdim)   :: petab              ! Index of the first
+                                                       !    point inside the
+                                                       !    domain
+      INTEGER,DIMENSION(nbdim)   :: pttab_Child        ! Index of the first
+                                                       !    point inside the
+                                                       !    domain for the child
+                                                       !    grid variable
+      INTEGER,DIMENSION(nbdim)   :: pttab_Parent       ! Index of the first
+                                                       !    point inside the
+                                                       !    domain for the
+                                                       !    parent grid variable
+      TYPE(AGRIF_PVARIABLE)      :: restore            ! Indicates points where
+                                                       !    interpolation
+      REAL,DIMENSION(nbdim)      :: s_Child,s_Parent   ! Positions of the parent
+                                                       !    and child grids
+      REAL,DIMENSION(nbdim)      :: ds_Child,ds_Parent ! Space steps of the
+                                                       !    parent and child
+                                                       !    grids
+      LOGICAL                        :: torestore      ! Indicates if the array
+                                                       !    restore is used
+C
+C     Local pointers
+      TYPE(AGRIF_PVARIABLE),SAVE      :: tempP,tempPextend  ! Temporary parent grid variable
+      TYPE(AGRIF_PVARIABLE),SAVE      :: tempC      ! Temporary child grid variable
+C
+C     Local scalars        
+      INTEGER                     :: i,j,k,l,m,n
+      INTEGER,DIMENSION(nbdim)    :: pttruetab,cetruetab
+      INTEGER,DIMENSION(nbdim)    :: indmin,indmax
+      LOGICAL,DIMENSION(nbdim)    :: noraftab
+      REAL   ,DIMENSION(nbdim)    :: s_Child_temp,s_Parent_temp
+      INTEGER,DIMENSION(nbdim)    :: lowerbound,upperbound
+      INTEGER,DIMENSION(nbdim)    :: indminglob,indmaxglob
+      INTEGER,DIMENSION(nbdim,2,2) :: childarray
+      INTEGER,DIMENSION(nbdim,2,2) :: parentarray
+      LOGICAL :: memberin,member
+      TYPE(AGRIF_PVARIABLE),SAVE                      ::  parentvalues
+      LOGICAL :: find_list_interp
+      INTEGER,DIMENSION(nbdim)    :: indminglob2,indmaxglob2      
+C
+#ifdef AGRIF_MPI
+C
+      LOGICAL :: memberout
+      INTEGER,PARAMETER                          :: etiquette = 100
+      INTEGER                                    :: code
+      INTEGER,DIMENSION(nbdim,4)           :: tab3
+      INTEGER,DIMENSION(nbdim,4,0:Agrif_Nbprocs-1) :: tab4
+      INTEGER,DIMENSION(nbdim,0:Agrif_Nbprocs-1,8) :: tab4t
+      LOGICAL, DIMENSION(0:Agrif_Nbprocs-1) :: memberinall
+      LOGICAL, DIMENSION(0:Agrif_Nbprocs-1) :: sendtoproc1,recvfromproc1
+      LOGICAL, DIMENSION(1) :: memberin1
+C
+#endif      
+C     
+
+C   
+C     Boundaries of the current grid where interpolation is done
+
+      IF (Associated(child%var%list_interp)) THEN
+      Call Agrif_Find_list_interp(child%var%list_interp,pttab,petab,
+     &                          pttab_Child,pttab_Parent,nbdim,
+     &                          indmin,indmax,indminglob,
+     &       indmaxglob,indminglob2,indmaxglob2,parentarray,
+     &       pttruetab,cetruetab,member,memberin,find_list_interp
+#if defined AGRIF_MPI
+     &       ,tab4t,memberinall,sendtoproc1,recvfromproc1
+#endif
+     &    )
+      ELSE
+      find_list_interp = .FALSE.
+      ENDIF
+      
+      IF (.not.find_list_interp) THEN
+
+      Call Agrif_nbdim_Get_bound_dimension(child % var,
+     &                               lowerbound,upperbound,nbdim)
+      
+      Call Agrif_Childbounds(nbdim,lowerbound,upperbound,
+     &                                   pttab,petab,
+     &                                   pttruetab,cetruetab,memberin)
+     
+C
+      Call Agrif_Parentbounds(TYPEinterp,nbdim,indminglob,indmaxglob,
+     &                        s_Parent_temp,s_Child_temp,
+     &                        s_Child,ds_Child,
+     &                        s_Parent,ds_Parent,
+     &                        pttab,petab,
+     &                        pttab_Child,pttab_Parent,
+     &                        child%var%root_var%posvar,
+     &                        child % var % root_var % interptab)
+       
+#ifdef AGRIF_MPI
+       IF (memberin) THEN
+        Call Agrif_Parentbounds(TYPEinterp,nbdim,indmin,indmax,
+     &                        s_Parent_temp,s_Child_temp,
+     &                        s_Child,ds_Child,
+     &                        s_Parent,ds_Parent,
+     &                        pttruetab,cetruetab,
+     &                        pttab_Child,pttab_Parent,
+     &                        child%var%root_var%posvar,
+     &                        child % var % root_var % interptab)
+      ENDIF
+       
+      Call Agrif_nbdim_Get_bound_dimension(parent%var,
+     &                              lowerbound,upperbound,nbdim)
+       
+      Call Agrif_ChildGrid_to_ParentGrid()
+C
+      Call Agrif_Childbounds(nbdim,
+     &                       lowerbound,upperbound,
+     &                       indminglob,indmaxglob,
+     &                       indminglob2,indmaxglob2,member)
+
+C
+      IF (member) THEN
+      Call Agrif_GlobtoLocInd2(parentarray,
+     &                     lowerbound,upperbound,
+     &                     indminglob2,indmaxglob2,
+     &                     nbdim,Agrif_Procrank,
+     &                     member)
+       endif
+       
+      Call Agrif_ParentGrid_to_ChildGrid()
+#else
+      parentarray(:,1,1) = indminglob
+      parentarray(:,2,1) = indmaxglob
+      parentarray(:,1,2) = indminglob
+      parentarray(:,2,2) = indmaxglob
+      indmin = indminglob
+      indmax = indmaxglob
+      member = .TRUE.
+#endif
+
+      ELSE
+      
+#if !defined AGRIF_MPI
+      parentarray(:,1,1) = indminglob
+      parentarray(:,2,1) = indmaxglob
+      parentarray(:,1,2) = indminglob
+      parentarray(:,2,2) = indmaxglob
+      indmin = indminglob
+      indmax = indmaxglob
+      member = .TRUE.
+      s_Parent_temp = s_Parent + (indminglob - pttab_Parent)*ds_Parent
+      s_Child_temp = s_Child + (pttab - pttab_Child) * ds_Child
+#else      
+      s_Parent_temp = s_Parent + (indmin - pttab_Parent)*ds_Parent
+      s_Child_temp = s_Child + (pttruetab - pttab_Child) * ds_Child
+#endif      
+           
+      ENDIF
+
+      IF (member) THEN
+      IF (.not.associated(tempP%var)) allocate(tempP%var)
+
+C
+      Call Agrif_nbdim_allocation(tempP%var,
+     &     parentarray(:,1,1),parentarray(:,2,1),nbdim)
+
+      Call Agrif_nbdim_Full_VarEQreal(tempP%var,0.,nbdim)
+
+
+
+      IF (present(procname)) THEN
+      Call Agrif_ChildGrid_to_ParentGrid()
+            SELECT CASE (nbdim)
+        CASE(1)
+          CALL procname(tempP%var%array1,
+     &                          parentarray(1,1,2),parentarray(1,2,2))
+        CASE(2)
+          CALL procname(tempP%var%array2,
+     &                          parentarray(1,1,2),parentarray(1,2,2),
+     &                          parentarray(2,1,2),parentarray(2,2,2))
+        CASE(3)
+          CALL procname(tempP%var%array3,
+     &                          parentarray(1,1,2),parentarray(1,2,2),
+     &                          parentarray(2,1,2),parentarray(2,2,2),
+     &                          parentarray(3,1,2),parentarray(3,2,2))
+        CASE(4)
+          CALL procname(tempP%var%array4,
+     &                          parentarray(1,1,2),parentarray(1,2,2),
+     &                          parentarray(2,1,2),parentarray(2,2,2),
+     &                          parentarray(3,1,2),parentarray(3,2,2),
+     &                          parentarray(4,1,2),parentarray(4,2,2))
+        CASE(5)
+          CALL procname(tempP%var%array5,
+     &                          parentarray(1,1,2),parentarray(1,2,2),
+     &                          parentarray(2,1,2),parentarray(2,2,2),
+     &                          parentarray(3,1,2),parentarray(3,2,2),
+     &                          parentarray(4,1,2),parentarray(4,2,2),
+     &                          parentarray(5,1,2),parentarray(5,2,2))
+        CASE(6)
+          CALL procname(tempP%var%array6,
+     &                          parentarray(1,1,2),parentarray(1,2,2),
+     &                          parentarray(2,1,2),parentarray(2,2,2),
+     &                          parentarray(3,1,2),parentarray(3,2,2),
+     &                          parentarray(4,1,2),parentarray(4,2,2),
+     &                          parentarray(5,1,2),parentarray(5,2,2),
+     &                          parentarray(6,1,2),parentarray(6,2,2))
+            END SELECT
+      Call Agrif_ParentGrid_to_ChildGrid()
+      ELSE
+
+      Call Agrif_nbdim_VarEQvar(tempP%var,
+     &        parentarray(:,1,1),parentarray(:,2,1),
+     &        parent%var,parentarray(:,1,2),parentarray(:,2,2),
+     &        nbdim)
+      ENDIF
+            endif
+
+#ifdef AGRIF_MPI
+      if (.not.find_list_interp) then
+      tab3(:,1) = indminglob2(:)
+      tab3(:,2) = indmaxglob2(:)
+      tab3(:,3) = indmin(:)
+      tab3(:,4) = indmax(:)
+C
+C
+      Call MPI_ALLGATHER(tab3,4*nbdim,MPI_INTEGER,tab4,4*nbdim,
+     &                   MPI_INTEGER,MPI_COMM_AGRIF,code)
+
+      IF (.not.associated(tempPextend%var)) Allocate(tempPextend%var)
+
+      DO k=0,Agrif_Nbprocs-1
+       do j=1,4
+         do i=1,nbdim
+         tab4t(i,k,j) = tab4(i,j,k)
+                enddo
+      enddo
+      enddo
+      
+      memberin1(1) = memberin
+      CALL MPI_ALLGATHER(memberin1,1,MPI_LOGICAL,memberinall,
+     &                  1,MPI_LOGICAL,MPI_COMM_AGRIF,code)
+
+       Call Get_External_Data_first(tab4t(:,:,1),
+     &            tab4t(:,:,2),
+     &            tab4t(:,:,3),tab4t(:,:,4),nbdim,member,memberin,
+     &            memberinall,sendtoproc1,recvfromproc1,tab4t(:,:,5),
+     & tab4t(:,:,6),tab4t(:,:,7),tab4t(:,:,8))
+          
+      endif     
+           
+!      Call Get_External_Data(tempP,tempPextend,tab4t(:,:,1),
+!     &            tab4t(:,:,2),
+!     &            tab4t(:,:,3),tab4t(:,:,4),nbdim,member,memberin,
+!     &            memberinall)
+     
+      Call ExchangeSameLevel2(sendtoproc1,recvfromproc1,nbdim,
+     &            tab4t(:,:,3),tab4t(:,:,4),tab4t(:,:,5),tab4t(:,:,6),
+     &            tab4t(:,:,7),tab4t(:,:,8),memberin,tempP,
+     &            tempPextend)
+#else
+      tempPextend%var => tempP%var
+#endif
+
+      if (.not.find_list_interp) then
+      Call Agrif_Addto_list_interp(child%var%list_interp,pttab,petab,
+     &                          pttab_Child,pttab_Parent,indmin,indmax,
+     &   indminglob,indmaxglob,indminglob2,indmaxglob2,parentarray,
+     &   pttruetab,cetruetab,member,memberin,nbdim
+#if defined AGRIF_MPI
+     &   ,tab4t,memberinall,sendtoproc1,recvfromproc1
+#endif
+     &    )
+      endif   
+C
+C
+      IF (memberin) THEN
+      IF (.not.associated(tempC%var)) allocate(tempC%var)
+C
+
+      Call Agrif_nbdim_allocation(tempC%var,pttruetab,cetruetab,nbdim)
+
+C
+C
+C     Special values on the parent grid
+      if (Agrif_UseSpecialValue) then
+C
+          noraftab(1:nbdim) =
+     &         child % var % root_var % interptab(1:nbdim) .EQ. 'N'
+C
+          IF (.not.associated(parentvalues%var))
+     &            Allocate(parentvalues%var)
+C
+          Call Agrif_nbdim_allocation
+     &               (parentvalues%var,indmin,indmax,nbdim)
+          Call Agrif_nbdim_Full_VarEQvar
+     &               (parentvalues%var,tempPextend%var,nbdim)
+C
+          Call Agrif_CheckMasknD(tempPextend,
+     &                           parentvalues,
+     &                           indmin(1:nbdim),indmax(1:nbdim),
+     &                           indmin(1:nbdim),indmax(1:nbdim),
+     &                           noraftab(1:nbdim),nbdim)
+C
+          Call Agrif_nbdim_deallocation(parentvalues%var,nbdim)
+C          Deallocate(parentvalues%var)
+C
+C
+      endif      
+
+C
+C
+C     Interpolation of the current grid
+
+      IF (memberin) THEN
+      if ( nbdim .EQ. 1 ) then
+         Call Agrif_Interp_1D_recursive(TypeInterp,
+     &           tempPextend%var%array1,tempC%var%array1,
+     &           indmin,indmax,
+     &           pttruetab,cetruetab,
+     &           s_Child_temp,s_Parent_temp,
+     &           ds_Child,ds_Parent,nbdim)
+      elseif ( nbdim .EQ. 2 ) then
+
+         Call Agrif_Interp_2D_recursive(TypeInterp,
+     &           tempPextend%var%array2,tempC%var%array2,
+     &           indmin,indmax,
+     &           pttruetab,cetruetab,
+     &           s_Child_temp,s_Parent_temp,
+     &           ds_Child,ds_Parent,nbdim)
+      elseif ( nbdim .EQ. 3 ) then
+
+         Call Agrif_Interp_3D_recursive(TypeInterp,
+     &           tempPextend%var%array3,tempC%var%array3,
+     &           indmin,indmax,
+     &           pttruetab,cetruetab,
+     &           s_Child_temp,s_Parent_temp,
+     &           ds_Child,ds_Parent,nbdim)
+      elseif ( nbdim .EQ. 4 ) then
+         Call Agrif_Interp_4D_recursive(TypeInterp,
+     &           tempPextend%var%array4,tempC%var%array4,
+     &           indmin,indmax,
+     &           pttruetab,cetruetab,
+     &           s_Child_temp,s_Parent_temp,
+     &           ds_Child,ds_Parent,nbdim)
+      elseif ( nbdim .EQ. 5 ) then
+         Call Agrif_Interp_5D_recursive(TypeInterp,
+     &           tempPextend%var%array5,tempC%var%array5,
+     &           indmin,indmax,
+     &           pttruetab,cetruetab,
+     &           s_Child_temp,s_Parent_temp,
+     &           ds_Child,ds_Parent,nbdim)
+      elseif ( nbdim .EQ. 6 ) then
+         Call Agrif_Interp_6D_recursive(TypeInterp,
+     &           tempPextend%var%array6,tempC%var%array6,
+     &           indmin,indmax,
+     &           pttruetab,cetruetab,
+     &           s_Child_temp,s_Parent_temp,
+     &           ds_Child,ds_Parent,nbdim)
+       endif
+
+
+C  
+
+      Call Agrif_nbdim_Get_bound_dimension(child % var,
+     &                               lowerbound,upperbound,nbdim)
+
+#ifdef AGRIF_MPI
+      Call Agrif_GlobtoLocInd2(childarray,
+     &                     lowerbound,upperbound,
+     &                     pttruetab,cetruetab,
+     &                     nbdim,Agrif_Procrank,
+     &                     memberout)
+
+#else
+       childarray(:,1,1) = pttruetab
+       childarray(:,2,1) = cetruetab
+       childarray(:,1,2) = pttruetab
+       childarray(:,2,2) = cetruetab
+ccccccccccccccc       memberout = .TRUE.
+#endif
+
+
+C
+C
+C     Special values on the child grid  
+      if (Agrif_UseSpecialValueFineGrid) then
+C
+
+          Call GiveAgrif_SpecialValueToTab_mpi(child%var,tempC%var,
+     &                 childarray,
+     &                 pttruetab,cetruetab,
+     &                 Agrif_SpecialValueFineGrid,nbdim)
+
+C        
+      endif
+      
+      endif
+
+C
+      if (torestore) then
+C
+#ifdef AGRIF_MPI
+C
+        SELECT CASE (nbdim)
+        CASE (1)
+             do i = pttruetab(1),cetruetab(1)         
+ChildarrayAModifier                if (restore%var%restore1D(i) == 0) 
+ChildarrayAModifier     &                child%var%array1(childarray(i,1,2)
+ChildarrayAModifier     &                                 ) = 
+ChildarrayAModifier     &                tempC%var%array1(i)
+             enddo
+        CASE (2)
+             do i = pttruetab(1),cetruetab(1)
+             do j = pttruetab(2),cetruetab(2)
+ChildarrayAModifier                   if (restore%var%restore2D(i,j) == 0) 
+ChildarrayAModifier     &                child%var%array2(childarray(i,1,2),
+ChildarrayAModifier     &                                 childarray(j,2,2)) = 
+ChildarrayAModifier     &                tempC%var%array2(i,j)
+             enddo
+             enddo
+        CASE (3)
+             do i = pttruetab(1),cetruetab(1)
+             do j = pttruetab(2),cetruetab(2)  
+             do k = pttruetab(3),cetruetab(3)
+ChildarrayAModifier                      if (restore%var%restore3D(i,j,k) == 0) 
+ChildarrayAModifier     &                child%var%array3(childarray(i,1,2),
+ChildarrayAModifier     &                                 childarray(j,2,2),
+ChildarrayAModifier     &                                 childarray(k,3,2)) = 
+ChildarrayAModifier     &                tempC%var%array3(i,j,k)
+             enddo
+             enddo
+             enddo
+        CASE (4)
+             do i = pttruetab(1),cetruetab(1)
+             do j = pttruetab(2),cetruetab(2)
+             do k = pttruetab(3),cetruetab(3)
+             do l = pttruetab(4),cetruetab(4)
+ChildarrayAModifier                         if (restore%var%restore4D(i,j,k,l) == 0) 
+ChildarrayAModifier     &                      child%var%array4(childarray(i,1,2),
+ChildarrayAModifier     &                                       childarray(j,2,2),
+ChildarrayAModifier     &                                       childarray(k,3,2),
+ChildarrayAModifier     &                                       childarray(l,4,2)) = 
+ChildarrayAModifier     &                      tempC%var%array4(i,j,k,l)
+             enddo
+             enddo
+             enddo
+             enddo
+        CASE (5)
+             do i = pttruetab(1),cetruetab(1)
+             do j = pttruetab(2),cetruetab(2)
+             do k = pttruetab(3),cetruetab(3)
+             do l = pttruetab(4),cetruetab(4)
+             do m = pttruetab(5),cetruetab(5)
+ChildarrayAModifier              if (restore%var%restore5D(i,j,k,l,m) == 0) 
+ChildarrayAModifier     &                child%var%array5(childarray(i,1,2),
+ChildarrayAModifier     &                                 childarray(j,2,2),
+ChildarrayAModifier     &                                 childarray(k,3,2),
+ChildarrayAModifier     &                                 childarray(l,4,2),
+ChildarrayAModifier     &                                 childarray(m,5,2)) = 
+ChildarrayAModifier     &                tempC%var%array5(i,j,k,l,m)
+             enddo
+             enddo
+             enddo
+             enddo
+             enddo
+        CASE (6)
+             do i = pttruetab(1),cetruetab(1)
+             do j = pttruetab(2),cetruetab(2)
+             do k = pttruetab(3),cetruetab(3)
+             do l = pttruetab(4),cetruetab(4)
+             do m = pttruetab(5),cetruetab(5)
+             do n = pttruetab(6),cetruetab(6)
+ChildarrayAModifier              if (restore%var%restore6D(i,j,k,l,m,n) == 0) 
+ChildarrayAModifier     &                child%var%array6(childarray(i,1,2),
+ChildarrayAModifier     &                                 childarray(j,2,2),
+ChildarrayAModifier     &                                 childarray(k,3,2),
+ChildarrayAModifier     &                                 childarray(l,4,2),
+ChildarrayAModifier     &                                 childarray(m,5,2),
+ChildarrayAModifier     &                                 childarray(n,6,2)) = 
+ChildarrayAModifier     &                tempC%var%array6(i,j,k,l,m,n)
+             enddo
+             enddo
+             enddo
+             enddo
+             enddo
+             enddo
+        END SELECT
+C
+#else
+        SELECT CASE (nbdim)
+        CASE (1)
+           do i = pttruetab(1),cetruetab(1)         
+            if (restore%var%restore1D(i) == 0)
+     &            child % var % array1(i) = 
+     &            tempC % var % array1(i)    
+          enddo
+        CASE (2)
+           do j = pttruetab(2),cetruetab(2)
+             do i = pttruetab(1),cetruetab(1) 
+              if (restore%var%restore2D(i,j) == 0)     
+     &              child % var % array2(i,j) = 
+     &              tempC % var % array2(i,j)    
+              enddo
+             enddo
+        CASE (3)
+           do k = pttruetab(3),cetruetab(3)
+           do j = pttruetab(2),cetruetab(2)
+             do i = pttruetab(1),cetruetab(1) 
+              if (restore%var%restore3D(i,j,k) == 0)
+     &                  child % var % array3(i,j,k) =
+     &                  tempC % var % array3(i,j,k)    
+                  enddo
+              enddo
+             enddo
+        CASE (4)
+           do l = pttruetab(4),cetruetab(4)
+           do k = pttruetab(3),cetruetab(3)
+          do j = pttruetab(2),cetruetab(2)
+             do i = pttruetab(1),cetruetab(1)
+                if (restore%var%restore4D(i,j,k,l) == 0)
+     &                 child % var % array4(i,j,k,l) = 
+     &                 tempC % var % array4(i,j,k,l)    
+             enddo
+             enddo
+              enddo
+             enddo
+        CASE (5)
+           do m = pttruetab(5),cetruetab(5)
+          do l = pttruetab(4),cetruetab(4)
+         do k = pttruetab(3),cetruetab(3)
+           do j = pttruetab(2),cetruetab(2)
+             do i = pttruetab(1),cetruetab(1)
+                if (restore%var%restore5D(i,j,k,l,m) == 0)
+     &                  child % var % array5(i,j,k,l,m) = 
+     &                  tempC % var % array5(i,j,k,l,m)    
+             enddo
+             enddo
+                  enddo
+              enddo
+             enddo
+        CASE (6)
+           do n = pttruetab(6),cetruetab(6)
+          do m = pttruetab(5),cetruetab(5)
+          do l = pttruetab(4),cetruetab(4)
+         do k = pttruetab(3),cetruetab(3)
+          do j = pttruetab(2),cetruetab(2)
+             do i = pttruetab(1),cetruetab(1)
+                if (restore%var%restore6D(i,j,k,l,m,n) == 0)
+     &                      child % var % array6(i,j,k,l,m,n) = 
+     &                      tempC % var % array6(i,j,k,l,m,n)    
+             enddo
+            enddo
+                      enddo
+                  enddo
+              enddo
+             enddo
+        END SELECT
+C
+#endif
+C        
+        else
+C
+C
+          IF (memberin) THEN
+          SELECT CASE (nbdim)
+          CASE (1)
+            child%var%array1(childarray(1,1,2):childarray(1,2,2)) =
+     &       tempC%var%array1(childarray(1,1,1):childarray(1,2,1))
+          CASE (2)
+            child%var%array2(childarray(1,1,2):childarray(1,2,2),
+     &                       childarray(2,1,2):childarray(2,2,2)) =
+     &      tempC%var%array2(childarray(1,1,1):childarray(1,2,1),
+     &                       childarray(2,1,1):childarray(2,2,1))
+          CASE (3)
+            child%var%array3(childarray(1,1,2):childarray(1,2,2),
+     &                       childarray(2,1,2):childarray(2,2,2),
+     &                       childarray(3,1,2):childarray(3,2,2)) =
+     &      tempC%var%array3(childarray(1,1,1):childarray(1,2,1),
+     &                       childarray(2,1,1):childarray(2,2,1),
+     &                       childarray(3,1,1):childarray(3,2,1))
+          CASE (4)
+            child%var%array4(childarray(1,1,2):childarray(1,2,2),
+     &                       childarray(2,1,2):childarray(2,2,2),
+     &                       childarray(3,1,2):childarray(3,2,2),
+     &                       childarray(4,1,2):childarray(4,2,2)) =
+     &      tempC%var%array4(childarray(1,1,1):childarray(1,2,1),
+     &                       childarray(2,1,1):childarray(2,2,1),
+     &                       childarray(3,1,1):childarray(3,2,1),
+     &                       childarray(4,1,1):childarray(4,2,1))
+          CASE (5)
+            child%var%array5(childarray(1,1,2):childarray(1,2,2),
+     &                       childarray(2,1,2):childarray(2,2,2),
+     &                       childarray(3,1,2):childarray(3,2,2),
+     &                       childarray(4,1,2):childarray(4,2,2),
+     &                       childarray(5,1,2):childarray(5,2,2)) =
+     &      tempC%var%array5(childarray(1,1,1):childarray(1,2,1),
+     &                       childarray(2,1,1):childarray(2,2,1),
+     &                       childarray(3,1,1):childarray(3,2,1),
+     &                       childarray(4,1,1):childarray(4,2,1),
+     &                       childarray(5,1,1):childarray(5,2,1))
+          CASE (6)
+            child%var%array6(childarray(1,1,2):childarray(1,2,2),
+     &                       childarray(2,1,2):childarray(2,2,2),
+     &                       childarray(3,1,2):childarray(3,2,2),
+     &                       childarray(4,1,2):childarray(4,2,2),
+     &                       childarray(5,1,2):childarray(5,2,2),
+     &                       childarray(6,1,2):childarray(6,2,2)) =
+     &      tempC%var%array6(childarray(1,1,1):childarray(1,2,1),
+     &                       childarray(2,1,1):childarray(2,2,1),
+     &                       childarray(3,1,1):childarray(3,2,1),
+     &                       childarray(4,1,1):childarray(4,2,1),
+     &                       childarray(5,1,1):childarray(5,2,1),
+     &                       childarray(6,1,1):childarray(6,2,1))
+          END SELECT
+          ENDIF
+C
+C       
+      endif
+
+        Call Agrif_nbdim_deallocation(tempPextend%var,nbdim)
+C        deallocate(tempPextend%var)
+
+      Call Agrif_nbdim_deallocation(tempC%var,nbdim)
+      
+C      Deallocate(tempC % var)
+      ELSE
+      
+C      deallocate(tempPextend%var)
+
+      ENDIF
+C
+C             
+C     Deallocations
+#ifdef AGRIF_MPI        
+      IF (member) THEN
+      Call Agrif_nbdim_deallocation(tempP%var,nbdim)
+C      Deallocate(tempP % var)
+      endif
+#endif
+C
+C
+      
+C
+C
+      End Subroutine Agrif_InterpnD 
+C
+C
+C
+C                  
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Parentbounds
+C     **************************************************************************
+C
+      Subroutine Agrif_Parentbounds(TYPEinterp,nbdim,indmin,indmax,
+     &                              s_Parent_temp,
+     &                              s_Child_temp,s_Child,ds_Child,
+     &                              s_Parent,ds_Parent,
+     &                              pttruetab,cetruetab,pttab_Child,
+     &                              pttab_Parent,posvar,interptab)
+C
+CCC   Description:
+CCC   Subroutine calculating the bounds of the parent grid for the interpolation
+CCC   of the child grid     
+C
+C
+C     Declarations:
+C
+C
+C     Arguments
+      INTEGER :: nbdim
+      INTEGER, DIMENSION(6) :: TypeInterp
+      INTEGER,DIMENSION(nbdim) :: indmin,indmax
+      REAL,DIMENSION(nbdim) :: s_Parent_temp,s_child_temp
+      REAL,DIMENSION(nbdim) :: s_Child,ds_child
+      REAL,DIMENSION(nbdim) :: s_Parent,ds_Parent
+      INTEGER,DIMENSION(nbdim) :: pttruetab,cetruetab
+      INTEGER,DIMENSION(nbdim) :: pttab_Child,pttab_Parent
+      INTEGER,DIMENSION(nbdim) :: posvar
+      CHARACTER(6), DIMENSION(nbdim) :: interptab
+C
+C     Local variables
+      INTEGER :: i
+      REAL,DIMENSION(nbdim) :: dim_newmin,dim_newmax      
+C
+      dim_newmin = s_Child + (pttruetab - pttab_Child) * ds_Child
+      dim_newmax = s_Child + (cetruetab - pttab_Child) * ds_Child
+      
+      DO i = 1,nbdim         
+C     
+        indmin(i) = pttab_Parent(i) + 
+     &         agrif_int((dim_newmin(i)-s_Parent(i))/ds_Parent(i))
+C
+        indmax(i) = pttab_Parent(i) + 
+     &                agrif_ceiling((dim_newmax(i)-
+     &                s_Parent(i))/ds_Parent(i))
+     
+C
+C
+C       Necessary for the Quadratic interpolation
+C  
+
+        IF ((pttruetab(i) == cetruetab(i)) .AND. 
+     &                           (posvar(i) == 1)) THEN
+        ELSEIF (interptab(i) .EQ. 'N') THEN
+        ELSEIF ( TYPEinterp(i) .eq. Agrif_ppm .or.
+     &      TYPEinterp(i) .eq. Agrif_eno  .or.
+     &      TYPEinterp(i) .eq. Agrif_weno) THEN            
+           indmin(i) = indmin(i) - 2  
+           indmax(i) = indmax(i) + 2                  
+        ELSE IF (( TYPEinterp(i) .ne. Agrif_constant )
+     &        .AND.( TYPEinterp(i) .ne. Agrif_linear )) THEN
+           indmin(i) = indmin(i) - 1  
+           indmax(i) = indmax(i) + 1
+        ENDIF
+        
+
+C        
+       ENDDO 
+C
+        s_Parent_temp = s_Parent + (indmin - pttab_Parent) * ds_Parent
+C     
+        s_Child_temp = s_Child + (pttruetab - pttab_Child) * ds_Child
+C
+C
+      Return
+C
+C
+      End Subroutine Agrif_Parentbounds
+C
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Interp_1D_Recursive 
+C     **************************************************************************
+C
+      Subroutine Agrif_Interp_1D_recursive(TypeInterp,tabin,tabout,
+     &           indmin,indmax, 
+     &           pttab_child,petab_child,
+     &           s_child,s_parent,ds_child,ds_parent,nbdim)     
+C
+CCC   Description:
+CCC   Subroutine for the interpolation of a 1D grid variable. 
+CCC   It calls Agrif_InterpBase. 
+C
+C     Declarations:
+C
+      
+C
+C     Arguments
+      INTEGER :: nbdim
+      INTEGER,DIMENSION(1) :: TypeInterp
+      INTEGER, DIMENSION(nbdim) :: indmin,indmax
+      INTEGER, DIMENSION(nbdim) :: pttab_child,petab_child
+      REAL, DIMENSION(nbdim) :: s_child,s_parent
+      REAL, DIMENSION(nbdim) :: ds_child,ds_parent
+      REAL, INTENT(IN),DIMENSION(indmin(nbdim):indmax(nbdim)) :: tabin        
+      REAL, INTENT(OUT),
+     &      DIMENSION(pttab_child(nbdim):petab_child(nbdim)) :: tabout
+      INTEGER :: coeffraf
+C
+C
+C     Commentaire perso : nbdim vaut toujours 1 ici. 
+C
+      coeffraf = nint(ds_parent(nbdim)/ds_child(nbdim))
+      
+      Call Agrif_InterpBase(TypeInterp(1),
+     &                  tabin(indmin(nbdim):indmax(nbdim)),
+     &                  tabout(pttab_child(nbdim):petab_child(nbdim)),
+     &                  indmin(nbdim),indmax(nbdim),            
+     &                  pttab_child(nbdim),petab_child(nbdim),
+     &                  s_parent(nbdim),s_child(nbdim),
+     &                  ds_parent(nbdim),ds_child(nbdim),coeffraf)
+                
+C                
+      Return
+C
+C
+      End Subroutine Agrif_Interp_1D_recursive
+C
+C
+C      
+C     **************************************************************************
+CCC   Subroutine Agrif_Interp_2D_Recursive 
+C     **************************************************************************
+C
+      Subroutine Agrif_Interp_2D_recursive(TypeInterp,
+     &           tabin,tabout,
+     &           indmin,indmax,   
+     &           pttab_child,petab_child,
+     &            s_child, s_parent,
+     &           ds_child,ds_parent,
+     &           nbdim)
+C
+CCC   Description:
+CCC   Subroutine for the interpolation of a 2D grid variable. 
+CCC   It calls Agrif_Interp_1D_recursive and Agrif_InterpBase.    
+C
+C     Declarations:
+C
+      
+C     
+      INTEGER                   :: nbdim
+      INTEGER,DIMENSION(2)      :: TypeInterp
+      INTEGER, DIMENSION(nbdim) :: indmin,indmax
+      INTEGER, DIMENSION(nbdim) :: pttab_child,petab_child
+      REAL   , DIMENSION(nbdim) ::  s_child, s_parent
+      REAL   , DIMENSION(nbdim) :: ds_child,ds_parent
+      REAL   ,INTENT(IN), DIMENSION(
+     &                indmin(nbdim-1):indmax(nbdim-1),
+     &                indmin(nbdim):indmax(nbdim)
+     &                ) :: tabin        
+      REAL   ,INTENT(OUT), DIMENSION(
+     &                pttab_child(nbdim-1):petab_child(nbdim-1),
+     &                pttab_child(nbdim):petab_child(nbdim)
+     &                ) :: tabout
+C
+C     Local variables      
+      REAL, DIMENSION(pttab_child(nbdim-1):petab_child(nbdim-1),
+     &                 indmin(nbdim):indmax(nbdim)) :: tabtemp
+      INTEGER i,j
+      INTEGER :: coeffraf
+      REAL   , DIMENSION(
+     &                pttab_child(nbdim):petab_child(nbdim),
+     &                pttab_child(nbdim-1):petab_child(nbdim-1)
+     &                ) :: tabout_trsp
+      REAL, DIMENSION(indmin(nbdim):indmax(nbdim),
+     &        pttab_child(nbdim-1):petab_child(nbdim-1)) :: tabtemp_trsp
+
+C
+C
+C
+C
+C     Commentaire perso : nbdim vaut toujours 2 ici.
+C
+      coeffraf = nint ( ds_parent(1) / ds_child(1) )
+      IF((TypeInterp(1) == Agrif_Linear) .AND. (coeffraf /= 1 ) )THEN
+
+!---CDIR NEXPAND
+          IF(.NOT. precomputedone(1) ) call linear1Dprecompute2D(
+     &          indmax(2)-indmin(2)+1,   
+     &          indmax(1)-indmin(1)+1,   
+     &          petab_child(1)-pttab_child(1)+1,
+     &          s_parent(1),s_child(1),ds_parent(1),ds_child(1),1)
+!---CDIR NEXPAND
+           call linear1daftercompute(tabin,tabtemp,
+     &          size(tabin), size(tabtemp),  
+     &          s_parent(1),s_child(1),ds_parent(1),ds_child(1),1)
+ 
+      ELSEIF((TypeInterp(1) == Agrif_PPM) .AND. (coeffraf /= 1 ) )THEN
+!---CDIR NEXPAND
+          IF(.NOT. precomputedone(1) ) call ppm1Dprecompute2D(
+     &          indmax(2)-indmin(2)+1,   
+     &          indmax(1)-indmin(1)+1,   
+     &          petab_child(1)-pttab_child(1)+1,
+     &          s_parent(1),s_child(1),ds_parent(1),ds_child(1),1)
+!---CDIR NEXPAND
+           call ppm1daftercompute(tabin,tabtemp,
+     &          size(tabin), size(tabtemp),  
+     &          s_parent(1),s_child(1),ds_parent(1),ds_child(1),1)
+
+      ELSE
+
+      do j = indmin(nbdim),indmax(nbdim)
+C        
+!---CDIR NEXPAND
+        Call Agrif_Interp_1D_recursive(TypeInterp(1),
+     &         tabin(indmin(nbdim-1):indmax(nbdim-1),j),
+     &         tabtemp(pttab_child(nbdim-1):petab_child(nbdim-1),j),
+     &         indmin(1:nbdim-1),indmax(1:nbdim-1),
+     &         pttab_child(1:nbdim-1),petab_child(1:nbdim-1),
+     &         s_child(1:nbdim-1),s_parent(1:nbdim-1),
+     &         ds_child(1:nbdim-1),ds_parent(1:nbdim-1),nbdim-1)
+C        
+      enddo
+      ENDIF   
+
+      coeffraf = nint(ds_parent(nbdim)/ds_child(nbdim))
+      
+      tabtemp_trsp = TRANSPOSE(tabtemp)
+
+      IF((TypeInterp(2) == Agrif_Linear) .AND. (coeffraf /= 1 ) )THEN
+
+!---CDIR NEXPAND
+          IF(.NOT. precomputedone(2) ) call linear1Dprecompute2D(
+     &          petab_child(1)-pttab_child(1)+1,
+     &          indmax(2)-indmin(2)+1,
+     &          petab_child(2)-pttab_child(2)+1,
+     &          s_parent(2),s_child(2),ds_parent(2),ds_child(2),2)
+!---CDIR NEXPAND
+           call linear1daftercompute(tabtemp_trsp,tabout_trsp,
+     &          size(tabtemp_trsp), size(tabout_trsp),
+     &          s_parent(2),s_child(2),ds_parent(2),ds_child(2),2)
+
+      ELSEIF((TypeInterp(2) == Agrif_PPM) .AND. (coeffraf /= 1 ) )THEN
+
+!---CDIR NEXPAND
+           IF(.NOT. precomputedone(1) )call ppm1Dprecompute2D(
+     &          petab_child(1)-pttab_child(1)+1,
+     &          indmax(2)-indmin(2)+1,
+     &          petab_child(2)-pttab_child(2)+1,
+     &          s_parent(2),s_child(2),ds_parent(2),ds_child(2),2)
+!---CDIR NEXPAND
+           call ppm1daftercompute(tabtemp_trsp,tabout_trsp,
+     &          size(tabtemp_trsp), size(tabout_trsp),
+     &          s_parent(2),s_child(2),ds_parent(2),ds_child(2),2)
+
+      ELSE
+      do i=pttab_child(nbdim-1),petab_child(nbdim-1)
+C
+!---CDIR NEXPAND
+        Call Agrif_InterpBase(TypeInterp(2),
+     &           tabtemp_trsp(indmin(nbdim):indmax(nbdim),i),
+     &           tabout_trsp(pttab_child(nbdim):petab_child(nbdim),i),
+     &           indmin(nbdim),indmax(nbdim),
+     &           pttab_child(nbdim),petab_child(nbdim),
+     &           s_parent(nbdim),s_child(nbdim),
+     &           ds_parent(nbdim),ds_child(nbdim),coeffraf)
+
+C        
+      enddo
+      ENDIF
+      
+      tabout = TRANSPOSE(tabout_trsp)
+C
+      Return
+C
+C
+      End Subroutine Agrif_Interp_2D_recursive
+C
+C
+C      
+C     **************************************************************************
+CCC   Subroutine Agrif_Interp_3D_Recursive 
+C     **************************************************************************
+C
+      Subroutine Agrif_Interp_3D_recursive(TypeInterp,tabin,tabout,
+     &           indmin,indmax,   
+     &           pttab_child,petab_child,
+     &           s_child,s_parent,ds_child,ds_parent,nbdim)
+C
+CCC   Description:
+CCC   Subroutine for the interpolation of a 3D grid variable. 
+CCC   It calls Agrif_Interp_2D_recursive and Agrif_InterpBase.    
+C
+C     Declarations:
+C
+      
+C     
+      INTEGER :: nbdim
+      INTEGER,DIMENSION(3) :: TypeInterp
+      INTEGER, DIMENSION(nbdim) :: indmin,indmax
+      INTEGER, DIMENSION(nbdim) :: pttab_child,petab_child
+      REAL, DIMENSION(nbdim) :: s_child,s_parent,ds_child,ds_parent
+      REAL,INTENT(IN), DIMENSION(indmin(nbdim-2):indmax(nbdim-2),
+     &                indmin(nbdim-1):indmax(nbdim-1),
+     &                indmin(nbdim)  :indmax(nbdim)) :: tabin        
+      REAL,INTENT(OUT),
+     &        DIMENSION(pttab_child(nbdim-2):petab_child(nbdim-2),
+     &                pttab_child(nbdim-1):petab_child(nbdim-1),
+     &                pttab_child(nbdim):petab_child(nbdim)) :: tabout
+C
+C     Local variables      
+      REAL, DIMENSION(pttab_child(nbdim-2):petab_child(nbdim-2),
+     &                 pttab_child(nbdim-1):petab_child(nbdim-1),
+     &                 indmin(nbdim):indmax(nbdim)) :: tabtemp
+      INTEGER i,j,k
+      INTEGER :: coeffraf, locind_child_left, kdeb
+C
+C
+      coeffraf = nint ( ds_parent(1) / ds_child(1) )
+      IF((TypeInterp(1) == Agrif_Linear) .AND. (coeffraf/=1))THEN 
+        Call linear1Dprecompute2D(
+     &          indmax(2)-indmin(2)+1,
+     &          indmax(1)-indmin(1)+1,
+     &          petab_child(1)-pttab_child(1)+1,
+     &          s_parent(1),s_child(1),ds_parent(1),ds_child(1),1)
+      precomputedone(1) = .TRUE. 
+      ELSEIF((TypeInterp(1) == Agrif_PPM) .AND. (coeffraf/=1))THEN
+        Call ppm1Dprecompute2D(
+     &          indmax(2)-indmin(2)+1,
+     &          indmax(1)-indmin(1)+1,
+     &          petab_child(1)-pttab_child(1)+1,
+     &          s_parent(1),s_child(1),ds_parent(1),ds_child(1),1)
+      precomputedone(1) = .TRUE.
+      ENDIF
+
+      coeffraf = nint ( ds_parent(2) / ds_child(2) )
+      IF((TypeInterp(2) == Agrif_Linear) .AND. (coeffraf/=1)) THEN
+         Call linear1Dprecompute2D(
+     &          petab_child(1)-pttab_child(1)+1,
+     &          indmax(2)-indmin(2)+1,
+     &          petab_child(2)-pttab_child(2)+1,
+     &          s_parent(2),s_child(2),ds_parent(2),ds_child(2),2)
+      precomputedone(2) = .TRUE. 
+      ELSEIF((TypeInterp(2) == Agrif_PPM) .AND. (coeffraf/=1)) THEN
+         Call ppm1Dprecompute2D(
+     &          petab_child(1)-pttab_child(1)+1,
+     &          indmax(2)-indmin(2)+1,
+     &          petab_child(2)-pttab_child(2)+1,
+     &          s_parent(2),s_child(2),ds_parent(2),ds_child(2),2)
+      precomputedone(2) = .TRUE.
+      ENDIF
+
+      do k = indmin(nbdim),indmax(nbdim)
+C        
+        Call Agrif_Interp_2D_recursive(TypeInterp(1:2),
+     &         tabin(indmin(nbdim-2):indmax(nbdim-2),
+     &         indmin(nbdim-1):indmax(nbdim-1),k),
+     &         tabtemp(pttab_child(nbdim-2):petab_child(nbdim-2),
+     &         pttab_child(nbdim-1):petab_child(nbdim-1),k),
+     &         indmin(1:nbdim-1),indmax(1:nbdim-1),
+     &         pttab_child(1:nbdim-1),petab_child(1:nbdim-1),
+     &         s_child(1:nbdim-1),s_parent(1:nbdim-1),
+     &         ds_child(1:nbdim-1),ds_parent(1:nbdim-1),nbdim-1)
+C        
+      enddo
+      
+      precomputedone(1) = .FALSE.
+      precomputedone(2) = .FALSE.
+      coeffraf = nint ( ds_parent(3) / ds_child(3) )
+
+      Call Agrif_Compute_nbdim_interp(s_parent(nbdim),s_child(nbdim),
+     &  ds_parent(nbdim),ds_child(nbdim),coeffraf,locind_child_left)
+           
+      IF (coeffraf == 1) THEN
+      
+      kdeb = indmin(3)+locind_child_left-2
+      do k=pttab_child(3),petab_child(3)
+      kdeb = kdeb + 1
+      do j = pttab_child(2),petab_child(2)
+        do i = pttab_child(1),petab_child(1)
+        tabout(i,j,k) = tabtemp(i,j,kdeb)
+      enddo
+      enddo
+      enddo
+              
+      ELSE      
+C
+      do j=pttab_child(nbdim-1),petab_child(nbdim-1) 
+C        
+        do i=pttab_child(nbdim-2),petab_child(nbdim-2)
+C
+          Call Agrif_InterpBase(TypeInterp(3),
+     &           tabtemp(i,j,indmin(nbdim):indmax(nbdim)),
+     &           tabout(i,j,pttab_child(nbdim):petab_child(nbdim)),
+     &           indmin(nbdim),indmax(nbdim),
+     &           pttab_child(nbdim),petab_child(nbdim),
+     &           s_parent(nbdim),s_child(nbdim),
+     &           ds_parent(nbdim),ds_child(nbdim),coeffraf)
+C
+        enddo 
+C       
+      enddo
+      ENDIF
+C
+      Return
+C        
+C
+      End Subroutine Agrif_Interp_3D_recursive
+C
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Interp_4D_Recursive 
+C     **************************************************************************
+C
+      Subroutine Agrif_Interp_4D_recursive(TypeInterp,tabin,tabout,
+     &           indmin,indmax,   
+     &           pttab_child,petab_child,
+     &           s_child,s_parent,ds_child,ds_parent,nbdim)
+C
+CCC   Description:
+CCC   Subroutine for the interpolation of a 4D grid variable. 
+CCC   It calls Agrif_Interp_3D_recursive and Agrif_InterpBase.    
+C
+C     Declarations:
+C
+      
+C     
+      INTEGER :: nbdim
+      INTEGER,DIMENSION(4) :: TypeInterp
+      INTEGER, DIMENSION(nbdim) :: indmin,indmax
+      INTEGER, DIMENSION(nbdim) :: pttab_child,petab_child
+      REAL, DIMENSION(nbdim) :: s_child,s_parent,ds_child,ds_parent
+      REAL,INTENT(IN), DIMENSION(indmin(nbdim-3):indmax(nbdim-3),
+     &                indmin(nbdim-2):indmax(nbdim-2),
+     &                indmin(nbdim-1):indmax(nbdim-1),
+     &                indmin(nbdim):indmax(nbdim)) :: tabin        
+      REAL,INTENT(OUT),
+     &       DIMENSION(pttab_child(nbdim-3):petab_child(nbdim-3),
+     &                pttab_child(nbdim-2):petab_child(nbdim-2),
+     &                pttab_child(nbdim-1):petab_child(nbdim-1),
+     &                pttab_child(nbdim):petab_child(nbdim)) :: tabout
+C
+C     Local variables      
+      REAL, DIMENSION(pttab_child(nbdim-3):petab_child(nbdim-3),
+     &                 pttab_child(nbdim-2):petab_child(nbdim-2),
+     &                 pttab_child(nbdim-1):petab_child(nbdim-1),  
+     &                 indmin(nbdim):indmax(nbdim)) :: tabtemp
+      INTEGER i,j,k,l
+      INTEGER :: coeffraf
+C
+C
+      do l = indmin(nbdim),indmax(nbdim)
+C        
+        Call Agrif_Interp_3D_recursive(TypeInterp(1:3),
+     &         tabin(indmin(nbdim-3):indmax(nbdim-3),
+     &               indmin(nbdim-2):indmax(nbdim-2),
+     &               indmin(nbdim-1):indmax(nbdim-1),l),
+     &         tabtemp(pttab_child(nbdim-3):petab_child(nbdim-3),
+     &         pttab_child(nbdim-2):petab_child(nbdim-2),
+     &         pttab_child(nbdim-1):petab_child(nbdim-1),l),
+     &         indmin(1:nbdim-1),indmax(1:nbdim-1),
+     &         pttab_child(1:nbdim-1),petab_child(1:nbdim-1),
+     &         s_child(1:nbdim-1),s_parent(1:nbdim-1),
+     &         ds_child(1:nbdim-1),ds_parent(1:nbdim-1),nbdim-1)
+C        
+      enddo
+C
+      coeffraf = nint(ds_parent(nbdim)/ds_child(nbdim))
+      
+      do k = pttab_child(nbdim-1),petab_child(nbdim-1)
+C
+        do j = pttab_child(nbdim-2),petab_child(nbdim-2) 
+C        
+          do i = pttab_child(nbdim-3),petab_child(nbdim-3)
+C
+            Call Agrif_InterpBase(TypeInterp(4),
+     &           tabtemp(i,j,k,indmin(nbdim):indmax(nbdim)),
+     &           tabout(i,j,k,pttab_child(nbdim):petab_child(nbdim)),
+     &           indmin(nbdim),indmax(nbdim),
+     &           pttab_child(nbdim),petab_child(nbdim),
+     &           s_parent(nbdim),s_child(nbdim),
+     &           ds_parent(nbdim),ds_child(nbdim),coeffraf)
+C
+          enddo
+C
+        enddo 
+C       
+      enddo
+C
+      Return
+C
+C        
+      End Subroutine Agrif_Interp_4D_recursive
+C
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Interp_5D_Recursive 
+C     **************************************************************************
+C
+      Subroutine Agrif_Interp_5D_recursive(TypeInterp,tabin,tabout,
+     &           indmin,indmax,   
+     &           pttab_child,petab_child,
+     &           s_child,s_parent,ds_child,ds_parent,nbdim)
+C
+CCC   Description:
+CCC   Subroutine for the interpolation of a 5D grid variable. 
+CCC   It calls Agrif_Interp_4D_recursive and Agrif_InterpBase.    
+C
+C     Declarations:
+C
+      
+C     
+      INTEGER :: nbdim
+      INTEGER,DIMENSION(5) :: TypeInterp
+      INTEGER, DIMENSION(nbdim) :: indmin,indmax
+      INTEGER, DIMENSION(nbdim) :: pttab_child,petab_child
+      REAL, DIMENSION(nbdim) :: s_child,s_parent,ds_child,ds_parent
+      REAL,INTENT(IN), DIMENSION(indmin(nbdim-4):indmax(nbdim-4),
+     &                indmin(nbdim-3):indmax(nbdim-3),
+     &                indmin(nbdim-2):indmax(nbdim-2),
+     &                indmin(nbdim-1):indmax(nbdim-1),
+     &                indmin(nbdim):indmax(nbdim)) :: tabin  
+      REAL,INTENT(OUT),
+     &    DIMENSION(pttab_child(nbdim-4):petab_child(nbdim-4),
+     &                pttab_child(nbdim-3):petab_child(nbdim-3),
+     &                pttab_child(nbdim-2):petab_child(nbdim-2),
+     &                pttab_child(nbdim-1):petab_child(nbdim-1),
+     &                pttab_child(nbdim):petab_child(nbdim)) :: tabout
+C
+C     Local variables      
+      REAL, DIMENSION(pttab_child(nbdim-4):petab_child(nbdim-4),
+     &                 pttab_child(nbdim-3):petab_child(nbdim-3),
+     &                 pttab_child(nbdim-2):petab_child(nbdim-2),
+     &                 pttab_child(nbdim-1):petab_child(nbdim-1),    
+     &                 indmin(nbdim):indmax(nbdim)) :: tabtemp
+      INTEGER i,j,k,l,m
+      INTEGER :: coeffraf
+C
+C
+      do m = indmin(nbdim),indmax(nbdim)
+C        
+        Call Agrif_Interp_4D_recursive(TypeInterp(1:4),
+     &         tabin(indmin(nbdim-4):indmax(nbdim-4),
+     &               indmin(nbdim-3):indmax(nbdim-3),
+     &               indmin(nbdim-2):indmax(nbdim-2),
+     &               indmin(nbdim-1):indmax(nbdim-1),m),
+     &         tabtemp(pttab_child(nbdim-4):petab_child(nbdim-4),
+     &                 pttab_child(nbdim-3):petab_child(nbdim-3),
+     &                 pttab_child(nbdim-2):petab_child(nbdim-2),
+     &                 pttab_child(nbdim-1):petab_child(nbdim-1),m),
+     &         indmin(1:nbdim-1),indmax(1:nbdim-1),
+     &         pttab_child(1:nbdim-1),petab_child(1:nbdim-1),
+     &         s_child(1:nbdim-1),s_parent(1:nbdim-1),
+     &         ds_child(1:nbdim-1),ds_parent(1:nbdim-1),nbdim-1)
+C        
+      enddo
+      
+      coeffraf = nint(ds_parent(nbdim)/ds_child(nbdim))
+C
+      do l = pttab_child(nbdim-1),petab_child(nbdim-1) 
+C
+        do k = pttab_child(nbdim-2),petab_child(nbdim-2)
+C
+          do j = pttab_child(nbdim-3),petab_child(nbdim-3) 
+C        
+            do i = pttab_child(nbdim-4),petab_child(nbdim-4)
+C
+              Call Agrif_InterpBase(TypeInterp(5),
+     &             tabtemp(i,j,k,l,indmin(nbdim):indmax(nbdim)),
+     &                    tabout(i,j,k,l,
+     &             pttab_child(nbdim):petab_child(nbdim)),
+     &             indmin(nbdim),indmax(nbdim),
+     &             pttab_child(nbdim),petab_child(nbdim),
+     &             s_parent(nbdim),s_child(nbdim),
+     &             ds_parent(nbdim),ds_child(nbdim),coeffraf)
+C
+            enddo
+C
+          enddo
+C
+        enddo 
+C       
+      enddo
+C
+C
+      Return
+C
+C        
+      End Subroutine Agrif_Interp_5D_recursive
+C
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Interp_6D_Recursive 
+C     **************************************************************************
+C
+      Subroutine Agrif_Interp_6D_recursive(TypeInterp,tabin,tabout,
+     &           indmin,indmax,   
+     &           pttab_child,petab_child,
+     &           s_child,s_parent,ds_child,ds_parent,nbdim)
+C
+CCC   Description:
+CCC   Subroutine for the interpolation of a 6D grid variable. 
+CCC   It calls Agrif_Interp_4D_recursive and Agrif_InterpBase.    
+C
+C     Declarations:
+C
+      
+C     
+      INTEGER :: nbdim
+      INTEGER,DIMENSION(6) :: TypeInterp
+      INTEGER, DIMENSION(nbdim) :: indmin,indmax
+      INTEGER, DIMENSION(nbdim) :: pttab_child,petab_child
+      REAL, DIMENSION(nbdim) :: s_child,s_parent,ds_child,ds_parent
+      REAL,INTENT(IN), DIMENSION(indmin(nbdim-5):indmax(nbdim-5),
+     &                indmin(nbdim-4):indmax(nbdim-4),
+     &                indmin(nbdim-3):indmax(nbdim-3), 
+     &                indmin(nbdim-2):indmax(nbdim-2),
+     &                indmin(nbdim-1):indmax(nbdim-1),
+     &                indmin(nbdim):indmax(nbdim)) :: tabin        
+      REAL,INTENT(OUT),
+     &    DIMENSION(pttab_child(nbdim-5):petab_child(nbdim-5),
+     &                pttab_child(nbdim-4):petab_child(nbdim-4),
+     &                pttab_child(nbdim-3):petab_child(nbdim-3),
+     &                pttab_child(nbdim-2):petab_child(nbdim-2),
+     &                pttab_child(nbdim-1):petab_child(nbdim-1),
+     &                pttab_child(nbdim):petab_child(nbdim)) :: tabout
+C
+C     Local variables      
+      REAL, DIMENSION(pttab_child(nbdim-5):petab_child(nbdim-5),
+     &                 pttab_child(nbdim-4):petab_child(nbdim-4),
+     &                 pttab_child(nbdim-3):petab_child(nbdim-3),
+     &                 pttab_child(nbdim-2):petab_child(nbdim-2),    
+     &                 pttab_child(nbdim-1):petab_child(nbdim-1),    
+     &                 indmin(nbdim):indmax(nbdim)) :: tabtemp
+      INTEGER i,j,k,l,m,n
+      INTEGER :: coeffraf
+C
+C        
+C
+      do n = indmin(nbdim),indmax(nbdim)
+C        
+        Call Agrif_Interp_5D_recursive(TypeInterp(1:5),
+     &         tabin(indmin(nbdim-5):indmax(nbdim-5),
+     &               indmin(nbdim-4):indmax(nbdim-4),
+     &               indmin(nbdim-3):indmax(nbdim-3),
+     &               indmin(nbdim-2):indmax(nbdim-2),
+     &               indmin(nbdim-1):indmax(nbdim-1),n),
+     &         tabtemp(pttab_child(nbdim-5):petab_child(nbdim-5),
+     &                 pttab_child(nbdim-4):petab_child(nbdim-4),
+     &                 pttab_child(nbdim-3):petab_child(nbdim-3),
+     &                 pttab_child(nbdim-2):petab_child(nbdim-2),
+     &                 pttab_child(nbdim-1):petab_child(nbdim-1),n),
+     &         indmin(1:nbdim-1),indmax(1:nbdim-1),
+     &         pttab_child(1:nbdim-1),petab_child(1:nbdim-1),
+     &         s_child(1:nbdim-1),s_parent(1:nbdim-1),
+     &         ds_child(1:nbdim-1),ds_parent(1:nbdim-1),nbdim-1)
+C        
+      enddo
+      
+      coeffraf = nint(ds_parent(nbdim)/ds_child(nbdim))
+C
+      do m = pttab_child(nbdim-1),petab_child(nbdim-1) 
+      do l = pttab_child(nbdim-2),petab_child(nbdim-2) 
+C
+        do k = pttab_child(nbdim-3),petab_child(nbdim-3)
+C
+          do j = pttab_child(nbdim-4),petab_child(nbdim-4) 
+C        
+            do i = pttab_child(nbdim-5),petab_child(nbdim-5)
+C
+              Call Agrif_InterpBase(TypeInterp(6),
+     &             tabtemp(i,j,k,l,m,indmin(nbdim):indmax(nbdim)),
+     &                    tabout(i,j,k,l,m,
+     &                    pttab_child(nbdim):petab_child(nbdim)),
+     &             indmin(nbdim),indmax(nbdim),
+     &             pttab_child(nbdim),petab_child(nbdim),
+     &             s_parent(nbdim),s_child(nbdim),
+     &             ds_parent(nbdim),ds_child(nbdim),coeffraf)
+C
+            enddo
+C
+          enddo
+C
+        enddo 
+C       
+      enddo
+      enddo
+C                
+C
+      Return
+C
+C        
+      End Subroutine Agrif_Interp_6D_recursive
+C
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_InterpBase  
+C     **************************************************************************
+C  
+      Subroutine Agrif_InterpBase(TypeInterp,
+     &                           parenttab,childtab,
+     &                           indmin,indmax,pttab_child,petab_child,
+     &                           s_parent,s_child,ds_parent,ds_child,
+     &                           coeffraf)   
+C
+CCC   Description:
+CCC   Subroutine calling the interpolation method chosen by the user (linear, 
+CCC   lagrange or spline). 
+C
+C     Declarations:
+C
+      
+C
+      INTEGER                :: TypeInterp
+      INTEGER :: indmin,indmax
+      INTEGER :: pttab_child,petab_child
+      REAL,INTENT(IN),DIMENSION(indmin:indmax)           :: parenttab       
+      REAL,INTENT(OUT),DIMENSION(pttab_child:petab_child) :: childtab        
+      REAL    :: s_parent,s_child,ds_parent,ds_child 
+      INTEGER :: coeffraf
+C 
+C
+       IF ((indmin == indmax).AND.(pttab_child == petab_child)) THEN
+         childtab(pttab_child) = parenttab(indmin)
+       ELSEIF (TYPEinterp .EQ. AGRIF_LINEAR) then    
+C
+C         Linear interpolation 
+  
+          Call linear1D
+     &         (parenttab,childtab,
+     &          indmax-indmin+1,petab_child-pttab_child+1,
+     &          s_parent,s_child,ds_parent,ds_child)
+C          
+      elseif ( TYPEinterp .EQ. AGRIF_PPM ) then
+
+          Call ppm1D
+     &         (parenttab,childtab,
+     &         indmax-indmin+1,petab_child-pttab_child+1,
+     &         s_parent,s_child,ds_parent,ds_child)
+C
+
+        elseif (TYPEinterp .EQ. AGRIF_LAGRANGE) then
+C          
+C         Lagrange interpolation    
+          Call lagrange1D
+     &        (parenttab,childtab,
+     &         indmax-indmin+1,petab_child-pttab_child+1,
+     &         s_parent,s_child,ds_parent,ds_child)
+C            
+        elseif (TYPEinterp .EQ. AGRIF_ENO) then
+C          
+C         Eno interpolation
+          Call eno1D
+     &         (parenttab,childtab,
+     &         indmax-indmin+1,petab_child-pttab_child+1,
+     &         s_parent,s_child,ds_parent,ds_child)
+C        
+        elseif (TYPEinterp .EQ. AGRIF_WENO) then
+C          
+C         Eno interpolation
+          Call weno1D
+     &         (parenttab,childtab,
+     &         indmax-indmin+1,petab_child-pttab_child+1,
+     &         s_parent,s_child,ds_parent,ds_child)
+C            
+        Else if (TYPEinterp .EQ. AGRIF_LINEARCONSERV) then
+C          
+C         Linear conservative interpolation
+          
+          Call linear1Dconserv
+     &         (parenttab,childtab,
+     &         indmax-indmin+1,petab_child-pttab_child+1,
+     &         s_parent,s_child,ds_parent,ds_child)   
+C              
+        Else if (TYPEinterp .EQ. AGRIF_LINEARCONSERVLIM) then
+C          
+C         Linear conservative interpolation
+          
+          Call linear1Dconservlim
+     &         (parenttab,childtab,
+     &         indmax-indmin+1,petab_child-pttab_child+1,
+     &         s_parent,s_child,ds_parent,ds_child)         
+C              
+        elseif (TYPEinterp .EQ. AGRIF_CONSTANT) then
+C          
+          Call constant1D
+     &         (parenttab,childtab,
+     &         indmax-indmin+1,petab_child-pttab_child+1,
+     &         s_parent,s_child,ds_parent,ds_child)
+C              
+      endif 
+C
+C      
+      End Subroutine Agrif_InterpBase 
+C
+
+      Subroutine Agrif_Compute_nbdim_interp(s_parent,s_child,
+     &  ds_parent,ds_child,coeffraf,locind_child_left)
+      real :: s_parent,s_child,ds_parent,ds_child
+      integer :: coeffraf,locind_child_left
+     
+      coeffraf = nint(ds_parent/ds_child)
+      locind_child_left = 1 + agrif_int((s_child-s_parent)/ds_parent)
+      End Subroutine Agrif_Compute_nbdim_interp
+C          
+
+      Subroutine Agrif_Find_list_interp(list_interp,pttab,petab,
+     &                          pttab_Child,pttab_Parent,nbdim,
+     &                          indmin,indmax,indminglob,
+     &      indmaxglob,indminglob2,indmaxglob2,parentarray,
+     &       pttruetab,cetruetab,member,memberin,
+     &      find_list_interp
+#if defined AGRIF_MPI
+     &     ,tab4t,memberinall,sendtoproc1,recvfromproc1
+#endif
+     &    )     
+      TYPE(Agrif_List_Interp_Loc), Pointer :: list_interp
+      INTEGER :: nbdim
+      INTEGER,DIMENSION(nbdim)   :: pttab,petab,pttab_Child,pttab_Parent
+      LOGICAL :: find_list_interp
+      Type(Agrif_List_Interp_loc), Pointer :: parcours
+      INTEGER,DIMENSION(nbdim)   :: indmin,indmax  
+      INTEGER,DIMENSION(nbdim)   :: indminglob,indmaxglob
+      INTEGER,DIMENSION(nbdim)   :: pttruetab,cetruetab      
+      INTEGER,DIMENSION(nbdim)   :: indminglob2,indmaxglob2  
+      INTEGER,DIMENSION(nbdim,2,2) :: parentarray
+      LOGICAL :: member, memberin
+      INTEGER :: i
+#ifdef AGRIF_MPI
+C
+      INTEGER,DIMENSION(nbdim,0:Agrif_Nbprocs-1,8) :: tab4t
+      LOGICAL, DIMENSION(0:Agrif_Nbprocs-1) :: memberinall
+      LOGICAL, DIMENSION(0:Agrif_Nbprocs-1) :: sendtoproc1,recvfromproc1
+#endif 
+                    
+      find_list_interp = .FALSE.
+      
+      parcours => list_interp
+      Find_loop :   Do While (associated(parcours))
+        Do i=1,nbdim
+          IF ((pttab(i) /= parcours%interp_loc%pttab(i)).OR.
+     &        (petab(i) /= parcours%interp_loc%petab(i)).OR.
+     &        (pttab_child(i) /= parcours%interp_loc%pttab_child(i)).OR.
+     &        (pttab_parent(i) /= parcours%interp_loc%pttab_parent(i)))
+     &               THEN
+            parcours=>parcours%suiv
+            Cycle Find_loop
+          ENDIF
+        EndDo
+
+        indmin = parcours%interp_loc%indmin(1:nbdim)
+        indmax = parcours%interp_loc%indmax(1:nbdim)
+        
+        pttruetab = parcours%interp_loc%pttruetab(1:nbdim)
+        cetruetab = parcours%interp_loc%cetruetab(1:nbdim)
+                
+#if !defined AGRIF_MPI
+        indminglob = parcours%interp_loc%indminglob(1:nbdim)
+        indmaxglob = parcours%interp_loc%indmaxglob(1:nbdim)
+#else
+        indminglob2 = parcours%interp_loc%indminglob2(1:nbdim)
+        indmaxglob2 = parcours%interp_loc%indmaxglob2(1:nbdim)
+        parentarray = parcours%interp_loc%parentarray(1:nbdim,:,:)
+        member = parcours%interp_loc%member
+        tab4t = parcours%interp_loc%tab4t(1:nbdim,0:Agrif_Nbprocs-1,1:8)
+        memberinall = parcours%interp_loc%memberinall(0:Agrif_Nbprocs-1)
+        sendtoproc1 = parcours%interp_loc%sendtoproc1(0:Agrif_Nbprocs-1)
+        recvfromproc1 = 
+     &    parcours%interp_loc%recvfromproc1(0:Agrif_Nbprocs-1)
+#endif        
+        memberin = parcours%interp_loc%memberin
+        find_list_interp = .TRUE.   
+        Exit Find_loop
+      End Do Find_loop  
+                              
+      End Subroutine Agrif_Find_list_interp   
+      
+      Subroutine Agrif_AddTo_list_interp(list_interp,pttab,petab,
+     &                          pttab_Child,pttab_Parent,indmin,indmax,
+     &                          indminglob,indmaxglob,
+     &                          indminglob2,indmaxglob2,
+     &                          parentarray,pttruetab,cetruetab,
+     &                          member,memberin,nbdim
+#if defined AGRIF_MPI
+     &      ,tab4t,memberinall,sendtoproc1,recvfromproc1
+#endif
+     &    )
+          
+      TYPE(Agrif_List_Interp_Loc), Pointer :: list_interp
+      INTEGER :: nbdim
+      INTEGER,DIMENSION(nbdim)   :: pttab,petab,pttab_Child,pttab_Parent
+      INTEGER,DIMENSION(nbdim)   :: indmin,indmax
+      INTEGER,DIMENSION(nbdim)   :: indminglob,indmaxglob
+      INTEGER,DIMENSION(nbdim)   :: indminglob2,indmaxglob2
+      INTEGER,DIMENSION(nbdim)   :: pttruetab,cetruetab
+      INTEGER,DIMENSION(nbdim,2,2) :: parentarray
+      LOGICAL :: member, memberin
+#ifdef AGRIF_MPI
+C
+      INTEGER,DIMENSION(nbdim,0:Agrif_Nbprocs-1,8) :: tab4t
+      LOGICAL,DIMENSION(0:Agrif_Nbprocs-1) :: memberinall
+      LOGICAL,DIMENSION(0:Agrif_Nbprocs-1) :: sendtoproc1
+      LOGICAL,DIMENSION(0:Agrif_Nbprocs-1) :: recvfromproc1
+#endif                   
+      Type(Agrif_List_Interp_loc), Pointer :: parcours
+            
+       Allocate(parcours)
+      Allocate(parcours%interp_loc)
+      
+      parcours%interp_loc%pttab(1:nbdim) = pttab(1:nbdim)
+      parcours%interp_loc%petab(1:nbdim) = petab(1:nbdim)
+      parcours%interp_loc%pttab_child(1:nbdim) = pttab_child(1:nbdim)
+      parcours%interp_loc%pttab_parent(1:nbdim) = pttab_parent(1:nbdim)
+  
+  
+      parcours%interp_loc%indmin(1:nbdim) = indmin(1:nbdim)
+      parcours%interp_loc%indmax(1:nbdim) = indmax(1:nbdim)
+
+      parcours%interp_loc%memberin = memberin
+#if !defined AGRIF_MPI
+      parcours%interp_loc%indminglob(1:nbdim) = indminglob(1:nbdim)
+      parcours%interp_loc%indmaxglob(1:nbdim) = indmaxglob(1:nbdim)
+#else
+      parcours%interp_loc%indminglob2(1:nbdim) = indminglob2(1:nbdim)
+      parcours%interp_loc%indmaxglob2(1:nbdim) = indmaxglob2(1:nbdim)
+      parcours%interp_loc%parentarray(1:nbdim,:,:) 
+     &       = parentarray(1:nbdim,:,:)
+      parcours%interp_loc%member = member
+      Allocate(parcours%interp_loc%tab4t(nbdim,0:Agrif_Nbprocs-1,8))
+      Allocate(parcours%interp_loc%memberinall(0:Agrif_Nbprocs-1))
+      Allocate(parcours%interp_loc%sendtoproc1(0:Agrif_Nbprocs-1))
+      Allocate(parcours%interp_loc%recvfromproc1(0:Agrif_Nbprocs-1))                  
+      parcours%interp_loc%tab4t=tab4t   
+      parcours%interp_loc%memberinall=memberinall   
+      parcours%interp_loc%sendtoproc1=sendtoproc1
+      parcours%interp_loc%recvfromproc1=recvfromproc1            
+#endif      
+
+      parcours%interp_loc%pttruetab(1:nbdim) = pttruetab(1:nbdim)
+      parcours%interp_loc%cetruetab(1:nbdim) = cetruetab(1:nbdim)
+      
+      parcours%suiv => list_interp
+      
+      list_interp => parcours
+      End Subroutine Agrif_Addto_list_interp 
+                
+      End Module Agrif_Interpolation
Index: /vendors/AGRIF/r_00/AGRIF_FILES/modinterpbasic.F
===================================================================
--- /vendors/AGRIF/r_00/AGRIF_FILES/modinterpbasic.F	(revision 1902)
+++ /vendors/AGRIF/r_00/AGRIF_FILES/modinterpbasic.F	(revision 1902)
@@ -0,0 +1,1691 @@
+!
+! $Id: modinterpbasic.F 898 2008-04-22 15:35:20Z rblod $
+!
+C     AGRIF (Adaptive Grid Refinement In Fortran)
+C
+C     Copyright (C) 2003 Laurent Debreu (Laurent.Debreu@imag.fr)
+C                        Christophe Vouland (Christophe.Vouland@imag.fr)    
+C
+C     This program is free software; you can redistribute it and/or modify
+C     it under the terms of the GNU General Public License as published by
+C     the Free Software Foundation; either version 2 of the License, or
+C     (at your option) any later version.
+C
+C     This program is distributed in the hope that it will be useful,
+C     but WITHOUT ANY WARRANTY; without even the implied warranty of
+C     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+C     GNU General Public License for more details.
+C
+C     You should have received a copy of the GNU General Public License
+C     along with this program; if not, write to the Free Software
+C     Foundation, Inc., 59 Temple Place- Suite 330, Boston, MA 02111-1307, USA.
+C
+C
+C
+CCC   Module Agrif_Interpbasic
+C
+      Module Agrif_Interpbasic
+C
+CCC   Description:
+CCC   Module containing different procedures of interpolation (linear,lagrange,
+CCC   spline,...) used in the Agrif_Interpolation module.
+C
+C     Modules used:
+      USE Agrif_types
+C
+      IMPLICIT NONE
+C             
+      Real,Dimension(Agrif_MaxRaff) :: tabdiff2, tabdiff3
+      Real,Dimension(5,Agrif_MaxRaff,3) :: tabppm
+      Real,Dimension(:),Allocatable::tabtest4   
+      Integer, Dimension(:,:), Allocatable :: indparent
+      Integer, Dimension(:,:), Allocatable :: 
+     &           indparentppm,indchildppm
+      Integer, Dimension(:), Allocatable :: 
+     &           indparentppm_1d,indchildppm_1d
+      Real, Dimension(:,:),Allocatable :: coeffparent   
+       
+      CONTAINS
+C     Define procedures contained in this module
+C  
+C     **************************************************************************  
+CCC   Subroutine Linear1d  
+C     ************************************************************************** 
+C 
+      Subroutine Linear1d(x,y,np,nc,
+     &                    s_parent,s_child,ds_parent,ds_child) 
+C
+CCC   Description:
+CCC   Subroutine to do a linear 1D interpolation on a child grid (vector y) from
+CCC   its parent grid (vector x).  
+C
+CC    Method:
+C
+C     Declarations:
+C
+      
+C        
+C     Arguments
+      INTEGER             :: np,nc      
+      REAL,INTENT(IN), DIMENSION(np) :: x      
+      REAL,INTENT(OUT), DIMENSION(nc) :: y  
+      REAL                :: s_parent,s_child,ds_parent,ds_child
+C
+C     Local scalars
+      INTEGER :: i,coeffraf,locind_parent_left
+      REAL    :: ypos,globind_parent_left,globind_parent_right
+      REAL    :: invds, invds2
+      REAL :: ypos2,diff
+C
+C
+
+      coeffraf = nint(ds_parent/ds_child)
+C
+      if (coeffraf == 1) then
+C
+          locind_parent_left = 1 + nint((s_child - s_parent)/ds_parent)
+C        
+          y(1:nc) = x(locind_parent_left:locind_parent_left+nc-1)
+C
+          return
+C
+      endif                          
+C
+      ypos = s_child 
+
+      locind_parent_left = 1 + agrif_int((ypos - s_parent)/ds_parent)
+
+        globind_parent_left = s_parent 
+     &                        + (locind_parent_left - 1)*ds_parent
+
+        globind_parent_right = globind_parent_left + ds_parent
+
+C
+      invds = 1./ds_parent
+      invds2 = ds_child/ds_parent
+      
+      ypos2 = ypos*invds
+      globind_parent_right=globind_parent_right*invds
+      
+      do i = 1,nc-1
+C
+        if (ypos2 > globind_parent_right) then
+           locind_parent_left = locind_parent_left + 1.
+           globind_parent_right = globind_parent_right + 1.
+        endif
+        
+        diff=(globind_parent_right - ypos2)
+        
+        y(i) = (diff*x(locind_parent_left)
+     &        + (1.-diff)*x(locind_parent_left+1))
+C
+        ypos2 = ypos2 + invds2
+C
+      enddo
+C
+      ypos = s_child + (nc-1)*ds_child
+      locind_parent_left = 1 + agrif_int((ypos - s_parent)/ds_parent)
+C
+      if (locind_parent_left == np) then
+C
+          y(nc) = x(np)
+C
+        else
+C
+          globind_parent_left = s_parent 
+     &                        + (locind_parent_left - 1)*ds_parent  
+C      
+          y(nc) = ((globind_parent_left + ds_parent - ypos)
+     &            *x(locind_parent_left)
+     &          + (ypos - globind_parent_left)
+     &            *x(locind_parent_left+1))*invds
+C
+      endif                                          
+C           
+      Return
+C
+C       
+      End Subroutine Linear1d   
+      
+      Subroutine Linear1dprecompute2d(np2, np,nc,
+     &                    s_parent,s_child,ds_parent,ds_child,dir)
+C
+CCC   Description:
+CCC   Subroutine to compute 2D coefficient and index for a linear 1D interpolation
+CCC   on a child grid (vector y) from its parent grid (vector x).
+C
+CC    Method:
+C
+C     Declarations:
+C
+
+C        
+C     Arguments
+      INTEGER             :: np,nc,np2,dir
+      REAL                :: s_parent,s_child,ds_parent,ds_child
+C
+C     Local scalars
+      INTEGER :: i,j,coeffraf,locind_parent_left,inc,inc1,inc2,toto 
+      Integer, Dimension(:,:), Allocatable :: indparent_tmp
+      Real, Dimension(:,:), Allocatable :: coeffparent_tmp
+      REAL    :: ypos,globind_parent_left,globind_parent_right
+      REAL    :: invds, invds2
+      REAL :: ypos2,diff
+C
+C
+
+      coeffraf = nint(ds_parent/ds_child)
+C
+      ypos = s_child
+
+      locind_parent_left = 1 + agrif_int((ypos - s_parent)/ds_parent)
+
+        globind_parent_left = s_parent
+     &                        + (locind_parent_left - 1)*ds_parent
+
+        globind_parent_right = globind_parent_left + ds_parent
+
+C
+      invds = 1./ds_parent
+      invds2 = ds_child/ds_parent
+
+      ypos2 = ypos*invds
+      globind_parent_right=globind_parent_right*invds
+
+      if (.not.allocated(indparent)) then
+      allocate(indparent(nc*np2,3),coeffparent(nc*np2,3))
+      else
+      if (size(indparent,1)<nc*np2) then
+      allocate(coeffparent_tmp(size(indparent,1),size(indparent,2)))
+      allocate(indparent_tmp(size(indparent,1),size(indparent,2)))
+      coeffparent_tmp=coeffparent 
+      indparent_tmp=indparent 
+      deallocate(indparent,coeffparent)
+      allocate(indparent(nc*np2,3),coeffparent(nc*np2,3))
+      coeffparent(1:size(coeffparent_tmp,1),1:size(coeffparent_tmp,2))
+     &  = coeffparent_tmp 
+      indparent(1:size(indparent_tmp,1),1:size(indparent_tmp,2))
+     & = indparent_tmp
+      deallocate(indparent_tmp,coeffparent_tmp)
+      endif
+      endif
+
+      do i = 1,nc-1
+C
+        if (ypos2 > globind_parent_right) then
+           locind_parent_left = locind_parent_left + 1
+           globind_parent_right = globind_parent_right + 1.
+        endif
+        
+        diff=(globind_parent_right - ypos2)
+        indparent(i,dir) = locind_parent_left
+        coeffparent(i,dir) = diff
+        
+        ypos2 = ypos2 + invds2
+C
+      enddo
+C
+      ypos = s_child + (nc-1)*ds_child
+      locind_parent_left = 1 + agrif_int((ypos - s_parent)/ds_parent)
+
+      if (locind_parent_left == np) then
+      indparent(nc,dir) = locind_parent_left-1
+      coeffparent(nc,dir) = 0.
+        else
+C
+          globind_parent_left = s_parent
+     &                        + (locind_parent_left - 1)*ds_parent
+C      
+       indparent(nc,dir) = locind_parent_left
+       
+         coeffparent(nc,dir) = (globind_parent_left + ds_parent - ypos)
+     &       * invds
+      endif                                           
+
+      do i=2, np2
+      inc  =  i*nc
+      inc1 = (i-1)*nc
+      inc2 = (i-2)*nc 
+!CDIR ALTCODE
+      indparent(1+inc1:inc,dir) = indparent(1+inc2:inc1,dir)+np
+!CDIR ALTCODE
+      coeffparent(1+inc1:inc,dir) =coeffparent(1:nc,dir)
+      enddo      
+
+      Return
+C
+C       
+      End Subroutine Linear1dprecompute2d
+
+
+
+      Subroutine Linear1dprecompute(np,nc,
+     &                    s_parent,s_child,ds_parent,ds_child) 
+C
+CCC   Description:
+CCC   Subroutine to compute 1D coefficient and index for a linear 1D interpolation
+CCC   on a child grid (vector y) from its parent grid (vector x).
+C
+CC    Method:
+C
+C     Declarations:
+C
+      
+C        
+C     Arguments
+      INTEGER             :: np,nc 
+      REAL                :: s_parent,s_child,ds_parent,ds_child
+C
+C     Local scalars
+      INTEGER :: i,coeffraf,locind_parent_left
+      REAL    :: ypos,globind_parent_left,globind_parent_right
+      REAL    :: invds, invds2
+      REAL :: ypos2,diff
+C
+C
+
+      coeffraf = nint(ds_parent/ds_child)
+C
+      if (coeffraf == 1) then
+C
+          return
+C
+      endif                          
+C
+      ypos = s_child 
+
+      locind_parent_left = 1 + agrif_int((ypos - s_parent)/ds_parent)
+
+        globind_parent_left = s_parent 
+     &                        + (locind_parent_left - 1)*ds_parent
+
+        globind_parent_right = globind_parent_left + ds_parent
+
+C
+      invds = 1./ds_parent
+      invds2 = ds_child/ds_parent
+      
+      ypos2 = ypos*invds
+      globind_parent_right=globind_parent_right*invds
+      
+      if (.not.allocated(indparent)) then
+      allocate(indparent(nc,1),coeffparent(nc,1))
+      else
+      if (size(indparent)<nc) then
+      deallocate(indparent,coeffparent)
+      allocate(indparent(nc,1),coeffparent(nc,1))
+      endif
+      endif
+      
+      do i = 1,nc-1
+C
+        if (ypos2 > globind_parent_right) then
+           locind_parent_left = locind_parent_left + 1
+           globind_parent_right = globind_parent_right + 1.
+        endif
+        
+        diff=(globind_parent_right - ypos2)
+        indparent(i,1) = locind_parent_left
+        coeffparent(i,1) = diff
+        ypos2 = ypos2 + invds2
+C
+      enddo
+C
+      ypos = s_child + (nc-1)*ds_child
+      locind_parent_left = 1 + agrif_int((ypos - s_parent)/ds_parent)
+      
+      if (locind_parent_left == np) then
+      indparent(nc,1) = locind_parent_left-1
+      coeffparent(nc,1) = 0.
+        else
+C
+          globind_parent_left = s_parent 
+     &                        + (locind_parent_left - 1)*ds_parent  
+C      
+       indparent(nc,1) = locind_parent_left
+       
+         coeffparent(nc,1) = (globind_parent_left + ds_parent - ypos)
+     &       * invds
+      endif                                          
+C           
+      Return
+C
+C       
+      End Subroutine Linear1dprecompute 
+      
+      Subroutine Linear1daftercompute(x,y,np,nc,
+     &                    s_parent,s_child,ds_parent,ds_child,dir) 
+C
+CCC   Description:
+CCC   Subroutine to do a linear 1D interpolation on a child grid (vector y) from
+CCC   its parent grid (vector x) using precomputed coefficient and index.  
+C
+CC    Method:
+C
+C     Declarations:
+C
+      
+C        
+C     Arguments
+      INTEGER             :: np,nc,dir      
+      REAL,INTENT(IN), DIMENSION(np) :: x      
+      REAL,INTENT(OUT), DIMENSION(nc) :: y  
+      REAL                :: s_parent,s_child,ds_parent,ds_child
+C
+C     Local scalars
+      INTEGER :: i,coeffraf,locind_parent_left
+      REAL    :: ypos,globind_parent_left,globind_parent_right
+      REAL    :: invds, invds2
+      REAL :: ypos2,diff
+C
+C
+
+!CDIR ALTCODE
+!CDIR NODEP
+      do i = 1,nc
+C
+       y(i)=coeffparent(i,dir)*x(MAX(indparent(i,dir),1))+
+     &      (1.-coeffparent(i,dir))*x(indparent(i,dir)+1)
+C
+      enddo                                     
+C           
+      Return
+C
+C       
+      End Subroutine Linear1daftercompute            
+       
+C
+C
+C
+C     **************************************************************************  
+CCC   Subroutine Lagrange1d  
+C     **************************************************************************
+C
+      Subroutine Lagrange1d(x,y,np,nc,
+     &                      s_parent,s_child,ds_parent,ds_child)
+C
+CCC   Description:
+CCC   Subroutine to do a lagrange 1D interpolation on a child grid (vector y) 
+CCC   from its parent grid (vector x).  
+C
+CC    Method:
+C
+C     Declarations:
+C
+      
+C             
+C     Arguments
+      INTEGER             :: np,nc      
+      REAL,INTENT(IN), DIMENSION(np) :: x      
+      REAL,INTENT(OUT), DIMENSION(nc) :: y  
+      REAL                :: s_parent,s_child,ds_parent,ds_child 
+C
+C     Local scalars
+      INTEGER :: i,coeffraf,locind_parent_left
+      REAL    :: ypos,globind_parent_left
+      REAL    :: X1,X2,X3 
+      real :: deltax,invdsparent
+      real t1,t2,t3,t4,t5,t6,t7,t8
+C
+C 
+      if (np <= 2) then
+C      
+          Call Linear1D(x,y,np,nc,
+     &                  s_parent,s_child,ds_parent,ds_child)
+C         
+         Return
+C 
+      endif
+C
+      coeffraf = nint(ds_parent/ds_child)
+C
+      if (coeffraf == 1) then
+C
+          locind_parent_left = 1 + nint((s_child - s_parent)/ds_parent)
+C        
+          y(1:nc) = x(locind_parent_left:locind_parent_left+nc-1)
+C
+          return
+C
+      endif
+      
+      invdsparent=1./ds_parent
+C
+      ypos = s_child      
+C
+      do i = 1,nc
+C
+        locind_parent_left = 1 + agrif_int((ypos - s_parent)/ds_parent)
+C
+
+        globind_parent_left = s_parent 
+     &                        + (locind_parent_left - 1)*ds_parent 
+     
+        deltax = invdsparent*(ypos-globind_parent_left)
+        ypos = ypos + ds_child
+         if (abs(deltax).LE.0.0001) then
+           y(i)=x(locind_parent_left)
+           
+           cycle
+         endif
+C           
+C
+        t2 = deltax - 2.
+        t3 = deltax - 1.
+        t4 = deltax + 1.
+        
+        t5 = -(1./6.)*deltax*t2*t3
+        t6 = 0.5*t2*t3*t4
+        t7 = -0.5*deltax*t2*t4
+        t8 = (1./6.)*deltax*t3*t4
+        
+        y(i)=t5*x(locind_parent_left-1)+t6*x(locind_parent_left)
+     &  +t7*x(locind_parent_left+1)+t8*x(locind_parent_left+2)
+C
+C
+      enddo
+C
+      return
+C
+C       
+      End Subroutine Lagrange1d 
+C
+C
+C     **************************************************************************  
+CCC   Subroutine Constant1d  
+C     ************************************************************************** 
+C 
+      Subroutine constant1d(x,y,np,nc,
+     &                    s_parent,s_child,ds_parent,ds_child) 
+C
+CCC   Description:
+CCC   Subroutine to do a linear 1D interpolation on a child grid (vector y) from
+CCC   its parent grid (vector x).  
+C
+CC    Method:
+C
+C     Declarations:
+C
+      
+C        
+C     Arguments
+      INTEGER             :: np,nc      
+      REAL,INTENT(IN), DIMENSION(np) :: x      
+      REAL,INTENT(OUT), DIMENSION(nc) :: y  
+      REAL                :: s_parent,s_child,ds_parent,ds_child
+C
+C     Local scalars
+      INTEGER :: i,coeffraf,locind_parent
+      REAL    :: ypos
+C
+C
+
+      coeffraf = nint(ds_parent/ds_child)
+C
+      if (coeffraf == 1) then
+C
+          locind_parent = 1 + nint((s_child - s_parent)/ds_parent)
+C        
+          y(1:nc) = x(locind_parent:locind_parent+nc-1)
+C
+          return
+C
+      endif                          
+C
+      ypos = s_child      
+C
+      do i = 1,nc
+C
+        locind_parent = 1 + nint((ypos - s_parent)/ds_parent)
+C
+        y(i) = x(locind_parent)
+C
+        ypos = ypos + ds_child
+C
+      enddo
+C           
+      Return
+C
+C       
+      End Subroutine constant1d   
+C
+C     **************************************************************************  
+CCC   Subroutine Linear1dconserv
+C     ************************************************************************** 
+C 
+      Subroutine Linear1dconserv(x,y,np,nc,
+     &                    s_parent,s_child,ds_parent,ds_child) 
+C
+CCC   Description:
+CCC   Subroutine to do a linear 1D interpolation on a child grid (vector y) from
+CCC   its parent grid (vector x).  
+C
+CC    Method:
+C
+C     Declarations:
+C
+      Implicit none
+C        
+C     Arguments
+      Integer             :: np,nc      
+      Real, Dimension(np) :: x      
+      Real, Dimension(nc) :: y
+      Real, Dimension(:),Allocatable :: ytemp
+      Real                :: s_parent,s_child,ds_parent,ds_child
+C
+C     Local scalars
+      Integer :: i,coeffraf,locind_parent_left,locind_parent_last
+      Real    :: ypos
+      integer :: i1,i2,ii
+      real :: xpmin,xpmax,slope
+      INTEGER :: diffmod
+      REAL :: xdiffmod
+
+C
+C
+
+      coeffraf = nint(ds_parent/ds_child)
+C
+      If (coeffraf == 1) Then
+C
+          locind_parent_left = 1 + nint((s_child - s_parent)/ds_parent)
+C        
+          y(1:nc) = x(locind_parent_left:locind_parent_left+nc-1)
+C
+          return
+C
+      End If
+C              
+      diffmod = 0
+      IF (mod(coeffraf,2) == 0) diffmod = 1  
+
+      xdiffmod = real(diffmod)/2.
+                         
+      allocate(ytemp(-2*coeffraf:nc+2*coeffraf))
+C
+      ypos = s_child  
+C      
+      locind_parent_left = 1 + agrif_int((ypos - s_parent)/ds_parent) 
+
+      locind_parent_last = 1 +
+     &  agrif_ceiling((ypos +(nc - 1) *ds_child - s_parent)/ds_parent)
+     
+      xpmin = s_parent + (locind_parent_left-1)*ds_parent 
+      xpmax = s_parent + (locind_parent_last-1)*ds_parent          
+      
+      i1 = 1+agrif_int((xpmin-s_child)/ds_child)
+      i2 = 1+agrif_int((xpmax-s_child)/ds_child)
+
+      i = i1
+      
+      if (locind_parent_left == 1) then
+        slope=
+     &   (x(locind_parent_left+1)-x(locind_parent_left))/(coeffraf)
+      else
+         slope=
+     &   (x(locind_parent_left+1)-x(locind_parent_left-1))/(2.*coeffraf)
+      endif
+      
+        do ii=i-coeffraf/2+diffmod,i+coeffraf/2
+          ytemp(ii) = x(locind_parent_left)+(ii-i-xdiffmod/2.)*slope
+        enddo 
+
+        locind_parent_left = locind_parent_left + 1
+                      
+      do i=i1 +  coeffraf, i2 - coeffraf,coeffraf
+        slope=
+     &   (x(locind_parent_left+1)-x(locind_parent_left-1))/(2.*coeffraf)
+        do ii=i-coeffraf/2+diffmod,i+coeffraf/2
+          ytemp(ii) = x(locind_parent_left)+(ii-i-xdiffmod/2.)*slope
+        enddo
+        locind_parent_left = locind_parent_left + 1
+      enddo
+      
+      i = i2
+      
+      if (locind_parent_left == np) then
+        slope=
+     &   (x(locind_parent_left)-x(locind_parent_left-1))/(coeffraf)
+      else
+         slope=
+     &   (x(locind_parent_left+1)-x(locind_parent_left-1))/(2.*coeffraf)
+      endif
+      
+        do ii=i-coeffraf/2+diffmod,nc
+          ytemp(ii) = x(locind_parent_left)+(ii-i-xdiffmod/2.)*slope
+        enddo      
+C
+      y(1:nc)=ytemp(1:nc)                                   
+C           
+      deallocate(ytemp)
+      Return
+C       
+      End Subroutine Linear1dconserv
+      
+C
+C     **************************************************************************  
+CCC   Subroutine Linear1dconservlim
+C     ************************************************************************** 
+C 
+      Subroutine Linear1dconservlim(x,y,np,nc,
+     &                    s_parent,s_child,ds_parent,ds_child) 
+C
+CCC   Description:
+CCC   Subroutine to do a linear 1D interpolation on a child grid (vector y) from
+CCC   its parent grid (vector x).  
+C
+CC    Method:
+C
+C     Declarations:
+C
+      Implicit none
+C        
+C     Arguments
+      Integer             :: np,nc      
+      Real, Dimension(np) :: x      
+      Real, Dimension(nc) :: y
+      Real, Dimension(:),Allocatable :: ytemp
+      Real                :: s_parent,s_child,ds_parent,ds_child
+C
+C     Local scalars
+      Integer :: i,coeffraf,locind_parent_left,locind_parent_last
+      Real    :: ypos
+      integer :: i1,i2,ii
+      real :: xpmin,xpmax,slope
+      INTEGER :: diffmod
+      real :: xdiffmod
+C
+C
+
+      coeffraf = nint(ds_parent/ds_child)
+C
+      If (coeffraf == 1) Then
+C
+          locind_parent_left = 1 + nint((s_child - s_parent)/ds_parent)
+C        
+          y(1:nc) = x(locind_parent_left:locind_parent_left+nc-1)
+C
+          return
+C
+      End If
+C
+      IF (coeffraf .NE.3) THEN
+      print *,'LINEARCONSERVLIM not ready for refinement ratio = ',
+     &   coeffraf
+      stop
+      ENDIF   
+      
+      diffmod = 0
+      IF (mod(coeffraf,2) == 0) diffmod = 1        
+
+      xdiffmod = real(diffmod)/2.
+                         
+      allocate(ytemp(-2*coeffraf:nc+2*coeffraf))
+C
+      ypos = s_child  
+C      
+      locind_parent_left = 1 + agrif_int((ypos - s_parent)/ds_parent) 
+
+      locind_parent_last = 1 +
+     &  agrif_ceiling((ypos +(nc - 1) *ds_child - s_parent)/ds_parent)
+     
+      xpmin = s_parent + (locind_parent_left-1)*ds_parent 
+      xpmax = s_parent + (locind_parent_last-1)*ds_parent          
+      
+      i1 = 1+agrif_int((xpmin-s_child)/ds_child)
+      i2 = 1+agrif_int((xpmax-s_child)/ds_child)
+
+      i = i1
+      
+      if (locind_parent_left == 1) then
+        slope=0.       
+      else
+        slope = vanleer(x(locind_parent_left-1:locind_parent_left+1))
+        slope = slope / coeffraf    
+      endif
+      
+        do ii=i-coeffraf/2+diffmod,i+coeffraf/2
+          ytemp(ii) = x(locind_parent_left)+(ii-i-xdiffmod/2.)*slope
+        enddo 
+
+        locind_parent_left = locind_parent_left + 1
+                      
+      do i=i1 +  coeffraf, i2 - coeffraf,coeffraf     
+        slope = vanleer(x(locind_parent_left-1:locind_parent_left+1))
+        slope = slope / coeffraf
+
+        do ii=i-coeffraf/2+diffmod,i+coeffraf/2
+          ytemp(ii) = x(locind_parent_left)+(ii-i-xdiffmod/2.)*slope
+        enddo
+        locind_parent_left = locind_parent_left + 1
+      enddo
+      
+      i = i2
+      
+      if (locind_parent_left == np) then
+        slope=0.     
+      else
+        slope = vanleer(x(locind_parent_left-1:locind_parent_left+1))
+        slope = slope / coeffraf      
+      endif
+      
+        do ii=i-coeffraf/2+diffmod,nc
+          ytemp(ii) = x(locind_parent_left)+(ii-i-xdiffmod/2.)*slope
+        enddo      
+C
+      y(1:nc)=ytemp(1:nc)                                   
+C           
+      deallocate(ytemp)
+      Return
+C       
+      End Subroutine Linear1dconservlim      
+C         
+
+C     **************************************************************************  
+CCC   Subroutine ppm1d
+C     ************************************************************************** 
+C 
+      Subroutine ppm1d(x,y,np,nc,
+     &                    s_parent,s_child,ds_parent,ds_child) 
+C
+CCC   Description:
+CCC   Subroutine to do a 1D interpolation and apply monotonicity constraints
+CCC   using piecewise parabolic method  
+CCC   on a child grid (vector y) from its parent grid (vector x).
+CC    Method:
+C
+C     Declarations:
+C
+      Implicit none
+C        
+C     Arguments
+      Integer             :: np,nc      
+      Real, INTENT(IN),Dimension(np) :: x      
+      Real, INTENT(OUT),Dimension(nc) :: y
+C      Real, Dimension(:),Allocatable :: ytemp
+      Real                :: s_parent,s_child,ds_parent,ds_child
+C
+C     Local scalars
+      Integer :: i,coeffraf,locind_parent_left,locind_parent_last
+      Integer :: iparent,ipos,pos,nmin,nmax
+      Real    :: ypos
+      integer :: i1,jj
+      Real :: xpmin,a
+C      
+      Real :: xrmin,xrmax,am3,s2,s1  
+      Real, Dimension(np) :: xl,delta,a6,slope
+C      Real, Dimension(:),Allocatable  :: diff,diff2,diff3    
+      INTEGER :: diffmod
+      REAL :: invcoeffraf
+C      
+      coeffraf = nint(ds_parent/ds_child)
+C
+      If (coeffraf == 1) Then
+          locind_parent_left = 1 + nint((s_child - s_parent)/ds_parent)
+!CDIR ALTCODE
+!CDIR SHORTLOOP
+          y(1:nc) = x(locind_parent_left:locind_parent_left+nc-1)
+          return
+      End If
+      invcoeffraf = ds_child/ds_parent
+C      
+
+      IF( .NOT. allocated(tabtest4) ) THEN    
+      Allocate(tabtest4(-2*coeffraf:nc+2*coeffraf))
+      ELSE
+         IF (size(tabtest4) .LT. nc+4*coeffraf+1)THEN
+         deallocate( tabtest4 )
+         Allocate(tabtest4(-2*coeffraf:nc+2*coeffraf))
+         ENDIF
+      ENDIF
+            
+      ypos = s_child  
+C
+      locind_parent_left = 1 + agrif_int((ypos - s_parent)/ds_parent) 
+      locind_parent_last = 1 +
+     &      agrif_ceiling((ypos +(nc - 1) 
+     &      *ds_child - s_parent)/ds_parent)  
+C
+      xpmin = s_parent + (locind_parent_left-1)*ds_parent       
+      i1 = 1+agrif_int((xpmin-s_child)/ds_child)        
+C     
+C
+      
+!CDIR NOVECTOR
+      Do i=1,coeffraf
+        tabdiff2(i)=(real(i)-0.5)*invcoeffraf
+      EndDo
+
+      a = invcoeffraf**2 
+      tabdiff3(1) = (1./3.)*a
+      a=2.*a
+!CDIR NOVECTOR
+      Do i=2,coeffraf
+        tabdiff3(i) = tabdiff3(i-1)+(real(i)-1)*a
+      EndDo
+C
+      if( locind_parent_last+2 <= np ) then
+           nmax = locind_parent_last+2    
+      else if( locind_parent_last+1 <= np ) then
+           nmax = locind_parent_last+1
+      else
+           nmax = locind_parent_last 
+      endif     
+C      
+      if(locind_parent_left-1 >= 1) then
+          nmin = locind_parent_left-1
+      else 
+          nmin = locind_parent_left
+      endif    
+C 
+C
+!CDIR ALTCODE
+!CDIR SHORTLOOP
+      Do i = nmin,nmax
+         slope(i) = x(i) - x(i-1)
+      Enddo
+
+!CDIR ALTCODE
+!CDIR SHORTLOOP
+      Do i = nmin+1,nmax-1
+         xl(i)= 0.5*(x(i-1)+x(i))
+     &      -0.08333333333333*(slope(i+1)-slope(i-1)) 
+      Enddo
+C
+C apply parabolic monotonicity
+!CDIR ALTCODE
+!CDIR SHORTLOOP
+       Do i = locind_parent_left,locind_parent_last
+          delta(i) = xl(i+1) - xl(i)
+          a6(i) = 6.*x(i)-3.*(xl(i) +xl(i+1))
+C
+       End do   
+C
+        diffmod = 0
+       IF (mod(coeffraf,2) == 0) diffmod = 1
+C
+        ipos = i1
+C               
+        Do iparent = locind_parent_left,locind_parent_last       
+             pos=1
+!CDIR ALTCODE
+!CDIR SHORTLOOP
+             Do jj = ipos - coeffraf/2+diffmod,ipos + coeffraf/2
+C
+               tabtest4(jj) = xl(iparent)   
+     &             + tabdiff2(pos) *  (delta(iparent)+a6(iparent))
+     &             - tabdiff3(pos) *  a6(iparent)
+               pos = pos+1 
+             End do 
+             ipos = ipos + coeffraf
+C
+        End do
+C
+C
+!CDIR ALTCODE
+!CDIR SHORTLOOP
+        y(1:nc)=tabtest4(1:nc)
+        
+      Return
+      End Subroutine ppm1d
+      
+
+      Subroutine ppm1dprecompute2d(np2,np,nc,
+     &                    s_parent,s_child,ds_parent,ds_child,dir)
+C
+CCC   Description:
+CCC   Subroutine to compute 2D coefficients and index for a 1D interpolation
+CCC   using piecewise parabolic method  
+CC    Method: 
+C
+C     Declarations:
+C
+      Implicit none
+C        
+C     Arguments
+      Integer             :: np2,np,nc,dir
+C      Real, Dimension(:),Allocatable :: ytemp
+      Real                :: s_parent,s_child,ds_parent,ds_child
+C
+C     Local scalars
+      Integer, Dimension(:,:), Allocatable :: indparent_tmp
+      Integer, Dimension(:,:), Allocatable :: indchild_tmp
+      Integer :: i,coeffraf,locind_parent_left,locind_parent_last
+      Integer :: iparent,ipos,pos,nmin,nmax
+      Real    :: ypos
+      integer :: i1,jj
+      Real :: xpmin,a
+C      
+      Real :: xrmin,xrmax,am3,s2,s1
+      Real, Dimension(np) :: xl,delta,a6,slope
+      INTEGER :: diffmod
+      REAL :: invcoeffraf
+C      
+      coeffraf = nint(ds_parent/ds_child)
+C
+      invcoeffraf = ds_child/ds_parent
+C 
+
+      if (.not.allocated(indparentppm)) then
+      allocate(
+     & indparentppm(np2*nc,3),
+     & indchildppm(np2*nc,3)
+     &        )
+      else
+      if (size(indparentppm,1)<np2*nc) then
+      allocate(
+     &  indparent_tmp(size(indparentppm,1),size(indparentppm,2)),
+     &  indchild_tmp(size(indparentppm,1),size(indparentppm,2)))
+      indparent_tmp = indparentppm 
+      indchild_tmp  = indchildppm 
+      deallocate(indparentppm,indchildppm)
+      allocate(
+     &indparentppm(np2*nc,3),
+     &indchildppm(np2*nc,3)
+     &        )
+      indparentppm(1:size(indparent_tmp,1),1:size(indparent_tmp,2))
+     & = indparent_tmp
+      indchildppm(1:size(indparent_tmp,1),1:size(indparent_tmp,2))
+     & = indchild_tmp
+      deallocate(indparent_tmp,indchild_tmp)
+      endif
+      endif
+
+      if (.not.allocated(indparentppm_1d)) then
+      allocate(indparentppm_1d(-2*coeffraf:nc+2*coeffraf),
+     &         indchildppm_1d(-2*coeffraf:nc+2*coeffraf))
+      else
+      if (size(indparentppm_1d)<nc+4*coeffraf+1) then
+      deallocate(indparentppm_1d,indchildppm_1d)
+      allocate(indparentppm_1d(-2*coeffraf:nc+2*coeffraf),
+     &         indchildppm_1d(-2*coeffraf:nc+2*coeffraf))
+      endif
+      endif
+
+
+      ypos = s_child
+C
+      locind_parent_left = 1 + agrif_int((ypos - s_parent)/ds_parent)
+      locind_parent_last = 1 +
+     &      agrif_ceiling((ypos +(nc - 1)
+     &      *ds_child - s_parent)/ds_parent)
+C
+      xpmin = s_parent + (locind_parent_left-1)*ds_parent
+      i1 = 1+agrif_int((xpmin-s_child)/ds_child)
+C     
+C
+
+      Do i=1,coeffraf
+        tabdiff2(i)=(real(i)-0.5)*invcoeffraf
+      EndDo
+
+      a = invcoeffraf**2
+      tabdiff3(1) = (1./3.)*a
+      a=2.*a
+!CDIR ALTCODE
+      Do i=2,coeffraf
+        tabdiff3(i) = tabdiff3(i-1)+(real(i)-1)*a
+      EndDo
+
+!CDIR ALTCODE
+      Do i=1,coeffraf
+      tabppm(1,i,dir) = 0.08333333333333*
+     &              (-1.+4*tabdiff2(i)-3*tabdiff3(i))
+      tabppm(2,i,dir) = 0.08333333333333*
+     &              (7.-26.*tabdiff2(i)+18.*tabdiff3(i))
+      tabppm(3,i,dir) = 0.08333333333333*
+     &              (7.+30*tabdiff2(i)-30*tabdiff3(i))
+      tabppm(4,i,dir) = 0.08333333333333*
+     &              (-1.-10.*tabdiff2(i)+18.*tabdiff3(i))
+      tabppm(5,i,dir) = 0.08333333333333*
+     &              (2*tabdiff2(i)-3*tabdiff3(i))                   
+      End Do
+C 
+C
+        diffmod = 0
+       IF (mod(coeffraf,2) == 0) diffmod = 1
+C
+        ipos = i1
+C               
+        Do iparent = locind_parent_left,locind_parent_last
+             pos=1
+!CDIR ALTCODE
+             Do jj = ipos - coeffraf/2+diffmod,ipos + coeffraf/2
+         indparentppm_1d(jj) = iparent-2
+         indchildppm_1d(jj) = pos
+               pos = pos+1
+             End do
+             ipos = ipos + coeffraf
+C
+        End do
+     
+       Do i=1,np2
+
+       indparentppm(1+(i-1)*nc:i*nc,dir) = 
+     &             indparentppm_1d(1:nc) + (i-1)*np
+       indchildppm (1+(i-1)*nc:i*nc,dir) = 
+     &             indchildppm_1d (1:nc) 
+
+       End do
+
+      Return
+      End Subroutine ppm1dprecompute2d
+
+
+      Subroutine ppm1dprecompute(np,nc,
+     &                    s_parent,s_child,ds_parent,ds_child) 
+C
+CCC   Description:
+CCC   Subroutine to compute coefficient and index for  a 1D interpolation 
+CCC   using piecewise parabolic method  
+CC    Method:
+C
+C     Declarations:
+C
+      Implicit none
+C        
+C     Arguments
+      Integer             :: np,nc
+C      Real, Dimension(:),Allocatable :: ytemp
+      Real                :: s_parent,s_child,ds_parent,ds_child
+C
+C     Local scalars
+      Integer :: i,coeffraf,locind_parent_left,locind_parent_last
+      Integer :: iparent,ipos,pos,nmin,nmax
+      Real    :: ypos
+      integer :: i1,jj
+      Real :: xpmin,a
+C      
+      Real :: xrmin,xrmax,am3,s2,s1  
+      Real, Dimension(np) :: xl,delta,a6,slope
+C      Real, Dimension(:),Allocatable  :: diff,diff2,diff3    
+      INTEGER :: diffmod
+      REAL :: invcoeffraf
+C      
+      coeffraf = nint(ds_parent/ds_child)
+C
+      If (coeffraf == 1) Then
+          return
+      End If
+      invcoeffraf = ds_child/ds_parent
+C 
+      
+      if (.not.allocated(indparentppm)) then
+      allocate(indparentppm(-2*coeffraf:nc+2*coeffraf,1),
+     &         indchildppm(-2*coeffraf:nc+2*coeffraf,1))
+      else
+      if (size(indparentppm,1)<nc+4*coeffraf+1) then
+      deallocate(indparentppm,indchildppm)
+      allocate(indparentppm(-2*coeffraf:nc+2*coeffraf,1),
+     &         indchildppm(-2*coeffraf:nc+2*coeffraf,1))
+      endif
+      endif
+            
+      ypos = s_child  
+C
+      locind_parent_left = 1 + agrif_int((ypos - s_parent)/ds_parent) 
+      locind_parent_last = 1 +
+     &      agrif_ceiling((ypos +(nc - 1) 
+     &      *ds_child - s_parent)/ds_parent)  
+C
+      xpmin = s_parent + (locind_parent_left-1)*ds_parent       
+      i1 = 1+agrif_int((xpmin-s_child)/ds_child)        
+C     
+C
+      
+      Do i=1,coeffraf
+        tabdiff2(i)=(real(i)-0.5)*invcoeffraf
+      EndDo
+
+      a = invcoeffraf**2 
+      tabdiff3(1) = (1./3.)*a
+      a=2.*a
+!CDIR ALTCODE
+!!!CDIR SHORTLOOP
+      Do i=2,coeffraf
+        tabdiff3(i) = tabdiff3(i-1)+(real(i)-1)*a
+      EndDo
+      
+!CDIR ALTCODE
+!!!CDIR SHORTLOOP
+      Do i=1,coeffraf
+      tabppm(1,i,1) = 0.08333333333333*(-1.+4*tabdiff2(i)-3*tabdiff3(i))
+      tabppm(2,i,1) = 0.08333333333333*
+     &              (7.-26.*tabdiff2(i)+18.*tabdiff3(i))
+      tabppm(3,i,1) =0.08333333333333*(7.+30*tabdiff2(i)-30*tabdiff3(i))
+      tabppm(4,i,1) = 0.08333333333333*
+     &              (-1.-10.*tabdiff2(i)+18.*tabdiff3(i))     
+      tabppm(5,i,1) = 0.08333333333333*(2*tabdiff2(i)-3*tabdiff3(i)) 
+      End Do   
+C 
+C
+        diffmod = 0
+       IF (mod(coeffraf,2) == 0) diffmod = 1
+C
+        ipos = i1
+C               
+        Do iparent = locind_parent_left,locind_parent_last       
+             pos=1
+!CDIR ALTCODE
+!CDIR SHORTLOOP
+             Do jj = ipos - coeffraf/2+diffmod,ipos + coeffraf/2
+         indparentppm(jj,1) = iparent-2
+         indchildppm(jj,1) = pos
+               pos = pos+1 
+             End do 
+             ipos = ipos + coeffraf
+C
+        End do
+        
+      Return
+      End Subroutine ppm1dprecompute
+      
+      Subroutine ppm1daftercompute(x,y,np,nc,
+     &                    s_parent,s_child,ds_parent,ds_child,dir) 
+C
+CCC   Description:
+CCC   Subroutine to do a 1D interpolation and apply monotonicity constraints
+CCC   using piecewise parabolic method  
+CCC   on a child grid (vector y) from its parent grid (vector x).
+CC    Method: Use precomputed coefficient and index
+C
+C     Declarations:
+C
+      Implicit none
+C        
+C     Arguments
+      Integer             :: np,nc,dir
+      Real, INTENT(IN),Dimension(np) :: x      
+      Real, INTENT(OUT),Dimension(nc) :: y
+C      Real, Dimension(:),Allocatable :: ytemp
+      Real                :: s_parent,s_child,ds_parent,ds_child
+C
+C     Local scalars
+      Integer :: i,coeffraf,locind_parent_left,locind_parent_last
+      Integer :: iparent,ipos,pos,nmin,nmax
+      Real    :: ypos
+      integer :: i1,jj
+      Real :: xpmin,a
+C      
+      Real :: xrmin,xrmax,am3,s2,s1  
+      Real, Dimension(np) :: xl,delta,a6,slope
+      INTEGER :: diffmod
+C      
+C
+      do i=1,nc
+      y(i)=tabppm(1,indchildppm(i,dir),dir)*x(indparentppm(i,dir))+
+     &        tabppm(2,indchildppm(i,dir),dir)*x(indparentppm(i,dir)+1)+
+     &        tabppm(3,indchildppm(i,dir),dir)*x(indparentppm(i,dir)+2)+
+     &        tabppm(4,indchildppm(i,dir),dir)*x(indparentppm(i,dir)+3)+
+     &        tabppm(5,indchildppm(i,dir),dir)*x(indparentppm(i,dir)+4)
+      enddo
+        
+      Return
+      End Subroutine ppm1daftercompute            
+      
+C     **************************************************************************  
+CCC   Subroutine weno1d
+C     ************************************************************************** 
+C 
+      Subroutine weno1dnew(x,y,np,nc,
+     &                    s_parent,s_child,ds_parent,ds_child) 
+C
+CCC   Description:
+CCC   Subroutine to do a 1D interpolation and apply monotonicity constraints
+CCC   using piecewise parabolic method  
+CCC   on a child grid (vector y) from its parent grid (vector x).
+CC    Method:
+C
+C     Declarations:
+C
+      Implicit none
+C        
+C     Arguments
+      Integer             :: np,nc
+      Real, Dimension(np) :: x
+      Real, Dimension(nc) :: y
+      Real, Dimension(:),Allocatable :: ytemp
+      Real                :: s_parent,s_child,ds_parent,ds_child
+C
+C     Local scalars
+      Integer :: i,coeffraf,locind_parent_left,locind_parent_last
+      Integer :: iparent,ipos,pos,nmin,nmax
+      Real    :: ypos
+      integer :: i1,jj
+      Real :: xpmin,cavg,a,b
+C      
+      Real :: xrmin,xrmax,am3,s2,s1
+      Real, Dimension(np) :: xr,xl,delta,a6,slope,slope2,smooth
+      Real, Dimension(:),Allocatable  :: diff,diff2,diff3
+      INTEGER :: diffmod
+      REAL :: invcoeffraf
+      integer :: s,l,k
+      integer :: etan, etap
+      real :: delta0, delta1, delta2
+      real :: epsilon
+      parameter (epsilon = 1.D-8)
+      real, dimension(:,:), allocatable :: ak, ck
+C      
+      coeffraf = nint(ds_parent/ds_child)
+C
+      If (coeffraf == 1) Then
+          locind_parent_left = 1 + nint((s_child - s_parent)/ds_parent)
+          y(1:nc) = x(locind_parent_left:locind_parent_left+nc-1)
+          return
+      End If
+      invcoeffraf = ds_child/ds_parent
+      Allocate(ak(0:1,coeffraf))
+      Allocate(ck(0:1,coeffraf))
+            
+C      
+      Allocate(ytemp(-2*coeffraf:nc+2*coeffraf))
+      ypos = s_child
+C
+      locind_parent_left = 1 + agrif_int((ypos - s_parent)/ds_parent)
+      locind_parent_last = 1 +
+     &      agrif_ceiling((ypos +(nc - 1)
+     &      *ds_child - s_parent)/ds_parent)
+C
+      xpmin = s_parent + (locind_parent_left-1)*ds_parent
+      i1 = 1+agrif_int((xpmin-s_child)/ds_child)
+C     
+      Allocate( diff(coeffraf),diff2(coeffraf),diff3(coeffraf) )
+C      
+      diff(1)=0.5*invcoeffraf
+      do i=2,coeffraf
+         diff(i) = diff(i-1)+invcoeffraf
+      enddo
+      
+      ak = 0.
+      ck = 0.
+      
+      do i=1,coeffraf
+         do k=0,1
+         do s=0,2
+         do l=0,2
+           if (l /= s) then
+            ak(k,i) = ak(k,i)+(diff(i)-(k-l+1.))
+           endif
+         enddo
+         enddo
+         enddo
+               
+         etap = 0
+         etan = 0
+         do k=0,1
+          if (ak(k,i) > 0) then
+            etap = etap+1
+          else if (ak(k,i) < 0) then
+            etan = etan + 1
+          endif
+         enddo
+               
+         do k=0,1
+           if (ak(k,i) == 0) then
+            Ck(k,i) = 1.
+           else if (ak(k,i) > 0) then
+            Ck(k,i) = 1./(etap * ak(k,i))
+           else
+            Ck(k,i) = -1./(etan * ak(k,i))
+           endif
+         enddo
+      enddo
+                     
+C      
+      a = 0.
+      b = invcoeffraf
+      Do i=1,coeffraf
+         diff2(i) = 0.5*(b*b - a*a)  
+         diff3(i) = (1./3.)*(b*b*b - a*a*a)
+         a = a + invcoeffraf
+         b = b + invcoeffraf
+      End do
+C
+      if( locind_parent_last+2 <= np ) then
+           nmax = locind_parent_last+2    
+      elseif( locind_parent_last+1 <= np ) then
+           nmax = locind_parent_last+1
+      else
+           nmax = locind_parent_last 
+      endif     
+C      
+      if(locind_parent_left-2 >= 1) then
+          nmin = locind_parent_left-2
+      elseif(locind_parent_left-1 >= 1) then
+          nmin = locind_parent_left-1
+      else 
+          nmin = locind_parent_left
+      endif    
+C 
+      Do i = nmin+1,nmax
+         slope(i) = (x(i) - x(i-1))
+      Enddo 
+      DO i=nmin+2,nmax
+        smooth(i) = 0.5*(slope(i)**2+slope(i-1)**2)
+     &       +(slope(i)-slope(i-1))**2
+      enddo
+C
+        diffmod = 0
+        IF (mod(coeffraf,2) == 0) diffmod = 1           
+C
+        ipos = i1
+C               
+        Do iparent = locind_parent_left,locind_parent_last       
+             pos=1
+             
+            delta0=1./(epsilon+smooth(iparent  ))**3
+            delta1=1./(epsilon+smooth(iparent+1))**3
+            delta2=1./(epsilon+smooth(iparent+2))**3   
+                      
+             Do jj = ipos - coeffraf/2+diffmod,ipos + coeffraf/2
+C
+               pos = pos+1 
+             End do 
+             ipos = ipos + coeffraf
+C
+        End do     
+C
+C
+        y(1:nc)=ytemp(1:nc)                                 
+        deallocate(ytemp)                
+        deallocate(diff, diff2, diff3)
+        
+        deallocate(ak,ck)
+        
+      Return
+      End Subroutine weno1dnew
+      
+C     **************************************************************************  
+CCC   Subroutine weno1d
+C     ************************************************************************** 
+C 
+      Subroutine weno1d(x,y,np,nc,
+     &                    s_parent,s_child,ds_parent,ds_child) 
+C
+CCC   Description:
+CCC   Subroutine to do a 1D interpolation and apply monotonicity constraints
+CCC   using piecewise parabolic method  
+CCC   on a child grid (vector y) from its parent grid (vector x).
+CC    Method:
+C
+C     Declarations:
+C
+      Implicit none
+C        
+C     Arguments
+      Integer             :: np,nc
+      Real, Dimension(np) :: x
+      Real, Dimension(nc) :: y
+      Real, Dimension(:),Allocatable :: ytemp
+      Real                :: s_parent,s_child,ds_parent,ds_child
+C
+C     Local scalars
+      Integer :: i,coeffraf,locind_parent_left,locind_parent_last
+      Integer :: iparent,ipos,pos,nmin,nmax
+      Real    :: ypos
+      integer :: i1,jj
+      Real :: xpmin,cavg,a,b
+C      
+      Real :: xrmin,xrmax,am3,s2,s1
+      Real, Dimension(np) :: xr,xl,delta,a6,slope,slope2
+      Real, Dimension(:),Allocatable  :: diff,diff2,diff3
+      INTEGER :: diffmod
+      REAL :: invcoeffraf
+      integer :: s,l,k
+      integer :: etan, etap
+      real :: delta0, delta1,sumdelta
+      real :: epsilon
+      parameter (epsilon = 1.D-8)
+C      
+      coeffraf = nint(ds_parent/ds_child)
+C
+      If (coeffraf == 1) Then
+          locind_parent_left = 1 + nint((s_child - s_parent)/ds_parent)
+          y(1:nc) = x(locind_parent_left:locind_parent_left+nc-1)
+          return
+      End If
+      invcoeffraf = ds_child/ds_parent
+            
+C      
+      Allocate(ytemp(-2*coeffraf:nc+2*coeffraf))
+      ypos = s_child
+C
+      locind_parent_left = 1 + agrif_int((ypos - s_parent)/ds_parent)
+      locind_parent_last = 1 +
+     &      agrif_ceiling((ypos +(nc - 1)
+     &      *ds_child - s_parent)/ds_parent)
+C
+      xpmin = s_parent + (locind_parent_left-1)*ds_parent
+      i1 = 1+agrif_int((xpmin-s_child)/ds_child)
+C     
+      Allocate( diff(coeffraf))
+C      
+      diff(1)=0.5*invcoeffraf
+      do i=2,coeffraf
+         diff(i) = diff(i-1)+invcoeffraf
+      enddo
+C
+      if( locind_parent_last+2 <= np ) then
+           nmax = locind_parent_last+2   
+      else if( locind_parent_last+1 <= np ) then
+           nmax = locind_parent_last+1
+      else
+           nmax = locind_parent_last 
+      endif     
+C      
+      if(locind_parent_left-1 >= 1) then
+          nmin = locind_parent_left-1
+      else 
+          nmin = locind_parent_left
+      endif    
+C 
+      Do i = nmin+1,nmax
+         slope(i) = (x(i) - x(i-1))
+      Enddo 
+C
+        diffmod = 0
+        IF (mod(coeffraf,2) == 0) diffmod = 1           
+C
+        ipos = i1
+C               
+        Do iparent = locind_parent_left,locind_parent_last       
+             pos=1
+            delta0=1./(epsilon+slope(iparent  )**2)**2
+            delta1=1./(epsilon+slope(iparent+1)**2)**2
+            sumdelta = 1./(delta0+delta1)             
+             Do jj = ipos - coeffraf/2+diffmod,ipos + coeffraf/2
+C                              
+          ytemp(jj) = x(iparent)+(diff(pos)-0.5)*(
+     &                delta0*slope(iparent)+
+     &                delta1*slope(iparent+1))*sumdelta
+               pos = pos+1 
+             End do 
+             ipos = ipos + coeffraf
+C
+        End do     
+C
+C
+        y(1:nc)=ytemp(1:nc)                                 
+        deallocate(ytemp)                
+        deallocate(diff)
+        
+      Return
+      End Subroutine weno1d
+                 
+C                              
+C     **************************************************************************  
+CCC   Subroutine eno1d
+C     ************************************************************************** 
+C 
+      Subroutine eno1d(x,y,np,nc,
+     &                    s_parent,s_child,ds_parent,ds_child) 
+C
+CCC   Description:
+CCC   ---- p 163-164 Computational gasdynamics ----
+CCC   Subroutine to do a 1D interpolation 
+CCC   using piecewise polynomial ENO reconstruction technique  
+CCC   on a child grid (vector y) from its parent grid (vector x).
+CC    Method:
+C
+C     Declarations:
+C
+      Implicit none
+C        
+C     Arguments
+      Integer             :: np,nc      
+      Real, Dimension(np) :: x      
+      Real, Dimension(nc) :: y
+      Real, Dimension(:),Allocatable :: ytemp
+      Real                :: s_parent,s_child,ds_parent,ds_child
+C
+C     Local scalars
+      Integer :: i,coeffraf,locind_parent_left,locind_parent_last
+      Integer :: ipos,pos
+      Real    :: ypos,xi
+      integer :: i1,jj
+      Real :: xpmin,cavg
+C 
+      Real, Dimension(3,np) :: dd,c
+      Integer :: left
+C           
+      Real, DImension(1:np+1) :: xhalf
+      Real, Dimension(:,:),Allocatable  :: Xbar 
+      INTEGER :: diffmod     
+C
+      coeffraf = nint(ds_parent/ds_child)
+C      
+      If (coeffraf == 1) Then
+          locind_parent_left = 1 + nint((s_child - s_parent)/ds_parent)
+          y(1:nc) = x(locind_parent_left:locind_parent_left+nc-1)
+          return
+      End If     
+      
+      diffmod = 0
+      IF (mod(coeffraf,2) == 0) diffmod = 1  
+C      
+      Allocate(ytemp(-2*coeffraf:nc+2*coeffraf))
+      ypos = s_child  
+      locind_parent_left = 1 + agrif_int((ypos - s_parent)/ds_parent) 
+      locind_parent_last = 1 +
+     &      agrif_ceiling((ypos +(nc - 1) *ds_child - 
+     &      s_parent)/ds_parent)       
+      xpmin = s_parent + (locind_parent_left-1)*ds_parent      
+      i1 = 1+agrif_int((xpmin-s_child)/ds_child)           
+C      
+      xhalf(np+1) = np + 0.5
+      Do i = 1,np
+          xhalf(i) = i - 0.5
+      Enddo
+C
+C compute divided differences
+C
+      dd(1,1:np) = x(1:np)
+      dd(2,1:np-1) = 0.5*( dd(1,2:np) - dd(1,1:np-1) )
+      dd(3,1:np-2) = (1./3.)*( dd(2,2:np-1) - dd(2,1:np-2) )
+C
+      Allocate( Xbar( coeffraf,2 ) )
+      xi = 0.5
+      Do i = 1,coeffraf
+        Xbar(i,1) = (i-1)*ds_child/ds_parent - xi
+        Xbar(i,2) = i*ds_child/ds_parent - xi
+      Enddo
+C
+      ipos = i1
+C           
+      DO i = locind_parent_left,locind_parent_last           
+         left = i           
+         do jj = 2,3
+             If(abs(dd(jj,left)) .gt. abs(dd(jj,left-1)))
+     &               left = left-1            
+         enddo
+C           
+C  convert to Taylor series form
+C
+         Call Taylor(i,xhalf(left:left+2),dd(1:3,left),c(1:3,i))
+      ENDDO     
+C
+C evaluate the reconstruction on each cell
+C
+       DO i = locind_parent_left,locind_parent_last  
+C
+         cavg = 0.
+         pos = 1.            
+C         
+         Do jj = ipos - coeffraf/2+diffmod,ipos + coeffraf/2
+           ytemp(jj) =(c(1,i)*(Xbar(pos,2)-Xbar(pos,1))
+     &                +c(2,i)*(Xbar(pos,2)*Xbar(pos,2)-
+     &                         Xbar(pos,1)*Xbar(pos,1))
+     &                +c(3,i)*(Xbar(pos,2)*Xbar(pos,2)*Xbar(pos,2)-
+     &                         Xbar(pos,1)*Xbar(pos,1)*Xbar(pos,1)))
+     &                         *coeffraf
+           cavg = cavg + ytemp(jj)
+           pos = pos+1
+         Enddo                
+         ipos = ipos + coeffraf                 
+      ENDDO
+C
+      y(1:nc)=ytemp(1:nc)                                            
+      deallocate(ytemp,Xbar)                 
+C      
+      Return       
+      End Subroutine eno1d
+C 
+C      
+C     **************************************************************************  
+CCC   Subroutine taylor
+C     ************************************************************************** 
+C       
+      subroutine taylor(ind,xhalf,dd,c)      
+C      
+      Integer :: ind
+      real,dimension(3) :: dd,c     
+      real,dimension(0:3,0:3) :: d 
+      real,dimension(3) :: xhalf    
+      integer ::i,j
+C      
+C
+      d(0,0:3)=1.
+      do i = 1,3
+         d(i,0)=(ind-xhalf(i))*d(i-1,0)
+      enddo  
+C      
+      do i = 1,3
+         do j = 1,3-i
+           d(i,j) = d(i,j-1) + (ind-xhalf(i+j))*d(i-1,j)
+         enddo
+      enddo
+C         
+      do j = 1,3        
+         c(j) = 0.
+         do i=0,3-j
+            c(j) = c(j) + d(i,j)*dd(i+j)         
+         enddo
+      enddo
+C      
+      end subroutine taylor    
+      
+      
+      REAL FUNCTION vanleer(tab)
+      REAL, DIMENSION(3) :: tab
+       real res1
+       real p1,p2,p3
+       
+       p1=(tab(3)-tab(1))/2.
+       p2=2.*(tab(2)-tab(1))
+       p3=2.*(tab(3)-tab(2))
+       
+       if ((p1>0.).AND.(p2>0.).AND.(p3>0)) then
+          res1=minval((/p1,p2,p3/))
+       elseif ((p1<0.).AND.(p2<0.).AND.(p3<0)) then
+          res1=maxval((/p1,p2,p3/))
+       else
+          res1=0.
+       endif
+          
+          vanleer = res1   
+      
+      
+      END FUNCTION vanleer 
+
+C      
+      End Module Agrif_Interpbasic
Index: /vendors/AGRIF/r_00/AGRIF_FILES/modlinktomodel.F
===================================================================
--- /vendors/AGRIF/r_00/AGRIF_FILES/modlinktomodel.F	(revision 1902)
+++ /vendors/AGRIF/r_00/AGRIF_FILES/modlinktomodel.F	(revision 1902)
@@ -0,0 +1,174 @@
+C     AGRIF (Adaptive Grid Refinement In Fortran)
+C
+C     Copyright (C) 2003 Laurent Debreu (Laurent.Debreu@imag.fr)
+C                        Christophe Vouland (Christophe.Vouland@imag.fr)    
+C
+C     This program is free software; you can redistribute it and/or modify
+C     it under the terms of the GNU General Public License as published by
+C     the Free Software Foundation; either version 2 of the License, or
+C     (at your option) any later version.
+C
+C     This program is distributed in the hope that it will be useful,
+C     but WITHOUT ANY WARRANTY; without even the implied warranty of
+C     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+C     GNU General Public License for more details.
+C
+C     You should have received a copy of the GNU General Public License
+C     along with this program; if not, write to the Free Software
+C     Foundation, Inc., 59 Temple Place -  Suite 330, Boston, MA 02111-1307, USA.
+C
+C
+      Module Agrif_link
+C
+CCC   Description:
+CCC   This module is used to link AGRIF files to the model
+C
+C     Modules used: 
+C
+c        external Agrif_InitValues
+c        external Agrif_InitWorkspace
+c        external Agrif_detect
+C
+        external Agrif_probdim_modtype_def
+        external Agrif_clustering_def
+        external Agrif_comm_def
+C     Interface                       
+      Interface
+         Subroutine Agrif_Set_numberofcells(Agrif_Gr)
+         Use Agrif_Types, Only : Agrif_grid
+         TYPE(Agrif_Grid), Pointer :: Agrif_Gr   ! Pointer on the current grid  
+         End Subroutine Agrif_Set_numberofcells
+      End interface
+      Interface
+         Subroutine Agrif_Get_numberofcells(Agrif_Gr)
+         Use Agrif_Types, Only : Agrif_grid
+         TYPE(Agrif_Grid), Pointer :: Agrif_Gr   ! Pointer on the current grid  
+         End Subroutine Agrif_Get_numberofcells
+      End interface
+      Interface
+         Subroutine Agrif_Allocationcalls(Agrif_Gr)
+         Use Agrif_Types, Only : Agrif_grid
+         TYPE(Agrif_Grid), Pointer :: Agrif_Gr   ! Pointer on the current grid  
+         End Subroutine Agrif_Allocationcalls
+      End interface
+C   
+      End Module Agrif_link
+C     **************************************************************************
+CCC   Function Agrif_parent
+C        modify by conv. To use : un_parent = Agrif_Parent(un)
+C     **************************************************************************
+CCC   Function Agrif_Get_Coarse_Grid
+C        modify by conv. To use : un_Mygrid = Agrif_Get_Coarse_grid(un)
+C     **************************************************************************
+CCC   Function Agrif_Rhox
+C        modify by conv. To use : var = Agrif_Rhox()
+C                    REAL(Agrif_Curgrid % spaceref(1))
+C     **************************************************************************
+CCC   Function Agrif_Parent_Rhox
+C        modify by conv. To use : var = Agrif_Parent_Rhox()
+C                    REAL(Agrif_Curgrid % parent % spaceref(1))
+C     **************************************************************************
+CCC   Function Agrif_Irhox
+C        modify by conv. To use : var = Agrif_Parent_IRhox()
+C                    Agrif_Curgrid % spaceref(1)
+C     **************************************************************************
+CCC   Function Agrif_Parent_Irhox
+C        modify by conv. To use : var = Agrif_Parent_IRhox()
+C                    Agrif_Curgrid % parent % spaceref(1)
+C     **************************************************************************
+CCC   Function Agrif_Rhoy
+C        modify by conv. To use : var = Agrif_Rhoy()
+C                    REAL(Agrif_Curgrid % spaceref(2))
+C     **************************************************************************
+CCC   Function Agrif_Parent_Rhoy
+C        modify by conv. To use : var = Agrif_Parent_Rhoy()
+C                    REAL(Agrif_Curgrid % parent % spaceref(2))
+C     **************************************************************************
+CCC   Function Agrif_Irhoy
+C        modify by conv. To use : var = Agrif_Parent_IRhoy()
+C                    Agrif_Curgrid % spaceref(2)
+C     **************************************************************************
+CCC   Function Agrif_Parent_Irhoy
+C        modify by conv. To use : var = Agrif_Parent_IRhoy()
+C                    Agrif_Curgrid % parent % spaceref(2)
+C     **************************************************************************
+CCC   Function Agrif_Rhoz
+C        modify by conv. To use : var = Agrif_Rhoz()
+C                    REAL(Agrif_Curgrid % spaceref(3))
+C     **************************************************************************
+CCC   Function Agrif_Parent_Rhoz
+C        modify by conv. To use : var = Agrif_Parent_Rhoz()
+C                    REAL(Agrif_Curgrid % parent % spaceref(3))
+C     **************************************************************************
+CCC   Function Agrif_Irhoz
+C        modify by conv. To use : var = Agrif_Parent_IRhoz()
+C                    Agrif_Curgrid % spaceref(3)
+C     **************************************************************************
+CCC   Function Agrif_Parent_Irhoz
+C        modify by conv. To use : var = Agrif_Parent_IRhoz()
+C                    Agrif_Curgrid % parent % spaceref(3)
+C     **************************************************************************
+CCC   Function Agrif_NearCommonBorderX
+C        modify by conv. To use : var = Agrif_NearCommonBorderX()
+C                       AGRIF_CURGRID % NearRootBorder(1)
+C     **************************************************************************
+CCC   Function Agrif_NearCommonBorderY
+C        modify by conv. To use : var = Agrif_NearCommonBorderY()
+C                       AGRIF_CURGRID % NearRootBorder(2)
+C     **************************************************************************
+CCC   Function Agrif_NearCommonBorderZ
+C        modify by conv. To use : var = Agrif_NearCommonBorderZ()
+C                       AGRIF_CURGRID % NearRootBorder(3)
+C     **************************************************************************
+CCC   Function Agrif_DistantCommonBorderX
+C        modify by conv. To use : var = Agrif_DistantCommonBorderX()
+C                       AGRIF_CURGRID % DistantRootBorder(1)
+C     **************************************************************************
+CCC   Function Agrif_DistantCommonBorderY
+C        modify by conv. To use : var = Agrif_DistantCommonBorderY()
+C                       AGRIF_CURGRID % DistantRootBorder(2)
+C     **************************************************************************
+CCC   Function Agrif_DistantCommonBorderZ
+C        modify by conv. To use : var = Agrif_DistantCommonBorderZ()
+C                       AGRIF_CURGRID % DistantRootBorder(3)
+C     **************************************************************************
+CCC   Function Agrif_Nb_Step
+C        modify by conv. To use : var = Agrif_Nb_Step()
+C                          AGRIF_CURGRID % ngridstep
+C     **************************************************************************
+CCC   Function Agrif_Nb_Fine_Grids
+C        modify by conv. To use : var = Agrif_Nb_Fine_Grids()
+C                         Agrif_nbfixedgrids 
+C     **************************************************************************
+CCC   Function Agrif_Ix
+C        modify by conv. To use : var = Agrif_Ix()
+C                         Agrif_CURGRID % ix(1) 
+C     **************************************************************************
+CCC   Function Agrif_Parent_Ix
+C        modify by conv. To use : var = Agrif_Parent_Ix()
+C                        Agrif_CURGRID % parent % ix(1) 
+C     **************************************************************************
+CCC   Function Agrif_Iy
+C        modify by conv. To use : var = Agrif_Iy()
+C                        AGRIF_CURGRID % ix(2) 
+C     **************************************************************************
+CCC   Function Agrif_Parent_Iy
+C        modify by conv. To use : var = Agrif_Parent_Iy()
+C                       Agrif_CURGRID % parent % ix(2) 
+C     **************************************************************************
+CCC   Function Agrif_Iz
+C        modify by conv. To use : var = Agrif_Iz()
+C                      AGRIF_CURGRID % ix(3) 
+C     **************************************************************************
+CCC   Function Agrif_Parent_Iz
+C        modify by conv. To use : var = Agrif_Parent_Iz()
+C                     Agrif_CURGRID % parent % ix(3) 
+C     **************************************************************************
+CCC   Function Agrif_Get_grid_id
+C        modify by conv. To use : var = Agrif_Get_grid_id()
+C                    Agrif_CURGRID % grid_id
+C     **************************************************************************
+CCC   Function Agrif_Get_parent_id
+C        modify by conv. To use : var = Agrif_Get_parent_id()
+C                    Agrif_CURGRID % parent % grid_id
+C     **************************************************************************
Index: /vendors/AGRIF/r_00/AGRIF_FILES/modmask.F
===================================================================
--- /vendors/AGRIF/r_00/AGRIF_FILES/modmask.F	(revision 1902)
+++ /vendors/AGRIF/r_00/AGRIF_FILES/modmask.F	(revision 1902)
@@ -0,0 +1,688 @@
+!
+! $Id: modmask.F 1200 2008-09-24 13:05:20Z rblod $
+!
+C     AGRIF (Adaptive Grid Refinement In Fortran)
+C
+C     Copyright (C) 2003 Laurent Debreu (Laurent.Debreu@imag.fr)
+C                        Christophe Vouland (Christophe.Vouland@imag.fr)    
+C
+C     This program is free software; you can redistribute it and/or modify
+C     it under the terms of the GNU General Public License as published by
+C     the Free Software Foundation; either version 2 of the License, or
+C     (at your option) any later version.
+C
+C     This program is distributed in the hope that it will be useful,
+C     but WITHOUT ANY WARRANTY; without even the implied warranty of
+C     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+C     GNU General Public License for more details.
+C
+C     You should have received a copy of the GNU General Public License
+C     along with this program; if not, write to the Free Software
+C     Foundation, Inc., 59 Temple Place -  Suite 330, Boston, MA 02111-1307, USA.
+C
+C
+C
+CCC   Module Agrif_Mask
+C
+      Module Agrif_Mask
+C
+CCC   Description:
+CCC   Module for masks
+C
+C     Modules used: 
+C
+      Use Agrif_Types       
+C
+      IMPLICIT NONE
+C
+      CONTAINS
+C     Define procedures contained in this module
+C
+C     **************************************************************************
+C     Subroutine Agrif_CheckMasknD
+C     **************************************************************************
+C       
+      Subroutine Agrif_CheckMasknD(tempP,parent,pbtab,petab,ppbtab,
+     &               ppetab,noraftab,nbdim)
+C
+CCC   Description:
+CCC   Subroutine called in the procedure Agrif_InterpnD to recalculate the value 
+CCC   of the parent grid variable when this one is equal to Agrif_SpecialValue. 
+C
+C     Declarations:
+C
+       
+C
+C     Arrays arguments      
+      INTEGER :: nbdim
+      INTEGER,DIMENSION(nbdim) :: pbtab  ! Limits of the parent grid used  
+      INTEGER,DIMENSION(nbdim) :: petab  ! interpolation of the child grid
+      LOGICAL,DIMENSION(nbdim) :: noraftab
+      INTEGER,DIMENSION(nbdim) :: ppbtab,ppetab
+C
+C     Pointer argument
+      TYPE(AGRIF_PVARIABLE) :: tempP  ! Part of the parent grid used for 
+                                      ! the interpolation of the child grid                     
+C     Data TYPE argument                                   
+      TYPE(AGRIF_PVARIABLE) :: parent      ! The parent grid
+C
+C     Local scalar
+      INTEGER                   :: i0,j0,k0,l0,m0,n0
+C      
+C     Local arrays
+C
+C      
+      SELECT CASE (nbdim)
+      CASE (1)
+         do i0 = pbtab(1),petab(1)
+         IF (tempP%var%array1(i0)
+     &                        == Agrif_SpecialValue) Then
+            Call CalculNewValTempP((/i0/),
+     &                             tempP,parent,
+     &                             ppbtab,ppetab,
+     &                             noraftab,nbdim)
+         ENDIF
+         enddo
+      CASE (2)
+         do j0 = pbtab(2),petab(2)
+         do i0 = pbtab(1),petab(1)
+         IF (tempP%var%array2(i0,j0)
+     &                        == Agrif_SpecialValue) Then
+            Call CalculNewValTempP((/i0,j0/),
+     &                             tempP,parent,
+     &                             ppbtab,ppetab,
+     &                             noraftab,nbdim)
+         ENDIF
+         enddo  
+         enddo
+      CASE (3)
+         do k0 = pbtab(3),petab(3)
+         do j0 = pbtab(2),petab(2)
+         do i0 = pbtab(1),petab(1)
+         IF (tempP%var%array3(i0,j0,k0)
+     &                        == Agrif_SpecialValue) Then
+!------CDIR NEXPAND
+            Call CalculNewValTempP3D((/i0,j0,k0/),
+     &      tempP%var%array3(ppbtab(1),ppbtab(2),ppbtab(3)),
+     &      parent%var%array3(ppbtab(1),ppbtab(2),ppbtab(3)),
+     &                           ppbtab,ppetab,
+     &                           noraftab,MaxSearch,Agrif_SpecialValue)
+     
+c            Call CalculNewValTempP((/i0,j0,k0/),
+c     &                             tempP,parent,
+c     &                             ppbtab,ppetab,
+c     &                             noraftab,nbdim)
+          
+         ENDIF
+         enddo
+         enddo  
+         enddo
+      CASE (4)
+         do l0 = pbtab(4),petab(4)
+         do k0 = pbtab(3),petab(3)
+         do j0 = pbtab(2),petab(2)
+         do i0 = pbtab(1),petab(1)
+         IF (tempP%var%array4(i0,j0,k0,l0) 
+     &                        == Agrif_SpecialValue) Then
+            Call CalculNewValTempP4D((/i0,j0,k0,l0/),
+     &      tempP%var%array4(ppbtab(1),ppbtab(2),ppbtab(3),ppbtab(4)),
+     &      parent%var%array4(ppbtab(1),ppbtab(2),ppbtab(3),ppbtab(4)),
+     &                           ppbtab,ppetab,
+     &                           noraftab,MaxSearch,Agrif_SpecialValue)
+         ENDIF
+         enddo
+         enddo
+         enddo  
+         enddo
+      CASE (5)
+         do m0 = pbtab(5),petab(5)
+         do l0 = pbtab(4),petab(4)
+         do k0 = pbtab(3),petab(3)
+         do j0 = pbtab(2),petab(2)
+         do i0 = pbtab(1),petab(1)
+         IF (tempP%var%array5(i0,j0,k0,l0,m0) 
+     &                       == Agrif_SpecialValue) Then
+            Call CalculNewValTempP((/i0,j0,k0,l0,m0/),
+     &                             tempP,parent,
+     &                             ppbtab,ppetab,
+     &                             noraftab,nbdim)
+         ENDIF
+         enddo
+         enddo
+         enddo  
+         enddo
+         enddo
+      CASE (6)
+         do n0 = pbtab(6),petab(6)
+         do m0 = pbtab(5),petab(5)
+         do l0 = pbtab(4),petab(4)
+         do k0 = pbtab(3),petab(3)
+         do j0 = pbtab(2),petab(2)
+         do i0 = pbtab(1),petab(1)
+         IF (tempP%var%array6(i0,j0,k0,l0,m0,n0) 
+     &                       == Agrif_SpecialValue) Then
+            Call CalculNewValTempP((/i0,j0,k0,l0,m0,n0/),
+     &                             tempP,parent,
+     &                             ppbtab,ppetab,
+     &                             noraftab,nbdim)
+         ENDIF
+         enddo
+         enddo
+         enddo
+         enddo  
+         enddo
+         enddo
+      END SELECT
+C
+C      
+C     
+      End Subroutine Agrif_CheckMasknD
+C
+C
+C     **************************************************************************
+C     Subroutine CalculNewValTempP
+C     **************************************************************************
+C       
+      Subroutine CalculNewValTempP(indic,
+     &               tempP,parent,ppbtab,
+     &               ppetab,noraftab,nbdim)
+C
+CCC   Description:
+CCC   Subroutine called in the procedure Agrif_InterpnD to recalculate the value 
+CCC   of the parent grid variable when this one is equal to Agrif_SpecialValue. 
+C
+C     Declarations:
+C
+       
+C
+C     Arrays arguments      
+      INTEGER :: nbdim
+      INTEGER,DIMENSION(nbdim) :: indic
+      LOGICAL,DIMENSION(nbdim) :: noraftab
+      INTEGER,DIMENSION(nbdim) :: ppbtab,ppetab
+C
+C     Pointer argument
+      TYPE(AGRIF_PVARIABLE) :: tempP  ! Part of the parent grid used for 
+                                      ! the interpolation of the child grid                     
+C     Data TYPE argument                                   
+      TYPE(AGRIF_PVARIABLE) :: parent      ! The parent grid
+C
+C     Local scalar
+      INTEGER                  :: i,ii,iii,jj,kk,ll,mm,nn 
+      INTEGER,DIMENSION(nbdim) :: imin,imax,idecal
+      INTEGER                  :: Nbvals
+      REAL                     :: Res
+      REAL                     :: ValParent
+      INTEGER                  :: ValMax
+      LOGICAL                  :: firsttest
+C      
+C     Local arrays      
+C
+      ValMax = 1
+      do iii = 1 , nbdim
+         IF (.NOT.noraftab(iii)) THEN
+         ValMax = max(ValMax,ppetab(iii)-indic(iii))
+         ValMax = max(ValMax,indic(iii)-ppbtab(iii))
+         ENDIF
+      enddo
+C
+      Valmax = min(Valmax,MaxSearch)
+C
+!CDIR NOVECTOR
+      imin = indic
+!CDIR NOVECTOR
+      imax = indic
+C
+         i = 1
+         firsttest = .TRUE.
+C
+         do While(i <= ValMax)
+C
+         IF ((i == 1).AND.(firsttest)) i = Valmax
+
+            do iii = 1 , nbdim
+               if (.NOT.noraftab(iii)) then
+                  imin(iii) = max(indic(iii) - i,ppbtab(iii))
+                  imax(iii) = min(indic(iii) + i,ppetab(iii))
+                  if (firsttest) then               
+                  if (indic(iii).GT.ppbtab(iii)) then
+
+!CDIR NOVECTOR
+                     idecal = indic
+                     idecal(iii) = idecal(iii)-1
+                     SELECT CASE(nbdim)
+                     CASE (1)
+                        if (tempP%var%array1(idecal(1)
+     &                            ) == Agrif_SpecialValue) then
+                           imin(iii) = imax(iii)
+                        endif                     
+                     CASE (2)
+                        if (tempP%var%array2(idecal(1),
+     &            idecal(2)) == Agrif_SpecialValue) then
+                           imin(iii) = imax(iii)
+                        endif
+                     CASE (3)
+                        if (tempP%var%array3(idecal(1),
+     &            idecal(2),idecal(3)) 
+     &                               == Agrif_SpecialValue) then
+                           imin(iii) = imax(iii)
+                        endif  
+                     CASE (4)
+                        if (tempP%var%array4(idecal(1),
+     &            idecal(2),idecal(3),idecal(4)) 
+     &                               == Agrif_SpecialValue) then
+                           imin(iii) = imax(iii)
+                        endif     
+                     CASE (5)
+                        if (tempP%var%array5(idecal(1),
+     &            idecal(2),idecal(3),idecal(4),idecal(5)) 
+     &                               == Agrif_SpecialValue) then
+                           imin(iii) = imax(iii)
+                        endif  
+                     CASE (6)
+                        if (tempP%var%array6(idecal(1),
+     &            idecal(2),idecal(3),idecal(4),idecal(5),idecal(6)) 
+     &                               == Agrif_SpecialValue) then
+                           imin(iii) = imax(iii)
+                        endif                                                                                           
+                     END SELECT
+                  endif
+                  endif
+               endif            
+            enddo
+C
+            Res = 0.
+            Nbvals = 0
+C
+            SELECT CASE(nbdim)
+            CASE (1)
+!CDIR ALTCODE
+!CDIR SHORTLOOP
+               do ii = imin(1),imax(1)
+                    ValParent = parent%var%array1(ii)
+                    if ( ValParent .NE. Agrif_SpecialValue) then
+                        Res = Res + ValParent
+                        Nbvals = Nbvals + 1
+                    endif 
+               enddo
+C
+            CASE (2)
+               do jj = imin(2),imax(2)
+!CDIR ALTCODE
+!CDIR SHORTLOOP
+               do ii = imin(1),imax(1)
+                    ValParent = parent%var%array2(ii,jj)
+                    if ( ValParent .NE. Agrif_SpecialValue) then
+                        Res = Res + ValParent
+                        Nbvals = Nbvals + 1
+                    endif 
+               enddo  
+               enddo
+               
+            CASE (3)
+               do kk = imin(3),imax(3)
+               do jj = imin(2),imax(2)
+!CDIR ALTCODE
+!CDIR SHORTLOOP
+               do ii = imin(1),imax(1)
+                    ValParent = parent%var%array3(ii,jj,kk)
+                    if ( ValParent .NE. Agrif_SpecialValue) then
+                        Res = Res + ValParent
+                        Nbvals = Nbvals + 1
+                    endif 
+                        enddo
+                  enddo  
+               enddo
+
+            CASE (4)
+               do ll = imin(4),imax(4)
+               do kk = imin(3),imax(3)
+               do jj = imin(2),imax(2)
+!CDIR ALTCODE
+!CDIR SHORTLOOP
+               do ii = imin(1),imax(1)
+                    ValParent = parent%var%array4(ii,jj,kk,ll)
+                    if ( ValParent .NE. Agrif_SpecialValue) then
+                        Res = Res + ValParent
+                        Nbvals = Nbvals + 1
+                    endif 
+                              enddo
+                        enddo
+                  enddo  
+               enddo
+
+            CASE (5)
+               do mm = imin(5),imax(5)
+               do ll = imin(4),imax(4)
+               do kk = imin(3),imax(3)
+               do jj = imin(2),imax(2)
+!CDIR ALTCODE
+!CDIR SHORTLOOP
+               do ii = imin(1),imax(1)
+                    ValParent = parent%var%array5(ii,jj,kk,ll,mm)
+                    if ( ValParent .NE. Agrif_SpecialValue) then
+                        Res = Res + ValParent
+                        Nbvals = Nbvals + 1
+                    endif 
+                                    enddo
+                              enddo
+                        enddo
+                  enddo  
+               enddo
+
+            CASE (6)
+               do nn = imin(6),imax(6)
+               do mm = imin(5),imax(5)
+               do ll = imin(4),imax(4)
+               do kk = imin(3),imax(3)
+               do jj = imin(2),imax(2)
+!CDIR ALTCODE
+!CDIR SHORTLOOP
+               do ii = imin(1),imax(1)
+                    ValParent = parent%var%array6(ii,jj,kk,ll,mm,nn)
+                    if ( ValParent .NE. Agrif_SpecialValue) then
+                        Res = Res + ValParent
+                        Nbvals = Nbvals + 1
+                    endif 
+                                          enddo
+                                    enddo
+                              enddo
+                        enddo
+                  enddo  
+               enddo
+
+            END SELECT
+C
+C
+            
+            if (Nbvals.GT.0) then
+              if (firsttest) then
+                   firsttest = .FALSE.
+                   i=1
+                   cycle
+              endif
+            SELECT CASE(nbdim)
+            CASE (1)              
+              tempP%var%array1(indic(1)) 
+     &           = Res/Nbvals
+            CASE (2)
+              tempP%var%array2(indic(1),
+     &                            indic(2)) = Res/Nbvals
+            CASE (3)
+              tempP%var%array3(indic(1),
+     &                            indic(2),indic(3)) = Res/Nbvals
+            CASE (4)
+              tempP%var%array4(indic(1),
+     &                            indic(2),indic(3),indic(4))
+     &                = Res/Nbvals
+            CASE (5)
+              tempP%var%array5(indic(1),
+     &                            indic(2),indic(3),indic(4),
+     &                   indic(5)) = Res/Nbvals
+            CASE (6)
+              tempP%var%array6(indic(1),
+     &                            indic(2),indic(3),indic(4),
+     &                           indic(5),indic(6)) = Res/Nbvals
+            END SELECT
+              exit
+            else
+               if (firsttest) exit
+               i = i + 1                      
+            endif
+          enddo            
+C     
+      End Subroutine CalculNewValTempP
+C
+C
+      End Module Agrif_Mask     
+      
+      Subroutine CalculNewValTempP3D(indic,
+     &               tempP,parent,ppbtab,
+     &               ppetab,noraftab,MaxSearch,Agrif_SpecialValue)
+C
+CCC   Description:
+CCC   Subroutine called in the procedure Agrif_InterpnD to recalculate the value 
+CCC   of the parent grid variable when this one is equal to Agrif_SpecialValue. 
+C
+C     Declarations:
+C
+       
+C
+C     Arrays arguments      
+      INTEGER, PARAMETER :: nbdim = 3
+      INTEGER,DIMENSION(nbdim) :: indic
+      LOGICAL,DIMENSION(nbdim) :: noraftab
+      INTEGER,DIMENSION(nbdim) :: ppbtab,ppetab
+      REAL :: Agrif_SpecialValue
+C
+C     Pointer argument
+      REAL,DIMENSION(ppbtab(1):ppetab(1),ppbtab(2):ppetab(2),
+     &    ppbtab(3):ppetab(3)) :: tempP, parent  ! Part of the parent grid used for 
+                                      ! the interpolation of the child grid                     
+C
+C     Local scalar
+      INTEGER                  :: i,ii,iii,jj,kk,ll,mm,nn 
+      INTEGER,DIMENSION(nbdim) :: imin,imax,idecal
+      INTEGER                  :: Nbvals
+      REAL                     :: Res
+      REAL                     :: ValParent
+      INTEGER                  :: ValMax
+      INTEGER :: MaxSearch
+      LOGICAL :: Existunmasked
+C      
+C     Local arrays      
+C
+      ValMax = 1
+!CDIR NOVECTOR
+      do iii = 1 , nbdim
+         IF (.NOT.noraftab(iii)) THEN
+         ValMax = max(ValMax,ppetab(iii)-indic(iii))
+         ValMax = max(ValMax,indic(iii)-ppbtab(iii))
+         ENDIF
+      enddo
+C
+      Valmax = min(Valmax,MaxSearch)
+C
+!CDIR NOVECTOR
+      imin = indic
+!CDIR NOVECTOR
+      imax = indic
+      
+!CDIR NOVECTOR
+         idecal = indic	 
+C
+         i = Valmax
+
+            do iii = 1 , nbdim
+               if (.NOT.noraftab(iii)) then
+                  imin(iii) = max(indic(iii) - i,ppbtab(iii))
+                  imax(iii) = min(indic(iii) + i,ppetab(iii))
+         
+                  if (indic(iii).GT.ppbtab(iii)) then
+
+                     idecal(iii) = idecal(iii)-1
+
+                        if (tempP(idecal(1),idecal(2),idecal(3)) 
+     &                               == Agrif_SpecialValue) then
+                           imin(iii) = imax(iii)
+                        endif
+
+                     idecal(iii) = idecal(iii)+1
+                  endif
+
+               endif            
+            enddo
+C
+            Existunmasked = .FALSE.
+C
+               do kk = imin(3),imax(3)
+               do jj = imin(2),imax(2)
+!CDIR NOVECTOR
+               do ii = imin(1),imax(1)
+                    if ( parent(ii,jj,kk) .NE. Agrif_SpecialValue) then
+                        Existunmasked = .TRUE.
+                       exit
+                    endif 
+                        enddo
+                  enddo  
+               enddo
+C
+C
+          if (.Not.Existunmasked) return
+C
+         i = 1
+C
+         do While(i <= ValMax)
+C
+
+            do iii = 1 , nbdim
+               if (.NOT.noraftab(iii)) then
+                  imin(iii) = max(indic(iii) - i,ppbtab(iii))
+                  imax(iii) = min(indic(iii) + i,ppetab(iii))
+               endif            
+            enddo
+C
+            Res = 0.
+            Nbvals = 0
+C
+               do kk = imin(3),imax(3)
+               do jj = imin(2),imax(2)
+!CDIR NOVECTOR
+               do ii = imin(1),imax(1)
+                    ValParent = parent(ii,jj,kk)
+                    if ( ValParent .NE. Agrif_SpecialValue) then
+                        Res = Res + ValParent
+                        Nbvals = Nbvals + 1
+                    endif 
+                        enddo
+                  enddo  
+               enddo
+C
+C
+            
+            if (Nbvals.GT.0) then
+              tempP(indic(1),indic(2),indic(3)) = Res/Nbvals
+              exit
+            else
+               i = i + 1                      
+            endif
+          enddo            
+C     
+      End Subroutine CalculNewValTempP3D        
+
+      Subroutine CalculNewValTempP4D(indic,
+     &               tempP,parent,ppbtab,
+     &               ppetab,noraftab,MaxSearch,Agrif_SpecialValue)
+C
+CCC   Description:
+CCC   Subroutine called in the procedure Agrif_InterpnD to recalculate the value 
+CCC   of the parent grid variable when this one is equal to Agrif_SpecialValue. 
+C
+C     Declarations:
+C
+       
+C
+C     Arrays arguments      
+      INTEGER, PARAMETER :: nbdim = 4
+      INTEGER,DIMENSION(nbdim) :: indic
+      LOGICAL,DIMENSION(nbdim) :: noraftab
+      INTEGER,DIMENSION(nbdim) :: ppbtab,ppetab
+      INTEGER :: MaxSearch      
+      REAL :: Agrif_SpecialValue      
+C
+C     Pointer argument
+      REAL,DIMENSION(ppbtab(1):ppetab(1),ppbtab(2):ppetab(2),
+     &    ppbtab(3):ppetab(3),
+     &    ppbtab(4):ppetab(4)) :: tempP, parent  ! Part of the parent grid used for 
+                                      ! the interpolation of the child grid                     
+C
+C     Local scalar
+      INTEGER                  :: i,ii,iii,jj,kk,ll,mm,nn 
+      INTEGER,DIMENSION(nbdim) :: imin,imax,idecal
+      INTEGER                  :: Nbvals
+      REAL                     :: Res
+      REAL                     :: ValParent
+      INTEGER                  :: ValMax
+      LOGICAL                  :: firsttest
+C      
+C     Local arrays      
+C
+      ValMax = 1
+      do iii = 1 , nbdim
+         IF (.NOT.noraftab(iii)) THEN
+         ValMax = max(ValMax,ppetab(iii)-indic(iii))
+         ValMax = max(ValMax,indic(iii)-ppbtab(iii))
+         ENDIF
+      enddo
+C
+      Valmax = min(Valmax,MaxSearch)
+C
+      imin = indic
+      imax = indic
+C
+         i = 1
+         firsttest = .TRUE.
+         idecal = indic	 
+	 
+C
+         do While(i <= ValMax)
+C
+         IF ((i == 1).AND.(firsttest)) i = Valmax
+
+            do iii = 1 , nbdim
+               if (.NOT.noraftab(iii)) then
+                  imin(iii) = max(indic(iii) - i,ppbtab(iii))
+                  imax(iii) = min(indic(iii) + i,ppetab(iii))
+                  if (firsttest) then               
+                  if (indic(iii).GT.ppbtab(iii)) then
+
+
+                     idecal(iii) = idecal(iii)-1
+		     
+                     if (tempP(idecal(1),idecal(2),idecal(3),idecal(4))
+     &                               == Agrif_SpecialValue) then
+                           imin(iii) = imax(iii)
+                     endif
+		     
+		     idecal(iii) = idecal(iii)+1
+                  endif
+                  endif
+               endif            
+            enddo
+C
+            Res = 0.
+            Nbvals = 0
+C
+               do ll = imin(4),imax(4)
+               do kk = imin(3),imax(3)
+               do jj = imin(2),imax(2)
+               do ii = imin(1),imax(1)
+                    ValParent = parent(ii,jj,kk,ll)
+                    if ( ValParent .NE. Agrif_SpecialValue) then
+                        Res = Res + ValParent
+                        Nbvals = Nbvals + 1
+                    endif 
+                              enddo
+                        enddo
+                  enddo  
+               enddo
+C
+C
+            
+            if (Nbvals.GT.0) then
+              if (firsttest) then
+                   firsttest = .FALSE.
+                   i=1
+                   cycle
+              endif
+	      
+              tempP(indic(1),indic(2),indic(3),indic(4)) = Res/Nbvals
+	    
+              exit
+            else
+               if (firsttest) exit
+               i = i + 1                      
+            endif
+          enddo            
+C     
+      End Subroutine CalculNewValTempP4D        
Index: /vendors/AGRIF/r_00/AGRIF_FILES/modmpp.F
===================================================================
--- /vendors/AGRIF/r_00/AGRIF_FILES/modmpp.F	(revision 1902)
+++ /vendors/AGRIF/r_00/AGRIF_FILES/modmpp.F	(revision 1902)
@@ -0,0 +1,1119 @@
+!
+! $Id: modmpp.F 1793 2010-01-06 19:20:12Z rblod $
+!
+C     AGRIF (Adaptive Grid Refinement In Fortran)
+C
+C     Copyright (C) 2003 Laurent Debreu (Laurent.Debreu@imag.fr)
+C                        Christophe Vouland (Christophe.Vouland@imag.fr)
+C
+C     This program is free software; you can redistribute it and/or modify
+C     it under the terms of the GNU General Public License as published by
+C     the Free Software Foundation; either version 2 of the License, or
+C     (at your option) any later version.
+C
+C     This program is distributed in the hope that it will be useful,
+C     but WITHOUT ANY WARRANTY; without even the implied warranty of
+C     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+C     GNU General Public License for more details.
+C
+C     You should have received a copy of the GNU General Public License
+C     along with this program; if not, write to the Free Software
+C     Foundation, Inc., 59 Temple Place- Suite 330, Boston, MA 02111-1307, USA.
+C
+C
+C
+CCC   Module Agrif_mpp
+C
+      Module Agrif_mpp
+      Use Agrif_Types
+      Use Agrif_Arrays
+
+      Contains
+#ifdef AGRIF_MPI
+      Subroutine Get_External_Data_first(pttruetab,
+     &   cetruetab,pttruetabwhole,cetruetabwhole,nbdim,memberin,
+     &   memberout,memberoutall1,sendtoproc,recvfromproc,imin,imax,
+     &   imin_recv,imax_recv)
+
+      IMPLICIT NONE
+#include "mpif.h"
+      INTEGER :: nbdim
+      INTEGER,DIMENSION(nbdim,0:Agrif_NbProcs-1)    :: pttruetab,
+     &                                                 cetruetab
+      INTEGER,DIMENSION(nbdim,0:Agrif_NbProcs-1)    :: pttruetabwhole,
+     &                                                 cetruetabwhole
+      INTEGER :: k,i,k2
+      LOGICAL, DIMENSION(0:Agrif_Nbprocs-1) :: sendtoproc, recvfromproc
+      INTEGER,DIMENSION(nbdim,0:Agrif_NbProcs-1):: imin,imax,
+     &   imin_recv,imax_recv
+      LOGICAL :: memberin, memberout
+      INTEGER :: imintmp, imaxtmp,j,i1
+      INTEGER :: imin1,imax1
+      LOGICAL :: tochange,tochangebis
+      INTEGER,DIMENSION(nbdim,0:Agrif_NbProcs-1)    :: pttruetab2,
+     &                                                 cetruetab2
+      LOGICAL :: memberout1(1),memberoutall(0:Agrif_Nbprocs-1)
+      LOGICAL, OPTIONAL :: memberoutall1(0:Agrif_Nbprocs-1)
+      INTEGER :: code
+      
+C pttruetab2 and cetruetab2 are modified arraysin order to always
+C send the most inner points
+
+        
+        IF (present(memberoutall1)) THEN
+        memberoutall = memberoutall1
+        ELSE
+         memberout1(1) = memberout
+
+         CALL MPI_ALLGATHER(memberout1,1,MPI_LOGICAL,memberoutall,
+     &                  1,MPI_LOGICAL,MPI_COMM_AGRIF,code)
+        ENDIF
+         pttruetab2(:,Agrif_Procrank) = pttruetab(:,Agrif_Procrank)
+         cetruetab2(:,Agrif_Procrank) = cetruetab(:,Agrif_Procrank)
+         do k2=0,Agrif_Nbprocs-1
+            do i=1,nbdim
+
+           tochangebis=.TRUE.
+           DO i1=1,nbdim
+            IF (i .NE. i1) THEN
+              IF ((pttruetab(i1,Agrif_Procrank).NE.pttruetab(i1,k2)).OR.
+     &          (cetruetab(i1,Agrif_Procrank).NE.cetruetab(i1,k2))) THEN
+                   tochangebis = .FALSE.
+               EXIT
+              ENDIF
+             ENDIF
+           ENDDO
+
+           IF (tochangebis) THEN
+
+
+          imin1 = max(pttruetab(i,Agrif_Procrank),
+     &                    pttruetab(i,k2))
+          imax1 = min(cetruetab(i,Agrif_Procrank),
+     &                    cetruetab(i,k2))
+
+C Always send the most interior points
+
+           tochange = .false.
+           IF (cetruetab(i,Agrif_Procrank)> cetruetab(i,k2)) THEN
+
+           DO j=imin1,imax1
+             IF ((cetruetab(i,k2)-j) >
+     &             (j-pttruetab(i,Agrif_Procrank))) THEN
+             imintmp = j+1
+             tochange = .TRUE.
+             ELSE
+              EXIT
+             ENDIF
+          ENDDO
+          ENDIF
+
+           if (tochange) then
+C
+              pttruetab2(i,Agrif_Procrank) = imintmp
+C
+          endif
+
+           tochange = .FALSE.
+           imaxtmp=0
+           IF (pttruetab(i,Agrif_Procrank) < pttruetab(i,k2)) THEN
+          DO j=imax1,imin1,-1
+            IF ((j-pttruetab(i,k2)) >
+     &             (cetruetab(i,Agrif_Procrank)-j)) THEN
+             imaxtmp = j-1
+             tochange = .TRUE.
+            ELSE
+             EXIT
+            ENDIF
+          ENDDO
+
+          ENDIF
+
+                    if (tochange) then
+C
+              cetruetab2(i,Agrif_Procrank) = imaxtmp
+C
+          endif
+C
+
+          ENDIF
+           enddo
+         enddo
+
+
+       do k = 0,Agrif_NbProcs-1
+C
+        sendtoproc(k) = .true.
+C
+!CDIR SHORTLOOP
+        do i = 1,nbdim
+C
+          imin(i,k) = max(pttruetab2(i,Agrif_Procrank),
+     &                    pttruetabwhole(i,k))
+          imax(i,k) = min(cetruetab2(i,Agrif_Procrank),
+     &                    cetruetabwhole(i,k))
+C
+          if (imin(i,k) > imax(i,k)) then
+C
+              sendtoproc(k) = .false.
+C
+          endif
+C
+        enddo
+        IF (.NOT.memberoutall(k)) THEN
+           sendtoproc(k) = .FALSE.
+        ENDIF
+C
+      enddo
+      
+      Call Exchangesamelevel_first(sendtoproc,nbdim,imin,imax,
+     &     recvfromproc,imin_recv,imax_recv)
+      
+      End Subroutine Get_External_Data_first
+C
+      Subroutine Get_External_Data(tempC,tempCextend,pttruetab,
+     &   cetruetab,pttruetabwhole,cetruetabwhole,nbdim,memberin,
+     &   memberout,memberoutall1)
+
+      IMPLICIT NONE
+#include "mpif.h"
+      INTEGER :: nbdim
+      TYPE(Agrif_PVariable) :: tempC, tempCextend
+      INTEGER,DIMENSION(nbdim,0:Agrif_NbProcs-1)    :: pttruetab,
+     &                                                 cetruetab
+      INTEGER,DIMENSION(nbdim,0:Agrif_NbProcs-1)    :: pttruetabwhole,
+     &                                                 cetruetabwhole
+      INTEGER :: k,i,k2
+      LOGICAL :: sendtoproc(0:Agrif_Nbprocs-1)
+      INTEGER,DIMENSION(nbdim,0:Agrif_NbProcs-1)    :: imin,imax
+      LOGICAL :: memberin, memberout
+      INTEGER :: imintmp, imaxtmp,j,i1
+      INTEGER :: imin1,imax1
+      LOGICAL :: tochange,tochangebis
+      INTEGER,DIMENSION(nbdim,0:Agrif_NbProcs-1)    :: pttruetab2,
+     &                                                 cetruetab2
+      LOGICAL :: memberout1(1),memberoutall(0:Agrif_Nbprocs-1)
+      LOGICAL, OPTIONAL :: memberoutall1(0:Agrif_Nbprocs-1)
+      INTEGER :: code
+
+C pttruetab2 and cetruetab2 are modified arraysin order to always
+C send the most inner points
+
+        
+        IF (present(memberoutall1)) THEN
+        memberoutall = memberoutall1
+        ELSE
+         memberout1(1) = memberout
+
+         CALL MPI_ALLGATHER(memberout1,1,MPI_LOGICAL,memberoutall,
+     &                  1,MPI_LOGICAL,MPI_COMM_AGRIF,code)
+        ENDIF
+         pttruetab2(:,Agrif_Procrank) = pttruetab(:,Agrif_Procrank)
+         cetruetab2(:,Agrif_Procrank) = cetruetab(:,Agrif_Procrank)
+         do k2=0,Agrif_Nbprocs-1
+            do i=1,nbdim
+
+           tochangebis=.TRUE.
+           DO i1=1,nbdim
+            IF (i .NE. i1) THEN
+              IF ((pttruetab(i1,Agrif_Procrank).NE.pttruetab(i1,k2)).OR.
+     &          (cetruetab(i1,Agrif_Procrank).NE.cetruetab(i1,k2))) THEN
+                   tochangebis = .FALSE.
+               EXIT
+              ENDIF
+             ENDIF
+           ENDDO
+
+           IF (tochangebis) THEN
+
+
+          imin1 = max(pttruetab(i,Agrif_Procrank),
+     &                    pttruetab(i,k2))
+          imax1 = min(cetruetab(i,Agrif_Procrank),
+     &                    cetruetab(i,k2))
+
+C Always send the most interior points
+
+           tochange = .false.
+           IF (cetruetab(i,Agrif_Procrank)> cetruetab(i,k2)) THEN
+
+           DO j=imin1,imax1
+             IF ((cetruetab(i,k2)-j) >
+     &             (j-pttruetab(i,Agrif_Procrank))) THEN
+             imintmp = j+1
+             tochange = .TRUE.
+             ELSE
+              EXIT
+             ENDIF
+          ENDDO
+          ENDIF
+
+           if (tochange) then
+C
+              pttruetab2(i,Agrif_Procrank) = imintmp
+C
+          endif
+
+           tochange = .FALSE.
+           imaxtmp=0
+           IF (pttruetab(i,Agrif_Procrank) < pttruetab(i,k2)) THEN
+          DO j=imax1,imin1,-1
+            IF ((j-pttruetab(i,k2)) >
+     &             (cetruetab(i,Agrif_Procrank)-j)) THEN
+             imaxtmp = j-1
+             tochange = .TRUE.
+            ELSE
+             EXIT
+            ENDIF
+          ENDDO
+
+          ENDIF
+
+                    if (tochange) then
+C
+              cetruetab2(i,Agrif_Procrank) = imaxtmp
+C
+          endif
+C
+
+          ENDIF
+           enddo
+         enddo
+
+
+       do k = 0,Agrif_NbProcs-1
+C
+        sendtoproc(k) = .true.
+C
+!CDIR SHORTLOOP
+        do i = 1,nbdim
+C
+          imin(i,k) = max(pttruetab2(i,Agrif_Procrank),
+     &                    pttruetabwhole(i,k))
+          imax(i,k) = min(cetruetab2(i,Agrif_Procrank),
+     &                    cetruetabwhole(i,k))
+C
+          if (imin(i,k) > imax(i,k)) then
+C
+              sendtoproc(k) = .false.
+C
+          endif
+C
+        enddo
+        IF (.NOT.memberoutall(k)) THEN
+           sendtoproc(k) = .FALSE.
+        ENDIF
+C
+      enddo
+
+
+c       IF (.NOT.memberin) sendtoproc = .FALSE.
+
+      IF (memberout) THEN
+      Call Agrif_nbdim_allocation(tempCextend%var,
+     &                 pttruetabwhole(:,Agrif_ProcRank),
+     &                 cetruetabwhole(:,Agrif_ProcRank),nbdim)
+      call Agrif_nbdim_Full_VarEQreal(tempCextend%var,0.,nbdim)
+      ENDIF
+
+      IF (sendtoproc(Agrif_ProcRank)) THEN
+           Call Agrif_nbdim_VarEQvar(tempCextend%var,
+     &                               imin(:,Agrif_Procrank),
+     &                               imax(:,Agrif_Procrank),
+     &                               tempC%var,
+     &                               imin(:,Agrif_Procrank),
+     &                               imax(:,Agrif_Procrank),
+     &                               nbdim)
+      ENDIF
+
+      Call Exchangesamelevel(sendtoproc,nbdim,imin,imax,tempC,
+     &     tempCextend)
+
+      End Subroutine Get_External_Data
+
+       Subroutine ExchangeSameLevel(sendtoproc,nbdim,imin,imax,
+     &          tempC,tempCextend)
+      Implicit None
+      INTEGER :: nbdim
+      INTEGER,DIMENSION(nbdim,0:Agrif_Nbprocs-1) :: imin,imax
+      INTEGER,DIMENSION(nbdim,2,0:Agrif_Nbprocs-1) :: iminmax_temp
+      INTEGER,DIMENSION(nbdim,0:Agrif_Nbprocs-1) :: imin_recv,imax_recv
+      TYPE(Agrif_PVARIABLE) :: tempC,tempCextend
+      LOGICAL,DIMENSION(0:Agrif_Nbprocs-1)       :: sendtoproc
+      LOGICAL,DIMENSION(0:Agrif_Nbprocs-1)       :: recvfromproc
+      LOGICAL                                    :: res
+      TYPE(AGRIF_PVARIABLE), SAVE                      :: temprecv
+
+#include "mpif.h"
+          INTEGER :: i,k
+          INTEGER :: etiquette = 100
+          INTEGER :: code, datasize
+          INTEGER,DIMENSION(MPI_STATUS_SIZE)   :: statut
+
+
+      do k = 0,Agrif_ProcRank-1
+C
+C
+            Call MPI_SEND(sendtoproc(k),1,MPI_LOGICAL,k,etiquette,
+     &                    MPI_COMM_AGRIF,code)
+C
+            if (sendtoproc(k)) then
+C
+                iminmax_temp(:,1,k) = imin(:,k)
+                iminmax_temp(:,2,k) = imax(:,k)
+
+                Call MPI_SEND(iminmax_temp(:,:,k),
+     &                        2*nbdim,MPI_INTEGER,k,etiquette,
+     &                        MPI_COMM_AGRIF,code)
+C
+                datasize = 1
+C
+!CDIR SHORTLOOP
+                do i = 1,nbdim
+C
+                  datasize = datasize * (imax(i,k)-imin(i,k)+1)
+C
+                enddo
+C
+                SELECT CASE(nbdim)
+                CASE(1)
+                   Call MPI_SEND(tempC%var%array1(
+     &                        imin(1,k):imax(1,k)),
+     &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &                        MPI_COMM_AGRIF,code)
+                CASE(2)
+                   Call MPI_SEND(tempC%var%array2(
+     &                        imin(1,k):imax(1,k),
+     &                        imin(2,k):imax(2,k)),
+     &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &                        MPI_COMM_AGRIF,code)
+                CASE(3)
+                
+                  Call Agrif_Send_3Darray(tempC%var%array3,
+     &             lbound(tempC%var%array3),imin(:,k),imax(:,k),k)
+                CASE(4)
+                   Call MPI_SEND(tempC%var%array4(
+     &                        imin(1,k):imax(1,k),
+     &                        imin(2,k):imax(2,k),
+     &                        imin(3,k):imax(3,k),
+     &                        imin(4,k):imax(4,k)),
+     &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &                        MPI_COMM_AGRIF,code)
+                CASE(5)
+                   Call MPI_SEND(tempC%var%array5(
+     &                        imin(1,k):imax(1,k),
+     &                        imin(2,k):imax(2,k),
+     &                        imin(3,k):imax(3,k),
+     &                        imin(4,k):imax(4,k),
+     &                        imin(5,k):imax(5,k)),
+     &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &                        MPI_COMM_AGRIF,code)
+                CASE(6)
+                   Call MPI_SEND(tempC%var%array6(
+     &                        imin(1,k):imax(1,k),
+     &                        imin(2,k):imax(2,k),
+     &                        imin(3,k):imax(3,k),
+     &                        imin(4,k):imax(4,k),
+     &                        imin(5,k):imax(5,k),
+     &                        imin(6,k):imax(6,k)),
+     &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &                        MPI_COMM_AGRIF,code)
+                END SELECT
+C
+            endif
+
+C
+      enddo
+C
+C
+C     Reception from others processors of the necessary part of the parent grid
+      do k = Agrif_ProcRank+1,Agrif_Nbprocs-1
+C
+C
+            Call MPI_RECV(res,1,MPI_LOGICAL,k,etiquette,
+     &                    MPI_COMM_AGRIF,statut,code)
+C
+            recvfromproc(k) = res
+
+C
+            if (recvfromproc(k)) then
+C
+                Call MPI_RECV(iminmax_temp(:,:,k),
+     &                        2*nbdim,MPI_INTEGER,k,etiquette,
+     &                        MPI_COMM_AGRIF,statut,code)
+
+                imin_recv(:,k) = iminmax_temp(:,1,k)
+                imax_recv(:,k) = iminmax_temp(:,2,k)
+
+                datasize = 1
+C
+!CDIR SHORTLOOP
+                do i = 1,nbdim
+C
+                datasize = datasize * (imax_recv(i,k)-imin_recv(i,k)+1)
+C
+                enddo
+
+             IF (.Not.Associated(temprecv%var)) allocate(temprecv%var)
+             call Agrif_nbdim_allocation(temprecv%var,imin_recv(:,k),
+     &   imax_recv(:,k),nbdim)
+            SELECT CASE(nbdim)
+            CASE(1)
+              Call MPI_RECV(temprecv%var%array1,
+     &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &               MPI_COMM_AGRIF,statut,code)
+            CASE(2)
+              Call MPI_RECV(temprecv%var%array2,
+     &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &               MPI_COMM_AGRIF,statut,code)
+            CASE(3)
+              Call MPI_RECV(temprecv%var%array3,
+     &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &               MPI_COMM_AGRIF,statut,code)
+
+            CASE(4)
+              Call MPI_RECV(temprecv%var%array4,
+     &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &               MPI_COMM_AGRIF,statut,code)
+            CASE(5)
+              Call MPI_RECV(temprecv%var%array5,
+     &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &               MPI_COMM_AGRIF,statut,code)
+            CASE(6)
+              Call MPI_RECV(temprecv%var%array6,
+     &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &               MPI_COMM_AGRIF,statut,code)
+       END SELECT
+                        
+            Call where_valtabtotab_mpi(tempCextend%var,
+     &             temprecv%var,imin_recv(:,k),imax_recv(:,k),0.,nbdim)
+     
+                Call Agrif_nbdim_deallocation(temprecv%var,nbdim)
+C                deallocate(temprecv%var)
+
+            endif
+
+C
+      enddo
+
+C     Reception from others processors of the necessary part of the parent grid
+      do k = Agrif_ProcRank+1,Agrif_Nbprocs-1
+C
+C
+            
+            Call MPI_SEND(sendtoproc(k),1,MPI_LOGICAL,k,etiquette,
+     &                    MPI_COMM_AGRIF,code)
+C
+            if (sendtoproc(k)) then
+C
+                iminmax_temp(:,1,k) = imin(:,k)
+                iminmax_temp(:,2,k) = imax(:,k)
+
+                Call MPI_SEND(iminmax_temp(:,:,k),
+     &                        2*nbdim,MPI_INTEGER,k,etiquette,
+     &                        MPI_COMM_AGRIF,code)
+C
+                SELECT CASE(nbdim)
+                CASE(1)
+                datasize=SIZE(tempC%var%array1(
+     &                        imin(1,k):imax(1,k)))
+                   Call MPI_SEND(tempC%var%array1(
+     &                        imin(1,k):imax(1,k)),
+     &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &                        MPI_COMM_AGRIF,code)
+                CASE(2)
+                datasize=SIZE(tempC%var%array2(
+     &                        imin(1,k):imax(1,k),
+     &                        imin(2,k):imax(2,k)))
+                   Call MPI_SEND(tempC%var%array2(
+     &                        imin(1,k):imax(1,k),
+     &                        imin(2,k):imax(2,k)),
+     &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &                        MPI_COMM_AGRIF,code)
+                CASE(3)
+                datasize=SIZE(tempC%var%array3(
+     &                        imin(1,k):imax(1,k),
+     &                        imin(2,k):imax(2,k),
+     &                        imin(3,k):imax(3,k)))
+                   Call MPI_SEND(tempC%var%array3(
+     &                        imin(1,k):imax(1,k),
+     &                        imin(2,k):imax(2,k),
+     &                        imin(3,k):imax(3,k)),
+     &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &                        MPI_COMM_AGRIF,code)
+                CASE(4)
+                datasize=SIZE(tempC%var%array4(
+     &                        imin(1,k):imax(1,k),
+     &                        imin(2,k):imax(2,k),
+     &                        imin(3,k):imax(3,k),
+     &                        imin(4,k):imax(4,k)))
+                   Call MPI_SEND(tempC%var%array4(
+     &                        imin(1,k):imax(1,k),
+     &                        imin(2,k):imax(2,k),
+     &                        imin(3,k):imax(3,k),
+     &                        imin(4,k):imax(4,k)),
+     &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &                        MPI_COMM_AGRIF,code)
+                CASE(5)
+                datasize=SIZE(tempC%var%array5(
+     &                        imin(1,k):imax(1,k),
+     &                        imin(2,k):imax(2,k),
+     &                        imin(3,k):imax(3,k),
+     &                        imin(4,k):imax(4,k),
+     &                        imin(5,k):imax(5,k)))
+                   Call MPI_SEND(tempC%var%array5(
+     &                        imin(1,k):imax(1,k),
+     &                        imin(2,k):imax(2,k),
+     &                        imin(3,k):imax(3,k),
+     &                        imin(4,k):imax(4,k),
+     &                        imin(5,k):imax(5,k)),
+     &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &                        MPI_COMM_AGRIF,code)
+                CASE(6)
+                datasize=SIZE(tempC%var%array6(
+     &                        imin(1,k):imax(1,k),
+     &                        imin(2,k):imax(2,k),
+     &                        imin(3,k):imax(3,k),
+     &                        imin(4,k):imax(4,k),
+     &                        imin(5,k):imax(5,k),
+     &                        imin(6,k):imax(6,k)))
+                   Call MPI_SEND(tempC%var%array6(
+     &                        imin(1,k):imax(1,k),
+     &                        imin(2,k):imax(2,k),
+     &                        imin(3,k):imax(3,k),
+     &                        imin(4,k):imax(4,k),
+     &                        imin(5,k):imax(5,k),
+     &                        imin(6,k):imax(6,k)),
+     &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &                        MPI_COMM_AGRIF,code)
+                END SELECT
+C
+            endif
+
+C
+      enddo
+C
+C
+C     Reception from others processors of the necessary part of the parent grid
+      do k = Agrif_ProcRank-1,0,-1
+C
+C
+            Call MPI_RECV(res,1,MPI_LOGICAL,k,etiquette,
+     &                    MPI_COMM_AGRIF,statut,code)
+C
+            recvfromproc(k) = res
+
+C
+            if (recvfromproc(k)) then
+C
+                Call MPI_RECV(iminmax_temp(:,:,k),
+     &                        2*nbdim,MPI_INTEGER,k,etiquette,
+     &                        MPI_COMM_AGRIF,statut,code)
+
+C                imin_recv(:,k) = iminmax_temp(:,1,k)
+C                imax_recv(:,k) = iminmax_temp(:,2,k)
+
+C                datasize = 1
+C
+C                do i = 1,nbdim
+C
+C                datasize = datasize * (imax_recv(i,k)-imin_recv(i,k)+1)
+C
+C                enddo
+             IF (.Not.Associated(temprecv%var)) allocate(temprecv%var)
+             call Agrif_nbdim_allocation(temprecv%var,
+     &   iminmax_temp(:,1,k),iminmax_temp(:,2,k),nbdim)
+            SELECT CASE(nbdim)
+            CASE(1)
+              datasize=SIZE(temprecv%var%array1)
+              Call MPI_RECV(temprecv%var%array1,
+     &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &               MPI_COMM_AGRIF,statut,code)
+            CASE(2)
+              datasize=SIZE(temprecv%var%array2)
+              Call MPI_RECV(temprecv%var%array2,
+     &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &               MPI_COMM_AGRIF,statut,code)
+            CASE(3)
+              datasize=SIZE(temprecv%var%array3)
+              Call MPI_RECV(temprecv%var%array3,
+     &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &               MPI_COMM_AGRIF,statut,code)
+
+            CASE(4)
+              datasize=SIZE(temprecv%var%array4)
+              Call MPI_RECV(temprecv%var%array4,
+     &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &               MPI_COMM_AGRIF,statut,code)
+            CASE(5)
+              datasize=SIZE(temprecv%var%array5)
+              Call MPI_RECV(temprecv%var%array5,
+     &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &               MPI_COMM_AGRIF,statut,code)
+            CASE(6)
+              datasize=SIZE(temprecv%var%array6)
+              Call MPI_RECV(temprecv%var%array6,
+     &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &               MPI_COMM_AGRIF,statut,code)
+          END SELECT
+            
+            Call where_valtabtotab_mpi(tempCextend%var,
+     &             temprecv%var,iminmax_temp(:,1,k),iminmax_temp(:,2,k)
+     &            ,0.,nbdim)
+     
+                Call Agrif_nbdim_deallocation(temprecv%var,nbdim)
+C                deallocate(temprecv%var)
+            endif
+
+C
+      enddo
+
+          End Subroutine ExchangeSamelevel
+          
+       Subroutine ExchangeSameLevel_first(sendtoproc,nbdim,imin,imax,
+     &          recvfromproc,imin_recv,imax_recv)
+      Implicit None
+      INTEGER :: nbdim
+      INTEGER,DIMENSION(nbdim,0:Agrif_Nbprocs-1) :: imin,imax
+      INTEGER,DIMENSION(nbdim,2,0:Agrif_Nbprocs-1) :: iminmax_temp
+      INTEGER,DIMENSION(nbdim,0:Agrif_Nbprocs-1) :: imin_recv,imax_recv
+      LOGICAL,DIMENSION(0:Agrif_Nbprocs-1)       :: sendtoproc
+      LOGICAL,DIMENSION(0:Agrif_Nbprocs-1)       :: recvfromproc
+      LOGICAL                                    :: res
+
+#include "mpif.h"
+          INTEGER :: i,k
+          INTEGER :: etiquette = 100
+          INTEGER :: code, datasize
+          INTEGER,DIMENSION(MPI_STATUS_SIZE)   :: statut
+
+     
+      do k = 0,Agrif_ProcRank-1
+C
+C
+            Call MPI_SEND(sendtoproc(k),1,MPI_LOGICAL,k,etiquette,
+     &                    MPI_COMM_AGRIF,code)
+C
+            if (sendtoproc(k)) then
+C
+                iminmax_temp(:,1,k) = imin(:,k)
+                iminmax_temp(:,2,k) = imax(:,k)
+
+                Call MPI_SEND(iminmax_temp(:,:,k),
+     &                        2*nbdim,MPI_INTEGER,k,etiquette,
+     &                        MPI_COMM_AGRIF,code)
+C
+            endif
+
+C
+      enddo
+C
+C
+C     Reception from others processors of the necessary part of the parent grid
+      do k = Agrif_ProcRank+1,Agrif_Nbprocs-1
+C
+C
+            Call MPI_RECV(res,1,MPI_LOGICAL,k,etiquette,
+     &                    MPI_COMM_AGRIF,statut,code)
+C
+            recvfromproc(k) = res
+
+C
+            if (recvfromproc(k)) then
+C
+                Call MPI_RECV(iminmax_temp(:,:,k),
+     &                        2*nbdim,MPI_INTEGER,k,etiquette,
+     &                        MPI_COMM_AGRIF,statut,code)
+
+                imin_recv(:,k) = iminmax_temp(:,1,k)
+                imax_recv(:,k) = iminmax_temp(:,2,k)
+            endif
+
+C
+      enddo
+
+C     Reception from others processors of the necessary part of the parent grid
+      do k = Agrif_ProcRank+1,Agrif_Nbprocs-1
+C
+C
+            
+            Call MPI_SEND(sendtoproc(k),1,MPI_LOGICAL,k,etiquette,
+     &                    MPI_COMM_AGRIF,code)
+C
+            if (sendtoproc(k)) then
+C
+                iminmax_temp(:,1,k) = imin(:,k)
+                iminmax_temp(:,2,k) = imax(:,k)
+
+                Call MPI_SEND(iminmax_temp(:,:,k),
+     &                        2*nbdim,MPI_INTEGER,k,etiquette,
+     &                        MPI_COMM_AGRIF,code)
+C
+            endif
+
+C
+      enddo
+C
+C
+C     Reception from others processors of the necessary part of the parent grid
+      do k = Agrif_ProcRank-1,0,-1
+C
+C
+            Call MPI_RECV(res,1,MPI_LOGICAL,k,etiquette,
+     &                    MPI_COMM_AGRIF,statut,code)
+C
+            recvfromproc(k) = res
+
+C
+            if (recvfromproc(k)) then
+C
+                Call MPI_RECV(iminmax_temp(:,:,k),
+     &                        2*nbdim,MPI_INTEGER,k,etiquette,
+     &                        MPI_COMM_AGRIF,statut,code)
+
+                imin_recv(:,k) = iminmax_temp(:,1,k)
+                imax_recv(:,k) = iminmax_temp(:,2,k)
+            endif
+
+C
+      enddo
+
+          End Subroutine ExchangeSamelevel_first          
+
+       Subroutine ExchangeSameLevel2(sendtoproc,recvfromproc,
+     &   nbdim,
+     &          pttruetabwhole,cetruetabwhole,imin,imax,
+     &          imin_recv,imax_recv,memberout,tempC,tempCextend)
+      Implicit None
+      INTEGER :: nbdim
+      INTEGER,DIMENSION(nbdim,0:Agrif_Nbprocs-1) :: imin,imax
+      INTEGER,DIMENSION(nbdim,0:Agrif_Nbprocs-1) :: pttruetabwhole,
+     &     cetruetabwhole
+      INTEGER,DIMENSION(nbdim,0:Agrif_Nbprocs-1) :: imin_recv,imax_recv
+      TYPE(Agrif_PVARIABLE) :: tempC,tempCextend
+      LOGICAL,DIMENSION(0:Agrif_Nbprocs-1)       :: sendtoproc
+      LOGICAL,DIMENSION(0:Agrif_Nbprocs-1)       :: recvfromproc
+      LOGICAL                                    :: res
+      LOGICAL :: memberout
+      TYPE(AGRIF_PVARIABLE), SAVE                      :: temprecv
+
+#include "mpif.h"
+          INTEGER :: i,k
+          INTEGER :: etiquette = 100
+          INTEGER :: code, datasize
+          INTEGER,DIMENSION(MPI_STATUS_SIZE)   :: statut
+
+      IF (memberout) THEN
+      Call Agrif_nbdim_allocation(tempCextend%var,
+     &                 pttruetabwhole(:,Agrif_ProcRank),
+     &                 cetruetabwhole(:,Agrif_ProcRank),nbdim)
+      call Agrif_nbdim_Full_VarEQreal(tempCextend%var,0.,nbdim)
+      ENDIF
+
+      IF (sendtoproc(Agrif_ProcRank)) THEN
+           Call Agrif_nbdim_VarEQvar(tempCextend%var,
+     &                               imin(:,Agrif_Procrank),
+     &                               imax(:,Agrif_Procrank),
+     &                               tempC%var,
+     &                               imin(:,Agrif_Procrank),
+     &                               imax(:,Agrif_Procrank),
+     &                               nbdim)
+      ENDIF
+
+      do k = 0,Agrif_ProcRank-1
+C
+C
+C
+            if (sendtoproc(k)) then
+C
+                datasize = 1
+C
+!CDIR SHORTLOOP
+                do i = 1,nbdim
+C
+                  datasize = datasize * (imax(i,k)-imin(i,k)+1)
+C
+                enddo
+C
+
+                SELECT CASE(nbdim)
+                CASE(1)
+                   Call MPI_SEND(tempC%var%array1(
+     &                        imin(1,k):imax(1,k)),
+     &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &                        MPI_COMM_AGRIF,code)
+                CASE(2)               
+                   Call MPI_SEND(tempC%var%array2(
+     &                        imin(1,k):imax(1,k),
+     &                        imin(2,k):imax(2,k)),
+     &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &                        MPI_COMM_AGRIF,code)
+                CASE(3)
+     
+                  Call Agrif_Send_3Darray(tempC%var%array3,
+     &             lbound(tempC%var%array3),imin(:,k),imax(:,k),k)
+                CASE(4)
+                   Call MPI_SEND(tempC%var%array4(
+     &                        imin(1,k):imax(1,k),
+     &                        imin(2,k):imax(2,k),
+     &                        imin(3,k):imax(3,k),
+     &                        imin(4,k):imax(4,k)),
+     &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &                        MPI_COMM_AGRIF,code)
+                CASE(5)
+                   Call MPI_SEND(tempC%var%array5(
+     &                        imin(1,k):imax(1,k),
+     &                        imin(2,k):imax(2,k),
+     &                        imin(3,k):imax(3,k),
+     &                        imin(4,k):imax(4,k),
+     &                        imin(5,k):imax(5,k)),
+     &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &                        MPI_COMM_AGRIF,code)
+                CASE(6)
+                   Call MPI_SEND(tempC%var%array6(
+     &                        imin(1,k):imax(1,k),
+     &                        imin(2,k):imax(2,k),
+     &                        imin(3,k):imax(3,k),
+     &                        imin(4,k):imax(4,k),
+     &                        imin(5,k):imax(5,k),
+     &                        imin(6,k):imax(6,k)),
+     &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &                        MPI_COMM_AGRIF,code)
+                END SELECT
+C
+            endif
+
+C
+      enddo
+C
+C
+C     Reception from others processors of the necessary part of the parent grid
+      do k = Agrif_ProcRank+1,Agrif_Nbprocs-1
+
+C
+            if (recvfromproc(k)) then
+
+                datasize = 1
+C
+!CDIR SHORTLOOP
+                do i = 1,nbdim
+C
+                datasize = datasize * (imax_recv(i,k)-imin_recv(i,k)+1)
+C
+                enddo
+
+             IF (.Not.Associated(temprecv%var)) allocate(temprecv%var)
+             call Agrif_nbdim_allocation(temprecv%var,imin_recv(:,k),
+     &   imax_recv(:,k),nbdim)
+            SELECT CASE(nbdim)
+            CASE(1)
+              Call MPI_RECV(temprecv%var%array1,
+     &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &               MPI_COMM_AGRIF,statut,code)
+            CASE(2)           
+              Call MPI_RECV(temprecv%var%array2,
+     &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &               MPI_COMM_AGRIF,statut,code)
+            CASE(3)       
+              Call MPI_RECV(temprecv%var%array3,
+     &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &               MPI_COMM_AGRIF,statut,code)
+
+            CASE(4)
+              Call MPI_RECV(temprecv%var%array4,
+     &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &               MPI_COMM_AGRIF,statut,code)
+            CASE(5)
+              Call MPI_RECV(temprecv%var%array5,
+     &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &               MPI_COMM_AGRIF,statut,code)
+            CASE(6)
+              Call MPI_RECV(temprecv%var%array6,
+     &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &               MPI_COMM_AGRIF,statut,code)
+       END SELECT
+                        
+            Call where_valtabtotab_mpi(tempCextend%var,
+     &             temprecv%var,imin_recv(:,k),imax_recv(:,k),0.,nbdim)
+     
+                Call Agrif_nbdim_deallocation(temprecv%var,nbdim)
+C                deallocate(temprecv%var)
+
+            endif
+
+C
+      enddo
+
+C     Reception from others processors of the necessary part of the parent grid
+      do k = Agrif_ProcRank+1,Agrif_Nbprocs-1
+C
+C
+            if (sendtoproc(k)) then
+C
+                SELECT CASE(nbdim)
+                CASE(1)
+                datasize=SIZE(tempC%var%array1(
+     &                        imin(1,k):imax(1,k)))
+                   Call MPI_SEND(tempC%var%array1(
+     &                        imin(1,k):imax(1,k)),
+     &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &                        MPI_COMM_AGRIF,code)
+                CASE(2)                
+                datasize=SIZE(tempC%var%array2(
+     &                        imin(1,k):imax(1,k),
+     &                        imin(2,k):imax(2,k)))
+                   Call MPI_SEND(tempC%var%array2(
+     &                        imin(1,k):imax(1,k),
+     &                        imin(2,k):imax(2,k)),
+     &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &                        MPI_COMM_AGRIF,code)
+                CASE(3)
+                datasize=SIZE(tempC%var%array3(
+     &                        imin(1,k):imax(1,k),
+     &                        imin(2,k):imax(2,k),
+     &                        imin(3,k):imax(3,k)))
+                   Call MPI_SEND(tempC%var%array3(
+     &                        imin(1,k):imax(1,k),
+     &                        imin(2,k):imax(2,k),
+     &                        imin(3,k):imax(3,k)),
+     &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &                        MPI_COMM_AGRIF,code)
+                CASE(4)
+                datasize=SIZE(tempC%var%array4(
+     &                        imin(1,k):imax(1,k),
+     &                        imin(2,k):imax(2,k),
+     &                        imin(3,k):imax(3,k),
+     &                        imin(4,k):imax(4,k)))
+                   Call MPI_SEND(tempC%var%array4(
+     &                        imin(1,k):imax(1,k),
+     &                        imin(2,k):imax(2,k),
+     &                        imin(3,k):imax(3,k),
+     &                        imin(4,k):imax(4,k)),
+     &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &                        MPI_COMM_AGRIF,code)
+                CASE(5)
+                datasize=SIZE(tempC%var%array5(
+     &                        imin(1,k):imax(1,k),
+     &                        imin(2,k):imax(2,k),
+     &                        imin(3,k):imax(3,k),
+     &                        imin(4,k):imax(4,k),
+     &                        imin(5,k):imax(5,k)))
+                   Call MPI_SEND(tempC%var%array5(
+     &                        imin(1,k):imax(1,k),
+     &                        imin(2,k):imax(2,k),
+     &                        imin(3,k):imax(3,k),
+     &                        imin(4,k):imax(4,k),
+     &                        imin(5,k):imax(5,k)),
+     &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &                        MPI_COMM_AGRIF,code)
+                CASE(6)
+                datasize=SIZE(tempC%var%array6(
+     &                        imin(1,k):imax(1,k),
+     &                        imin(2,k):imax(2,k),
+     &                        imin(3,k):imax(3,k),
+     &                        imin(4,k):imax(4,k),
+     &                        imin(5,k):imax(5,k),
+     &                        imin(6,k):imax(6,k)))
+                   Call MPI_SEND(tempC%var%array6(
+     &                        imin(1,k):imax(1,k),
+     &                        imin(2,k):imax(2,k),
+     &                        imin(3,k):imax(3,k),
+     &                        imin(4,k):imax(4,k),
+     &                        imin(5,k):imax(5,k),
+     &                        imin(6,k):imax(6,k)),
+     &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &                        MPI_COMM_AGRIF,code)
+                END SELECT
+C
+            endif
+
+C
+      enddo
+C
+C
+C     Reception from others processors of the necessary part of the parent grid
+      do k = Agrif_ProcRank-1,0,-1
+C
+
+C
+            if (recvfromproc(k)) then
+C
+             IF (.Not.Associated(temprecv%var)) allocate(temprecv%var)
+             call Agrif_nbdim_allocation(temprecv%var,
+     &   imin_recv(:,k),imax_recv(:,k),nbdim)
+            SELECT CASE(nbdim)
+            CASE(1)
+              datasize=SIZE(temprecv%var%array1)
+              Call MPI_RECV(temprecv%var%array1,
+     &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &               MPI_COMM_AGRIF,statut,code)
+            CASE(2)           
+              datasize=SIZE(temprecv%var%array2)
+              Call MPI_RECV(temprecv%var%array2,
+     &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &               MPI_COMM_AGRIF,statut,code)
+            CASE(3)           
+              datasize=SIZE(temprecv%var%array3)
+              Call MPI_RECV(temprecv%var%array3,
+     &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &               MPI_COMM_AGRIF,statut,code)
+
+            CASE(4)
+              datasize=SIZE(temprecv%var%array4)
+              Call MPI_RECV(temprecv%var%array4,
+     &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &               MPI_COMM_AGRIF,statut,code)
+            CASE(5)
+              datasize=SIZE(temprecv%var%array5)
+              Call MPI_RECV(temprecv%var%array5,
+     &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &               MPI_COMM_AGRIF,statut,code)
+            CASE(6)
+              datasize=SIZE(temprecv%var%array6)
+              Call MPI_RECV(temprecv%var%array6,
+     &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &               MPI_COMM_AGRIF,statut,code)
+          END SELECT
+            
+            Call where_valtabtotab_mpi(tempCextend%var,
+     &             temprecv%var,imin_recv(:,k),imax_recv(:,k)
+     &            ,0.,nbdim)
+     
+                Call Agrif_nbdim_deallocation(temprecv%var,nbdim)
+C                deallocate(temprecv%var)
+            endif
+
+C
+      enddo
+                  
+          End Subroutine ExchangeSamelevel2
+          
+          Subroutine Agrif_Send_3Darray(tab3D,bounds,imin,imax,k)
+          integer, dimension(3) :: bounds, imin, imax
+          real,dimension(bounds(1):,bounds(2):,bounds(3):),target
+     &                             :: tab3D
+          integer :: k
+          integer :: etiquette = 100
+          integer :: datasize, code
+#include "mpif.h"   
+
+          datasize = SIZE(tab3D(
+     &                       imin(1):imax(1),
+     &                        imin(2):imax(2),
+     &                        imin(3):imax(3)))
+       
+                   Call MPI_SEND(tab3D(
+     &                        imin(1):imax(1),
+     &                        imin(2):imax(2),
+     &                        imin(3):imax(3)),
+     &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
+     &                        MPI_COMM_AGRIF,code)
+     
+         End Subroutine Agrif_Send_3Darray
+
+#else
+      Subroutine Agrif_mpp_empty()
+      End Subroutine Agrif_mpp_empty
+#endif
+
+      End Module Agrif_mpp
Index: /vendors/AGRIF/r_00/AGRIF_FILES/modsauv.F
===================================================================
--- /vendors/AGRIF/r_00/AGRIF_FILES/modsauv.F	(revision 1902)
+++ /vendors/AGRIF/r_00/AGRIF_FILES/modsauv.F	(revision 1902)
@@ -0,0 +1,863 @@
+!
+! $Id: modsauv.F 1200 2008-09-24 13:05:20Z rblod $
+!
+C     AGRIF (Adaptive Grid Refinement In Fortran)
+C
+C     Copyright (C) 2003 Laurent Debreu (Laurent.Debreu@imag.fr)
+C                        Christophe Vouland (Christophe.Vouland@imag.fr)    
+C
+C     This program is free software; you can redistribute it and/or modify
+C     it under the terms of the GNU General Public License as published by
+C     the Free Software Foundation; either version 2 of the License, or
+C     (at your option) any later version.
+C
+C     This program is distributed in the hope that it will be useful,
+C     but WITHOUT ANY WARRANTY; without even the implied warranty of
+C     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+C     GNU General Public License for more details.
+C
+C     You should have received a copy of the GNU General Public License
+C     along with this program; if not, write to the Free Software
+C     Foundation, Inc., 59 Temple Place- Suite 330, Boston, MA 02111-1307, USA.
+C
+C
+C
+CCC   Module Agrif_Save  
+C
+      Module Agrif_Save 
+C
+CCC   Description:   
+CCC   Module for the initialization by copy of the grids created by clustering.
+C
+C     Modules used:
+C      
+      Use Agrif_Types
+      Use Agrif_Link
+      Use Agrif_Arrays
+C
+      IMPLICIT NONE
+C
+      Contains
+C     Definition of procedures contained in this module.
+C
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Free_data_before
+C     **************************************************************************
+C
+      Subroutine Agrif_Free_data_before(Agrif_Gr)
+C
+CCC   Description:
+CCC   
+C
+CC    Method:
+CC            
+C
+C     Declarations:
+C
+      
+C      
+C     Pointer argument    
+      TYPE(Agrif_Grid),pointer   :: Agrif_Gr ! Pointer on the current grid
+      INTEGER i 
+C
+C   
+      do i = 1 , AGRIF_NbVariables
+         if ( .NOT. Agrif_Mygrid % tabvars(i) % var % restaure) then
+C 
+            if (associated(Agrif_Gr%tabvars(i)%var%array1)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%array1)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%array2)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%array2)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%array3)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%array3)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%array4)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%array4)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%array5)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%array5)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%array6)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%array6)
+            endif
+C
+            if (associated(Agrif_Gr%tabvars(i)%var%darray1)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%darray1)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%darray2)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%darray2)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%darray3)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%darray3)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%darray4)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%darray4)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%darray5)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%darray5)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%darray6)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%darray6)
+            endif
+C
+            if (associated(Agrif_Gr%tabvars(i)%var%larray1)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%larray1)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%larray2)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%larray2)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%larray3)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%larray3)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%larray4)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%larray4)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%larray5)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%larray5)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%larray6)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%larray6)
+            endif
+C
+            if (associated(Agrif_Gr%tabvars(i)%var%iarray1)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%iarray1)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%iarray2)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%iarray2)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%iarray3)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%iarray3)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%iarray4)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%iarray4)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%iarray5)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%iarray5)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%iarray6)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%iarray6)
+            endif
+C
+            if (associated(Agrif_Gr%tabvars(i)%var%carray1)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%carray1)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%carray2)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%carray2)
+            endif
+C
+            if (associated(Agrif_Gr%tabvars(i)%var%oldvalues2D)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%oldvalues2D)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%interpIndex)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%interpIndex)
+            endif
+            
+            if (associated(Agrif_Gr%tabvars(i)%var%posvar)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%posvar)
+            endif     
+            
+            if (associated(Agrif_Gr%tabvars(i)%var%interptab)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%interptab)
+            endif  
+            
+       endif
+           
+C
+       if (associated(Agrif_Gr%tabvars(i)%var%list_interp)) then
+         Call Agrif_Free_list_interp
+     &                          (Agrif_Gr%tabvars(i)%var%list_interp)
+       endif                             
+C
+       if ( .NOT. Agrif_Mygrid % tabvars(i) % var % restaure) then
+            Deallocate(Agrif_Gr%tabvars(i)%var)
+C 
+        endif
+      enddo
+C
+C 
+C
+      if ( Agrif_USE_ONLY_FIXED_GRIDS .EQ. 0 ) then
+         if ( Agrif_Probdim .EQ. 1 ) Deallocate(Agrif_Gr%tabpoint1D)
+         if ( Agrif_Probdim .EQ. 2 ) Deallocate(Agrif_Gr%tabpoint2D)
+         if ( Agrif_Probdim .EQ. 3 ) Deallocate(Agrif_Gr%tabpoint3D)
+      endif
+C          
+      Return
+C
+C
+      End Subroutine Agrif_Free_data_before
+C
+C
+      Recursive Subroutine Agrif_Free_list_interp(list_interp)
+      TYPE(Agrif_List_Interp_Loc), Pointer :: list_interp
+      
+      if (associated(list_interp%suiv))
+     &      Call Agrif_Free_list_interp(list_interp%suiv)
+     
+#ifdef AGRIF_MPI
+       Deallocate(list_interp%interp_loc%tab4t)
+       Deallocate(list_interp%interp_loc%memberinall)
+       Deallocate(list_interp%interp_loc%sendtoproc1)
+       Deallocate(list_interp%interp_loc%recvfromproc1)
+#endif
+       Deallocate(list_interp%interp_loc)
+       Deallocate(list_interp)
+       Nullify(list_interp)
+
+      End Subroutine Agrif_Free_list_interp      
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Free_data_after
+C     **************************************************************************
+C      
+      Subroutine Agrif_Free_data_after(Agrif_Gr)
+C
+CCC   Description:
+CCC   
+C
+CC    Method:
+CC            
+C
+C     Declarations:
+C
+C
+      
+C
+C     Pointer argument    
+      TYPE(Agrif_Grid),pointer   :: Agrif_Gr  ! Pointer on the current grid
+      INTEGER i
+C
+C      
+      do i = 1 , AGRIF_NbVariables
+         if ( Agrif_Mygrid % tabvars(i) % var % restaure) then
+C 
+            if (associated(Agrif_Gr%tabvars(i)%var%array1)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%array1)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%array2)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%array2)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%array3)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%array3)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%array4)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%array4)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%array5)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%array5)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%array6)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%array6)
+            endif
+!
+            if (associated(Agrif_Gr%tabvars(i)%var%darray1)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%darray1)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%darray2)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%darray2)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%darray3)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%darray3)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%darray4)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%darray4)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%darray5)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%darray5)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%darray6)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%darray6)
+            endif
+!
+            if (associated(Agrif_Gr%tabvars(i)%var%larray1)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%larray1)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%larray2)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%larray2)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%larray3)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%larray3)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%larray4)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%larray4)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%larray5)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%larray5)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%larray6)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%larray6)
+            endif
+!
+            if (associated(Agrif_Gr%tabvars(i)%var%iarray1)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%iarray1)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%iarray2)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%iarray2)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%iarray3)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%iarray3)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%iarray4)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%iarray4)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%iarray5)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%iarray5)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%iarray6)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%iarray6)
+            endif
+!
+            if (associated(Agrif_Gr%tabvars(i)%var%carray1)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%carray1)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%carray2)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%carray2)
+            endif
+!
+            if (associated(Agrif_Gr%tabvars(i)%var%oldvalues2D)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%oldvalues2D)
+            endif
+            if (associated(Agrif_Gr%tabvars(i)%var%interpIndex)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%interpIndex)
+            endif
+            
+            if (associated(Agrif_Gr%tabvars(i)%var%posvar)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%posvar)
+            endif     
+            
+            if (associated(Agrif_Gr%tabvars(i)%var%interptab)) then
+               Deallocate(Agrif_Gr%tabvars(i)%var%interptab)
+            endif                  
+!
+            Deallocate(Agrif_Gr%tabvars(i)%var)
+! 
+         endif
+      enddo
+C
+C      
+      Return
+C
+C
+      End Subroutine Agrif_Free_data_after      
+C
+C
+CC    **************************************************************************
+CCC   Subroutine AGRIF_CopyFromold_All
+C     **************************************************************************
+C
+      Recursive Subroutine AGRIF_CopyFromold_All(g,oldchildgrids)
+C
+CCC   Description:
+CCC   Routine called in the Agrif_Init_Hierarchy procedure 
+C       (Agrif_Clustering module). 
+C
+CC    Method:        
+C
+C     Declarations:
+C
+      
+C      
+C     Pointer argument    
+      TYPE(AGRIF_grid),pointer   :: g ! Pointer on the current grid
+      TYPE(AGRIF_pgrid),pointer   :: oldchildgrids
+C
+C     Local pointer
+      TYPE(AGRIF_pgrid),pointer  :: parcours ! Pointer for the recursive 
+                                             ! procedure 
+      REAL g_eps,eps,oldgrid_eps
+      INTEGER :: out
+      INTEGER :: iii
+C
+      out = 0
+C                                                                           
+      parcours => oldchildgrids  
+C
+      do while (associated(parcours))
+C 
+        if ((.NOT. g % fixed) .AND. (parcours % gr %oldgrid)) then
+C        
+            g_eps = huge(1.)
+            oldgrid_eps = huge(1.)
+            do iii = 1 , Agrif_Probdim
+               g_eps = min(g_eps,g % Agrif_d(iii))
+               oldgrid_eps = min(oldgrid_eps,
+     &                       parcours % gr % Agrif_d(iii))
+            enddo
+C
+            eps = min(g_eps,oldgrid_eps)/100.                  
+C
+            do iii = 1 , Agrif_Probdim
+
+               if (g % Agrif_d(iii) .LT. 
+     &             (parcours % gr % Agrif_d(iii) - eps)) then
+C            
+                   parcours => parcours % next
+C            
+                   out = 1
+C   
+                   Exit
+C             
+               endif
+C      
+            enddo
+        if ( out .EQ. 1 ) Cycle
+C
+            Call AGRIF_CopyFromOld(g,parcours%gr)
+C
+        endif
+C                     
+        Call Agrif_CopyFromold_All
+     &             (g, parcours % gr % child_grids)
+C        
+        parcours => parcours % next
+C        
+      enddo
+C
+C     
+      Return      
+C
+C
+      End Subroutine AGRIF_CopyFromold_All
+C
+C
+C      
+C     **************************************************************************
+CCC   Subroutine Agrif_CopyFromold
+C     **************************************************************************
+C      
+      Subroutine Agrif_CopyFromold(Agrif_New_Gr,Agrif_Old_Gr)
+C
+CCC   Description:
+CCC   Call to the Agrif_Copy procedure.
+C
+CC    Method:
+CC            
+C
+C     Declarations:
+C
+      
+C      
+C     Pointer argument    
+      TYPE(Agrif_Grid),Pointer   :: Agrif_New_Gr  ! Pointer on the current grid
+      TYPE(Agrif_Grid),Pointer :: Agrif_Old_Gr    ! Pointer on an old grid
+      INTEGER :: i
+C
+C      
+      do i = 1 , AGRIF_NbVariables
+         if ( Agrif_Mygrid % tabvars(i) % var % restaure ) then
+C
+            Call Agrif_Copy(Agrif_New_Gr,Agrif_Old_Gr,
+     &           Agrif_New_Gr % tabvars(i),
+     &           Agrif_Old_Gr % tabvars(i))
+C
+        endif
+      enddo
+
+C      
+C            
+      Return
+C
+C      
+      End Subroutine Agrif_CopyFromold
+C
+C
+CC
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Copy
+C     **************************************************************************
+C      
+      Subroutine Agrif_Copy(Agrif_New_Gr,Agrif_Old_Gr,New_Var,Old_Var)
+C     
+CCC   Description:
+CCC   Sets arguments of the Agrif_UpdatenD procedures, n being the number of 
+CCC   DIMENSION of the grid variable.
+C
+CC    Method:
+CC            
+C
+C     Declarations:
+C
+      
+C
+C     Pointer argument    
+      TYPE(Agrif_Grid),Pointer   :: Agrif_New_Gr   ! Pointer on the current grid
+      TYPE(Agrif_Grid), Pointer :: Agrif_Old_Gr    ! Pointer on an old grid
+      TYPE(Agrif_Pvariable) :: New_Var, Old_Var
+      INTEGER :: nbdim                  ! Number of dimensions of the current 
+                                        ! grid      
+      INTEGER,DIMENSION(6) :: pttabnew  ! Indexes of the first point in the 
+                                        ! domain
+      INTEGER,DIMENSION(6) :: petabnew  ! Indexes of the first point in the 
+                                        ! domain
+      INTEGER,DIMENSION(6) :: pttabold  ! Indexes of the first point in the 
+                                        ! domain
+      INTEGER,DIMENSION(6) :: petabold  ! Indexes of the first point in the 
+                                        ! domain
+      INTEGER,DIMENSION(6) :: nbtabold  ! Number of cells in each direction
+      
+      INTEGER,DIMENSION(6) :: nbtabnew  ! Number of cells in each direction   
+      TYPE(AGRIF_Variable), Pointer :: root ! Pointer on the variable of the 
+                                            ! root grid
+      REAL, DIMENSION(6) :: snew,sold
+      REAL, DIMENSION(6) :: dsnew,dsold                              
+      REAL :: eps
+      INTEGER :: n
+C
+C  
+      root => New_Var % var % root_var 
+C      
+      nbdim = root % nbdim
+C         
+      do n=1,nbdim
+C  
+        select case(root % interptab(n))
+C        
+        case('x')                
+C
+          pttabnew(n) = root % point(1)
+C        
+          pttabold(n) = root % point(1)
+C        
+          snew(n) = Agrif_New_Gr % Agrif_x(1)
+C
+          sold(n) = Agrif_Old_Gr % Agrif_x(1) 
+C        
+          dsnew(n) = Agrif_New_Gr % Agrif_d(1)
+C
+          dsold(n) = Agrif_Old_Gr % Agrif_d(1)
+C                      
+          if (root % posvar(n) .EQ. 1) then
+C          
+              petabnew(n) = pttabnew(n) + Agrif_New_Gr % nb(1)
+C          
+              petabold(n) = pttabold(n) + Agrif_Old_Gr % nb(1)         
+C        
+            else
+C          
+              petabnew(n) = pttabnew(n) + Agrif_New_Gr % nb(1) - 1
+C          
+              petabold(n) = pttabold(n) + Agrif_Old_Gr % nb(1) - 1
+C
+              snew(n) = snew(n) + dsnew(n)/2.
+C
+              sold(n) = sold(n) + dsold(n)/2.
+C        
+          endif           
+C        
+        case('y')
+C        
+          pttabnew(n) = root % point(2)
+C        
+          pttabold(n) = root % point(2)
+C        
+          snew(n) = Agrif_New_Gr % Agrif_x(2)
+C        
+          sold(n) = Agrif_Old_Gr % Agrif_x(2)
+C        
+          dsnew(n) = Agrif_New_Gr % Agrif_d(2)
+C        
+          dsold(n) = Agrif_Old_Gr % Agrif_d(2)
+C                
+          if (root % posvar(n) .EQ. 1) then
+C        
+              petabnew(n) = pttabnew(n) + Agrif_New_Gr % nb(2)
+C          
+              petabold(n) = pttabold(n) + Agrif_Old_Gr % nb(2)         
+C        
+            else
+C          
+              petabnew(n) = pttabnew(n) + Agrif_New_Gr % nb(2) - 1
+C          
+              petabold(n) = pttabold(n) + Agrif_Old_Gr % nb(2) - 1
+C
+              snew(n) = snew(n) + dsnew(n)/2.
+C
+              sold(n) = sold(n) + dsold(n)/2.                    
+C        
+          endif 
+C        
+        case('z')
+C        
+          pttabnew(n) = root % point(3)
+C        
+          pttabold(n) = root % point(3)
+C        
+          snew(n) = Agrif_New_Gr % Agrif_x(3)
+C        
+          sold(n) = Agrif_Old_Gr % Agrif_x(3)
+C        
+          dsnew(n) = Agrif_New_Gr % Agrif_d(3)
+C        
+          dsold(n) = Agrif_Old_Gr % Agrif_d(3)
+C                
+          if (root % posvar(n) .EQ. 1) then
+C        
+              petabnew(n) = pttabnew(n) + Agrif_New_Gr % nb(3)
+C          
+              petabold(n) = pttabold(n) + Agrif_Old_Gr % nb(3)         
+C        
+            else
+C          
+             petabnew(n) = pttabnew(n) + Agrif_New_Gr % nb(3) - 1
+C          
+             petabold(n) = pttabold(n) + Agrif_Old_Gr % nb(3) - 1
+C
+             snew(n) = snew(n) + dsnew(n)/2.
+C
+             sold(n) = sold(n) + dsold(n)/2.                   
+C        
+          endif
+C          
+        case('N')
+C        
+          Call Agrif_nbdim_Get_bound(New_Var%var,
+     &                           pttabnew(n),petabnew(n),
+     &                           n,nbdim)
+C        
+          pttabold(n) = pttabnew(n)
+C      
+          petabold(n) = petabnew(n)
+C              
+          snew(n) = 0.
+C      
+          sold(n) = 0. 
+C      
+          dsnew(n) = 1.
+C      
+          dsold(n) = 1.
+C        
+        end select
+C      
+      enddo
+C      
+      do n = 1,nbdim
+C      
+        nbtabnew(n) = petabnew(n) - pttabnew(n)
+C      
+        nbtabold(n) = petabold(n) - pttabold(n)      
+C 
+      enddo      
+C
+      eps = min(minval(dsnew(1:nbdim)),minval(dsold(1:nbdim)))
+C     
+      eps = eps/100.      
+C      
+      do n = 1,nbdim
+C      
+        if (snew(n) .GT. (sold(n)+dsold(n)*nbtabold(n)+eps)) Return
+C      
+        if ((snew(n)+dsnew(n)*nbtabnew(n)-eps) .LT. sold(n)) Return
+C      
+      enddo
+C            
+C
+      Call AGRIF_CopynD
+     &        (New_Var,Old_Var,pttabold,petabold,pttabnew,petabnew,
+     &         sold,snew,dsold,dsnew,nbdim) 
+C      
+C 
+      Return
+C      
+C
+      End Subroutine Agrif_Copy
+C
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_CopynD
+C     **************************************************************************
+C      
+      Subroutine Agrif_CopynD(New_Var,Old_Var,pttabold,petabold,
+     &                        pttabnew,petabnew,sold,snew,dsold,
+     &                        dsnew,nbdim)
+C     
+CCC   Description:
+CCC   Copy of the nD New_Var variable from the nD Old_Var variable.
+C
+CC    Method:
+CC            
+C
+C     Declarations:
+C
+      
+C
+      INTEGER :: nbdim
+      TYPE(Agrif_Pvariable) :: New_Var, Old_Var     
+      INTEGER,DIMENSION(nbdim) :: pttabnew 
+      INTEGER,DIMENSION(nbdim) :: petabnew
+      INTEGER,DIMENSION(nbdim) :: pttabold
+      INTEGER,DIMENSION(nbdim) :: petabold      
+      REAL, DIMENSION(nbdim) :: snew,sold
+      REAL, DIMENSION(nbdim) :: dsnew,dsold 
+C
+      INTEGER :: i,j,k,l,m,n,i0,j0,k0,l0,m0,n0
+C
+      REAL, DIMENSION(nbdim) :: dim_gmin,dim_gmax
+      REAL, DIMENSION(nbdim) :: dim_newmin,dim_newmax
+      REAL, DIMENSION(nbdim) :: dim_min
+      INTEGER, DIMENSION(nbdim) :: ind_gmin,ind_newmin
+      INTEGER, DIMENSION(nbdim) ::  ind_newmax
+C               
+C
+      do i = 1,nbdim
+C      
+        dim_gmin(i) = sold(i)
+        dim_gmax(i) = sold(i) + (petabold(i)-pttabold(i)) * dsold(i)
+C 
+        dim_newmin(i) = snew(i)
+        dim_newmax(i) = snew(i) + (petabnew(i)-pttabnew(i)) * dsnew(i)
+C
+      enddo         
+C
+      do i = 1,nbdim
+C  
+        if (dim_gmax(i) .LT. dim_newmin(i)) Return
+C      
+        if (dim_gmin(i) .GT. dim_newmax(i)) Return
+C
+      enddo
+C
+C
+      do i = 1,nbdim
+C 
+        ind_newmin(i) = pttabnew(i) - floor(-(max(dim_gmin(i),
+     &                      dim_newmin(i))-dim_newmin(i))/dsnew(i)) 
+C      
+        dim_min(i) = snew(i) + (ind_newmin(i)-pttabnew(i))*dsnew(i)
+C      
+        ind_gmin(i) = pttabold(i) + nint((dim_min(i)-
+     &                dim_gmin(i))/dsold(i))      
+C
+        ind_newmax(i) = pttabnew(i) 
+     &                  + int((min(dim_gmax(i),dim_newmax(i))
+     &                         -dim_newmin(i))/dsnew(i))
+C
+      enddo 
+C
+C
+C
+      SELECT CASE (nbdim)
+      CASE (1)
+         i0 = ind_gmin(1)
+         do i = ind_newmin(1),ind_newmax(1)
+            New_Var % var % array1(i) =
+     &      Old_Var % var % array1(i0)
+            New_Var % var % restore1D(i) = 1   
+         i0 = i0 + int(dsnew(1)/dsold(1))
+         enddo
+      CASE (2)
+        i0 = ind_gmin(1)
+        do i = ind_newmin(1),ind_newmax(1)
+        j0 = ind_gmin(2)
+        do j = ind_newmin(2),ind_newmax(2)
+           New_Var % var % array2(i,j) =
+     &            Old_Var % var % array2(i0,j0)
+           New_Var % var % restore2D(i,j) = 1
+               j0 = j0 + int(dsnew(2)/dsold(2))
+        enddo
+        i0 = i0 + int(dsnew(1)/dsold(1))
+        enddo
+      CASE (3)
+        i0 = ind_gmin(1)
+        do i = ind_newmin(1),ind_newmax(1)
+        j0 = ind_gmin(2)
+        do j = ind_newmin(2),ind_newmax(2)
+        k0 = ind_gmin(3)
+        do k = ind_newmin(3),ind_newmax(3)
+           New_Var % var % array3(i,j,k) =
+     &                  Old_Var % var % array3(i0,j0,k0)
+           New_Var % var % restore3D(i,j,k) = 1   
+                     k0 = k0 + int(dsnew(3)/dsold(3))
+        enddo
+        j0 = j0 + int(dsnew(2)/dsold(2))
+        enddo
+        i0 = i0 + int(dsnew(1)/dsold(1))
+        enddo
+      CASE (4)
+        i0 = ind_gmin(1)
+        do i = ind_newmin(1),ind_newmax(1)
+        j0 = ind_gmin(2)
+        do j = ind_newmin(2),ind_newmax(2)
+        k0 = ind_gmin(3)
+        do k = ind_newmin(3),ind_newmax(3)
+        l0 = ind_gmin(4)
+        do l = ind_newmin(4),ind_newmax(4) 
+           New_Var % var % array4(i,j,k,l) =
+     &                        Old_Var % var % array4(i0,j0,k0,l0)
+           New_Var % var % restore4D(i,j,k,l) = 1   
+        l0 = l0 + int(dsnew(4)/dsold(4))
+        enddo
+        k0 = k0 + int(dsnew(3)/dsold(3))
+        enddo
+        j0 = j0 + int(dsnew(2)/dsold(2))
+        enddo
+        i0 = i0 + int(dsnew(1)/dsold(1))
+        enddo
+      CASE (5)
+        i0 = ind_gmin(1)
+        do i = ind_newmin(1),ind_newmax(1)
+        j0 = ind_gmin(2)
+        do j = ind_newmin(2),ind_newmax(2)
+        k0 = ind_gmin(3)
+        do k = ind_newmin(3),ind_newmax(3)
+        l0 = ind_gmin(4)
+        do l = ind_newmin(4),ind_newmax(4) 
+        m0 = ind_gmin(5)
+        do m = ind_newmin(5),ind_newmax(5)
+           New_Var % var % array5(i,j,k,l,m) =
+     &                        Old_Var % var % array5(i0,j0,k0,l0,m0)
+           New_Var % var % restore5D(i,j,k,l,m) = 1
+        m0 = m0 + int(dsnew(5)/dsold(5)) 
+        enddo
+        l0 = l0 + int(dsnew(4)/dsold(4))
+        enddo
+        k0 = k0 + int(dsnew(3)/dsold(3))
+        enddo
+        j0 = j0 + int(dsnew(2)/dsold(2))
+        enddo
+        i0 = i0 + int(dsnew(1)/dsold(1))
+        enddo
+      CASE (6)
+        i0 = ind_gmin(1)
+        do i = ind_newmin(1),ind_newmax(1)
+        j0 = ind_gmin(2)
+        do j = ind_newmin(2),ind_newmax(2)
+        k0 = ind_gmin(3)
+        do k = ind_newmin(3),ind_newmax(3)
+        l0 = ind_gmin(4)
+        do l = ind_newmin(4),ind_newmax(4) 
+        m0 = ind_gmin(5)
+        do m = ind_newmin(5),ind_newmax(5)
+        n0 = ind_gmin(6)
+        do n = ind_newmin(6),ind_newmax(6)
+           New_Var % var % array6(i,j,k,l,m,n) =
+     &                        Old_Var % var % array6(i0,j0,k0,l0,m0,n0)
+           New_Var % var % restore6D(i,j,k,l,m,n) = 1
+        n0 = n0 + int(dsnew(6)/dsold(6)) 
+        enddo
+        m0 = m0 + int(dsnew(5)/dsold(5)) 
+        enddo
+        l0 = l0 + int(dsnew(4)/dsold(4))
+        enddo
+        k0 = k0 + int(dsnew(3)/dsold(3))
+        enddo
+        j0 = j0 + int(dsnew(2)/dsold(2))
+        enddo
+        i0 = i0 + int(dsnew(1)/dsold(1))
+        enddo
+      END SELECT
+C           
+      Return
+C
+C
+      End Subroutine Agrif_CopynD                    
+C
+C
+C
+      End module Agrif_Save
Index: /vendors/AGRIF/r_00/AGRIF_FILES/modtypes.F
===================================================================
--- /vendors/AGRIF/r_00/AGRIF_FILES/modtypes.F	(revision 1902)
+++ /vendors/AGRIF/r_00/AGRIF_FILES/modtypes.F	(revision 1902)
@@ -0,0 +1,448 @@
+C     Agrif (Adaptive Grid Refinement In Fortran)
+C
+C     Copyright (C) 2003 Laurent Debreu (Laurent.Debreu@imag.fr)
+C                        Christophe Vouland (Christophe.Vouland@imag.fr)    
+C
+C     This program is free software; you can redistribute it and/or modify
+C     it under the terms of the GNU General Public License as published by
+C     the Free Software Foundation; either version 2 of the License, or
+C     (at your option) any later version.
+C
+C     This program is distributed in the hope that it will be useful,
+C     but WITHOUT ANY WARRANTY; without even the implied warranty of
+C     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+C     GNU General Public License for more details.
+C
+C     You should have received a copy of the GNU General Public License
+C     along with this program; if not, write to the Free Software
+C     Foundation, Inc., 59 Temple Place-Suite 330, Boston, MA 02111-1307, USA.
+C
+C
+C
+CCC   Module Agrif_types  
+C
+      Module Agrif_types 
+C
+CCC   Description:
+CCC   Definition of data types used in Agrif, of several variables and
+C        PARAMETERs.     
+C
+      IMPLICIT NONE
+      
+C     Maximum refinement ratio
+
+      INTEGER, PARAMETER :: Agrif_MaxRaff = 7
+      
+C     Maximum number of grids of the hierarchy
+      INTEGER, PARAMETER :: Agrif_NbMaxGrids = 10
+                  
+C     MPI Communicator
+      INTEGER :: mpi_comm_agrif
+C
+C     **************************************************************************
+CCC   TYPE Agrif_LRECTANGLE
+C     **************************************************************************
+C
+CCC   Description:
+CCC   Data TYPE allowing a grid to reach a grid on the same level or its child
+CCC   grids.
+C
+      TYPE Agrif_lrectangle  
+           TYPE(Agrif_rectangle) , Pointer :: r    ! to reach a child grid
+           TYPE(Agrif_lrectangle), Pointer :: next ! to reach a grid on the 
+                                                   !    same level
+      End TYPE Agrif_lrectangle  
+C
+C     **************************************************************************
+CCC   TYPE Agrif_RECTANGLE: 
+C     **************************************************************************
+C
+CCC   Description:
+CCC   Data TYPE to define several CHARACTERistics of a grid (number,position,
+CCC   time and space refinement factors,...). 
+C
+      TYPE Agrif_rectangle
+           INTEGER                         :: number      ! Number of the grid
+           ! Number of child grids 
+           INTEGER                         :: nbgridchild 
+           ! Minimal position in the x,y and z direction
+           INTEGER, DIMENSION(3)           :: imin        
+           ! Maximal position in the x,y and z direction 
+           INTEGER, DIMENSION(3)           :: imax 
+           ! Space refinement factor in the x,y and z direction  
+           INTEGER, DIMENSION(3)           :: spaceref    
+           ! Time refinement factor in the x,y and z direction
+           INTEGER, DIMENSION(3)           :: timeref     
+           ! Pointer to reach a grid on  the same level or a child grid
+           TYPE(Agrif_lrectangle), Pointer :: childgrids  
+      End TYPE Agrif_rectangle  
+C
+C
+C
+C     **************************************************************************
+CCC   TYPE Agrif_PGrid
+C     **************************************************************************
+C
+CCC   Description:
+CCC   Data TYPE to go over the grid hierarchy (used for the creation of this 
+CCC   grid hierarchy and during the time integration).
+C 
+      TYPE Agrif_pgrid  
+           ! allows to reach a child grid  
+           TYPE(Agrif_grid) , Pointer :: gr
+           ! allows to reach the grids of the same level 
+           TYPE(Agrif_pgrid), Pointer :: next 
+      End TYPE Agrif_pgrid 
+C
+C
+C
+C     **************************************************************************
+CCC   TYPE Agrif_PVariable
+C     **************************************************************************
+C
+CCC   Description:
+CCC   Data TYPE to define a grid variable.
+C
+      TYPE Agrif_PVariable 
+           ! This field allows to get the various CHARACTERistics 
+           !   of the variable (defined by the Agrif_Variable data TYPE)
+           TYPE(Agrif_Variable) , Pointer :: var  
+           ! Pointer on the parent grid
+           TYPE(Agrif_PVariable), Pointer :: parent_var 
+      End TYPE Agrif_PVariable 
+C
+C     **************************************************************************
+CCC   TYPE Agrif_Grid
+C     **************************************************************************
+C
+CCC   Description:
+CCC   Data TYPE to define a grid (position, space and time refinement factors).
+C
+      TYPE Agrif_grid  
+           ! pointer on the parent grid 
+           TYPE(Agrif_grid)                    ,Pointer :: parent      
+           ! pointer on the child grids 
+           TYPE(Agrif_pgrid)                   ,Pointer :: child_grids 
+           ! List of the grid variables   
+           TYPE(Agrif_PVariable), DIMENSION(:) ,Pointer :: tabvars     
+C
+           ! Global x,y and z position
+           REAL    ,DIMENSION(3)                   :: Agrif_x   
+           ! Global space step in the x,y and z direction
+           REAL    ,DIMENSION(3)                   :: Agrif_d
+           ! number of cells in the x,y and z direction
+           INTEGER ,DIMENSION(3)                   :: nb        
+           ! minimal position in the x,y and z direction
+           INTEGER ,DIMENSION(3)                   :: ix        
+           ! Space refinement factor in the x,y and z direction
+           INTEGER ,DIMENSION(3)                   :: spaceref  
+           ! Time refinement factor in the x,y and z direction 
+           INTEGER ,DIMENSION(3)                   :: timeref   
+           INTEGER ,DIMENSION(:)          ,Pointer :: restore1D   
+           INTEGER ,DIMENSION(:,:)        ,Pointer :: restore2D   
+           INTEGER ,DIMENSION(:,:,:)      ,Pointer :: restore3D 
+           INTEGER ,DIMENSION(:,:,:,:)    ,Pointer :: restore4D
+           INTEGER ,DIMENSION(:,:,:,:,:)  ,Pointer :: restore5D
+           INTEGER ,DIMENSION(:,:,:,:,:,:),Pointer :: restore6D
+           ! number of time step  
+           INTEGER                                 :: ngridstep 
+           INTEGER                                 :: rank  
+           !moving grid id
+           INTEGER                                 :: grid_id
+           ! number of the grid 
+           INTEGER                                 :: fixedrank 
+           ! fixed or moving grid ?  
+           LOGICAL                                 :: fixed     
+           LOGICAL                                 :: oldgrid   
+C          LOGICALs indicating if the current grid has a common border 
+C             with the root coarse grid
+           LOGICAL ,DIMENSION(3)                   :: NearRootBorder
+           LOGICAL ,DIMENSION(3)                   :: DistantRootBorder
+C          Arrays for adaptive grid refinement
+           REAL    ,DIMENSION(:)          ,Pointer :: valtabpoint1D
+           REAL    ,DIMENSION(:,:)        ,Pointer :: valtabpoint2D
+           REAL    ,DIMENSION(:,:,:)      ,Pointer :: valtabpoint3D
+           INTEGER ,DIMENSION(:)          ,Pointer :: tabpoint1D
+           INTEGER ,DIMENSION(:,:)        ,Pointer :: tabpoint2D
+           INTEGER ,DIMENSION(:,:,:)      ,Pointer :: tabpoint3D
+           Type(Agrif_List_Variables), Pointer     :: variables=>NULL()
+           INTEGER                                 :: NbVariables = 0
+           Type(Agrif_Flux), Pointer               :: fluxes => NULL()
+      End TYPE Agrif_grid
+C
+C     **************************************************************************
+CCC   TYPE Agrif_VARIABLE
+C     **************************************************************************
+C     
+CCC   Description:
+CCC   Data TYPE to CHARACTERize a grid variable.   
+C
+      TYPE Agrif_Variable 
+         CHARACTER*80 :: variablename
+C       
+         ! Pointer on the variable of the root grid 
+         TYPE(Agrif_Variable), Pointer :: root_var 
+C
+         ! index of the first point in the REAL domain (x,y and z direction)
+         INTEGER     ,DIMENSION(6)          :: point
+         ! position of the variable on the cell (1 for the boarder of 
+         !    the edge, 2 for the center)
+         INTEGER     ,DIMENSION(:) ,Pointer :: posvar      => NULL() 
+         ! Indication for the space interpolation (module Agrif_Boundary)
+         INTEGER                   ,Pointer :: interpIndex => NULL() 
+         ! number of DIMENSIONs of the grid variable
+         INTEGER                            :: nbdim = 0             
+         ! Array indicating the TYPE of DIMENSION (space or not) for 
+         !    each of them 
+         CHARACTER(6),DIMENSION(:) ,Pointer :: interptab   => NULL() 
+C        Arrays containing the values of the grid variables (REAL)
+         REAL                                    :: array0 
+         REAL   , DIMENSION(:)          ,Pointer :: array1    => NULL()
+         REAL   , DIMENSION(:,:)        ,Pointer :: array2    => NULL()
+         REAL   , DIMENSION(:,:,:)      ,Pointer :: array3    => NULL()
+         REAL   , DIMENSION(:,:,:,:)    ,Pointer :: array4    => NULL()
+         REAL   , DIMENSION(:,:,:,:,:)  ,Pointer :: array5    => NULL()
+         REAL   , DIMENSION(:,:,:,:,:,:),Pointer :: array6    => NULL()
+C        Arrays containing the values of the grid variables (REAL*8)
+         REAL*8                                 :: darray0
+         REAL*8, DIMENSION(:)          ,Pointer :: darray1   => NULL()
+         REAL*8, DIMENSION(:,:)        ,Pointer :: darray2   => NULL()
+         REAL*8, DIMENSION(:,:,:)      ,Pointer :: darray3   => NULL()
+         REAL*8, DIMENSION(:,:,:,:)    ,Pointer :: darray4   => NULL()
+         REAL*8, DIMENSION(:,:,:,:,:)  ,Pointer :: darray5   => NULL()
+         REAL*8, DIMENSION(:,:,:,:,:,:),Pointer :: darray6   => NULL()
+C        Arrays containing the values of the grid variables (REAL*4)
+         REAL*4                                 :: sarray0
+         REAL*4, DIMENSION(:)          ,Pointer :: sarray1   => NULL()
+         REAL*4, DIMENSION(:,:)        ,Pointer :: sarray2   => NULL()
+         REAL*4, DIMENSION(:,:,:)      ,Pointer :: sarray3   => NULL()
+         REAL*4, DIMENSION(:,:,:,:)    ,Pointer :: sarray4   => NULL()
+         REAL*4, DIMENSION(:,:,:,:,:)  ,Pointer :: sarray5   => NULL()
+         REAL*4, DIMENSION(:,:,:,:,:,:),Pointer :: sarray6   => NULL()
+C        Arrays containing the values of the grid variables (LOGICAL)
+         LOGICAL                                 :: larray0
+         LOGICAL, DIMENSION(:)          ,Pointer :: larray1   => NULL()
+         LOGICAL, DIMENSION(:,:)        ,Pointer :: larray2   => NULL()
+         LOGICAL, DIMENSION(:,:,:)      ,Pointer :: larray3   => NULL()
+         LOGICAL, DIMENSION(:,:,:,:)    ,Pointer :: larray4   => NULL()
+         LOGICAL, DIMENSION(:,:,:,:,:)  ,Pointer :: larray5   => NULL()
+         LOGICAL, DIMENSION(:,:,:,:,:,:),Pointer :: larray6   => NULL()
+C         Arrays containing the values of the grid variables (INTEGER)   
+         INTEGER                                 :: iarray0
+         INTEGER, DIMENSION(:)          ,Pointer :: iarray1   => NULL()
+         INTEGER, DIMENSION(:,:)        ,Pointer :: iarray2   => NULL()
+         INTEGER, DIMENSION(:,:,:)      ,Pointer :: iarray3   => NULL()
+         INTEGER, DIMENSION(:,:,:,:)    ,Pointer :: iarray4   => NULL()
+         INTEGER, DIMENSION(:,:,:,:,:)  ,Pointer :: iarray5   => NULL()
+         INTEGER, DIMENSION(:,:,:,:,:,:),Pointer :: iarray6   => NULL()
+C
+         INTEGER, DIMENSION(:)          ,Pointer :: restore1D => NULL()
+         INTEGER, DIMENSION(:,:)        ,Pointer :: restore2D => NULL()
+         INTEGER, DIMENSION(:,:,:)      ,Pointer :: restore3D => NULL()
+         INTEGER, DIMENSION(:,:,:,:)    ,Pointer :: restore4D => NULL()
+         INTEGER, DIMENSION(:,:,:,:,:)  ,Pointer :: restore5D => NULL()
+         INTEGER, DIMENSION(:,:,:,:,:,:),Pointer :: restore6D => NULL()
+C   
+         CHARACTER(2050)                          :: carray0
+         CHARACTER(200), DIMENSION(:)    ,Pointer :: carray1   => NULL()
+         CHARACTER(200), DIMENSION(:,:)  ,Pointer :: carray2   => NULL()
+C
+         ! Array used for the time interpolation
+         REAL   , DIMENSION(:,:)      ,Pointer :: oldvalues2D => NULL()
+
+         ! if the variable should be restore -> =1
+         LOGICAL :: restaure = .FALSE.
+         ! the interpolation should be made in any case
+         LOGICAL :: Interpolationshouldbemade = .FALSE. 
+         INTEGER :: bcinf ! option bc
+         INTEGER :: bcsup ! option bc
+         INTEGER, DIMENSION(6) :: updateinf ! option update
+         INTEGER, DIMENSION(6) :: updatesup ! option update         
+         INTEGER, DIMENSION(6,6) :: bcTYPEinterp ! option bcinterp
+         INTEGER, DIMENSION(6) :: TYPEinterp ! option interp
+         INTEGER, DIMENSION(6) :: TYPEupdate ! option update
+         
+         INTEGER, DIMENSION(6) :: lb, ub
+         
+         Type(Agrif_List_Interp_Loc), Pointer :: list_interp => NULL()
+         Type(Agrif_List_Interp_Loc), Pointer :: list_update => NULL()
+C
+      End TYPE Agrif_Variable 
+      
+      Type Agrif_Interp_Loc
+      integer,dimension(6) :: pttab,petab,
+     &                          pttab_Child,pttab_Parent = -99
+      integer,dimension(6) :: indmin, indmax
+      INTEGER,DIMENSION(6)    :: pttruetab,cetruetab
+      logical :: member, memberin      
+#if !defined AGRIF_MPI      
+      integer,dimension(6) :: indminglob,indmaxglob
+#else
+      integer,dimension(6) :: indminglob2,indmaxglob2
+      INTEGER,DIMENSION(6,2,2) :: parentarray
+      INTEGER,DIMENSION(:,:,:), POINTER :: tab4t
+      LOGICAL, DIMENSION(:), POINTER :: memberinall
+      INTEGER,DIMENSION(:,:,:), POINTER :: tab5t
+      LOGICAL, DIMENSION(:), POINTER :: memberinall2
+      LOGICAL, DIMENSION(:), POINTER :: sendtoproc1    
+      LOGICAL, DIMENSION(:), POINTER :: recvfromproc1      
+      LOGICAL, DIMENSION(:), POINTER :: sendtoproc2      
+      LOGICAL, DIMENSION(:), POINTER :: recvfromproc2      
+#endif      
+      End Type Agrif_Interp_Loc
+      
+      Type Agrif_List_Interp_Loc
+      Type(Agrif_Interp_Loc), Pointer :: interp_loc
+      Type(Agrif_List_Interp_Loc), Pointer :: suiv
+      End Type Agrif_List_Interp_Loc
+
+       TYPE Agrif_List_Variables
+         Type(Agrif_PVariable), Pointer :: pvar
+         Type(Agrif_List_Variables), Pointer :: nextvariable  => NULL()
+       END TYPE Agrif_List_Variables
+               
+       TYPE Agrif_Profile
+          character*80 :: profilename
+C
+         ! index of the first point in the REAL domain (x,y and z direction)
+         INTEGER     ,DIMENSION(6)          :: point
+         ! position of the variable on the cell (1 for the boarder of 
+         !    the edge, 2 for the center)
+         INTEGER     ,DIMENSION(:) ,Pointer :: posvar      => NULL() 
+         ! Indication for the space interpolation (module Agrif_Boundary)
+         INTEGER                   ,Pointer :: interpIndex => NULL() 
+         ! number of DIMENSIONs of the grid variable
+         INTEGER                            :: nbdim = 0             
+         ! Array indicating the TYPE of DIMENSION (space or not) for 
+         !    each of them 
+         CHARACTER(6),DIMENSION(:) ,Pointer :: interptab   => NULL() 
+         Type(Agrif_Variable), Pointer :: var
+         Type(Agrif_Profile), Pointer :: nextprofile  => NULL()
+       END TYPE Agrif_Profile
+       
+       Type(Agrif_Profile), Pointer :: Agrif_MyProfiles => NULL()
+           
+C  Boundaries Fluxes
+
+      Type Agrif_Flux
+        Character*80 fluxname
+        Type(Agrif_Variable), Pointer :: fluxtabx
+        Type(Agrif_Variable), Pointer :: fluxtaby
+        Type(Agrif_Variable), Pointer :: fluxtabz        
+        Type(Agrif_Profile), Pointer  :: profile
+        Logical :: Fluxallocated = .FALSE.
+        Type(Agrif_Flux), Pointer     :: nextflux => NULL()
+      End Type Agrif_Flux      
+C
+C     **************************************************************************
+CCC   Different PARAMETERs
+C     **************************************************************************
+      TYPE(Agrif_PVariable), DIMENSION(:) ,Pointer :: Agrif_tabvars
+C
+      ! this pointer always points on the root grid of the grid hierarchy
+      TYPE(Agrif_grid)  ,Pointer :: Agrif_Mygrid      
+      ! Pointer used in the Agrif_regrid subroutine (Agrif_Util module). 
+      !    It contains  the safeguard of the grid hierarchy.
+      TYPE(Agrif_pgrid) ,Pointer :: Agrif_oldmygrid   
+      ! pointer to the current grid (the link is done by using the
+      !    Agrif_Instance   procedure (module Agrif_Init)) 
+      TYPE(Agrif_grid)  ,Pointer :: Agrif_Curgrid
+      ! Pointer used in the Agrif_ChildGrid_to_ParentGrid and 
+      !    Agrif_ParentGrid_to_ChildGrid subroutines 
+      !    (Agrif_CurgridFunctions module). It contains the 
+      !    safeguard of the current grid hierarchy.
+      TYPE(Agrif_grid)  ,Pointer :: Agrif_saveCURGRID
+C
+      ! Problem DIMENSION
+      INTEGER               :: Agrif_Probdim
+      ! number of variables
+      INTEGER               :: Agrif_NbVariables
+      ! number of fixed grids in the grid hierarchy
+      INTEGER               :: Agrif_nbfixedgrids            
+      ! space refinement factor
+      INTEGER ,DIMENSION(3) :: Agrif_coeffref
+      ! time refinement factor
+      INTEGER ,DIMENSION(3) :: Agrif_coeffreft
+      ! LOGICAL to use special values on the parent grid
+      LOGICAL               :: Agrif_UseSpecialValue
+      ! LOGICAL to use special values on the parent grid
+      LOGICAL               :: Agrif_UseSpecialValueInUpdate
+      ! LOGICAL to use special values on the current grid
+      LOGICAL               :: Agrif_UseSpecialValueFineGrid
+      ! Special values on the parent grid
+      REAL                  :: Agrif_SpecialValue
+      ! Special values on the current grid
+      REAL                  :: Agrif_SpecialValueFineGrid
+C   clustering PARAMETERs
+      INTEGER               :: Agrif_Regridding
+      INTEGER               :: Agrif_Minwidth
+      REAL                  :: Agrif_Efficiency = 0.7
+      INTEGER               :: MaxSearch = 5
+      REAL    ,DIMENSION(3) :: Agrif_mind
+C     PARAMETERs for the interpolation of the child grids
+      ! linear interpolation
+      INTEGER ,PARAMETER    :: Agrif_linear=1
+      ! lagrange interpolation
+      INTEGER ,PARAMETER    :: Agrif_lagrange=2
+      ! spline interpolation
+      INTEGER ,PARAMETER    :: Agrif_eno=3
+      ! user s interpolation
+      INTEGER ,PARAMETER    :: Agrif_user_interp=4
+      ! constant interpolation
+      INTEGER ,PARAMETER    :: Agrif_constant=5
+      ! linear conservative interpolation 
+      INTEGER ,PARAMETER    :: Agrif_linearconserv=6
+      ! linear conservative interpolation       
+      INTEGER ,PARAMETER    :: Agrif_linearconservlim=7
+      INTEGER ,PARAMETER    :: Agrif_ppm=8 
+      INTEGER ,PARAMETER    :: Agrif_weno=9         
+C     PARAMETERs for the update of the parent grids      
+      INTEGER ,PARAMETER    :: Agrif_Update_Copy=1           ! copy
+      INTEGER ,PARAMETER    :: Agrif_Update_Average=2        ! average
+      INTEGER ,PARAMETER    :: Agrif_Update_Full_Weighting=3 ! full-weighting 
+C     Raffinement grid switch definition
+      ! Agrif_USE_ONLY_FIXED_GRIDS =1 if fixed grid mode
+      INTEGER               :: Agrif_USE_ONLY_FIXED_GRIDS    
+      ! Agrif_USE_FIXED_GRIDS = 1 if AMR mode + fixed grid 
+      !    else only AMR mode
+      INTEGER               :: Agrif_USE_FIXED_GRIDS         
+C
+#ifdef AGRIF_MPI
+      INTEGER :: Agrif_Nbprocs  ! Number of processors
+      INTEGER :: Agrif_ProcRank ! Rank of the current processor 
+      INTEGER :: Agrif_Group    ! Group associated to MPI_COMM_AGRIF
+      INTEGER :: Agrif_MPIPREC
+#endif
+C
+      contains
+C   
+      Integer Function agrif_ceiling(x)
+C             
+          Real :: x
+          Integer ::i 
+C
+          i = floor(x)
+C      
+          if( abs(x - i).le.0.0001 )then
+             agrif_ceiling = i
+          else
+             agrif_ceiling = i+1
+          endif      
+C
+      End Function
+C
+      Integer Function agrif_int(x)
+C             
+          Real :: x
+          Integer ::i 
+C
+          i = floor(x) + 1
+C      
+          if( abs(x - i).le.0.0001 )then
+             agrif_int = i
+          else
+             agrif_int = i-1
+          endif      
+C
+      End Function
+      End Module Agrif_TYPEs  
Index: /vendors/AGRIF/r_00/AGRIF_FILES/modupdate.F
===================================================================
--- /vendors/AGRIF/r_00/AGRIF_FILES/modupdate.F	(revision 1902)
+++ /vendors/AGRIF/r_00/AGRIF_FILES/modupdate.F	(revision 1902)
@@ -0,0 +1,2678 @@
+!
+! $Id: modupdate.F 1793 2010-01-06 19:20:12Z rblod $
+!
+C     AGRIF (Adaptive Grid Refinement In Fortran)
+C
+C     Copyright (C) 2003 Laurent Debreu (Laurent.Debreu@imag.fr)
+C                        Christophe Vouland (Christophe.Vouland@imag.fr)    
+C
+C     This program is free software; you can redistribute it and/or modify
+C     it under the terms of the GNU General Public License as published by
+C     the Free Software Foundation; either version 2 of the License, or
+C     (at your option) any later version.
+C
+C     This program is distributed in the hope that it will be useful,
+C     but WITHOUT ANY WARRANTY; without even the implied warranty of
+C     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+C     GNU General Public License for more details.
+C
+C     You should have received a copy of the GNU General Public License
+C     along with this program; if not, write to the Free Software
+C     Foundation, Inc., 59 Temple Place- Suite 330, Boston, MA 02111-1307, USA.
+C
+C
+C
+CCC   Module Agrif_Update
+C
+      Module Agrif_Update
+C
+CCC   Description:
+CCC   Module to update a parent grid from its child grids
+C
+C     Modules used:
+C   
+      Use Agrif_Updatebasic
+c      Use Agrif_Boundary
+      Use Agrif_Arrays
+      Use Agrif_CurgridFunctions
+      Use Agrif_Mask
+#ifdef AGRIF_MPI
+      Use Agrif_mpp
+#endif
+C
+      IMPLICIT NONE
+      logical, private :: precomputedone(7) = .FALSE.      
+C      
+      CONTAINS
+C     Define procedures contained in this module
+C
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Update_1d
+C     **************************************************************************
+C 
+      Subroutine Agrif_Update_1d(TypeUpdate,parent,child,tab,deb,fin,
+     &                           procname)
+C
+CCC   Description:
+CCC   Subroutine to update a 1D grid variable on the parent grid.
+C
+C     Declarations:
+C
+      
+C
+C     Arguments      
+      INTEGER, DIMENSION(6) :: TypeUpdate                  ! TYPE of update (copy or average)
+      TYPE(AGRIF_PVariable) :: parent        ! Variable on the parent grid
+      TYPE(AGRIF_PVariable) :: child         ! Variable on the child grid
+      TYPE(AGRIF_PVariable) :: childtemp     ! Temporary variable on the child
+      INTEGER, DIMENSION(6) :: deb,fin       ! Positions where interpolations 
+                                              ! are done on the fine grid       
+      External :: procname
+      Optional ::  procname      
+      REAL, DIMENSION(lbound(child%var%array1,1):
+     &                ubound(child%var%array1,1)), Target :: tab  ! Results
+C
+C
+C     Definition of a temporary AGRIF_PVariable data TYPE  
+      allocate(childtemp % var)
+C
+C     Pointer on the root variable
+      childtemp % var % root_var => child % var %root_var
+C      
+C     Number of dimensions of the grid variable
+      childtemp % var % nbdim = 1  
+C      
+C     Values on the current grid used for the update
+      childtemp % var % array1 => tab
+      
+      childtemp % var % lb = child % var % lb
+      childtemp % var % ub = child % var % ub             
+      
+C      childtemp % var % list_update => child%var%list_update
+             
+C
+     
+      IF (present(procname)) THEN
+      CALL Agrif_UpdateVariable
+     &     (TypeUpdate,parent,child,deb,fin,procname)
+      ELSE
+      CALL Agrif_UpdateVariable
+     &     (TypeUpdate,parent,child,deb,fin)
+      ENDIF     
+C      
+C      child % var % list_update => childtemp%var%list_update
+      
+      deallocate(childtemp % var)
+C
+C       
+      End Subroutine Agrif_Update_1D
+C
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Update_2d
+C     **************************************************************************
+C 
+
+      Subroutine Agrif_Update_2d(TypeUpdate,parent,child,tab,deb,fin,
+     &                           procname)
+C
+CCC   Description:
+CCC   Subroutine to update a 2D grid variable on the parent grid.
+C
+C     Declarations:
+C
+      
+C
+C     Arguments      
+      INTEGER, DIMENSION(6) :: TypeUpdate                  ! TYPE of update (copy or average)
+      TYPE(AGRIF_PVariable) :: parent        ! Variable on the parent grid
+      TYPE(AGRIF_PVariable) :: child         ! Variable on the child grid
+      TYPE(AGRIF_PVariable) :: childtemp     ! Temporary variable on the child
+      INTEGER, DIMENSION(6) :: deb,fin       ! Positions where interpolations  
+                                              ! are done on the fine grid 
+                                              
+      External :: procname
+      Optional ::  procname
+                                                          
+      REAL, DIMENSION(
+     &      lbound(child%var%array2,1):ubound(child%var%array2,1),
+     &      lbound(child%var%array2,2):ubound(child%var%array2,2)),
+     &      Target :: tab  ! Results
+C
+C
+C     Definition of a temporary AGRIF_PVariable data TYPE
+      allocate(childtemp % var)
+C
+C     Pointer on the root variable
+      childtemp % var % root_var => child % var %root_var
+C      
+C     Number of dimensions of the grid variable
+      childtemp % var % nbdim = 2  
+C      
+C     Values on the current grid used for the update
+      childtemp % var % array2 => tab 
+      
+      childtemp % var % lb = child % var % lb
+      childtemp % var % ub = child % var % ub             
+      
+C      childtemp % var % list_update => child%var%list_update      
+C
+      IF (present(procname)) THEN
+      CALL Agrif_UpdateVariable
+     &     (TypeUpdate,parent,child,deb,fin,procname)
+      ELSE
+      CALL Agrif_UpdateVariable
+     &     (TypeUpdate,parent,child,deb,fin)
+      ENDIF
+C      
+C      child % var % list_update => childtemp%var%list_update
+      
+      deallocate(childtemp % var)
+C
+C       
+      End Subroutine Agrif_Update_2D
+C
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Update_3d
+C     **************************************************************************
+C 
+      Subroutine Agrif_Update_3d(TypeUpdate,parent,child,tab,deb,fin,
+     &                           procname)
+C
+CCC   Description:
+CCC   Subroutine to update a 3D grid variable on the parent grid.
+C
+C     Declarations:
+C
+      
+C
+C     Arguments      
+      INTEGER, DIMENSION(6) :: TypeUpdate                  ! TYPE of update (copy or average)
+      TYPE(AGRIF_PVariable) :: parent        ! Variable on the parent grid
+      TYPE(AGRIF_PVariable) :: child         ! Variable on the child grid
+      TYPE(AGRIF_PVariable) :: childtemp     ! Temporary variable on the child
+      INTEGER, DIMENSION(6) :: deb,fin       ! Positions where interpolations 
+                                              ! are done on the fine grid    
+      External :: procname
+      Optional ::  procname
+                                                       
+      REAL, DIMENSION(
+     &      lbound(child%var%array3,1):ubound(child%var%array3,1),
+     &      lbound(child%var%array3,2):ubound(child%var%array3,2),
+     &      lbound(child%var%array3,3):ubound(child%var%array3,3)),
+     &      Target :: tab  ! Results    
+C
+C
+C     Definition of a temporary AGRIF_PVariable data TYPE  
+      allocate(childtemp % var)
+C
+C     Pointer on the root variable
+      childtemp % var % root_var => child % var %root_var
+C      
+C     Number of dimensions of the grid variable
+      childtemp % var % nbdim = 3  
+C      
+C     Values on the current grid used for the update
+      childtemp % var % array3 => tab     
+      
+      childtemp % var % lb = child % var % lb
+      childtemp % var % ub = child % var % ub  
+            
+      
+C      childtemp % var % list_update => child%var%list_update      
+C
+      IF (present(procname)) THEN
+      CALL Agrif_UpdateVariable
+     &     (TypeUpdate,parent,child,deb,fin,procname)
+      ELSE
+      CALL Agrif_UpdateVariable
+     &     (TypeUpdate,parent,child,deb,fin)
+      ENDIF
+C      
+C      child % var % list_update => childtemp%var%list_update
+      
+      DEALLOCATE(childtemp % var)
+C
+C       
+      End Subroutine Agrif_Update_3D
+C
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Update_4d
+C     **************************************************************************
+C 
+      Subroutine Agrif_Update_4d(TypeUpdate,parent,child,tab,deb,fin,
+     &                           procname)
+C
+CCC   Description:
+CCC   Subroutine to update a 4D grid variable on the parent grid.
+C
+C     Declarations:
+C
+      
+C
+C     Arguments      
+      INTEGER, DIMENSION(6) :: TypeUpdate                  ! TYPE of update (copy or average)
+      TYPE(AGRIF_PVariable) :: parent        ! Variable on the parent grid
+      TYPE(AGRIF_PVariable) :: child         ! Variable on the child grid
+      TYPE(AGRIF_PVariable) :: childtemp     ! Temporary variable on the child
+      INTEGER, DIMENSION(6) :: deb,fin       ! Positions where interpolations 
+                                              ! are done on the fine grid     
+      External :: procname
+      Optional ::  procname        
+      REAL, DIMENSION(
+     &      lbound(child%var%array4,1):ubound(child%var%array4,1),
+     &      lbound(child%var%array4,2):ubound(child%var%array4,2),
+     &      lbound(child%var%array4,3):ubound(child%var%array4,3),
+     &      lbound(child%var%array4,4):ubound(child%var%array4,4)),
+     &      Target :: tab  ! Results
+C
+C
+C     Definition of a temporary AGRIF_PVariable data TYPE  
+      allocate(childtemp % var)
+C
+C     Pointer on the root variable
+      childtemp % var % root_var => child % var %root_var
+C      
+C     Number of dimensions of the grid variable
+      childtemp % var % nbdim = 4  
+C      
+C     Values on the current grid used for the update
+      childtemp % var % array4 => tab     
+      
+      childtemp % var % lb = child % var % lb
+      childtemp % var % ub = child % var % ub  
+            
+      
+C      childtemp % var % list_update => child%var%list_update
+            
+C
+      IF (present(procname)) THEN
+      CALL Agrif_UpdateVariable
+     &     (TypeUpdate,parent,child,deb,fin,procname)
+      ELSE
+      CALL Agrif_UpdateVariable
+     &     (TypeUpdate,parent,child,deb,fin)
+      ENDIF
+
+C      child % var % list_update => childtemp%var%list_update      
+C
+      deallocate(childtemp % var)
+C
+C       
+      End Subroutine Agrif_Update_4D
+C
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Update_5d
+C     **************************************************************************
+C 
+      Subroutine Agrif_Update_5d(TypeUpdate,parent,child,tab,deb,fin,
+     &                           procname)
+C
+CCC   Description:
+CCC   Subroutine to update a 5D grid variable on the parent grid.
+C
+C     Declarations:
+C
+      
+C
+C     Arguments      
+      INTEGER, DIMENSION(6) :: TypeUpdate                  ! TYPE of update (copy or average)
+      TYPE(AGRIF_PVariable) :: parent        ! Variable on the parent grid
+      TYPE(AGRIF_PVariable) :: child         ! Variable on the child grid
+      TYPE(AGRIF_PVariable) :: childtemp     ! Temporary variable on the child
+      INTEGER, DIMENSION(6) :: deb,fin       ! Positions where interpolations 
+                                              ! are done on the fine grid     
+      External :: procname
+      Optional ::  procname
+              
+      REAL, DIMENSION(
+     &      lbound(child%var%array5,1):ubound(child%var%array5,1),
+     &      lbound(child%var%array5,2):ubound(child%var%array5,2),
+     &      lbound(child%var%array5,3):ubound(child%var%array5,3),
+     &      lbound(child%var%array5,4):ubound(child%var%array5,4),
+     &      lbound(child%var%array5,5):ubound(child%var%array5,5)),
+     &      Target :: tab  ! Results
+C
+C
+C     Definition of a temporary AGRIF_PVariable data TYPE  
+      allocate(childtemp % var)
+C
+C     Pointer on the root variable
+      childtemp % var % root_var => child % var %root_var
+C
+C     Number of dimensions of the grid variable
+      childtemp % var % nbdim = 5  
+C      
+C     Values on the current grid used for the update
+      childtemp % var % array5 => tab      
+      
+      childtemp % var % lb = child % var % lb
+      childtemp % var % ub = child % var % ub        
+      
+C      childtemp % var % list_update => child%var%list_update      
+C
+      IF (present(procname)) THEN
+      CALL Agrif_UpdateVariable
+     &     (TypeUpdate,parent,child,deb,fin,procname)
+      ELSE
+      CALL Agrif_UpdateVariable
+     &     (TypeUpdate,parent,child,deb,fin)
+      ENDIF
+      
+C      child % var % list_update => childtemp%var%list_update
+            
+C      
+      deallocate(childtemp % var)
+C
+C       
+      End Subroutine Agrif_Update_5D
+C
+C
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Update_6d
+C     **************************************************************************
+C 
+      Subroutine Agrif_Update_6d(TypeUpdate,parent,child,tab,deb,fin)
+C
+CCC   Description:
+CCC   Subroutine to update a 6D grid variable on the parent grid.
+C
+C     Declarations:
+C
+      
+C
+C     Arguments      
+      INTEGER, DIMENSION(6) :: TypeUpdate                  ! TYPE of update (copy or average)
+      TYPE(AGRIF_PVariable) :: parent        ! Variable on the parent grid
+      TYPE(AGRIF_PVariable) :: child         ! Variable on the child grid
+      TYPE(AGRIF_PVariable) :: childtemp     ! Temporary variable on the child
+      INTEGER, DIMENSION(6) :: deb,fin       ! Positions where interpolations 
+                                              ! are done on the fine grid       
+      REAL, DIMENSION(
+     &      lbound(child%var%array6,1):ubound(child%var%array6,1),
+     &      lbound(child%var%array6,2):ubound(child%var%array6,2),
+     &      lbound(child%var%array6,3):ubound(child%var%array6,3),
+     &      lbound(child%var%array6,4):ubound(child%var%array6,4),
+     &      lbound(child%var%array6,5):ubound(child%var%array6,5),
+     &      lbound(child%var%array6,6):ubound(child%var%array6,6)),
+     &      Target :: tab  ! Results
+C
+C
+C     Definition of a temporary AGRIF_PVariable data TYPE  
+      allocate(childtemp % var)
+C
+C     Pointer on the root variable
+      childtemp % var % root_var => child % var %root_var
+C      
+C     Number of dimensions of the grid variable
+      childtemp % var % nbdim = 6  
+C      
+C     Values on the current grid used for the update
+      childtemp % var % array6 => tab      
+      
+      childtemp % var % lb = child % var % lb
+      childtemp % var % ub = child % var % ub  
+            
+C      childtemp % var % list_update => child%var%list_update
+C
+      Call Agrif_UpdateVariable
+     &     (TypeUpdate,parent,child,deb,fin)
+     
+C      child % var % list_update => childtemp%var%list_update
+           
+C      
+      deallocate(childtemp % var)
+C
+C       
+      End Subroutine Agrif_Update_6D
+C
+C
+C
+C     **************************************************************************  
+C     Subroutine Agrif_UpdateVariable    
+C     **************************************************************************  
+C   
+      Subroutine Agrif_UpdateVariable(TypeUpdate,parent,child,deb,fin,
+     &                   procname)   
+C
+CCC   Description:
+CCC   Subroutine to set arguments of Agrif_UpdatenD, n being the number of
+C         dimensions of the grid variable.
+C
+CC    Declarations:
+C      
+c      
+C      
+C     Scalar argument
+      INTEGER, DIMENSION(6) :: TypeUpdate                  ! TYPE of update (copy or average)
+C     Data TYPE arguments
+      TYPE(AGRIF_PVariable) :: parent   ! Variable on the parent grid
+      TYPE(AGRIF_PVariable) :: child    ! Variable on the child grid 
+      INTEGER, DIMENSION(6) :: deb,fin       ! Positions where interpolations 
+                                        !    are calculated     
+      External :: procname
+      Optional ::  procname
+      
+C
+C     Local scalars      
+      INTEGER :: nbdim                  ! Number of dimensions of the current
+                                        !    grid
+      INTEGER ,DIMENSION(6) :: pttab_child  
+      INTEGER ,DIMENSION(6) :: petab_child      
+      INTEGER ,DIMENSION(6) :: pttab_parent  
+      REAL    ,DIMENSION(6) :: s_child,s_parent
+      REAL    ,DIMENSION(6) :: ds_child,ds_parent
+      INTEGER,DIMENSION(6)          :: loctab_Child ! Indicates if the child
+                                        !    grid has a common border with 
+                                        !    the root grid            
+      TYPE(AGRIF_Variable), Pointer :: root               ! Variable on the root grid
+      INTEGER,DIMENSION(6)          :: posvartab_Child    ! Position of the
+                                        !    variable on the cell
+      INTEGER,DIMENSION(6)          :: nbtab_Child        ! Number of the cells    
+      INTEGER :: n              
+      LOGICAL :: wholeupdate
+C
+C 
+
+      loctab_child(:) = 0
+C
+      root => child % var % root_var 
+      nbdim = root % nbdim
+C
+      do n = 1,nbdim
+        posvartab_child(n) = root % posvar(n)
+      enddo
+C      
+      
+      Call PreProcessToInterpOrUpdate(parent,child,
+     &             petab_Child(1:nbdim),
+     &             pttab_Child(1:nbdim),pttab_Parent(1:nbdim),
+     &             s_Child(1:nbdim),s_Parent(1:nbdim),
+     &             ds_Child(1:nbdim),ds_Parent(1:nbdim),
+     &             nbdim)
+C
+C
+      do n = 1,nbdim
+C
+        Select case(root % interptab(n))
+C
+          case('x') ! x DIMENSION
+C
+            nbtab_Child(n) = Agrif_Curgrid % nb(1)
+C
+          case('y') ! y DIMENSION      
+C
+            nbtab_Child(n) = Agrif_Curgrid % nb(2)
+C
+          case('z') ! z DIMENSION
+C
+            nbtab_Child(n) = Agrif_Curgrid % nb(3)
+C
+          case('N') ! No space DIMENSION      
+C
+            select case (nbdim) 
+C      
+              case(1)
+                nbtab_Child(n) = SIZE(child % var % array1,n) - 1
+              case(2)
+                nbtab_Child(n) = SIZE(child % var % array2,n) - 1
+              case(3)
+                nbtab_Child(n) = SIZE(child % var % array3,n) - 1
+              case(4)
+                nbtab_Child(n) = SIZE(child % var % array4,n) - 1
+              case(5)
+                nbtab_Child(n) = SIZE(child % var % array5,n) - 1  
+              case(6)
+                nbtab_Child(n) = SIZE(child % var % array6,n) - 1 
+C
+            end select
+C
+C           No interpolation but only a copy of the values of the grid variable      
+C      
+            posvartab_child(n) = 1
+            
+            loctab_child(n) = -3
+C
+        End select
+C
+      enddo
+      
+C     Call to a procedure of update according to the number of dimensions of
+C     the grid variable
+
+      wholeupdate = .FALSE.
+      
+      do n=1,nbdim
+      if (loctab_child(n) /= -3) then
+        if (deb(n)>fin(n)) wholeupdate = .TRUE.
+        if ((deb(n) == -99).AND.(deb(n)==fin(n))) wholeupdate=.TRUE.
+      endif
+      enddo
+     
+       IF (present(procname)) THEN
+
+          IF (wholeupdate) THEN
+
+          Call AGRIF_UpdateWhole
+     &         (TypeUpdate,parent,child,deb,fin,
+     &          pttab_Child(1:nbdim),pttab_Parent(1:nbdim),
+     &          nbtab_Child(1:nbdim),posvartab_Child(1:nbdim),
+     &          loctab_Child(1:nbdim),
+     &          s_Child(1:nbdim),s_Parent(1:nbdim),
+     &          ds_Child(1:nbdim),ds_Parent(1:nbdim),nbdim,procname)  
+         ELSE
+          Call AGRIF_UpdateBcnD
+     &         (TypeUpdate,parent,child,deb,fin,
+     &          pttab_Child(1:nbdim),pttab_Parent(1:nbdim),
+     &          nbtab_Child(1:nbdim),posvartab_Child(1:nbdim),
+     &          loctab_Child(1:nbdim),
+     &          s_Child(1:nbdim),s_Parent(1:nbdim),
+     &          ds_Child(1:nbdim),ds_Parent(1:nbdim),nbdim,procname)  
+         ENDIF
+       ELSE
+         IF (wholeupdate) THEN
+          Call AGRIF_UpdateWhole
+     &         (TypeUpdate,parent,child,deb,fin,
+     &          pttab_Child(1:nbdim),pttab_Parent(1:nbdim),
+     &          nbtab_Child(1:nbdim),posvartab_Child(1:nbdim),
+     &          loctab_Child(1:nbdim),
+     &          s_Child(1:nbdim),s_Parent(1:nbdim),
+     &          ds_Child(1:nbdim),ds_Parent(1:nbdim),nbdim)
+         ELSE
+          Call AGRIF_UpdateBcnD
+     &         (TypeUpdate,parent,child,deb,fin,
+     &          pttab_Child(1:nbdim),pttab_Parent(1:nbdim),
+     &          nbtab_Child(1:nbdim),posvartab_Child(1:nbdim),
+     &          loctab_Child(1:nbdim),
+     &          s_Child(1:nbdim),s_Parent(1:nbdim),
+     &          ds_Child(1:nbdim),ds_Parent(1:nbdim),nbdim)
+         ENDIF
+       ENDIF
+C
+      Return
+C
+C
+      End subroutine Agrif_UpdateVariable
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_UpdateWhole
+C     **************************************************************************               
+C
+      Subroutine AGRIF_UpdateWhole(TypeUpdate,parent,child,deb,fin,
+     &                           pttab_child,pttab_Parent,
+     &                           nbtab_Child,posvartab_Child,
+     &                           loctab_Child,
+     &                           s_Child,s_Parent,
+     &                           ds_Child,ds_Parent,nbdim,procname)
+C
+CCC   Description:
+CCC   Subroutine to calculate the boundary conditions for a nD grid variable on 
+CCC   a fine grid by using a space and time interpolations; it is called by the 
+CCC   Agrif_CorrectVariable procedure.
+C
+C
+C     Declarations:
+C
+      
+C
+#ifdef AGRIF_MPI
+C
+#include "mpif.h"
+C
+#endif
+C
+C     Arguments
+      INTEGER, DIMENSION(6) :: TypeUpdate            ! TYPE of update (copy or
+                                                     !    average) 
+      TYPE(AGRIF_PVariable)    :: parent             ! Variable on the parent
+                                                     !    grid
+      TYPE(AGRIF_PVariable)    :: child              ! Variable on the child
+                                                     !    grid 
+      INTEGER, DIMENSION(6) :: deb, fin
+      INTEGER                  :: nbdim              ! Number of dimensions of
+                                                     !    the grid variable
+      INTEGER,DIMENSION(nbdim) :: pttab_child        ! Index of the first point
+                                                     !    inside the domain for
+                                                     !    the parent grid
+                                                     !    variable
+      INTEGER,DIMENSION(nbdim) :: pttab_Parent       ! Index of the first point
+                                                     !    inside the domain for
+                                                     !    the child grid
+                                                     !    variable
+      INTEGER,DIMENSION(nbdim) :: nbtab_Child        ! Number of cells of the
+                                                     !    child grid
+      INTEGER,DIMENSION(nbdim) :: posvartab_Child    ! Position of the grid
+                                                     !    variable (1 or 2)
+      INTEGER,DIMENSION(nbdim) :: loctab_Child       ! Indicates if the child
+                                                     !    grid has a common
+                                                     !    border with the root
+                                                     !    grid
+      REAL   ,DIMENSION(nbdim) :: s_Child,s_Parent   ! Positions of the parent
+                                                     !    and child grids 
+      REAL   ,DIMENSION(nbdim) :: ds_Child,ds_Parent ! Space steps of the parent
+                                                     !    and child grids
+      External :: procname
+      Optional ::  procname      
+C
+C     Local variables     
+      INTEGER,DIMENSION(nbdim,2)   :: lubglob
+      INTEGER                      :: i                 
+      INTEGER,DIMENSION(nbdim,2,2) :: indtab         ! Arrays indicating the
+                                                     !    limits of the child
+      INTEGER,DIMENSION(nbdim,2,2) :: indtruetab     ! grid variable where
+                                                     !   boundary conditions are
+      integer :: coeffraf
+      INTEGER :: debloc, finloc
+C
+#ifdef AGRIF_MPI
+C
+      INTEGER,DIMENSION(nbdim)   :: lb,ub
+      INTEGER,DIMENSION(nbdim,2) :: iminmaxg
+      INTEGER                    :: code
+C
+#endif
+C      
+C
+C indtab contains the limits for the fine grid points that will be used
+C in the update scheme
+
+      DO i = 1, nbdim
+        coeffraf = nint(ds_Parent(i)/ds_Child(i))
+        debloc = 0
+        finloc = nbtab_Child(i)/coeffraf - 1
+
+        IF (posvartab_child(i) == 1) THEN
+           finloc = finloc - 1
+        ENDIF
+
+        IF (deb(i) > fin(i)) THEN
+          debloc = deb(i)
+          finloc = finloc - deb(i)
+        ENDIF
+
+        indtab(i,1,1) = pttab_child(i) + (debloc + 1) * coeffraf
+        indtab(i,1,2) = pttab_child(i) + (finloc + 1) * coeffraf
+
+        IF (posvartab_child(i) == 1) THEN
+          IF (TypeUpdate(i) .EQ. Agrif_Update_Full_Weighting) THEN
+            indtab(i,1,1) = indtab(i,1,1) - (coeffraf - 1)
+            indtab(i,1,2) = indtab(i,1,2) + (coeffraf - 1)        
+          ELSE IF (TypeUpdate(i) .NE. Agrif_Update_Copy) THEN
+            indtab(i,1,1) = indtab(i,1,1) - coeffraf / 2
+            indtab(i,1,2) = indtab(i,1,2) + coeffraf / 2
+          ENDIF
+        ELSE
+          indtab(i,1,1) = indtab(i,1,1) - coeffraf
+          indtab(i,1,2) = indtab(i,1,2) - 1
+          IF ((TypeUpdate(i) .EQ. Agrif_Update_Full_Weighting)
+     &                            .AND.(mod(coeffraf,2) == 1)) THEN
+            indtab(i,1,1) = indtab(i,1,1) - 1
+            indtab(i,1,2) = indtab(i,1,2) + 1
+          ENDIF
+        ENDIF
+        IF (loctab_child(i) == -3) THEN
+           indtab(i,1,1) = pttab_child(i)
+C
+               if (posvartab_child(i) == 1) then
+C
+               indtab(i,1,2) = pttab_child(i) + nbtab_child(i) 
+C
+               else
+C
+               indtab(i,1,2) = pttab_child(i) + nbtab_child(i) - 1
+               ENDIF
+        ENDIF
+      ENDDO
+
+C lubglob contains the global lbound and ubound of the child array
+C lubglob(:,1) : global lbound for each dimension
+C lubglob(:,2) : global lbound for each dimension
+
+#if !defined AGRIF_MPI
+        Call Agrif_nbdim_Get_bound_dimension(child % var,lubglob(:,1),
+     &               lubglob(:,2),nbdim)
+C
+#else
+C     
+        Call Agrif_nbdim_Get_bound_dimension(child % var,lb,ub,nbdim)
+      DO i = 1,nbdim
+C
+        Call Agrif_Invloc(lb(i),Agrif_Procrank,i,iminmaxg(i,1))
+        Call Agrif_Invloc(ub(i),Agrif_Procrank,i,iminmaxg(i,2))
+C
+      ENDDO
+C
+      iminmaxg(1:nbdim,2) = - iminmaxg(1:nbdim,2)
+      
+      CALL MPI_ALLREDUCE(iminmaxg,lubglob,2*nbdim,MPI_INTEGER,MPI_MIN,
+     &                     MPI_COMM_AGRIF,code)
+
+      lubglob(1:nbdim,2) = - lubglob(1:nbdim,2)      
+C
+#endif 
+C
+
+      indtruetab(1:nbdim,1,1) = max(indtab(1:nbdim,1,1),
+     &     lubglob(1:nbdim,1))
+      indtruetab(1:nbdim,1,2) = min(indtab(1:nbdim,1,2),
+     &     lubglob(1:nbdim,2))
+
+C
+C
+
+           IF (present(procname)) THEN
+              Call Agrif_UpdatenD              
+     &             (TypeUpdate,parent,child,
+     &              indtruetab(1:nbdim,1,1),indtruetab(1:nbdim,1,2),
+     &              pttab_child(1:nbdim),pttab_Parent(1:nbdim),
+     &              s_Child(1:nbdim),s_Parent(1:nbdim),
+     &              ds_Child(1:nbdim),ds_Parent(1:nbdim),
+     &              posvartab_child,loctab_Child,
+     &              nbdim,procname)
+           ELSE
+              Call Agrif_UpdatenD              
+     &             (TypeUpdate,parent,child,
+     &              indtruetab(1:nbdim,1,1),indtruetab(1:nbdim,1,2),
+     &              pttab_child(1:nbdim),pttab_Parent(1:nbdim),
+     &              s_Child(1:nbdim),s_Parent(1:nbdim),
+     &              ds_Child(1:nbdim),ds_Parent(1:nbdim),
+     &              posvartab_child,loctab_Child,
+     &              nbdim)           
+           ENDIF
+C
+C      
+C  
+      End Subroutine Agrif_UpdateWhole
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_UpdateBcnd
+C     **************************************************************************               
+C
+      Subroutine AGRIF_UpdateBcnd(TypeUpdate,parent,child,deb,fin,
+     &                           pttab_child,pttab_Parent,
+     &                           nbtab_Child,posvartab_Child,
+     &                           loctab_Child,
+     &                           s_Child,s_Parent,
+     &                           ds_Child,ds_Parent,nbdim,procname)
+C
+CCC   Description:
+CCC   Subroutine to calculate the boundary conditions for a nD grid variable on
+CCC   a fine grid by using a space and time interpolations; it is called by the 
+CCC   Agrif_CorrectVariable procedure.
+C
+C
+C     Declarations:
+C
+      
+C
+#ifdef AGRIF_MPI
+C
+#include "mpif.h"
+C
+#endif
+C
+C     Arguments
+      INTEGER, DIMENSION(6) :: TypeUpdate            ! TYPE of update 
+                                                     !   (copy or average) 
+      TYPE(AGRIF_PVariable)    :: parent             ! Variable on the parent
+                                                     !   grid
+      TYPE(AGRIF_PVariable)    :: child              ! Variable on the child
+                                                     !   grid 
+      INTEGER, DIMENSION(6) :: deb, fin
+      INTEGER                  :: nbdim              ! Number of dimensions of
+                                                     !   the grid variable
+      INTEGER,DIMENSION(nbdim) :: pttab_child        ! Index of the first point
+                                                     !   inside the domain for
+                                                     !   the parent grid
+                                                     !   variable
+      INTEGER,DIMENSION(nbdim) :: pttab_Parent       ! Index of the first point
+                                                     !   inside the domain for
+                                                     !   the child grid variable
+      INTEGER,DIMENSION(nbdim) :: nbtab_Child        ! Number of cells of the
+                                                     !   child grid
+      INTEGER,DIMENSION(nbdim) :: posvartab_Child    ! Position of the grid
+                                                     !   variable (1 or 2)
+      INTEGER,DIMENSION(nbdim) :: loctab_Child       ! Indicates if the child
+                                                     !   grid has a common
+                                                     !   border with the root
+                                                     !   grid
+      REAL   ,DIMENSION(nbdim) :: s_Child,s_Parent   ! Positions of the parent
+                                                     !   and child grids 
+      REAL   ,DIMENSION(nbdim) :: ds_Child,ds_Parent ! Space steps of the parent
+                                                     !   and child grids
+      External :: procname
+      Optional ::  procname      
+C
+C     Local variables
+      INTEGER,DIMENSION(nbdim,2)   :: lubglob
+      INTEGER                      :: i                 
+      INTEGER,DIMENSION(nbdim,2,2) :: indtab         ! Arrays indicating the
+                                                     !   limits of the child
+      INTEGER,DIMENSION(nbdim,2,2) :: indtruetab     ! grid variable where
+                                                     !  boundary conditions are 
+      INTEGER,DIMENSION(nbdim,2,2,nbdim)   :: ptres      ! calculated
+      INTEGER                      :: nb,ndir,n
+      integer :: coeffraf
+C
+#ifdef AGRIF_MPI
+C
+      INTEGER,DIMENSION(nbdim)   :: lb,ub
+      INTEGER,DIMENSION(nbdim,2) :: iminmaxg
+      INTEGER                    :: code
+C
+#endif
+C      
+C
+
+      DO i = 1, nbdim
+        coeffraf = nint(ds_Parent(i)/ds_Child(i))
+        indtab(i,1,1) = pttab_child(i) + (deb(i) + 1) * coeffraf
+        indtab(i,1,2) = pttab_child(i) + (fin(i) + 1) * coeffraf
+
+        indtab(i,2,1) = pttab_child(i) + nbtab_child(i)
+     &    - (fin(i) + 1) *  coeffraf
+        indtab(i,2,2) = pttab_child(i) + nbtab_child(i)
+     &    - (deb(i) + 1) *  coeffraf
+
+        IF (posvartab_child(i) == 1) THEN
+          IF (TypeUpdate(i) .EQ. Agrif_Update_Full_Weighting) THEN
+            indtab(i,:,1) = indtab(i,:,1) - (coeffraf - 1)
+            indtab(i,:,2) = indtab(i,:,2) + (coeffraf - 1)        
+          ELSE IF (TypeUpdate(i) .NE. Agrif_Update_Copy) THEN
+            indtab(i,:,1) = indtab(i,:,1) - coeffraf / 2
+            indtab(i,:,2) = indtab(i,:,2) + coeffraf / 2
+          ENDIF
+        ELSE
+          indtab(i,1,1) = indtab(i,1,1) - coeffraf
+          indtab(i,1,2) = indtab(i,1,2) - 1
+          indtab(i,2,2) = indtab(i,2,2) + coeffraf - 1
+          IF (TypeUpdate(i) .EQ. Agrif_Update_Full_Weighting) THEN
+            indtab(i,1,1) = indtab(i,1,1) - 1
+            indtab(i,1,2) = indtab(i,1,2) + 1
+            indtab(i,2,1) = indtab(i,2,1) - 1
+            indtab(i,2,2) = indtab(i,2,2) + 1
+          ENDIF          
+        ENDIF
+      ENDDO
+
+#if !defined AGRIF_MPI      
+        Call Agrif_nbdim_Get_bound_dimension(child % var,lubglob(:,1),
+     &               lubglob(:,2),nbdim)
+
+C
+#else
+C     
+        Call Agrif_nbdim_Get_bound_dimension(child % var,lb,ub,nbdim)
+      DO i = 1,nbdim
+C
+        Call Agrif_Invloc(lb(i),Agrif_Procrank,i,iminmaxg(i,1))
+        Call Agrif_Invloc(ub(i),Agrif_Procrank,i,iminmaxg(i,2))
+C
+      ENDDO
+C
+      iminmaxg(1:nbdim,2) = - iminmaxg(1:nbdim,2)
+      
+      CALL MPI_ALLREDUCE(iminmaxg,lubglob,2*nbdim,MPI_INTEGER,MPI_MIN,
+     &                     MPI_COMM_AGRIF,code)  
+     
+      lubglob(1:nbdim,2) = - lubglob(1:nbdim,2)      
+C
+#endif 
+C     
+      indtruetab(1:nbdim,1,1) = max(indtab(1:nbdim,1,1),
+     &     lubglob(1:nbdim,1))
+      indtruetab(1:nbdim,1,2) = max(indtab(1:nbdim,1,2),
+     &     lubglob(1:nbdim,1))
+      indtruetab(1:nbdim,2,1) = min(indtab(1:nbdim,2,1),
+     &     lubglob(1:nbdim,2))
+      indtruetab(1:nbdim,2,2) = min(indtab(1:nbdim,2,2),
+     &     lubglob(1:nbdim,2))
+                        
+C 
+C
+      do nb = 1,nbdim
+C
+        do ndir = 1,2
+C
+          if (loctab_child(nb) /= -3) then
+C           
+              do n = 1,2
+C
+                ptres(nb,n,ndir,nb) = indtruetab(nb,ndir,n)
+C
+              enddo              
+C
+              do i = 1,nbdim
+C     
+                if (i .NE. nb) then      
+C
+                    if (loctab_child(i) == -3) then
+C
+                        ptres(i,1,ndir,nb) = pttab_child(i)
+C
+                      else
+C
+                        ptres(i,1,ndir,nb) = indtruetab(i,1,1)
+C
+                    endif
+C
+                    if (loctab_child(i) == -3) then
+C
+                        if (posvartab_child(i) == 1) then
+C
+                            ptres(i,2,ndir,nb) = pttab_child(i) 
+     &                                + nbtab_child(i)
+C
+                          else
+C
+                            ptres(i,2,ndir,nb) = pttab_child(i) 
+     &                             + nbtab_child(i) - 1
+C
+                        endif                             
+C
+                      else
+C
+                        ptres(i,2,ndir,nb) = indtruetab(i,2,2)
+C
+                    endif                        
+C      
+                endif
+C      
+              enddo
+      
+C
+            
+        endif
+      
+        enddo
+       enddo
+C
+
+C
+
+      do nb = 1,nbdim
+C
+        do ndir = 1,2                
+C
+          if (loctab_child(nb) /= -3) then
+C
+           IF (present(procname)) THEN
+              Call Agrif_UpdatenD              
+     &             (TypeUpdate,parent,child,
+     &              ptres(1:nbdim,1,ndir,nb),ptres(1:nbdim,2,ndir,nb),
+     &              pttab_child(1:nbdim),pttab_Parent(1:nbdim),
+     &              s_Child(1:nbdim),s_Parent(1:nbdim),
+     &              ds_Child(1:nbdim),ds_Parent(1:nbdim),
+     &              posvartab_Child,loctab_Child,
+     &              nbdim,procname,nb,ndir)
+           ELSE
+              Call Agrif_UpdatenD              
+     &             (TypeUpdate,parent,child,
+     &              ptres(1:nbdim,1,ndir,nb),ptres(1:nbdim,2,ndir,nb),
+     &              pttab_child(1:nbdim),pttab_Parent(1:nbdim),
+     &              s_Child(1:nbdim),s_Parent(1:nbdim),
+     &              ds_Child(1:nbdim),ds_Parent(1:nbdim),
+     &              posvartab_Child,loctab_Child,
+     &              nbdim)           
+           ENDIF
+C
+          endif
+          
+C
+        enddo       
+C
+      enddo
+C
+C      
+C  
+      End Subroutine Agrif_UpdateBcnd
+C
+C     **************************************************************************  
+CCC   Subroutine Agrif_UpdatenD  
+C     **************************************************************************  
+C  
+      Subroutine Agrif_UpdatenD(TypeUpdate,parent,child,
+     &                          pttab,petab,
+     &                          pttab_Child,pttab_Parent,
+     &                          s_Child,s_Parent,
+     &                          ds_Child,ds_Parent,
+     &                          posvartab_Child,loctab_Child,
+     &                          nbdim,procname,nb,ndir)  
+C
+C     Description:
+C     Subroutine to update a 2D grid variable on the parent grid of 
+C        the current grid. 
+C
+C     Declarations:
+C
+      
+C
+#ifdef AGRIF_MPI
+C
+#include "mpif.h"
+C
+#endif
+C
+C     Arguments
+      INTEGER                    :: nbdim
+      INTEGER, DIMENSION(6) :: TypeUpdate              ! TYPE of update 
+                                                       !  (copy or average)
+      TYPE(AGRIF_PVARIABLE)      :: parent             ! Variable of the parent
+                                                       !   grid   
+      TYPE(AGRIF_PVARIABLE)      :: child              ! Variable of the child
+                                                       !   grid
+      INTEGER,DIMENSION(nbdim)   :: pttab              ! Index of the first
+                                                       !   point inside the
+                                                       !   domain
+      INTEGER,DIMENSION(nbdim)   :: petab              ! Index of the first
+                                                       !   point inside the
+                                                       !   domain
+      INTEGER,DIMENSION(nbdim)   :: pttab_Child        ! Index of the first
+                                                       !   point inside the
+                                                       !   domain for the child
+                                                       !   grid variable
+      INTEGER,DIMENSION(nbdim)   :: pttab_Parent       ! Index of the first
+                                                       !   point inside the
+                                                       !   domain for the parent
+                                                       !   grid variable
+      REAL,DIMENSION(nbdim)      :: s_Child,s_Parent   ! Positions of the parent
+                                                       !   and child grids
+      REAL,DIMENSION(nbdim)      :: ds_Child,ds_Parent ! Space steps of the
+                                                       !   parent and child
+                                                       !   grids 
+      External :: procname
+      Optional ::  procname
+      Integer :: nb,ndir
+      Optional :: nb,ndir
+      
+C
+C     Local pointers
+      TYPE(AGRIF_PVARIABLE), SAVE      :: tempP      ! Temporary parent grid variable
+      TYPE(AGRIF_PVARIABLE), SAVE      :: tempC      ! Temporary child grid variable
+C
+C     Local scalars
+      INTEGER,DIMENSION(nbdim)    :: pttruetab,cetruetab
+      INTEGER,DIMENSION(nbdim)    :: posvartab_Child,loctab_Child
+      INTEGER,DIMENSION(nbdim)    :: indmin,indmax
+      INTEGER,DIMENSION(nbdim)    :: indminglob,indmaxglob
+      REAL   ,DIMENSION(nbdim)    :: s_Child_temp,s_Parent_temp
+cccccccc      LOGICAL,DIMENSION(nbdim)    :: noraftab
+      INTEGER,DIMENSION(nbdim)    :: lowerbound,upperbound
+      LOGICAL :: memberin, member
+      INTEGER,DIMENSION(nbdim)    :: pttruetabwhole,cetruetabwhole
+      INTEGER,DIMENSION(nbdim,2,2) :: childarray
+      INTEGER,DIMENSION(nbdim,2,2) :: parentarray
+      TYPE(AGRIF_PVARIABLE), SAVE      :: tempCextend,tempPextend ! Temporary child
+      INTEGER :: nbin, ndirin
+C
+#ifdef AGRIF_MPI
+C
+      INTEGER,DIMENSION(nbdim)    :: indminglob2,indmaxglob2
+      LOGICAL, DIMENSION(0:Agrif_Nbprocs-1) :: sendtoproc1,recvfromproc1
+      LOGICAL, DIMENSION(0:Agrif_Nbprocs-1) :: sendtoproc2,recvfromproc2      
+      INTEGER                              :: code
+      INTEGER                              :: i,j,k
+      INTEGER,DIMENSION(nbdim,4)           :: tab3
+      INTEGER,DIMENSION(nbdim,4,0:Agrif_Nbprocs-1) :: tab4
+      INTEGER,DIMENSION(nbdim,0:Agrif_Nbprocs-1,8) :: tab4t
+      INTEGER,DIMENSION(nbdim,0:Agrif_Nbprocs-1,8) :: tab5t      
+      LOGICAL :: find_list_update
+      LOGICAL, DIMENSION(0:Agrif_Nbprocs-1) :: memberinall, memberinall2
+      LOGICAL, DIMENSION(1) :: memberin1      
+C
+#endif
+C
+  
+C
+C     local lbound and ubound of the child array
+
+      Call Agrif_nbdim_Get_bound_dimension(child%var,
+     &                              lowerbound,upperbound,nbdim)
+
+C here pttab and petab corresponds to the (global) indices of the points needed
+C in the update
+C pttruetab and cetruetab contains only indices that are present
+C on the local processor
+
+      Call Agrif_Childbounds(nbdim,
+     &                       lowerbound,upperbound,
+     &                       pttab,petab,
+     &                       pttruetab,cetruetab,memberin)
+
+       Call Agrif_Prtbounds(nbdim,indminglob,indmaxglob,s_Parent_temp,
+     &                     s_Child_temp,s_Child,ds_Child,
+     &                     s_Parent,ds_Parent,
+     &                     pttab,petab,pttab_Child,
+     &                     pttab_Parent,
+     &                     posvartab_Child,TypeUpdate,loctab_Child
+#ifdef AGRIF_MPI
+     &                 ,pttruetabwhole,cetruetabwhole
+#endif
+     &     )
+
+#ifdef AGRIF_MPI
+      IF (memberin) THEN
+       Call Agrif_GlobtoLocInd2(childarray,
+     &                     lowerbound,upperbound,
+     &                     pttruetab,cetruetab,
+     &                     nbdim,Agrif_Procrank,
+     &                     member)
+
+      ENDIF
+
+
+         Call Agrif_Prtbounds(nbdim,indmin,indmax,s_Parent_temp,
+     &                     s_Child_temp,s_Child,ds_Child,
+     &                     s_Parent,ds_Parent,
+     &                     pttruetab,cetruetab,pttab_Child,
+     &                     pttab_Parent,
+     &                     posvartab_Child,TypeUpdate,loctab_Child
+     &                 ,pttruetabwhole,cetruetabwhole
+     &     )
+
+#else
+       indmin = indminglob
+       indmax = indmaxglob
+       pttruetabwhole = pttruetab
+       cetruetabwhole = cetruetab
+       childarray(:,1,2) = pttruetab
+       childarray(:,2,2) = cetruetab
+#endif
+
+       IF (present(procname)) THEN
+       IF (.Not.present(nb)) THEN
+       nbin=0
+       ndirin=0
+       ELSE
+       nbin = nb
+       ndirin = ndir
+       ENDIF
+       ENDIF
+       
+      IF (memberin) THEN
+      IF (.not.associated(tempC%var)) allocate(tempC%var)
+
+C
+      Call Agrif_nbdim_allocation(tempC%var,
+     &                 pttruetab,cetruetab,nbdim)
+
+      Call Agrif_nbdim_Full_VarEQreal(tempC%var,0.,nbdim)
+
+
+
+      IF (present(procname)) THEN
+        SELECT CASE (nbdim)
+        CASE(1)
+          CALL procname(tempC%var%array1,
+     &                          childarray(1,1,2),childarray(1,2,2),
+     &                                   .TRUE.,nbin,ndirin)
+        CASE(2)
+          CALL procname(tempC%var%array2,
+     &                          childarray(1,1,2),childarray(1,2,2),
+     &                          childarray(2,1,2),childarray(2,2,2),
+     &                                   .TRUE.,nbin,ndirin)
+        CASE(3)
+          CALL procname(tempC%var%array3,
+     &                          childarray(1,1,2),childarray(1,2,2),
+     &                          childarray(2,1,2),childarray(2,2,2),
+     &                          childarray(3,1,2),childarray(3,2,2),
+     &                                   .TRUE.,nbin,ndirin)
+        CASE(4)
+          CALL procname(tempC%var%array4,
+     &                          childarray(1,1,2),childarray(1,2,2),
+     &                          childarray(2,1,2),childarray(2,2,2),
+     &                          childarray(3,1,2),childarray(3,2,2),
+     &                          childarray(4,1,2),childarray(4,2,2),
+     &                                   .TRUE.,nbin,ndirin)
+        CASE(5)
+          CALL procname(tempC%var%array5,
+     &                          childarray(1,1,2),childarray(1,2,2),
+     &                          childarray(2,1,2),childarray(2,2,2),
+     &                          childarray(3,1,2),childarray(3,2,2),
+     &                          childarray(4,1,2),childarray(4,2,2),
+     &                          childarray(5,1,2),childarray(5,2,2),
+     &                                   .TRUE.,nbin,ndirin)
+        CASE(6)
+          CALL procname(tempC%var%array6,
+     &                          childarray(1,1,2),childarray(1,2,2),
+     &                          childarray(2,1,2),childarray(2,2,2),
+     &                          childarray(3,1,2),childarray(3,2,2),
+     &                          childarray(4,1,2),childarray(4,2,2),
+     &                          childarray(5,1,2),childarray(5,2,2),
+     &                          childarray(6,1,2),childarray(6,2,2),
+     &                                   .TRUE.,nbin,ndirin)
+        END SELECT
+      ELSE
+      Call Agrif_nbdim_VarEQvar(tempC%var,pttruetab,cetruetab,
+     &          child%var,childarray(:,1,2),childarray(:,2,2),
+     &                          nbdim)
+      ENDIF
+
+      ENDIF
+
+
+
+C
+C
+#ifdef AGRIF_MPI
+C
+C     tab2 contains the necessary limits of the parent grid for each processor
+
+      IF (Associated(child%var%list_update)) THEN
+      Call Agrif_Find_list_update(child%var%list_update,pttab,petab,
+     &                          pttab_Child,pttab_Parent,nbdim,
+     &       find_list_update,tab4t,tab5t,memberinall,memberinall2,
+     &     sendtoproc1,recvfromproc1,sendtoproc2,recvfromproc2)
+      ELSE
+      find_list_update = .FALSE.
+      ENDIF
+      
+      if (.not.find_list_update) then      
+      tab3(:,1) = pttruetab(:)
+      tab3(:,2) = cetruetab(:)
+      tab3(:,3) = pttruetabwhole(:)
+      tab3(:,4) = cetruetabwhole(:)
+C
+C
+      Call MPI_ALLGATHER(tab3,4*nbdim,MPI_INTEGER,tab4,4*nbdim,
+     &                   MPI_INTEGER,MPI_COMM_AGRIF,code)
+
+      IF (.not.associated(tempCextend%var)) Allocate(tempCextend%var)
+      DO k=0,Agrif_Nbprocs-1
+       do j=1,4
+         do i=1,nbdim
+         tab4t(i,k,j) = tab4(i,j,k)
+         enddo
+       enddo
+      enddo
+      
+      memberin1(1) = memberin
+      CALL MPI_ALLGATHER(memberin1,1,MPI_LOGICAL,memberinall,
+     &                  1,MPI_LOGICAL,MPI_COMM_AGRIF,code)
+ 
+       Call Get_External_Data_first(tab4t(:,:,1),
+     &            tab4t(:,:,2),
+     &            tab4t(:,:,3),tab4t(:,:,4),nbdim,memberin,memberin,
+     &            memberinall,sendtoproc1,recvfromproc1,tab4t(:,:,5),
+     & tab4t(:,:,6),tab4t(:,:,7),tab4t(:,:,8))
+               
+      endif
+
+      Call ExchangeSameLevel2(sendtoproc1,recvfromproc1,nbdim,
+     &            tab4t(:,:,3),tab4t(:,:,4),tab4t(:,:,5),tab4t(:,:,6),
+     &            tab4t(:,:,7),tab4t(:,:,8),memberin,tempC,
+     &            tempCextend) 
+           
+!      Call Get_External_Data(tempC,tempCextend,tab4t(:,:,1),
+!     &            tab4t(:,:,2),
+!     &            tab4t(:,:,3),tab4t(:,:,4),nbdim,memberin,memberin,
+!     &            memberinall)
+
+#else
+      tempCextend%var => tempC%var
+#endif
+
+C
+C
+C     Update of the parent grid (tempP) from the child grid (tempC)
+
+
+      IF (memberin) THEN
+
+      IF (.not.associated(tempP%var)) allocate(tempP%var)
+      Call Agrif_nbdim_allocation(tempP%var,
+     &                 indmin,indmax,nbdim)
+
+      if ( nbdim .EQ. 1 ) then
+         tempP%var%array1 = 0.
+         Call Agrif_Update_1D_recursive(TypeUpdate,
+     &           tempP%var%array1,tempCextend%var%array1,
+     &           indmin,indmax,
+     &           pttruetabwhole,cetruetabwhole,
+     &           s_Child_temp,s_Parent_temp,
+     &           ds_Child,ds_Parent,nbdim)
+      endif
+      if ( nbdim .EQ. 2 ) then
+         Call Agrif_Update_2D_recursive(TypeUpdate,
+     &           tempP%var%array2,tempCextend%var%array2,
+     &           indmin,indmax,
+     &           pttruetabwhole,cetruetabwhole,
+     &           s_Child_temp,s_Parent_temp,
+     &           ds_Child,ds_Parent,nbdim)
+      endif
+
+      if ( nbdim .EQ. 3 ) then
+         Call Agrif_Update_3D_recursive(TypeUpdate,
+     &           tempP%var%array3,tempCextend%var%array3,
+     &           indmin,indmax,
+     &           pttruetabwhole,cetruetabwhole,
+     &           s_Child_temp,s_Parent_temp,
+     &           ds_Child,ds_Parent,nbdim)
+      endif
+      if ( nbdim .EQ. 4 ) then
+         Call Agrif_Update_4D_recursive(TypeUpdate,
+     &           tempP%var%array4,tempCextend%var%array4,
+     &           indmin,indmax,
+     &           pttruetabwhole,cetruetabwhole,
+     &           s_Child_temp,s_Parent_temp,
+     &           ds_Child,ds_Parent,nbdim)
+      endif
+      if ( nbdim .EQ. 5 ) then
+         Call Agrif_Update_5D_recursive(TypeUpdate,
+     &           tempP%var%array5,tempCextend%var%array5,
+     &           indmin,indmax,
+     &           pttruetabwhole,cetruetabwhole,
+     &           s_Child_temp,s_Parent_temp,
+     &           ds_Child,ds_Parent,nbdim)
+      endif
+      if ( nbdim .EQ. 6 ) then
+         Call Agrif_Update_6D_recursive(TypeUpdate,
+     &           tempP%var%array6,tempCextend%var%array6,
+     &           indmin,indmax,
+     &           pttruetabwhole,cetruetabwhole,
+     &           s_Child_temp,s_Parent_temp,
+     &           ds_Child,ds_Parent,nbdim)
+      endif
+
+      Call Agrif_nbdim_deallocation(tempCextend%var,nbdim)
+C      Deallocate(tempCextend%var)
+
+      ENDIF
+
+#ifdef AGRIF_MPI
+      Call Agrif_nbdim_Get_bound_dimension(parent%var,
+     &                              lowerbound,upperbound,nbdim)
+
+      Call Agrif_ChildGrid_to_ParentGrid()
+C
+      Call Agrif_Childbounds(nbdim,
+     &                       lowerbound,upperbound,
+     &                       indminglob,indmaxglob,
+     &                       indminglob2,indmaxglob2,member)
+C
+      IF (member) THEN
+      Call Agrif_GlobtoLocInd2(parentarray,
+     &                     lowerbound,upperbound,
+     &                     indminglob2,indmaxglob2,
+     &                     nbdim,Agrif_Procrank,
+     &                     member)
+      ENDIF
+
+      Call Agrif_ParentGrid_to_ChildGrid()
+
+      if (.not.find_list_update) then
+      tab3(:,1) = indmin(:)
+      tab3(:,2) = indmax(:)
+      tab3(:,3) = indminglob2(:)
+      tab3(:,4) = indmaxglob2(:)
+C
+      Call MPI_ALLGATHER(tab3,4*nbdim,MPI_INTEGER,tab4,4*nbdim,
+     &                   MPI_INTEGER,MPI_COMM_AGRIF,code)
+
+      IF (.not.associated(tempPextend%var)) Allocate(tempPextend%var)
+      DO k=0,Agrif_Nbprocs-1
+       do j=1,4
+         do i=1,nbdim
+         tab5t(i,k,j) = tab4(i,j,k)
+         enddo
+       enddo
+      enddo
+ 
+      memberin1(1) = member
+      CALL MPI_ALLGATHER(memberin1,1,MPI_LOGICAL,memberinall2,
+     &                  1,MPI_LOGICAL,MPI_COMM_AGRIF,code)
+ 
+      Call Get_External_Data_first(tab5t(:,:,1),
+     &            tab5t(:,:,2),
+     &            tab5t(:,:,3),tab5t(:,:,4),nbdim,memberin,member,
+     &            memberinall2,sendtoproc2,recvfromproc2,tab5t(:,:,5),
+     & tab5t(:,:,6),tab5t(:,:,7),tab5t(:,:,8))
+          
+      Call Agrif_Addto_list_update(child%var%list_update,pttab,petab,
+     &                          pttab_Child,pttab_Parent,nbdim
+     &   ,tab4t,tab5t,memberinall,memberinall2,
+     &   sendtoproc1,recvfromproc1,sendtoproc2,recvfromproc2) 
+          
+      endif
+      
+c      Call Get_External_Data(tempP,tempPextend,tab5t(:,:,1),
+c     &            tab5t(:,:,2),
+c     &            tab5t(:,:,3),tab5t(:,:,4),nbdim,memberin,member,
+c     &            memberinall2)
+     
+      Call ExchangeSameLevel2(sendtoproc2,recvfromproc2,nbdim,
+     &            tab5t(:,:,3),tab5t(:,:,4),tab5t(:,:,5),tab5t(:,:,6),
+     &            tab5t(:,:,7),tab5t(:,:,8),member,tempP,
+     &            tempPextend)     
+
+#else
+      tempPextend%var => tempP%var
+      parentarray(:,1,1) = indmin
+      parentarray(:,2,1) = indmax
+      parentarray(:,1,2) = indmin
+      parentarray(:,2,2) = indmax
+      member = .TRUE.
+#endif
+
+C
+C
+C
+C     Special values on the child grid
+      if (Agrif_UseSpecialValueFineGrid) then
+C
+ccc         noraftab(1:nbdim) =
+ccc     &    child % var % root_var % interptab(1:nbdim) .EQ. 'N'
+C
+#ifdef AGRIF_MPI
+C
+c          Allocate(childvalues% var)
+C
+c          Call Agrif_nbdim_allocation(childvalues%var,
+c     &                      pttruetab,cetruetab,nbdim)
+c          Call Agrif_nbdim_Full_VarEQvar(childvalues% var,
+c     &                                tempC% var,
+c     &                                nbdim)
+c          Call Agrif_CheckMasknD(tempC,childvalues,
+c     &                           pttruetab(1:nbdim),cetruetab(1:nbdim),
+c     &                           pttruetab(1:nbdim),cetruetab(1:nbdim),
+c     &                           noraftab(1:nbdim),nbdim)
+c          Call Agrif_nbdim_deallocation(childvalues% var,nbdim)
+c         Deallocate(childvalues % var)
+C
+#else
+C
+c          Call Agrif_nbdim_Get_bound_dimension(child%var,
+c     &                              lowerbound,upperbound,nbdim)
+c          Call Agrif_CheckMasknD(tempC,child,
+c     &                           pttruetab(1:nbdim),cetruetab(1:nbdim),
+c     &                           lowerbound,
+c     &                           upperbound,
+c     &                           noraftab(1:nbdim),nbdim)
+C
+#endif
+C
+      endif
+
+
+C
+C
+C
+C
+C     Special values on the parent grid
+      if (Agrif_UseSpecialValue) then
+C
+#ifdef AGRIF_MPI
+C
+c          Call GiveAgrif_SpecialValueToTab_mpi(parent%var,tempP%var,
+c     &                 parentarray,
+c     &                 indmin,indmax,
+c     &                 Agrif_SpecialValue,nbdim)
+C
+C
+#else
+C
+c          Call GiveAgrif_SpecialValueToTab(parent%var,tempP%var,
+c     &                  indmin,indmax,
+c     &                  Agrif_SpecialValue,nbdim)
+C
+#endif
+C
+C
+      endif   
+C
+C
+        IF (member) THEN
+
+          IF (present(procname)) THEN
+            CALL Agrif_ChildGrid_to_ParentGrid()
+            SELECT CASE(nbdim)
+            CASE(1)
+            CALL procname(
+     &      tempPextend%var%array1(
+     &                      parentarray(1,1,1):parentarray(1,2,1)),
+     &                      parentarray(1,1,2),parentarray(1,2,2),
+     &                                   .FALSE.,nbin,ndirin
+     &                      )
+            CASE(2)
+            CALL procname(
+     &      tempPextend%var%array2(
+     &                      parentarray(1,1,1):parentarray(1,2,1),
+     &                      parentarray(2,1,1):parentarray(2,2,1)),
+     &                      parentarray(1,1,2),parentarray(1,2,2),
+     &                      parentarray(2,1,2),parentarray(2,2,2),
+     &                                   .FALSE.,nbin,ndirin
+     &                      )
+            CASE(3)
+            CALL procname(
+     &      tempPextend%var%array3(
+     &                      parentarray(1,1,1):parentarray(1,2,1),
+     &                      parentarray(2,1,1):parentarray(2,2,1),
+     &                      parentarray(3,1,1):parentarray(3,2,1)),
+     &                      parentarray(1,1,2),parentarray(1,2,2),
+     &                      parentarray(2,1,2),parentarray(2,2,2),
+     &                      parentarray(3,1,2),parentarray(3,2,2),
+     &                                   .FALSE.,nbin,ndirin
+     &                      )
+            CASE(4)
+            CALL procname(
+     &      tempPextend%var%array4(
+     &                      parentarray(1,1,1):parentarray(1,2,1),
+     &                      parentarray(2,1,1):parentarray(2,2,1),
+     &                      parentarray(3,1,1):parentarray(3,2,1),
+     &                      parentarray(4,1,1):parentarray(4,2,1)),
+     &                      parentarray(1,1,2),parentarray(1,2,2),
+     &                      parentarray(2,1,2),parentarray(2,2,2),
+     &                      parentarray(3,1,2),parentarray(3,2,2),
+     &                      parentarray(4,1,2),parentarray(4,2,2),
+     &                                   .FALSE.,nbin,ndirin
+     &                      )
+            CASE(5)
+            CALL procname(
+     &      tempPextend%var%array5(
+     &                      parentarray(1,1,1):parentarray(1,2,1),
+     &                      parentarray(2,1,1):parentarray(2,2,1),
+     &                      parentarray(3,1,1):parentarray(3,2,1),
+     &                      parentarray(4,1,1):parentarray(4,2,1),
+     &                      parentarray(5,1,1):parentarray(5,2,1)),
+     &                      parentarray(1,1,2),parentarray(1,2,2),
+     &                      parentarray(2,1,2),parentarray(2,2,2),
+     &                      parentarray(3,1,2),parentarray(3,2,2),
+     &                      parentarray(4,1,2),parentarray(4,2,2),
+     &                      parentarray(5,1,2),parentarray(5,2,2),
+     &                                   .FALSE.,nbin,ndirin
+     &                      )
+            CASE(6)
+            CALL procname(
+     &      tempPextend%var%array6(
+     &                      parentarray(1,1,1):parentarray(1,2,1),
+     &                      parentarray(2,1,1):parentarray(2,2,1),
+     &                      parentarray(3,1,1):parentarray(3,2,1),
+     &                      parentarray(4,1,1):parentarray(4,2,1),
+     &                      parentarray(5,1,1):parentarray(5,2,1),
+     &                      parentarray(6,1,1):parentarray(6,2,1)),
+     &                      parentarray(1,1,2),parentarray(1,2,2),
+     &                      parentarray(2,1,2),parentarray(2,2,2),
+     &                      parentarray(3,1,2),parentarray(3,2,2),
+     &                      parentarray(4,1,2),parentarray(4,2,2),
+     &                      parentarray(5,1,2),parentarray(5,2,2),
+     &                      parentarray(6,1,2),parentarray(6,2,2),
+     &                                   .FALSE.,nbin,ndirin
+     &                      )
+            END SELECT
+            CALL Agrif_ParentGrid_to_ChildGrid()
+          ELSE
+            SELECT CASE(nbdim)
+            CASE(1)
+            parent%var%array1(parentarray(1,1,2):parentarray(1,2,2)) =
+     &      tempPextend%var%array1(
+     &                      parentarray(1,1,1):parentarray(1,2,1))
+            CASE(2)
+            parent%var%array2(parentarray(1,1,2):parentarray(1,2,2),
+     &                      parentarray(2,1,2):parentarray(2,2,2)) =
+     &      tempPextend%var%array2(
+     &                      parentarray(1,1,1):parentarray(1,2,1),
+     &                      parentarray(2,1,1):parentarray(2,2,1))
+            CASE(3)
+            parent%var%array3(parentarray(1,1,2):parentarray(1,2,2),
+     &                      parentarray(2,1,2):parentarray(2,2,2),
+     &                      parentarray(3,1,2):parentarray(3,2,2)) =
+     &      tempPextend%var%array3(
+     &                      parentarray(1,1,1):parentarray(1,2,1),
+     &                      parentarray(2,1,1):parentarray(2,2,1),
+     &                      parentarray(3,1,1):parentarray(3,2,1))
+            CASE(4)
+            parent%var%array4(parentarray(1,1,2):parentarray(1,2,2),
+     &                      parentarray(2,1,2):parentarray(2,2,2),
+     &                      parentarray(3,1,2):parentarray(3,2,2),
+     &                      parentarray(4,1,2):parentarray(4,2,2)) =
+     &      tempPextend%var%array4(
+     &                      parentarray(1,1,1):parentarray(1,2,1),
+     &                      parentarray(2,1,1):parentarray(2,2,1),
+     &                      parentarray(3,1,1):parentarray(3,2,1),
+     &                      parentarray(4,1,1):parentarray(4,2,1))
+            CASE(5)
+            parent%var%array5(parentarray(1,1,2):parentarray(1,2,2),
+     &                      parentarray(2,1,2):parentarray(2,2,2),
+     &                      parentarray(3,1,2):parentarray(3,2,2),
+     &                      parentarray(4,1,2):parentarray(4,2,2),
+     &                      parentarray(5,1,2):parentarray(5,2,2)) =
+     &      tempPextend%var%array5(
+     &                      parentarray(1,1,1):parentarray(1,2,1),
+     &                      parentarray(2,1,1):parentarray(2,2,1),
+     &                      parentarray(3,1,1):parentarray(3,2,1),
+     &                      parentarray(4,1,1):parentarray(4,2,1),
+     &                      parentarray(5,1,1):parentarray(5,2,1))
+            CASE(6)
+            parent%var%array6(parentarray(1,1,2):parentarray(1,2,2),
+     &                      parentarray(2,1,2):parentarray(2,2,2),
+     &                      parentarray(3,1,2):parentarray(3,2,2),
+     &                      parentarray(4,1,2):parentarray(4,2,2),
+     &                      parentarray(5,1,2):parentarray(5,2,2),
+     &                      parentarray(6,1,2):parentarray(6,2,2)) =
+     &      tempPextend%var%array6(
+     &                      parentarray(1,1,1):parentarray(1,2,1),
+     &                      parentarray(2,1,1):parentarray(2,2,1),
+     &                      parentarray(3,1,1):parentarray(3,2,1),
+     &                      parentarray(4,1,1):parentarray(4,2,1),
+     &                      parentarray(5,1,1):parentarray(5,2,1),
+     &                      parentarray(6,1,1):parentarray(6,2,1))
+            END SELECT
+          ENDIF
+
+        Call Agrif_nbdim_deallocation(tempPextend%var,nbdim)
+       ENDIF
+C
+C
+C     Deallocations
+
+      IF (memberin) THEN
+#ifdef AGRIF_MPI
+      Call Agrif_nbdim_deallocation(tempP%var,nbdim)
+      Call Agrif_nbdim_deallocation(tempC%var,nbdim)
+!      Deallocate(tempC % var)
+#endif
+!      Deallocate(tempP % var)
+      ENDIF
+#ifdef AGRIF_MPI
+!      Deallocate(tempPextend%var)
+!      IF (.Not.memberin) Deallocate(tempCextend%var)
+#endif
+
+C
+C
+      End Subroutine Agrif_UpdatenD
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Prtbounds
+C     **************************************************************************
+C
+      Subroutine Agrif_Prtbounds(nbdim,indmin,indmax,s_Parent_temp,
+     &                              s_Child_temp,s_Child,ds_Child,
+     &                              s_Parent,ds_Parent,
+     &                              pttruetab,cetruetab,pttab_Child,
+     &                              pttab_Parent,
+     &                              posvartab_child,TypeUpdate,
+     &                              loctab_Child
+#ifdef AGRIF_MPI
+     &                 ,pttruetabwhole,cetruetabwhole
+#endif
+     &                 )
+C
+CCC   Description:
+CCC   Subroutine calculating the bounds of the parent grid to be updated
+CCC   by the child grid     
+C
+C
+C     Declarations:
+C
+      
+C
+#ifdef AGRIF_MPI
+cccccccccccccccccccccccccc#include "mpif.h"
+#endif
+C
+C     Arguments
+      INTEGER :: nbdim
+      INTEGER,DIMENSION(nbdim) :: indmin,indmax
+      REAL,DIMENSION(nbdim) :: s_Parent_temp,s_child_temp
+      REAL,DIMENSION(nbdim) :: s_Child,ds_child
+      REAL,DIMENSION(nbdim) :: s_Parent,ds_Parent
+      INTEGER,DIMENSION(nbdim) :: pttruetab,cetruetab
+      INTEGER,DIMENSION(nbdim) :: posvartab_child,TypeUpdate
+      INTEGER,DIMENSION(nbdim) :: loctab_Child
+      INTEGER,DIMENSION(nbdim) :: pttab_Child,pttab_Parent
+C
+C     Local variables
+      INTEGER :: i
+      REAL,DIMENSION(nbdim) :: dim_newmin,dim_newmax      
+#ifdef AGRIF_MPI
+      INTEGER,DIMENSION(nbdim)    :: pttruetabwhole,cetruetabwhole
+      REAL :: positionmin,positionmax
+      INTEGER :: imin,imax
+#endif
+C
+C
+      do i = 1,nbdim
+C
+        dim_newmin(i) = s_Child(i) + (pttruetab(i) -
+     &                                pttab_Child(i)) * ds_Child(i)
+C
+        dim_newmax(i) = s_Child(i) + (cetruetab(i) - 
+     &                                pttab_Child(i)) * ds_Child(i)
+C     
+        indmin(i) = pttab_Parent(i) +
+     &        agrif_ceiling((dim_newmin(i)-s_Parent(i))/ds_Parent(i))
+C
+        indmax(i) = pttab_Parent(i) +
+     &        agrif_int((dim_newmax(i)-s_Parent(i))/ds_Parent(i))
+C
+#ifdef AGRIF_MPI
+        positionmin = s_Parent(i) + (indmin(i)-
+     &                          pttab_Parent(i))*ds_Parent(i)
+        IF (loctab_Child(i) .NE. -3) THEN
+        IF (posvartab_child(i) == 1) THEN
+          IF (TypeUpdate(i) .EQ. Agrif_Update_Average) THEN
+          positionmin = positionmin - ds_Parent(i)/2.
+          ELSE IF (TypeUpdate(i) .EQ. Agrif_Update_Full_Weighting) THEN
+          positionmin = positionmin - (ds_Parent(i)-ds_Child(i))
+          ENDIF
+        ELSE
+        positionmin = positionmin - ds_Parent(i)/2.
+        IF (TypeUpdate(i) .EQ. Agrif_Update_Full_Weighting) THEN
+          positionmin = positionmin - ds_Child(i)
+        ENDIF
+        ENDIF
+        ENDIF
+        imin = pttab_Child(i) +
+     &        agrif_ceiling((positionmin-s_Child(i))/ds_Child(i))
+
+       positionmin = s_Child(i) + (imin -
+     &                                pttab_Child(i)) * ds_Child(i)
+
+        pttruetabwhole(i) = imin
+
+        positionmax = s_Parent(i) + (indmax(i)-
+     &                          pttab_Parent(i))*ds_Parent(i)
+        IF (loctab_Child(i) .NE. -3) THEN
+        IF (posvartab_child(i) == 1) THEN
+          IF (TypeUpdate(i) .EQ. Agrif_Update_Average) THEN
+        positionmax = positionmax  + ds_Parent(i)/2.
+          ELSE IF (TypeUpdate(i) .EQ. Agrif_Update_Full_Weighting) THEN
+          positionmax = positionmax  + (ds_Parent(i)-ds_Child(i))
+          ENDIF
+        ELSE
+        positionmax = positionmax  + ds_Parent(i)/2.
+        IF (TypeUpdate(i) .EQ. Agrif_Update_Full_Weighting) THEN
+          positionmax = positionmax + ds_Child(i)
+        ENDIF        
+        ENDIF
+        ENDIF
+        imax = pttab_Child(i) +
+     &        agrif_int((positionmax-s_Child(i))/ds_Child(i))
+
+        positionmax = s_Child(i) + (imax -
+     &                                pttab_Child(i)) * ds_Child(i)
+
+        cetruetabwhole(i) = imax
+
+#endif
+C
+        s_Parent_temp(i) = s_Parent(i) + 
+     &                     (indmin(i) - pttab_Parent(i)) * 
+     &                      ds_Parent(i) 
+C     
+        s_Child_temp(i) = dim_newmin(i)
+
+#ifdef AGRIF_MPI
+        s_Child_temp(i) = positionmin
+#endif
+C
+      enddo
+C
+      Return
+C
+C
+      End Subroutine Agrif_Prtbounds
+C
+C
+C
+C
+
+C
+C
+C
+C     **************************************************************************  
+CCC   Subroutine Agrif_Update_2D_Recursive 
+C     **************************************************************************
+C
+      Subroutine Agrif_Update_2D_recursive(TypeUpdate,tempP,tempC,
+     &                                     indmin,indmax,
+     &                                     pttab_child,petab_child,
+     &                                     s_child,s_parent,
+     &                                     ds_child,ds_parent,nbdim)
+C
+CCC   Description:
+CCC   Subroutine to update a 2D grid variable on the parent grid. 
+CCC   It calls Agrif_Update_1D_Recursive and Agrif_UpdateBase.   
+C
+CC    Method:
+C
+C     Declarations:
+C
+      
+C     
+      INTEGER                   :: nbdim
+      INTEGER, DIMENSION(nbdim) :: TypeUpdate            ! TYPE of update (copy or average)
+      INTEGER, DIMENSION(nbdim) :: indmin,indmax
+      INTEGER, DIMENSION(nbdim) :: pttab_child,petab_child
+      REAL, DIMENSION(nbdim)    :: s_child,s_parent
+      REAL, DIMENSION(nbdim)    :: ds_child,ds_parent
+      REAL, DIMENSION(indmin(1):indmax(1),
+     &                indmin(2):indmax(2))           :: tempP
+C      REAL, DIMENSION(pttab_child(1):petab_child(1),
+C     &                pttab_child(2):petab_child(2)) :: tempC
+     
+      REAL, DIMENSION(:,:) :: tempC     
+C
+C     Local variables      
+      REAL, DIMENSION(indmin(1):indmax(1),
+     &                 pttab_child(2):petab_child(2)) :: tabtemp
+      REAL, DIMENSION(indmin(2):indmax(2),
+     &                indmin(1):indmax(1))           :: tempP_trsp
+      REAL, DIMENSION(pttab_child(2):petab_child(2),
+     &                 indmin(1):indmax(1)) :: tabtemp_trsp
+      INTEGER :: i,j
+      INTEGER :: coeffraf,locind_child_left
+C
+      tabtemp = 0.
+
+
+      coeffraf = nint ( ds_parent(1) / ds_child(1) ) 
+      IF((TypeUpdate(1) == AGRIF_Update_average) 
+     &                 .AND. (coeffraf /= 1 ))THEN
+!---CDIR NEXPAND
+         IF(.NOT. precomputedone(1) ) Call average1Dprecompute2D
+     &       (petab_child(2)-pttab_child(2)+1,
+     &        indmax(1)-indmin(1)+1,
+     &        petab_child(1)-pttab_child(1)+1,
+     &        s_parent(1),s_child(1),ds_parent(1),ds_child(1),1)
+!---CDIR NEXPAND
+          Call average1Daftercompute
+     &       (  tabtemp, tempC,
+     &          size(tabtemp), size(tempC),
+     &          s_parent(1),s_child(1),ds_parent(1),ds_child(1),1)
+ 
+      ELSEIF((TypeUpdate(1) == AGRIF_Update_copy)
+     &                 .AND. (coeffraf /= 1 ))THEN
+!---CDIR NEXPAND
+         IF(.NOT. precomputedone(1) ) Call copy1Dprecompute2D
+     &       (petab_child(2)-pttab_child(2)+1,
+     &        indmax(1)-indmin(1)+1,
+     &        petab_child(1)-pttab_child(1)+1,
+     &        s_parent(1),s_child(1),ds_parent(1),ds_child(1),1)
+!---CDIR NEXPAND
+          Call copy1Daftercompute
+     &       (  tabtemp, tempC,
+     &          size(tabtemp), size(tempC),
+     &          s_parent(1),s_child(1),ds_parent(1),ds_child(1),1)
+
+      ELSE
+      do j = pttab_child(nbdim),petab_child(nbdim)
+C
+!---CDIR NEXPAND
+        Call Agrif_Update_1D_recursive(TypeUpdate(1:nbdim-1),    
+     &         tabtemp(:,j),
+     &         tempC(:,j-pttab_child(nbdim)+1),
+     &         indmin(1:nbdim-1),indmax(1:nbdim-1),
+     &         pttab_child(1:nbdim-1),petab_child(1:nbdim-1),
+     &         s_child(1:nbdim-1),s_parent(1:nbdim-1),
+     &         ds_child(1:nbdim-1),ds_parent(1:nbdim-1),nbdim-1)
+C
+      enddo
+      ENDIF
+      tabtemp_trsp = TRANSPOSE(tabtemp) 
+      coeffraf = nint(ds_parent(nbdim)/ds_child(nbdim))
+    
+!---CDIR NEXPAND
+      Call Agrif_Compute_nbdim_update(s_parent(nbdim),s_child(nbdim),
+     &  ds_parent(nbdim),ds_child(nbdim),coeffraf,locind_child_left)
+C
+      
+      tempP_trsp = 0. 
+
+      IF((TypeUpdate(2) == AGRIF_Update_average)
+     &                .AND. (coeffraf /= 1 ))THEN
+!---CDIR NEXPAND
+         IF(.NOT. precomputedone(2) ) Call average1Dprecompute2D
+     &      ( indmax(1)-indmin(1)+1,
+     &        indmax(2)-indmin(2)+1,
+     &        petab_child(2)-pttab_child(2)+1,
+     &        s_parent(2),s_child(2),ds_parent(2),ds_child(2),2)
+!---CDIR NEXPAND
+          Call average1Daftercompute
+     &       (  tempP_trsp, tabtemp_trsp,
+     &          size(tempP_trsp), size(tabtemp_trsp),
+     &          s_parent(2),s_child(2),ds_parent(2),ds_child(2),2)
+
+      ELSEIF((TypeUpdate(2) == AGRIF_Update_copy)
+     &                .AND. (coeffraf /= 1 ))THEN
+!---CDIR NEXPAND
+         IF(.NOT. precomputedone(2) ) Call copy1Dprecompute2D
+     &      ( indmax(1)-indmin(1)+1,
+     &        indmax(2)-indmin(2)+1,
+     &        petab_child(2)-pttab_child(2)+1,
+     &        s_parent(2),s_child(2),ds_parent(2),ds_child(2),2)
+!---CDIR NEXPAND
+          Call copy1Daftercompute
+     &       (  tempP_trsp, tabtemp_trsp,
+     &          size(tempP_trsp), size(tabtemp_trsp),
+     &          s_parent(2),s_child(2),ds_parent(2),ds_child(2),2)
+
+      ELSE
+
+      do i = indmin(1),indmax(1)
+C
+!---CDIR NEXPAND
+        Call Agrif_UpdateBase(TypeUpdate(2),
+     &           tempP_trsp(indmin(nbdim):indmax(nbdim),i),
+     &          tabtemp_trsp(pttab_child(nbdim):petab_child(nbdim),i),
+     &           indmin(nbdim),indmax(nbdim),
+     &           pttab_child(nbdim),petab_child(nbdim),
+     &           s_parent(nbdim),s_child(nbdim),
+     &           ds_parent(nbdim),ds_child(nbdim),
+     &                  coeffraf,locind_child_left)
+C        
+      enddo
+      
+      ENDIF
+
+      tempP = TRANSPOSE(tempP_trsp)
+C
+      Return
+C
+C
+      End Subroutine Agrif_Update_2D_recursive
+C
+C
+C
+C     **************************************************************************  
+CCC   Subroutine Agrif_Update_3D_Recursive 
+C     **************************************************************************
+C
+      Subroutine Agrif_Update_3D_recursive(TypeUpdate,tempP,tempC,
+     &                                     indmin,indmax,   
+     &                                     pttab_child,petab_child,
+     &                                     s_child,s_parent,
+     &                                     ds_child,ds_parent,nbdim)
+C
+CCC   Description:
+CCC   Subroutine to update a 3D grid variable on the parent grid. 
+CCC   It calls Agrif_Update_2D_Recursive and Agrif_UpdateBase.   
+C
+CC    Method:
+C
+C     Declarations:
+C
+      
+C     
+      INTEGER                   :: nbdim
+      INTEGER, DIMENSION(nbdim) :: TypeUpdate            ! TYPE of update (copy or average)
+      INTEGER, DIMENSION(nbdim) :: indmin,indmax
+      INTEGER, DIMENSION(nbdim) :: pttab_child,petab_child
+      REAL, DIMENSION(nbdim)    :: s_child,s_parent
+      REAL, DIMENSION(nbdim)    :: ds_child,ds_parent
+      REAL, DIMENSION(indmin(1):indmax(1),
+     &                indmin(2):indmax(2),
+     &                indmin(3):indmax(3))           :: tempP
+      REAL, DIMENSION(pttab_child(1):petab_child(1),
+     &                pttab_child(2):petab_child(2),
+     &                pttab_child(3):petab_child(3)) :: tempC
+C
+C     Local variables      
+      REAL, DIMENSION(indmin(1):indmax(1),
+     &                 indmin(2):indmax(2), 
+     &                 pttab_child(3):petab_child(3)) :: tabtemp
+      INTEGER :: i,j,k
+      INTEGER :: coeffraf,locind_child_left
+      INTEGER :: kdeb
+C
+C
+      coeffraf = nint ( ds_parent(1) / ds_child(1) )
+      IF((TypeUpdate(1) == AGRIF_Update_average)
+     &                 .AND. (coeffraf /= 1 ))THEN
+!---CDIR NEXPAND
+         Call average1Dprecompute2D
+     &       (petab_child(2)-pttab_child(2)+1,
+     &        indmax(1)-indmin(1)+1,
+     &        petab_child(1)-pttab_child(1)+1,
+     &        s_parent(1),s_child(1),ds_parent(1),ds_child(1),1)
+      precomputedone(1) = .TRUE.
+      ELSEIF((TypeUpdate(1) == AGRIF_Update_copy)
+     &                 .AND. (coeffraf /= 1 ))THEN
+!---CDIR NEXPAND
+         Call copy1Dprecompute2D
+     &       (petab_child(2)-pttab_child(2)+1,
+     &        indmax(1)-indmin(1)+1,
+     &        petab_child(1)-pttab_child(1)+1,
+     &        s_parent(1),s_child(1),ds_parent(1),ds_child(1),1)
+      precomputedone(1) = .TRUE.
+      ENDIF
+
+      coeffraf = nint ( ds_parent(2) / ds_child(2) )
+      IF((TypeUpdate(2) == AGRIF_Update_average)
+     &                .AND. (coeffraf /= 1 ))THEN
+!---CDIR NEXPAND
+         Call average1Dprecompute2D
+     &      ( indmax(1)-indmin(1)+1,
+     &        indmax(2)-indmin(2)+1,
+     &        petab_child(2)-pttab_child(2)+1,
+     &        s_parent(2),s_child(2),ds_parent(2),ds_child(2),2)
+      precomputedone(2) = .TRUE.
+      ELSEIF((TypeUpdate(2) == AGRIF_Update_copy)
+     &                .AND. (coeffraf /= 1 ))THEN
+!---CDIR NEXPAND
+         Call copy1Dprecompute2D
+     &      ( indmax(1)-indmin(1)+1,
+     &        indmax(2)-indmin(2)+1,
+     &        petab_child(2)-pttab_child(2)+1,
+     &        s_parent(2),s_child(2),ds_parent(2),ds_child(2),2)
+      precomputedone(2) = .TRUE.
+      ENDIF
+
+
+      do k = pttab_child(nbdim),petab_child(nbdim)
+C
+        Call Agrif_Update_2D_recursive(TypeUpdate(1:nbdim-1),    
+     &         tabtemp(:,:,k),
+     &         tempC(:,:,k),
+     &         indmin(1:nbdim-1),indmax(1:nbdim-1),
+     &         pttab_child(1:nbdim-1),petab_child(1:nbdim-1),
+     &         s_child(1:nbdim-1),s_parent(1:nbdim-1),
+     &         ds_child(1:nbdim-1),ds_parent(1:nbdim-1),nbdim-1)
+C
+      enddo
+C
+      precomputedone(1) = .FALSE.
+      precomputedone(2) = .FALSE.
+      coeffraf = nint ( ds_parent(3) / ds_child(3) )
+
+      Call Agrif_Compute_nbdim_update(s_parent(nbdim),s_child(nbdim),
+     &  ds_parent(nbdim),ds_child(nbdim),coeffraf,locind_child_left)
+      
+      IF (coeffraf == 1) THEN
+      
+      kdeb = pttab_child(3)+locind_child_left-2
+      do k=indmin(3),indmax(3)
+      kdeb = kdeb + 1
+      do j = indmin(2),indmax(2)
+        do i = indmin(1),indmax(1)
+        tempP(i,j,k) = tabtemp(i,j,kdeb)
+      enddo
+      enddo
+      enddo
+              
+      ELSE
+      tempP = 0.
+C
+      do j = indmin(2),indmax(2)
+C
+        do i = indmin(1),indmax(1)
+C
+          Call Agrif_UpdateBase(TypeUpdate(3),
+     &           tempP(i,j,:),
+     &          tabtemp(i,j,:),
+     &           indmin(nbdim),indmax(nbdim),
+     &           pttab_child(nbdim),petab_child(nbdim),
+     &           s_parent(nbdim),s_child(nbdim),
+     &           ds_parent(nbdim),ds_child(nbdim),
+     &                  coeffraf,locind_child_left)
+C
+        enddo 
+C        
+      enddo
+      ENDIF
+C
+      Return
+C
+C
+      End Subroutine Agrif_Update_3D_recursive
+C
+C
+C
+C     **************************************************************************  
+CCC   Subroutine Agrif_Update_4D_Recursive 
+C     **************************************************************************
+C
+      Subroutine Agrif_Update_4D_recursive(TypeUpdate,tempP,tempC,
+     &                                     indmin,indmax,   
+     &                                     pttab_child,petab_child,
+     &                                     s_child,s_parent,
+     &                                     ds_child,ds_parent,nbdim)
+C
+CCC   Description:
+CCC   Subroutine to update a 4D grid variable on the parent grid. 
+CCC   It calls Agrif_Update_3D_Recursive and Agrif_UpdateBase.    
+C
+CC    Method:
+C
+C     Declarations:
+C
+      
+C     
+      INTEGER                   :: nbdim
+      INTEGER, DIMENSION(nbdim) :: TypeUpdate            ! TYPE of update (copy or average)
+      INTEGER, DIMENSION(nbdim) :: indmin,indmax
+      INTEGER, DIMENSION(nbdim) :: pttab_child,petab_child
+      REAL, DIMENSION(nbdim)    :: s_child,s_parent
+      REAL, DIMENSION(nbdim)    :: ds_child,ds_parent
+      REAL, DIMENSION(indmin(1):indmax(1),
+     &                indmin(2):indmax(2),
+     &                indmin(3):indmax(3),
+     &                indmin(4):indmax(4))           :: tempP
+      REAL, DIMENSION(pttab_child(1):petab_child(1),
+     &                pttab_child(2):petab_child(2),
+     &                pttab_child(3):petab_child(3),
+     &                pttab_child(4):petab_child(4)) :: tempC
+C
+C     Local variables      
+      REAL, DIMENSION(:,:,:,:), Allocatable :: tabtemp
+      INTEGER :: i,j,k,l
+      INTEGER :: coeffraf,locind_child_left
+C
+C
+      Allocate(tabtemp(indmin(1):indmax(1),
+     &                 indmin(2):indmax(2),
+     &                 indmin(3):indmax(3), 
+     &                 pttab_child(4):petab_child(4)))
+C
+      do l = pttab_child(nbdim),petab_child(nbdim)
+C
+        Call Agrif_Update_3D_recursive(TypeUpdate(1:nbdim-1),    
+     &         tabtemp(indmin(nbdim-3):indmax(nbdim-3),
+     &                 indmin(nbdim-2):indmax(nbdim-2),
+     &                 indmin(nbdim-1):indmax(nbdim-1),l),
+     &         tempC(pttab_child(nbdim-3):petab_child(nbdim-3),
+     &               pttab_child(nbdim-2):petab_child(nbdim-2),
+     &               pttab_child(nbdim-1):petab_child(nbdim-1),l),
+     &         indmin(1:nbdim-1),indmax(1:nbdim-1),
+     &         pttab_child(1:nbdim-1),petab_child(1:nbdim-1),
+     &         s_child(1:nbdim-1),s_parent(1:nbdim-1),
+     &         ds_child(1:nbdim-1),ds_parent(1:nbdim-1),nbdim-1)
+C
+      enddo
+      
+      Call Agrif_Compute_nbdim_update(s_parent(nbdim),s_child(nbdim),
+     &  ds_parent(nbdim),ds_child(nbdim),coeffraf,locind_child_left)
+C
+      tempP = 0.
+
+      do k = indmin(3),indmax(3)
+C
+        do j = indmin(2),indmax(2)
+C
+          do i = indmin(1),indmax(1)
+C
+            Call Agrif_UpdateBase(TypeUpdate(4),
+     &           tempP(i,j,k,indmin(nbdim):indmax(nbdim)),
+     &          tabtemp(i,j,k,pttab_child(nbdim):petab_child(nbdim)),
+     &           indmin(nbdim),indmax(nbdim),
+     &           pttab_child(nbdim),petab_child(nbdim),
+     &           s_parent(nbdim),s_child(nbdim),
+     &           ds_parent(nbdim),ds_child(nbdim),
+     &                  coeffraf,locind_child_left)
+C
+          enddo 
+C
+        enddo 
+C        
+      enddo
+C
+      Deallocate(tabtemp)
+C
+      Return
+C
+C
+      End Subroutine Agrif_Update_4D_recursive
+C
+C
+C
+C     **************************************************************************  
+CCC   Subroutine Agrif_Update_5D_Recursive 
+C     **************************************************************************
+C
+      Subroutine Agrif_Update_5D_recursive(TypeUpdate,tempP,tempC,
+     &                                     indmin,indmax,   
+     &                                     pttab_child,petab_child,
+     &                                     s_child,s_parent,
+     &                                     ds_child,ds_parent,nbdim)
+C
+CCC   Description:
+CCC   Subroutine to update a 5D grid variable on the parent grid. 
+CCC   It calls Agrif_Update_4D_Recursive and Agrif_UpdateBase.    
+C
+CC    Method:
+C
+C     Declarations:
+C
+      
+C     
+      INTEGER                   :: nbdim
+      INTEGER, DIMENSION(nbdim) :: TypeUpdate            ! TYPE of update (copy or average)
+      INTEGER, DIMENSION(nbdim) :: indmin,indmax
+      INTEGER, DIMENSION(nbdim) :: pttab_child,petab_child
+      REAL, DIMENSION(nbdim)    :: s_child,s_parent
+      REAL, DIMENSION(nbdim)    :: ds_child,ds_parent
+      REAL, DIMENSION(indmin(1):indmax(1),
+     &                indmin(2):indmax(2),
+     &                indmin(3):indmax(3),
+     &                indmin(4):indmax(4),
+     &                indmin(5):indmax(5))           :: tempP
+      REAL, DIMENSION(pttab_child(1):petab_child(1),
+     &                pttab_child(2):petab_child(2),
+     &                pttab_child(3):petab_child(3),
+     &                pttab_child(4):petab_child(4),
+     &                pttab_child(5):petab_child(5)) :: tempC
+C
+C     Local variables      
+      REAL, DIMENSION(:,:,:,:,:), Allocatable :: tabtemp
+      INTEGER :: i,j,k,l,m
+      INTEGER :: coeffraf,locind_child_left
+C
+C
+      Allocate(tabtemp(indmin(1):indmax(1),
+     &                 indmin(2):indmax(2),
+     &                 indmin(3):indmax(3),
+     &                 indmin(4):indmax(4),   
+     &                 pttab_child(5):petab_child(5)))
+C
+      do m = pttab_child(nbdim),petab_child(nbdim)
+C
+        Call Agrif_Update_4D_recursive(TypeUpdate(1:nbdim-1),    
+     &         tabtemp(indmin(nbdim-4):indmax(nbdim-4),
+     &                 indmin(nbdim-3):indmax(nbdim-3),
+     &                 indmin(nbdim-2):indmax(nbdim-2),
+     &                 indmin(nbdim-1):indmax(nbdim-1),m),
+     &         tempC(pttab_child(nbdim-4):petab_child(nbdim-4),
+     &               pttab_child(nbdim-3):petab_child(nbdim-3),
+     &               pttab_child(nbdim-2):petab_child(nbdim-2),
+     &               pttab_child(nbdim-1):petab_child(nbdim-1),m),
+     &         indmin(1:nbdim-1),indmax(1:nbdim-1),
+     &         pttab_child(1:nbdim-1),petab_child(1:nbdim-1),
+     &         s_child(1:nbdim-1),s_parent(1:nbdim-1),
+     &         ds_child(1:nbdim-1),ds_parent(1:nbdim-1),nbdim-1)
+C
+      enddo
+      
+      Call Agrif_Compute_nbdim_update(s_parent(nbdim),s_child(nbdim),
+     &  ds_parent(nbdim),ds_child(nbdim),coeffraf,locind_child_left)
+      tempP = 0.
+C
+      do l = indmin(4),indmax(4)
+C
+        do k = indmin(3),indmax(3)
+C
+          do j = indmin(2),indmax(2)
+C
+            do i = indmin(1),indmax(1)
+C
+              Call Agrif_UpdateBase(TypeUpdate(5),
+     &           tempP(i,j,k,l,indmin(nbdim):indmax(nbdim)),
+     &          tabtemp(i,j,k,l,
+     &                   pttab_child(nbdim):petab_child(nbdim)),
+     &           indmin(nbdim),indmax(nbdim),
+     &           pttab_child(nbdim),petab_child(nbdim),
+     &           s_parent(nbdim),s_child(nbdim),
+     &           ds_parent(nbdim),ds_child(nbdim),
+     &                  coeffraf,locind_child_left)
+C
+            enddo
+C
+          enddo 
+C
+        enddo 
+C        
+      enddo
+C
+      Deallocate(tabtemp)
+C
+      Return
+C
+C
+      End Subroutine Agrif_Update_5D_recursive
+C
+C
+C
+C
+C     **************************************************************************  
+CCC   Subroutine Agrif_Update_6D_Recursive 
+C     **************************************************************************
+C
+      Subroutine Agrif_Update_6D_recursive(TypeUpdate,tempP,tempC,
+     &                                     indmin,indmax,   
+     &                                     pttab_child,petab_child,
+     &                                     s_child,s_parent,
+     &                                     ds_child,ds_parent,nbdim)
+C
+CCC   Description:
+CCC   Subroutine to update a 6D grid variable on the parent grid. 
+CCC   It calls Agrif_Update_5D_Recursive and Agrif_UpdateBase.    
+C
+CC    Method:
+C
+C     Declarations:
+C
+      
+C     
+      INTEGER                   :: nbdim
+      INTEGER, DIMENSION(nbdim) :: TypeUpdate            ! TYPE of update (copy or average)
+      INTEGER, DIMENSION(nbdim) :: indmin,indmax
+      INTEGER, DIMENSION(nbdim) :: pttab_child,petab_child
+      REAL, DIMENSION(nbdim)    :: s_child,s_parent
+      REAL, DIMENSION(nbdim)    :: ds_child,ds_parent
+      REAL, DIMENSION(indmin(1):indmax(1),
+     &                indmin(2):indmax(2),
+     &                indmin(3):indmax(3),
+     &                indmin(4):indmax(4),
+     &                indmin(5):indmax(5),
+     &                indmin(6):indmax(6))           :: tempP
+      REAL, DIMENSION(pttab_child(1):petab_child(1),
+     &                pttab_child(2):petab_child(2),
+     &                pttab_child(3):petab_child(3),
+     &                pttab_child(4):petab_child(4),
+     &                pttab_child(5):petab_child(5),
+     &                pttab_child(6):petab_child(6)) :: tempC
+C
+C     Local variables      
+      REAL, DIMENSION(:,:,:,:,:,:), Allocatable :: tabtemp
+      INTEGER :: i,j,k,l,m,n
+      INTEGER :: coeffraf,locind_child_left
+C
+C
+      Allocate(tabtemp(indmin(1):indmax(1),
+     &                 indmin(2):indmax(2),
+     &                 indmin(3):indmax(3),
+     &                 indmin(4):indmax(4),   
+     &                 indmin(5):indmax(5),   
+     &                 pttab_child(6):petab_child(6)))
+C
+      do n = pttab_child(nbdim),petab_child(nbdim)
+C
+        Call Agrif_Update_5D_recursive(TypeUpdate(1:nbdim-1),    
+     &         tabtemp(indmin(nbdim-5):indmax(nbdim-5),
+     &                 indmin(nbdim-4):indmax(nbdim-4),
+     &                 indmin(nbdim-3):indmax(nbdim-3),
+     &                 indmin(nbdim-2):indmax(nbdim-2),
+     &                 indmin(nbdim-1):indmax(nbdim-1),n),
+     &         tempC(pttab_child(nbdim-5):petab_child(nbdim-5),
+     &               pttab_child(nbdim-4):petab_child(nbdim-4),
+     &               pttab_child(nbdim-3):petab_child(nbdim-3),
+     &               pttab_child(nbdim-2):petab_child(nbdim-2),
+     &               pttab_child(nbdim-1):petab_child(nbdim-1),n),
+     &         indmin(1:nbdim-1),indmax(1:nbdim-1),
+     &         pttab_child(1:nbdim-1),petab_child(1:nbdim-1),
+     &         s_child(1:nbdim-1),s_parent(1:nbdim-1),
+     &         ds_child(1:nbdim-1),ds_parent(1:nbdim-1),nbdim-1)
+C
+      enddo
+      
+      Call Agrif_Compute_nbdim_update(s_parent(nbdim),s_child(nbdim),
+     &  ds_parent(nbdim),ds_child(nbdim),coeffraf,locind_child_left)
+C
+      tempP = 0.
+
+      do m = indmin(5),indmax(5)
+      do l = indmin(4),indmax(4)
+C
+        do k = indmin(3),indmax(3)
+C
+          do j = indmin(2),indmax(2)
+C
+            do i = indmin(1),indmax(1)
+C
+              Call Agrif_UpdateBase(TypeUpdate(6),
+     &           tempP(i,j,k,l,m,indmin(nbdim):indmax(nbdim)),
+     &          tabtemp(i,j,k,l,m,
+     &                   pttab_child(nbdim):petab_child(nbdim)),
+     &           indmin(nbdim),indmax(nbdim),
+     &           pttab_child(nbdim),petab_child(nbdim),
+     &           s_parent(nbdim),s_child(nbdim),
+     &           ds_parent(nbdim),ds_child(nbdim),
+     &                  coeffraf,locind_child_left)
+C
+            enddo
+C
+          enddo 
+C
+        enddo 
+C        
+      enddo
+      enddo
+C
+      Deallocate(tabtemp)
+C
+      Return
+C
+C
+      End Subroutine Agrif_Update_6D_recursive
+C
+C
+C
+C     **************************************************************************  
+CCC   Subroutine Agrif_UpdateBase  
+C     **************************************************************************  
+C  
+      Subroutine Agrif_UpdateBase(TypeUpdate,
+     &                            parenttab,childtab,
+     &                            indmin,indmax,pttab_child,petab_child,
+     &                            s_parent,s_child,ds_parent,ds_child,
+     &                            coeffraf,locind_child_left)
+C
+CCC   Description:
+CCC   Subroutine calling the updating method chosen by the user (copy, average
+CCC   or full-weighting).    
+C
+CC    Method:
+C
+C     Declarations:
+C
+      
+C
+      INTEGER :: TypeUpdate
+      INTEGER :: indmin,indmax
+      INTEGER :: pttab_child,petab_child
+      REAL,DIMENSION(indmin:indmax)           :: parenttab       
+      REAL,DIMENSION(pttab_child:petab_child) :: childtab      
+      REAL    :: s_parent,s_child
+      REAL    :: ds_parent,ds_child      
+      INTEGER :: coeffraf,locind_child_left
+C
+C
+      if (TypeUpdate == AGRIF_Update_copy) then
+C             
+          Call agrif_copy1D
+     &       (parenttab,childtab,
+     &          indmax-indmin+1,petab_child-pttab_child+1,
+     &          s_parent,s_child,ds_parent,ds_child)     
+C
+        elseif (TypeUpdate == AGRIF_Update_average) then
+C           
+          Call average1D
+     &       (parenttab,childtab,
+     &          indmax-indmin+1,petab_child-pttab_child+1,
+     &          s_parent,s_child,ds_parent,ds_child) 
+C
+        elseif (TypeUpdate == AGRIF_Update_full_weighting) then
+C             
+          Call full_weighting1D
+     &       (parenttab,childtab,
+     &          indmax-indmin+1,petab_child-pttab_child+1,
+     &          s_parent,s_child,ds_parent,ds_child,
+     &          coeffraf,locind_child_left)
+C
+      endif 
+C
+      Return                
+C
+C      
+      End Subroutine Agrif_UpdateBase
+C
+C
+
+      Subroutine Agrif_Compute_nbdim_update(s_parent,s_child,
+     &  ds_parent,ds_child,coeffraf,locind_child_left)
+      real :: s_parent,s_child,ds_parent,ds_child
+      integer :: coeffraf,locind_child_left
+     
+      coeffraf = nint(ds_parent/ds_child)
+      locind_child_left = 1 + agrif_int((s_parent-s_child)/ds_child)
+      
+      End Subroutine Agrif_Compute_nbdim_update
+ 
+#if defined AGRIF_MPI      
+      Subroutine Agrif_Find_list_update(list_update,pttab,petab,
+     &                          pttab_Child,pttab_Parent,nbdim,
+     &     find_list_update,tab4t,tab5t,memberinall,memberinall2,
+     &     sendtoproc1,recvfromproc1,sendtoproc2,recvfromproc2)     
+      TYPE(Agrif_List_Interp_Loc), Pointer :: list_update
+      INTEGER :: nbdim
+      INTEGER,DIMENSION(nbdim)   :: pttab,petab,pttab_Child,pttab_Parent
+      LOGICAL :: find_list_update
+      Type(Agrif_List_Interp_loc), Pointer :: parcours
+      INTEGER :: i
+C
+      INTEGER,DIMENSION(nbdim,0:Agrif_Nbprocs-1,8) :: tab4t
+      INTEGER,DIMENSION(nbdim,0:Agrif_Nbprocs-1,8) :: tab5t      
+      LOGICAL, DIMENSION(0:Agrif_Nbprocs-1) :: memberinall,memberinall2
+      LOGICAL, DIMENSION(0:Agrif_Nbprocs-1) :: sendtoproc1,recvfromproc1      
+      LOGICAL, DIMENSION(0:Agrif_Nbprocs-1) :: sendtoproc2,recvfromproc2      
+                    
+      find_list_update = .FALSE.
+      
+      parcours => list_update
+      
+      Find_loop :   Do While (associated(parcours))
+        Do i=1,nbdim
+          IF ((pttab(i) /= parcours%interp_loc%pttab(i)).OR.
+     &        (petab(i) /= parcours%interp_loc%petab(i)).OR.
+     &        (pttab_child(i) /= parcours%interp_loc%pttab_child(i)).OR.
+     &        (pttab_parent(i) /= parcours%interp_loc%pttab_parent(i)))
+     &               THEN
+            parcours=>parcours%suiv
+            Cycle Find_loop
+          ENDIF
+        EndDo
+        
+        tab4t = parcours%interp_loc%tab4t(1:nbdim,0:Agrif_Nbprocs-1,1:8)
+        memberinall = parcours%interp_loc%memberinall(0:Agrif_Nbprocs-1)
+        
+        tab5t = parcours%interp_loc%tab5t(1:nbdim,0:Agrif_Nbprocs-1,1:8)
+        memberinall2 = 
+     &       parcours%interp_loc%memberinall2(0:Agrif_Nbprocs-1)
+        sendtoproc1 = 
+     &       parcours%interp_loc%sendtoproc1(0:Agrif_Nbprocs-1)   
+        recvfromproc1 = 
+     &       parcours%interp_loc%recvfromproc1(0:Agrif_Nbprocs-1)     
+        sendtoproc2 = 
+     &       parcours%interp_loc%sendtoproc2(0:Agrif_Nbprocs-1)   
+        recvfromproc2 = 
+     &       parcours%interp_loc%recvfromproc2(0:Agrif_Nbprocs-1)          
+        
+        find_list_update = .TRUE.   
+        Exit Find_loop
+      End Do Find_loop  
+                              
+      End Subroutine Agrif_Find_list_update  
+      
+      Subroutine Agrif_AddTo_list_update(list_update,pttab,petab,
+     &                          pttab_Child,pttab_Parent,nbdim
+     &      ,tab4t,tab5t,memberinall,memberinall2,
+     &      sendtoproc1,recvfromproc1,sendtoproc2,recvfromproc2)
+          
+      TYPE(Agrif_List_Interp_Loc), Pointer :: list_update
+      INTEGER :: nbdim
+      INTEGER,DIMENSION(nbdim)   :: pttab,petab,pttab_Child,pttab_Parent
+      INTEGER,DIMENSION(nbdim,0:Agrif_Nbprocs-1,8) :: tab4t
+      INTEGER,DIMENSION(nbdim,0:Agrif_Nbprocs-1,8) :: tab5t      
+      LOGICAL,DIMENSION(0:Agrif_Nbprocs-1) :: memberinall, memberinall2
+      LOGICAL,DIMENSION(0:Agrif_Nbprocs-1) :: sendtoproc1, recvfromproc1      
+      LOGICAL,DIMENSION(0:Agrif_Nbprocs-1) :: sendtoproc2, recvfromproc2
+
+      Type(Agrif_List_Interp_loc), Pointer :: parcours
+            
+       Allocate(parcours)
+      Allocate(parcours%interp_loc)
+      
+      parcours%interp_loc%pttab(1:nbdim) = pttab(1:nbdim)
+      parcours%interp_loc%petab(1:nbdim) = petab(1:nbdim)
+      parcours%interp_loc%pttab_child(1:nbdim) = pttab_child(1:nbdim)
+      parcours%interp_loc%pttab_parent(1:nbdim) = pttab_parent(1:nbdim)
+      Allocate(parcours%interp_loc%tab4t(nbdim,0:Agrif_Nbprocs-1,8))
+      Allocate(parcours%interp_loc%memberinall(0:Agrif_Nbprocs-1))
+      
+      Allocate(parcours%interp_loc%tab5t(nbdim,0:Agrif_Nbprocs-1,8))
+      Allocate(parcours%interp_loc%memberinall2(0:Agrif_Nbprocs-1))
+      Allocate(parcours%interp_loc%sendtoproc1(0:Agrif_Nbprocs-1))
+      Allocate(parcours%interp_loc%recvfromproc1(0:Agrif_Nbprocs-1))      
+      Allocate(parcours%interp_loc%sendtoproc2(0:Agrif_Nbprocs-1))
+      Allocate(parcours%interp_loc%recvfromproc2(0:Agrif_Nbprocs-1))            
+            
+      parcours%interp_loc%tab4t=tab4t   
+      parcours%interp_loc%memberinall=memberinall
+ 
+      parcours%interp_loc%tab5t=tab5t   
+      parcours%interp_loc%memberinall2=memberinall2
+      parcours%interp_loc%sendtoproc1=sendtoproc1   
+      parcours%interp_loc%recvfromproc1=recvfromproc1      
+      parcours%interp_loc%sendtoproc2=sendtoproc2       
+      parcours%interp_loc%recvfromproc2=recvfromproc2      
+            
+      parcours%suiv => list_update
+      
+      list_update => parcours
+      
+      End Subroutine Agrif_Addto_list_update
+#endif
+           
+
+C     **************************************************************************
+CCC   Subroutine Agrif_Update_1D_Recursive
+C     **************************************************************************
+C
+      Subroutine Agrif_Update_1D_recursive(TypeUpdate,tempP,tempC,
+     &                                     indmin,indmax,
+     &                                     pttab_child,petab_child,
+     &                                     s_child,s_parent,
+     &                                     ds_child,ds_parent,nbdim)
+C
+CCC   Description:
+CCC   Subroutine to update a 1D grid variable on the parent grid.
+C
+CC    Method:
+C
+C     Declarations:
+C
+      
+C
+C     Arguments
+      INTEGER                   :: nbdim
+      INTEGER, DIMENSION(nbdim) :: TypeUpdate            ! TYPE of update (copy or average)
+      INTEGER, DIMENSION(nbdim) :: indmin,indmax
+      INTEGER, DIMENSION(nbdim) :: pttab_child,petab_child
+      REAL, DIMENSION(nbdim)    :: s_child,s_parent
+      REAL, DIMENSION(nbdim)    :: ds_child,ds_parent
+      REAL, DIMENSION(indmin(nbdim):indmax(nbdim))           :: tempP
+      REAL, DIMENSION(pttab_child(nbdim):petab_child(nbdim)) :: tempC
+      INTEGER :: coeffraf,locind_child_left
+C
+C
+      Call Agrif_Compute_nbdim_update(s_parent(nbdim),s_child(nbdim),
+     &  ds_parent(nbdim),ds_child(nbdim),coeffraf,locind_child_left)
+      
+      Call Agrif_UpdateBase(TypeUpdate(1),
+     &                  tempP(indmin(nbdim):indmax(nbdim)),
+     &                  tempC(pttab_child(nbdim):petab_child(nbdim)),
+     &                  indmin(nbdim),indmax(nbdim),           
+     &                  pttab_child(nbdim),petab_child(nbdim),
+     &                  s_parent(nbdim),s_child(nbdim),
+     &                  ds_parent(nbdim),ds_child(nbdim),
+     &                  coeffraf,locind_child_left)
+
+C
+      Return
+C
+C
+      End Subroutine Agrif_Update_1D_recursive      
+
+      End Module Agrif_Update
Index: /vendors/AGRIF/r_00/AGRIF_FILES/modupdatebasic.F
===================================================================
--- /vendors/AGRIF/r_00/AGRIF_FILES/modupdatebasic.F	(revision 1902)
+++ /vendors/AGRIF/r_00/AGRIF_FILES/modupdatebasic.F	(revision 1902)
@@ -0,0 +1,646 @@
+!
+! $Id: modupdatebasic.F 779 2007-12-22 17:04:17Z rblod $
+!
+C     AGRIF (Adaptive Grid Refinement In Fortran)
+C
+C     Copyright (C) 2003 Laurent Debreu (Laurent.Debreu@imag.fr)
+C                        Christophe Vouland (Christophe.Vouland@imag.fr)    
+C
+C     This program is free software; you can redistribute it and/or modify
+C     it under the terms of the GNU General Public License as published by
+C     the Free Software Foundation; either version 2 of the License, or
+C     (at your option) any later version.
+C
+C     This program is distributed in the hope that it will be useful,
+C     but WITHOUT ANY WARRANTY; without even the implied warranty of
+C     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+C     GNU General Public License for more details.
+C
+C     You should have received a copy of the GNU General Public License
+C     along with this program; if not, write to the Free Software
+C     Foundation, Inc., 59 Temple Place -  Suite 330, Boston, MA 02111-1307, USA.
+C
+C
+C
+CCC   Module Agrif_Updatebasic
+C      
+C
+      Module Agrif_Updatebasic
+C
+CCC   Description:
+CCC   Module containing different procedures of update (copy,average,
+CCC   full_weighting) used in the Agrif_Update module.
+C
+C     Modules used:
+C
+      USE Agrif_types
+      
+      IMPLICIT NONE
+      
+      integer,dimension(:,:),allocatable :: indchildcopy
+      integer,dimension(:,:),allocatable :: indchildaverage
+C             
+
+      CONTAINS
+C     Define procedures contained in this module
+C
+C
+C
+C     **************************************************************************  
+CCC   Subroutine Copy1d  
+C     ************************************************************************** 
+C
+      Subroutine agrif_copy1d(x,y,np,nc,
+     &                  s_parent,s_child,ds_parent,ds_child) 
+C
+CCC   Description:
+CCC   Subroutine to do a copy on a parent grid (vector x) from its child grid 
+CCC   (vector y).  
+C
+CC    Method:
+C
+C     Declarations:
+C
+      
+C        
+C     Arguments
+      INTEGER             :: np,nc      
+      REAL, DIMENSION(np) :: x      
+      REAL, DIMENSION(nc) :: y  
+      REAL                :: s_parent,s_child
+      REAL                :: ds_parent,ds_child
+C
+C     Local variables
+      INTEGER :: i,locind_child_left,coeffraf
+C 
+C
+      coeffraf = nint(ds_parent/ds_child)
+C
+      if (coeffraf == 1) then
+C
+          locind_child_left = 1 + nint((s_parent - s_child)/ds_child)
+C        
+!CDIR ALTCODE
+          x(1:np) = y(locind_child_left:locind_child_left+np-1)
+C
+          return
+C
+      endif
+C
+      
+      locind_child_left = 1 + nint((s_parent - s_child)/ds_child)
+      
+!CDIR ALTCODE
+      do i = 1,np
+C      
+         x(i) = y(locind_child_left)
+C
+         locind_child_left = locind_child_left + coeffraf
+C         
+      enddo    
+       
+C
+      Return 
+C
+C
+      End Subroutine agrif_copy1d
+
+C     **************************************************************************  
+CCC   Subroutine Copy1dprecompute  
+C     ************************************************************************** 
+C
+      Subroutine copy1dprecompute2d(nc2,np,nc,
+     &                  s_parent,s_child,ds_parent,ds_child,dir)
+C
+CCC   Description:
+CCC   Subroutine to precompute index for a copy on a parent grid (vector x) from
+CCC   its child grid (vector y).
+C
+CC    Method:
+C
+C     Declarations:
+C
+
+C        
+C     Arguments
+      INTEGER             :: nc2,np,nc
+      INTEGER             :: dir   
+      REAL                :: s_parent,s_child
+      REAL                :: ds_parent,ds_child
+C
+C     Local variables
+      INTEGER,DIMENSION(:,:),ALLOCATABLE :: indchildcopy_tmp
+      INTEGER :: i,locind_child_left,coeffraf
+C 
+C
+      coeffraf = nint(ds_parent/ds_child)
+C
+      locind_child_left = 1 + nint((s_parent - s_child)/ds_child)
+
+      if (.not.allocated(indchildcopy)) then
+      allocate(indchildcopy(np*nc2,3))
+      else
+      if (size(indchildcopy,1)<np*nc2) then
+      allocate( indchildcopy_tmp(
+     &         size(indchildcopy,1),size(indchildcopy,2)))
+      indchildcopy_tmp = indchildcopy
+      deallocate(indchildcopy)
+      allocate(indchildcopy(np*nc2,3))
+      indchildcopy(1:size(indchildcopy_tmp,1),
+     &              1:size(indchildcopy_tmp,2)) = indchildcopy_tmp
+      deallocate(indchildcopy_tmp)
+      endif
+      endif
+
+
+      do i = 1,np
+C      
+         indchildcopy(i,dir) = locind_child_left
+         locind_child_left = locind_child_left + coeffraf
+C         
+      enddo
+
+      do i =2, nc2
+        indchildcopy(1+(i-1)*np:i*np,dir)=
+     &       indchildcopy(1+(i-2)*np:(i-1)*np,dir) + nc 
+      enddo
+
+C
+      Return
+C
+C
+      End Subroutine copy1dprecompute2d
+
+C
+C
+C     **************************************************************************  
+CCC   Subroutine Copy1dprecompute  
+C     ************************************************************************** 
+C
+      Subroutine copy1dprecompute(np,nc,
+     &                  s_parent,s_child,ds_parent,ds_child,dir)
+C
+CCC   Description:
+CCC   Subroutine to precompute index for a copy on a parent grid (vector x) from
+CCC   its child grid (vector y).
+C
+CC    Method:
+C
+C     Declarations:
+C
+
+C        
+C     Arguments
+      INTEGER             :: np,nc
+      INTEGER             :: dir
+      REAL                :: s_parent,s_child
+      REAL                :: ds_parent,ds_child
+C
+C     Local variables
+      INTEGER :: i,locind_child_left,coeffraf
+C 
+C
+      coeffraf = nint(ds_parent/ds_child)
+C
+      locind_child_left = 1 + nint((s_parent - s_child)/ds_child)
+
+      if (.not.allocated(indchildcopy)) then
+      allocate(indchildcopy(np,1))
+      else
+      if (size(indchildcopy)<np) then
+      deallocate(indchildcopy)
+      allocate(indchildcopy(np,1))
+      endif
+      endif
+
+!CDIR ALTCODE
+      do i = 1,np
+C      
+         indchildcopy(i,1) = locind_child_left
+         locind_child_left = locind_child_left + coeffraf
+C         
+      enddo
+
+C
+      Return
+C
+C
+      End Subroutine copy1dprecompute
+C
+C
+C     **************************************************************************  
+CCC   Subroutine Copy1daftercompute  
+C     ************************************************************************** 
+C
+      Subroutine copy1daftercompute(x,y,np,nc,
+     &                  s_parent,s_child,ds_parent,ds_child,dir)
+C
+CCC   Description:
+CCC   Subroutine to do a copy on a parent grid (vector x) from its child grid 
+CCC   (vector y) using precomputed index.  
+C
+CC    Method:
+C
+C     Declarations:
+C
+  
+C        
+C     Arguments
+      INTEGER             :: np,nc
+      INTEGER             :: dir
+      REAL, DIMENSION(np) :: x
+      REAL, DIMENSION(nc) :: y
+      REAL                :: s_parent,s_child
+      REAL                :: ds_parent,ds_child
+C
+C     Local variables
+      INTEGER :: i
+C 
+C
+      
+!CDIR ALTCODE
+      do i = 1,np
+C      
+         x(i) = y(indchildcopy(i,dir))
+C
+      enddo
+  
+C
+      Return
+C
+C
+      End Subroutine copy1daftercompute
+
+
+C
+C     **************************************************************************  
+CCC   Subroutine Average1d  
+C     ************************************************************************** 
+C   
+      Subroutine average1d(x,y,np,nc,
+     &                     s_parent,s_child,ds_parent,ds_child) 
+C
+CCC   Description:
+CCC   Subroutine to do an update by average on a parent grid (vector x)from its 
+CCC   child grid (vector y).
+C
+C     Arguments
+      INTEGER             :: np,nc      
+      REAL, DIMENSION(np) :: x      
+      REAL, DIMENSION(nc) :: y  
+      REAL                :: s_parent,s_child
+      REAL                :: ds_parent,ds_child
+C
+C     Local variables
+      INTEGER :: i,locind_child_left,coeffraf,ii
+      REAL    :: xpos, invcoeffraf 
+      INTEGER :: nbnonnuls
+      INTEGER :: diffmod
+C 
+C
+      coeffraf = nint(ds_parent/ds_child)
+      invcoeffraf = 1./coeffraf
+C
+      if (coeffraf == 1) then
+C
+          locind_child_left = 1 + nint((s_parent - s_child)/ds_child)
+C        
+          x(1:np) = y(locind_child_left:locind_child_left+np-1)
+C
+          return
+C
+      endif
+C
+      xpos = s_parent      
+      
+      x = 0.
+C
+      diffmod = 0
+      
+      IF ( mod(coeffraf,2) == 0 ) diffmod = 1
+
+        locind_child_left = 1 + agrif_int((xpos - s_child)/ds_child)
+C
+      IF (Agrif_UseSpecialValueInUpdate) THEN
+
+      do i = 1,np
+          nbnonnuls = 0
+!CDIR NOVECTOR
+          Do ii = -coeffraf/2+locind_child_left+diffmod,
+     &                coeffraf/2+locind_child_left
+C 
+               IF (y(ii) .NE. Agrif_SpecialValueFineGrid) THEN
+               nbnonnuls = nbnonnuls + 1
+               x(i) = x(i) + y(ii)
+               ENDIF
+          End Do
+               IF (nbnonnuls .NE. 0) THEN
+                  x(i) = x(i)/nbnonnuls
+               ELSE
+                  x(i) = Agrif_SpecialValueFineGrid
+               ENDIF
+        locind_child_left = locind_child_left + coeffraf
+      enddo
+
+      ELSE 
+
+!CDIR ALTCODE
+      do i = 1,np
+!CDIR NOVECTOR
+          Do ii = -coeffraf/2+locind_child_left+diffmod,
+     &                coeffraf/2+locind_child_left
+C 
+               x(i) = x(i) + y(ii)
+          End Do
+                 x(i) = x(i)*invcoeffraf
+        locind_child_left = locind_child_left + coeffraf
+      enddo
+
+      ENDIF
+
+      Return 
+C            
+C     
+      End Subroutine average1d
+      
+      Subroutine average1dprecompute2d(nc2,np,nc,
+     &                     s_parent,s_child,ds_parent,ds_child,dir)
+C
+CCC   Description:
+CCC   Subroutine to do an update by average on a parent grid (vector x)from its 
+CCC   child grid (vector y).
+C
+C     Arguments
+      INTEGER             :: nc2,np,nc,dir
+      REAL                :: s_parent,s_child
+      REAL                :: ds_parent,ds_child
+C
+C     Local variables
+      INTEGER :: i,locind_child_left,coeffraf,ii
+      INTEGER,DIMENSION(:,:),ALLOCATABLE :: indchildaverage_tmp
+      REAL    :: xpos, invcoeffraf
+      INTEGER :: nbnonnuls
+      INTEGER :: diffmod
+C 
+C
+      coeffraf = nint(ds_parent/ds_child)
+C
+      xpos = s_parent
+C
+      diffmod = 0
+
+      IF ( mod(coeffraf,2) == 0 ) diffmod = 1
+
+      locind_child_left = 1 + agrif_int((xpos - s_child)/ds_child)
+
+      if (.not.allocated(indchildaverage)) then
+      allocate(indchildaverage(np*nc2,3))
+      else
+      if (size(indchildaverage,1)<np*nc2) then
+      allocate( indchildaverage_tmp(
+     &         size(indchildaverage,1),size(indchildaverage,2)))
+      indchildaverage_tmp = indchildaverage
+      deallocate(indchildaverage)
+      allocate(indchildaverage(np*nc2,3))
+      indchildaverage(1:size(indchildaverage_tmp,1),
+     &              1:size(indchildaverage_tmp,2)) = indchildaverage_tmp
+      deallocate(indchildaverage_tmp)
+      endif
+      endif
+
+      do i = 1,np
+        indchildaverage(i,dir)= -coeffraf/2+locind_child_left
+     &                                    +diffmod
+        locind_child_left = locind_child_left + coeffraf
+      enddo
+      do i = 2,nc2
+        indchildaverage(1+(i-1)*np:i*np,dir)= 
+     &                 indchildaverage(1+(i-2)*np:(i-1)*np,dir) + nc 
+      enddo
+
+      Return 
+C            
+C     
+      End Subroutine average1dprecompute2d
+      
+
+      Subroutine average1dprecompute(np,nc,
+     &                     s_parent,s_child,ds_parent,ds_child) 
+C
+CCC   Description:
+CCC   Subroutine to do an update by average on a parent grid (vector x)from its 
+CCC   child grid (vector y).
+C
+C     Arguments
+      INTEGER             :: np,nc 
+      REAL                :: s_parent,s_child
+      REAL                :: ds_parent,ds_child
+C
+C     Local variables
+      INTEGER :: i,locind_child_left,coeffraf,ii
+      REAL    :: xpos, invcoeffraf 
+      INTEGER :: nbnonnuls
+      INTEGER :: diffmod
+C 
+C
+      coeffraf = nint(ds_parent/ds_child)
+
+C
+      if (coeffraf == 1) then
+C
+          return
+C
+      endif
+            
+C
+      xpos = s_parent
+C
+      diffmod = 0
+      
+      IF ( mod(coeffraf,2) == 0 ) diffmod = 1
+
+        locind_child_left = 1 + agrif_int((xpos - s_child)/ds_child)
+
+      if (.not.allocated(indchildaverage)) then
+      allocate(indchildaverage(np,1))
+      else
+      if (size(indchildaverage,1)<np) then
+      deallocate(indchildaverage)
+      allocate(indchildaverage(np,1))
+      endif
+      endif
+      
+!CDIR ALTCODE
+      do i = 1,np
+C 
+        indchildaverage(i,1)=-coeffraf/2+locind_child_left+diffmod
+        locind_child_left = locind_child_left + coeffraf
+      enddo
+
+      Return 
+C            
+C     
+      End Subroutine average1dprecompute
+      
+      Subroutine average1daftercompute(x,y,np,nc,
+     &                     s_parent,s_child,ds_parent,ds_child,dir) 
+C
+CCC   Description:
+CCC   Subroutine to do an update by average on a parent grid (vector x)from its 
+CCC   child grid (vector y).
+C
+C     Arguments
+      INTEGER             :: np,nc,dir      
+      REAL, DIMENSION(np) :: x      
+      REAL, DIMENSION(nc) :: y  
+      REAL                :: s_parent,s_child
+      REAL                :: ds_parent,ds_child
+C
+C     Local variables
+      INTEGER :: i,locind_child_left,coeffraf,ii,j
+      REAL    :: xpos, invcoeffraf 
+      REAL, PARAMETER :: one_third=1./3.
+      INTEGER, DIMENSION(np) :: nbnonnuls
+      INTEGER :: diffmod
+      REAL, DIMENSION(0:5) :: invcoeff=(/1.,1.,0.5,one_third,0.25,0.2/)
+C 
+C
+      coeffraf = nint(ds_parent/ds_child)
+      invcoeffraf = 1./coeffraf      
+C      
+C
+      IF (Agrif_UseSpecialValueInUpdate) THEN
+
+      nbnonnuls = 0
+      do  j =1, coeffraf
+          do i=1, np
+               IF (y(indchildaverage(i,dir) + j -1) .NE. 
+     &               Agrif_SpecialValueFineGrid) THEN
+               nbnonnuls(i) = nbnonnuls(i) + 1
+               x(i) = x(i) +  y(indchildaverage(i,dir) + j -1 )
+               ENDIF
+          End Do
+      enddo
+      do i=1,np
+      x(i)= x(i)*invcoeff(nbnonnuls(i)) 
+      enddo
+
+      ELSE
+!CDIR NOLOOPCHG
+      do  j =1, coeffraf
+!CDIR VECTOR
+          do i=1, np
+             x(i) = x(i) + y(indchildaverage(i,dir) + j -1 )
+          enddo
+      enddo
+       x = x * invcoeffraf
+      ENDIF
+
+      Return 
+C            
+C     
+      End Subroutine average1daftercompute            
+C
+C
+C
+C     **************************************************************************  
+CCC   Subroutine Full_weighting1d  
+C     **************************************************************************  
+C
+      Subroutine full_weighting1D(x,y,np,nc,
+     &                            s_parent,s_child,ds_parent,ds_child,
+     &                            coeffraf,locind_child_left) 
+C
+CCC   Description:
+CCC   Subroutine to do an update by full_weighting on a parent grid (vector x) 
+CCC   from its child grid (vector y).
+C 
+C     Arguments
+      INTEGER             :: np,nc      
+      REAL, DIMENSION(np) :: x      
+      REAL, DIMENSION(nc) :: y  
+      REAL                :: s_parent,s_child
+      REAL                :: ds_parent,ds_child
+C
+C     Local variables
+      INTEGER :: i,locind_child_left,coeffraf
+      REAL    :: xpos,sumweight,weight
+      INTEGER :: ii,diffmod
+      REAL :: xposfin
+      INTEGER :: it1,it2
+      INTEGER :: i1,i2
+      REAL :: invsumweight
+      REAL :: weights(-(coeffraf-1):coeffraf-1)
+      
+C
+C
+      if (coeffraf == 1) then
+C        
+          x(1:np) = y(locind_child_left:locind_child_left+np-1)
+C
+          return
+C
+      endif
+C
+      xpos = s_parent      
+      
+       x = 0.
+
+       xposfin = s_child + ds_child * (locind_child_left - 1)
+       IF (abs(xposfin - xpos).LT.0.001) THEN
+          diffmod = 0
+       ELSE
+          diffmod = 1
+       ENDIF
+C
+             
+       it1 = -(coeffraf-1)
+       i1 = -(coeffraf-1)+locind_child_left+diffmod
+       i2 = 2*coeffraf - 2
+       
+      invsumweight=1./coeffraf**2
+      do i=-(coeffraf-1),0
+        weights(i) = invsumweight*(coeffraf + i)
+      enddo
+      do i=1,coeffraf-1
+        weights(i) = invsumweight*(coeffraf - i)
+      enddo
+
+      sumweight = 0                    
+      do i = 1,np
+C
+          it2 = it1
+          Do ii = i1,i1+i2
+C
+           IF (Agrif_UseSpecialValueInUpdate) THEN
+            IF (y(ii) .NE. Agrif_SpecialValueFineGrid) THEN
+               x(i) = x(i) + weights(it2)*y(ii)
+               sumweight = sumweight+weights(it2)
+            ENDIF
+           ELSE           
+               x(i) = x(i) + weights(it2)*y(ii)
+           ENDIF           
+           
+          it2 = it2+1
+          End Do
+
+           IF (Agrif_UseSpecialValueInUpdate) THEN          
+                 IF (sumweight .NE. 0.) THEN
+                    x(i) = x(i)/sumweight
+                    sumweight = 0
+                 ELSE
+                    x(i) = Agrif_SpecialValueFineGrid
+                 ENDIF
+           ENDIF
+        
+        i1 = i1 + coeffraf
+C
+      enddo    
+C
+      Return 
+C            
+C
+      End Subroutine full_weighting1D 
+
+C
+      End module AGRIF_updatebasic
Index: /vendors/AGRIF/r_00/AGRIF_FILES/modutil.F
===================================================================
--- /vendors/AGRIF/r_00/AGRIF_FILES/modutil.F	(revision 1902)
+++ /vendors/AGRIF/r_00/AGRIF_FILES/modutil.F	(revision 1902)
@@ -0,0 +1,816 @@
+!
+! $Id: modutil.F 1793 2010-01-06 19:20:12Z rblod $
+!
+C     Agrif (Adaptive Grid Refinement In Fortran)
+C
+C     Copyright (C) 2003 Laurent Debreu (Laurent.Debreu@imag.fr)
+C                        Christophe Vouland (Christophe.Vouland@imag.fr)    
+C
+C     This program is free software; you can redistribute it and/or modify
+C     it under the terms of the GNU General Public License as published by
+C     the Free Software Foundation; either version 2 of the License, or
+C     (at your option) any later version.
+C
+C     This program is distributed in the hope that it will be useful,
+C     but WITHOUT ANY WARRANTY; without even the implied warranty of
+C     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+C     GNU General Public License for more details.
+C
+C     You should have received a copy of the GNU General Public License
+C     along with this program; if not, write to the Free Software
+C     Foundation, Inc., 59 Temple Place-  Suite 330, Boston, MA 02111-1307, USA.
+C
+C
+C
+CCC   Module Agrif_Util 
+C 
+      Module Agrif_Util 
+C
+C
+CCC   Description:   
+CCC   This module contains the two procedures called in the main program : 
+CCC   Agrif_Init_Grids allowing the initialization of the root coarse grid, and
+CCC   Agrif_Step allowing the creation of the grid hierarchy and the management
+CCC   of the time integration. 
+C
+C     Modules used:
+C
+      Use Agrif_Clustering    
+      Use Agrif_bcfunction
+C      
+      IMPLICIT NONE
+C
+      Contains
+C     Definition of procedures contained in this module.
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Step
+C     **************************************************************************
+C 
+      Subroutine Agrif_Step(procname) 
+C
+CCC   Description:
+CCC   Subroutine to create the grid hierarchy and to manage the time integration 
+CCC   procedure. It is called in the main program.
+C
+CC    Method:
+CC    Call on subroutines Agrif_Regrid and Agrif_Integrate.
+C
+C     Declarations:
+C
+      Optional :: procname
+      External :: procname
+C
+#ifdef AGRIF_MPI
+      Logical      :: mpi_was_called
+      Integer      :: code, ierr
+#include "mpif.h"
+C
+C
+      Call Agrif_comm_def(mpi_comm_agrif)
+
+      CALL mpi_initialized ( mpi_was_called, code )
+      IF( code /= MPI_SUCCESS ) THEN
+         WRITE(*, *) ': Error in routine mpi_initialized'
+         CALL mpi_abort( mpi_comm_world, code, ierr )
+      ENDIF
+
+      IF( .NOT. mpi_was_called ) THEN 
+         CALL mpi_comm_dup( mpi_comm_world, mpi_comm_agrif, code)
+         IF( code /= MPI_SUCCESS ) THEN
+            WRITE(*, *) ' Agrif_Step: Error in routine mpi_comm_dup'
+            CALL mpi_abort( mpi_comm_world, code, ierr )
+         ENDIF
+      ENDIF
+
+      If (Agrif_Mygrid % ngridstep == 0) Then
+          Call MPI_COMM_SIZE(MPI_COMM_AGRIF,Agrif_Nbprocs,code)
+          Call MPI_COMM_RANK(MPI_COMM_AGRIF,Agrif_ProcRank,code)
+          Call MPI_COMM_GROUP(MPI_COMM_AGRIF,Agrif_Group,code)
+      endif
+#endif
+C
+C     Creation and initialization of the grid hierarchy 
+C
+C  
+C    Set the clustering variables
+C
+      Call Agrif_clustering_def()
+C      
+      if ( Agrif_USE_ONLY_FIXED_GRIDS .EQ. 1 ) then
+C     
+         If (Agrif_Mygrid % ngridstep == 0) then
+C
+            Call Agrif_Regrid
+C 
+            Call Agrif_Instance           
+     &          (Agrif_Mygrid)           
+         endif
+C
+      else
+C    
+         If (mod(Agrif_Mygrid % ngridstep, Agrif_Regridding) == 0) then
+C
+            Call Agrif_Regrid
+C  
+            Call Agrif_Instance           
+     &          (Agrif_Mygrid)  
+C            
+         endif
+C
+      endif
+C
+C     Time integration of the grid hierarchy
+C
+      If (present(procname)) Then
+         Call Agrif_Integrate (Agrif_Mygrid,procname)
+      Else
+         Call Agrif_Integrate (Agrif_Mygrid)      
+      endif
+C    
+      If (associated(Agrif_Mygrid%child_grids)) 
+     &   Call Agrif_Instance (Agrif_Mygrid)
+C
+      Return
+C             
+      End Subroutine Agrif_Step      
+
+C     **************************************************************************
+CCC   Subroutine Agrif_Step_Child
+C     **************************************************************************
+C
+      Subroutine Agrif_Step_Child(procname)
+C
+CCC   Description:
+CCC   Subroutine to create the grid hierarchy and to manage the time integration
+CCC   procedure. It is called in the main program.
+C
+CC    Method:
+CC    Call on subroutines Agrif_Regrid and Agrif_Integrate.
+C
+C     Declarations:
+C
+      Optional :: procname
+      External :: procname
+C
+C     Time integration of the grid hierarchy
+C
+      If (present(procname)) Then
+         Call Agrif_Integrate_Child (Agrif_Mygrid,procname)
+      Else
+         Call Agrif_Integrate_Child (Agrif_Mygrid)
+      endif
+C    
+      If (associated(Agrif_Mygrid%child_grids))
+     &   Call Agrif_Instance (Agrif_Mygrid)
+C
+      Return
+C
+      End Subroutine Agrif_Step_Child
+
+C
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Regrid
+C     **************************************************************************
+C
+      Subroutine Agrif_Regrid
+C
+CCC   Description:
+CCC   Subroutine to create the grid hierarchy from fixed grids and 
+CC       adaptive mesh refinement.
+C
+CC    Method:        
+C
+C     Declarations:
+C
+C     Local variables      
+      Type(Agrif_Rectangle), Pointer     :: coarsegrid_fixed
+      Type(Agrif_Rectangle), Pointer     :: coarsegrid_moving  
+      INTEGER                            :: j
+      INTEGER :: nunit
+      INTEGER                            :: iii
+      Logical :: BEXIST
+C 
+      if ( Agrif_USE_ONLY_FIXED_GRIDS .EQ. 0 )
+     &   Call Agrif_detect_all(Agrif_Mygrid) ! Detection of areas to be refined
+C
+      Allocate(coarsegrid_fixed)
+      Allocate(coarsegrid_moving)
+C
+      if ( Agrif_USE_ONLY_FIXED_GRIDS .EQ. 0 ) 
+     &    Call Agrif_Cluster_All(Agrif_Mygrid,coarsegrid_moving) ! Clustering
+C
+      if ( Agrif_USE_FIXED_GRIDS .EQ. 1 .OR. 
+     &     Agrif_USE_ONLY_FIXED_GRIDS .EQ. 1 ) then
+C
+      If (Agrif_Mygrid % ngridstep == 0) Then
+          nunit = Agrif_Get_Unit()
+          open(nunit,file='AGRIF_FixedGrids.in',form='formatted',
+     &           status="old",ERR=99) ! Opening of the Agrif_FixedGrids.in file
+          j = 1
+C         Creation of the grid hierarchy from the Agrif_FixedGrids.in file 
+            do iii = 1 , Agrif_Probdim
+               coarsegrid_fixed % imin(iii) = 1
+               coarsegrid_fixed % imax(iii) = Agrif_Mygrid % nb(iii) + 1
+            enddo
+C      
+            Call Agrif_Read_Fix_Grd (coarsegrid_fixed,j,nunit)     
+            close(nunit) ! Closing of the Agrif_FixedGrids.in file 
+C
+          Nullify(Agrif_oldmygrid)
+          Nullify(Agrif_Mygrid  % child_grids)
+C        
+C         Creation of the grid hierarchy from coarsegrid_fixed
+            Call Agrif_Create_Grids (Agrif_Mygrid,coarsegrid_fixed)
+        Else        
+          Agrif_oldmygrid => Agrif_Mygrid % child_grids
+         endif
+      else
+      Agrif_oldmygrid => Agrif_Mygrid % child_grids
+      Nullify(Agrif_Mygrid  % child_grids)
+      endif
+C
+      if ( Agrif_USE_ONLY_FIXED_GRIDS .EQ. 0 ) then
+C      
+      Call Agrif_Free_before_All(Agrif_oldmygrid)
+C 
+C     Creation of the grid hierarchy from coarsegrid_moving    
+      Call Agrif_Create_Grids
+     &     (Agrif_Mygrid,coarsegrid_moving)
+C
+      endif
+C
+C     Initialization of the grid hierarchy by copy or interpolation
+C
+      Call Agrif_Init_Hierarchy(Agrif_Mygrid)
+C
+      if ( Agrif_USE_ONLY_FIXED_GRIDS .EQ. 0 ) 
+     &        Call Agrif_Free_after_All(Agrif_oldmygrid)
+C
+      Deallocate(coarsegrid_fixed)
+      Deallocate(coarsegrid_moving)
+C      
+      Return
+C
+C     Opening error
+C
+   99 INQUIRE(FILE='AGRIF_FixedGrids.in',EXIST=BEXIST)
+      If (.not. BEXIST) Then
+          print*,'ERROR : File AGRIF_FixedGrids.in not found.'
+          STOP 
+        Else
+          print*,'Error opening file AGRIF_FixedGrids.in'
+          STOP         
+      endif     
+C      
+      End Subroutine Agrif_Regrid
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_detect_All
+C     **************************************************************************
+C
+      Recursive Subroutine Agrif_detect_all(g)
+C
+CCC   Description:
+CCC   Subroutine to detect areas to be refined.
+C
+CC    Method:        
+C
+C     Declarations:
+C
+      
+C      
+C     Pointer argument    
+      TYPE(Agrif_Grid) ,pointer  :: g        ! Pointer on the current grid
+C      
+C     Local variables
+      Type(Agrif_pgrid),pointer  :: parcours ! Pointer for the recursive 
+                                             ! procedure      
+      INTEGER, DIMENSION(3)      :: size
+      INTEGER                    :: iii
+      Real :: g_eps     
+C
+      parcours => g % child_grids
+C  
+C     To be positioned on the finer grids of the grid hierarchy          
+C  
+      do while (associated(parcours))       
+         Call Agrif_detect_all (parcours % gr)  
+        parcours => parcours % next             
+      enddo
+C
+      g_eps = huge(1.)
+      do iii = 1 , Agrif_Probdim
+         g_eps=min(g_eps,g%Agrif_d(iii))
+      enddo
+C
+      g_eps = g_eps/100.
+C          
+      if ( Agrif_Probdim .EQ. 1 ) g%tabpoint1D=0
+      if ( Agrif_Probdim .EQ. 2 ) g%tabpoint2D=0
+      if ( Agrif_Probdim .EQ. 3 ) g%tabpoint3D=0
+C      
+      do iii = 1 , Agrif_Probdim
+         if (g%Agrif_d(iii)/Agrif_coeffref(iii).LT.
+     &                     (Agrif_mind(iii)-g_eps)) Return
+      enddo
+C                                       
+      Call Agrif_instance(g)
+C  
+C     Detection (Agrif_detect is a user s routine)
+C      
+      do iii = 1 , Agrif_Probdim
+         size(iii) = g%nb(iii) + 1
+      enddo
+C
+      SELECT CASE (Agrif_Probdim)
+      CASE (1) 
+         Call Agrif_detect(g%tabpoint1D,size)
+      CASE (2) 
+         Call Agrif_detect(g%tabpoint2D,size)
+      CASE (3) 
+         Call Agrif_detect(g%tabpoint3D,size)
+      END SELECT
+C
+C     Addition of the areas detected on the child grids
+C      
+      parcours => g % child_grids 
+C           
+      Do while (associated(parcours))
+        Call Agrif_Add_detected_areas (g,parcours % gr)
+        parcours => parcours % next 
+      enddo
+C     
+      Return      
+C
+      End Subroutine Agrif_detect_all
+C      
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Add_detected_areas
+C     **************************************************************************
+C      
+      Subroutine Agrif_Add_detected_areas(parentgrid,childgrid)
+C
+CCC   Description:
+CCC   Subroutine to add on the parent grid the areas detected 
+CC       on its child grids.
+C
+CC    Method:        
+C
+C     Declarations:
+C
+      
+C 
+      Type(Agrif_Grid),pointer   :: parentgrid,childgrid
+C      
+      Integer :: i,j,k
+C
+      do i = 1,childgrid%nb(1)+1
+         if ( Agrif_Probdim .EQ. 1 ) then
+            If (childgrid%tabpoint1D(i).EQ.1) Then
+                parentgrid%tabpoint1D(childgrid%ix(1)+
+     &                 (i-1)/Agrif_Coeffref(1)) = 1
+            endif
+         else
+            do j=1,childgrid%nb(2)+1
+               if (Agrif_Probdim.EQ.2) then
+              If (childgrid%tabpoint2D(i,j).EQ.1) Then
+                  parentgrid%tabpoint2D(
+     &                  childgrid%ix(1)+(i-1)/Agrif_Coeffref(1),
+     &                  childgrid%ix(2)+(j-1)/Agrif_Coeffref(2)) = 1
+                  endif
+               else
+                  do k=1,childgrid%nb(3)+1
+                If (childgrid%tabpoint3D(i,j,k).EQ.1) Then
+                    parentgrid%tabpoint3D(
+     &                     childgrid%ix(1)+(i-1)/Agrif_Coeffref(1),
+     &                     childgrid%ix(2)+(j-1)/Agrif_Coeffref(2),
+     &                     childgrid%ix(3)+(k-1)/Agrif_Coeffref(3)) = 1
+                     endif
+                  enddo
+               endif
+            enddo
+         endif
+      enddo
+C      
+      Return
+C
+      End Subroutine Agrif_Add_detected_areas   
+C      
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Free_before_All
+C     **************************************************************************
+C
+      Recursive Subroutine Agrif_Free_before_All(g)
+C
+CCC   Description:
+C
+CC    Method:        
+C
+C     Declarations:
+C
+C     Pointer argument    
+      Type(Agrif_pgrid),pointer   :: g        ! Pointer on the current grid
+C
+C     Local pointer
+      Type(Agrif_pgrid),pointer  :: parcours ! Pointer for the recursive 
+                                             ! procedure      
+C
+C
+      parcours => g        
+C      
+      Do while (associated(parcours))     
+        If (.not. parcours%gr%fixed) Then
+            Call Agrif_Free_data_before(parcours%gr)
+            parcours % gr % oldgrid = .TRUE.        
+        endif
+C
+        Call Agrif_Free_before_all (parcours % gr % child_grids)
+C  
+        parcours => parcours % next             
+      enddo
+C     
+      Return      
+C
+C
+      End Subroutine Agrif_Free_before_All
+C
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Free_after_All
+C     **************************************************************************
+C
+      Recursive Subroutine Agrif_Free_after_All(g)
+C
+CCC   Description:
+C
+CC    Method:        
+C
+C     Declarations:
+C
+      
+C      
+C     Pointer argument    
+      Type(Agrif_pgrid),pointer   :: g       ! Pointer on the current grid
+C
+C     Local pointers
+      TYPE(Agrif_pgrid),pointer  :: parcours ! Pointer for the recursive proced
+      Type(Agrif_pgrid),pointer  :: preparcours   
+      Type(Agrif_pgrid),pointer  :: preparcoursini 
+C
+C
+      Allocate(preparcours)
+C 
+      preparcoursini => preparcours
+C 
+      Nullify(preparcours % gr)
+C 
+      preparcours % next => g
+C
+      parcours => g
+C      
+      Do while (associated(parcours))
+C
+         if ( (.NOT. parcours% gr% fixed) .AND.
+     &        (parcours% gr% oldgrid    ) ) then
+          Call Agrif_Free_data_after(parcours%gr)
+         endif
+C
+         Call Agrif_Free_after_all (parcours % gr % child_grids)
+C
+      If (parcours % gr % oldgrid) Then
+          Deallocate(parcours % gr)
+          preparcours % next => parcours % next
+          Deallocate(parcours)
+          parcours => preparcours % next
+        Else
+          preparcours => preparcours % next
+          parcours => parcours % next 
+         endif       
+      enddo
+C
+      Deallocate(preparcoursini)
+C     
+      Return      
+C
+      End Subroutine Agrif_Free_after_All
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Integrate
+C     **************************************************************************
+C
+      Recursive Subroutine Agrif_Integrate(g, procname)         
+C
+CCC   Description:
+CCC   Subroutine to manage the time integration of the grid hierarchy.
+C
+CC    Method:
+CC    Recursive subroutine and call on subroutines Agrif_Instance & Agrif_Step
+C
+C     Declarations:
+C
+      
+C      
+C     Pointer argument    
+      Type(Agrif_Grid),pointer   :: g        ! Pointer on the current grid
+C
+C     main procedure name
+      Optional :: procname
+      External :: procname      
+C      
+C     Local pointer
+      Type(Agrif_pgrid),pointer  :: parcours ! Pointer for the recursive 
+                                             ! procedure
+C
+C     Local scalars
+      INTEGER                    :: nbt      ! Number of time steps 
+                                             ! of the current grid
+      INTEGER                    :: k        
+      INTEGER                    :: iii
+C  
+C     Instanciation of the variables of the current grid
+      If (g%fixedrank .NE.0) Then      
+      Call Agrif_Instance
+     &     (g)
+      End If
+C       
+C     One step on the current grid      
+C
+      If (present(procname)) Then
+         Call procname ()      
+      Else
+        write(*,*) 'The name of the step subroutine has not '
+        write(*,*) 'been given in the subroutine Agrif_Integrate'
+        stop
+      endif
+C
+C     Number of time steps on the current grid      
+C
+      g%ngridstep = g % ngridstep + 1
+C      
+      parcours => g % child_grids
+C    
+C     Recursive procedure for the time integration of the grid hierarchy      
+      Do while (associated(parcours))
+C
+C       Instanciation of the variables of the current grid            
+        Call Agrif_Instance
+     &           (parcours % gr)
+C       
+C       Number of time steps
+        nbt = 1
+        do iii = 1 , Agrif_Probdim
+           nbt = max(nbt, parcours % gr % timeref(iii))
+        enddo
+C       
+        Do k = 1,nbt
+C       
+           If (present(procname)) Then
+                 Call Agrif_Integrate (parcours % gr, procname)
+           Else
+                 Call Agrif_Integrate (parcours % gr)      
+           endif
+C       
+        enddo     
+C  
+        parcours => parcours % next
+C     
+      enddo
+C
+C      
+      End Subroutine Agrif_Integrate 
+
+C     **************************************************************************
+CCC   Subroutine Agrif_Integrate_Child
+C     **************************************************************************
+C
+      Recursive Subroutine Agrif_Integrate_Child(g,procname)
+C
+CCC   Description:
+CCC   Subroutine to manage the time integration of the grid hierarchy.
+C
+CC    Method:
+CC    Recursive subroutine and call on subroutines Agrif_Instance & Agrif_Step.
+C
+C     Declarations:
+C
+
+C
+C     Pointer argument
+      Type(Agrif_Grid),pointer   :: g        ! Pointer on the current grid
+C
+C     main procedure name
+      Optional :: procname
+      External :: procname
+C
+C     Local pointer
+      Type(Agrif_pgrid),pointer  :: parcours ! Pointer for the recursive
+                                             ! procedure
+C
+C     One step on the current grid
+C
+      If (present(procname)) Then
+         Call procname ()      
+      Else
+        write(*,*) 'The name of the step subroutine has not '
+        write(*,*) 'been given in the subroutine Agrif_Integrate'
+        stop
+      endif
+C
+C     Number of time steps on the current grid
+C
+C
+      parcours => g % child_grids
+C
+C     Recursive procedure for the time integration of the grid hierarchy      
+      Do while (associated(parcours))
+C
+C       Instanciation of the variables of the current grid
+        Call Agrif_Instance
+     &           (parcours % gr)
+
+C       
+           If (present(procname)) Then
+                 Call Agrif_Integrate_Child (parcours % gr, procname)
+           Else
+                 Call Agrif_Integrate_Child (parcours % gr)
+           endif
+C  
+        parcours => parcours % next
+C     
+      enddo
+C
+C
+      End Subroutine Agrif_Integrate_Child
+
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Init_Grids
+C     **************************************************************************
+C      
+      Subroutine Agrif_Init_Grids
+C
+CCC   Description:
+CCC   Subroutine to initialize the root coarse grid pointed by Agrif_Mygrid. 
+CCC   It is called in the main program.
+C
+C     Declarations:
+C
+C
+      INTEGER :: iii
+C
+C             definition of the probdim and modtypes variables
+C
+#ifdef AGRIF_MPI
+#include "mpif.h"
+      Agrif_MPIPREC = MPI_DOUBLE_PRECISION
+#endif
+      Call Agrif_probdim_modtype_def()
+C      
+      Agrif_UseSpecialValue = .FALSE.
+      Agrif_UseSpecialValueFineGrid = .FALSE.
+      Agrif_SpecialValue = 0.
+      Agrif_SpecialValueFineGrid = 0.
+C      
+C     Allocation of Agrif_Mygrid
+      allocate(Agrif_Mygrid)
+C      
+C     Space and time refinement factors are set to 1 on the root grid
+C
+      do iii = 1 , Agrif_Probdim
+         Agrif_Mygrid % spaceref(iii) = 1
+         Agrif_Mygrid % timeref(iii) = 1
+      enddo
+C      
+C     Initialization of the number of time steps    
+      Agrif_Mygrid % ngridstep = 0
+      Agrif_Mygrid % grid_id = 0
+C
+C     No parent grid for the root coarse grid
+      Nullify(Agrif_Mygrid % parent)
+C      
+C     Initialization of the minimum positions, global abscissa and space steps  
+      do iii= 1 ,  Agrif_Probdim
+         Agrif_Mygrid % ix(iii) = 1            
+         Agrif_Mygrid % Agrif_x(iii) = 0.
+         Agrif_Mygrid % Agrif_d(iii) = 1. 
+C     Borders of the root coarse grid 
+         Agrif_Mygrid % NearRootBorder(iii) = .true.  
+         Agrif_Mygrid % DistantRootBorder(iii) = .true.      
+      enddo
+C  
+C     The root coarse grid is a fixed grid
+      Agrif_Mygrid % fixed = .TRUE.
+C      
+C     Number of the grid pointed by Agrif_Mygrid (root coarse grid)
+      Agrif_Mygrid % rank = 1      
+C 
+C     Number of the root grid as a fixed grid   
+      Agrif_Mygrid % fixedrank = 0  
+C 
+C     Initialization of some fields of the root grid variables     
+      Call Agrif_Create_Var (Agrif_Mygrid)
+C      
+C     Initialization of the other fields of the root grid variables (number of 
+C     cells, positions, number and type of its dimensions, ...)  
+      Call Agrif_Set_numberofcells(Agrif_Mygrid)
+C      
+      Call Agrif_Instance (Agrif_Mygrid)        
+C             
+C     Allocation of the array containing the values of the grid variables
+      Call Agrif_Allocation (Agrif_Mygrid)
+C        
+      Call Agrif_initialisations(Agrif_Mygrid)
+C      
+      nullify(Agrif_Mygrid % child_grids)
+C 
+C     Total number of fixed grids   
+      Agrif_nbfixedgrids = 0         
+C      
+      Call Agrif_Instance (Agrif_Mygrid)
+C        
+      End Subroutine Agrif_Init_Grids  
+C
+C
+C     **************************************************************************
+CCC   Subroutine Agrif_Deallocation
+C     **************************************************************************
+C      
+      Subroutine Agrif_Deallocation
+C
+CCC   Description:
+CCC   Subroutine to initialize the root coarse grid pointed by Agrif_Mygrid. 
+CCC   It is called in the main program.
+C
+C     Declarations:
+C
+C
+      INTEGER :: nb
+C
+C             definition of the probdim and modtypes variables
+C
+      do nb = 1, Agrif_NbVariables
+          if ( associated(Agrif_Mygrid % tabvars(nb) % var % array1) ) 
+     &       Deallocate(Agrif_Mygrid % tabvars(nb) % var % array1)
+          if ( associated(Agrif_Mygrid % tabvars(nb) % var % array2) ) 
+     &       Deallocate(Agrif_Mygrid % tabvars(nb) % var % array2)
+          if ( associated(Agrif_Mygrid % tabvars(nb) % var % array3) ) 
+     &       Deallocate(Agrif_Mygrid % tabvars(nb) % var % array3)
+          if ( associated(Agrif_Mygrid % tabvars(nb) % var % array4) ) 
+     &       Deallocate(Agrif_Mygrid % tabvars(nb) % var % array4)
+          if ( associated(Agrif_Mygrid % tabvars(nb) % var % array5) ) 
+     &       Deallocate(Agrif_Mygrid % tabvars(nb) % var % array5)
+          if ( associated(Agrif_Mygrid % tabvars(nb) % var % array6) ) 
+     &       Deallocate(Agrif_Mygrid % tabvars(nb) % var % array6)
+C
+          if ( associated(Agrif_Mygrid % tabvars(nb) % var % iarray1) ) 
+     &       Deallocate(Agrif_Mygrid % tabvars(nb) % var % iarray1)
+          if ( associated(Agrif_Mygrid % tabvars(nb) % var % iarray2) ) 
+     &       Deallocate(Agrif_Mygrid % tabvars(nb) % var % iarray2)
+          if ( associated(Agrif_Mygrid % tabvars(nb) % var % iarray3) ) 
+     &       Deallocate(Agrif_Mygrid % tabvars(nb) % var % iarray3)
+          if ( associated(Agrif_Mygrid % tabvars(nb) % var % iarray4) ) 
+     &       Deallocate(Agrif_Mygrid % tabvars(nb) % var % iarray4)
+          if ( associated(Agrif_Mygrid % tabvars(nb) % var % iarray5) ) 
+     &       Deallocate(Agrif_Mygrid % tabvars(nb) % var % iarray5)
+          if ( associated(Agrif_Mygrid % tabvars(nb) % var % iarray6) ) 
+     &       Deallocate(Agrif_Mygrid % tabvars(nb) % var % iarray6)
+C
+          if ( associated(Agrif_Mygrid % tabvars(nb) % var % larray1) ) 
+     &       Deallocate(Agrif_Mygrid % tabvars(nb) % var % larray1)
+          if ( associated(Agrif_Mygrid % tabvars(nb) % var % larray2) ) 
+     &       Deallocate(Agrif_Mygrid % tabvars(nb) % var % larray2)
+          if ( associated(Agrif_Mygrid % tabvars(nb) % var % larray3) ) 
+     &       Deallocate(Agrif_Mygrid % tabvars(nb) % var % larray3)
+          if ( associated(Agrif_Mygrid % tabvars(nb) % var % larray4) ) 
+     &       Deallocate(Agrif_Mygrid % tabvars(nb) % var % larray4)
+          if ( associated(Agrif_Mygrid % tabvars(nb) % var % larray5) ) 
+     &       Deallocate(Agrif_Mygrid % tabvars(nb) % var % larray5)
+          if ( associated(Agrif_Mygrid % tabvars(nb) % var % larray6) ) 
+     &       Deallocate(Agrif_Mygrid % tabvars(nb) % var % larray6)
+C
+          if ( associated(Agrif_Mygrid % tabvars(nb) % var % carray1) ) 
+     &       Deallocate(Agrif_Mygrid % tabvars(nb) % var % carray1)
+          if ( associated(Agrif_Mygrid % tabvars(nb) % var % carray2) ) 
+     &       Deallocate(Agrif_Mygrid % tabvars(nb) % var % carray2)
+      enddo
+C
+      do nb = 1, Agrif_NbVariables
+        Deallocate(Agrif_Mygrid % tabvars(nb) % var)
+      enddo
+C
+      Deallocate(Agrif_Mygrid % tabvars)
+C
+      Deallocate(Agrif_Mygrid)
+C
+      End Subroutine  Agrif_Deallocation 
+C
+      End module Agrif_Util 
Index: /vendors/AGRIF/r_00/KEY_CPP
===================================================================
--- /vendors/AGRIF/r_00/KEY_CPP	(revision 1902)
+++ /vendors/AGRIF/r_00/KEY_CPP	(revision 1902)
@@ -0,0 +1,1 @@
+
Index: /vendors/AGRIF/r_00/LIB/DiversListe.c
===================================================================
--- /vendors/AGRIF/r_00/LIB/DiversListe.c	(revision 1902)
+++ /vendors/AGRIF/r_00/LIB/DiversListe.c	(revision 1902)
@@ -0,0 +1,603 @@
+/******************************************************************************/
+/*                                                                            */
+/*     CONV (converter) for Agrif (Adaptive Grid Refinement In Fortran)       */
+/*                                                                            */
+/* Copyright or   or Copr. Laurent Debreu (Laurent.Debreu@imag.fr)            */
+/*                        Cyril Mazauric (Cyril_Mazauric@yahoo.fr)            */
+/* This software is governed by the CeCILL-C license under French law and     */
+/* abiding by the rules of distribution of free software.  You can  use,      */
+/* modify and/ or redistribute the software under the terms of the CeCILL-C   */
+/* license as circulated by CEA, CNRS and INRIA at the following URL          */
+/* "http://www.cecill.info".                                                  */
+/*                                                                            */
+/* As a counterpart to the access to the source code and  rights to copy,     */
+/* modify and redistribute granted by the license, users are provided only    */
+/* with a limited warranty  and the software's author,  the holder of the     */
+/* economic rights,  and the successive licensors  have only  limited         */
+/* liability.                                                                 */
+/*                                                                            */
+/* In this respect, the user's attention is drawn to the risks associated     */
+/* with loading,  using,  modifying and/or developing or reproducing the      */
+/* software by the user in light of its specific status of free software,     */
+/* that may mean  that it is complicated to manipulate,  and  that  also      */
+/* therefore means  that it is reserved for developers  and  experienced      */
+/* professionals having in-depth computer knowledge. Users are therefore      */
+/* encouraged to load and test the software's suitability as regards their    */
+/* requirements in conditions enabling the security of their systems and/or   */
+/* data to be ensured and,  more generally, to use and operate it in the      */
+/* same conditions as regards security.                                       */
+/*                                                                            */
+/* The fact that you are presently reading this means that you have had       */
+/* knowledge of the CeCILL-C license and that you accept its terms.           */
+/******************************************************************************/
+/* version 1.7                                                                */
+/******************************************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "decl.h"
+
+/******************************************************************************/
+/*                           Add_Common_var_1                                 */
+/******************************************************************************/
+/*  This subroutines is used to add the variable defined in common in the     */
+/*     List_Common_Var                                                        */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+void Add_Common_var_1()
+{
+   listvar *newvar;
+   listvar *newvar2;
+   variable *newvariable;
+   listdim *dims;
+   char listdimension[LONG_C];
+   char ligne[LONG_C];
+   int out;
+
+   if ( firstpass == 1 )
+   {
+
+   newvar = (listvar *)malloc(sizeof(listvar));
+   newvariable = (variable *)malloc(sizeof(variable));
+   /*                                                                         */
+   Init_Variable(newvariable);
+   /*                                                                         */
+   strcpy(newvariable->v_nomvar,commonvar);
+   Save_Length(commonvar,4);
+   strcpy(newvariable->v_commonname,commonblockname);
+   Save_Length(commonblockname,7);
+   strcpy(newvariable->v_modulename,curmodulename);
+   Save_Length(curmodulename,6);
+   strcpy(newvariable->v_subroutinename,subroutinename);
+   Save_Length(subroutinename,11);
+   newvariable->v_positioninblock= positioninblock;
+   newvariable->v_common=1;
+   strcpy(newvariable->v_commoninfile,mainfile);
+   Save_Length(mainfile,10);
+
+   newvar->var = newvariable;
+
+   if ( commondim )
+   {
+      newvariable->v_dimension=commondim;
+      newvariable->v_dimensiongiven=1;
+      newvariable->v_nbdim=num_dims(commondim);
+      /* Creation of the string for the dimension of this variable            */
+      dimsempty = 1;
+      strcpy(listdimension,"");
+
+      if ( commondim )
+      {
+         dims = commondim;
+         while (dims)
+         {
+            if ( strcasecmp(dims->dim.first,"") ||
+                 strcasecmp(dims->dim.last,""))  dimsempty = 0;
+            sprintf(ligne,"%s:%s",dims->dim.first,dims->dim.last);
+            strcat(listdimension,ligne);
+            if ( dims->suiv ) strcat(listdimension,",");
+            dims = dims->suiv;
+         }
+         if ( dimsempty == 1 ) newvariable->v_dimsempty=1;
+      }
+      strcpy(newvariable->v_readedlistdimension,listdimension);
+      Save_Length(listdimension,15);
+   }
+
+
+   newvar->suiv = NULL;
+
+   if ( !List_Common_Var )
+   {
+      List_Common_Var = newvar;
+   }
+   else
+   {
+      newvar2 = List_Common_Var;
+      out = 0 ;
+      while ( newvar2 && out == 0 )
+      {
+         if ( !strcasecmp(newvar2->var->v_nomvar,commonvar) &&
+              !strcasecmp(newvar2->var->v_commonname,commonblockname) &&
+              !strcasecmp(newvar2->var->v_subroutinename,subroutinename)
+                          ) out = 1 ;
+         else newvar2 = newvar2->suiv;
+      }
+      if ( out == 0 )
+      {
+         newvar->suiv = List_Common_Var;
+         List_Common_Var = newvar;
+      }
+      else
+      {
+         free(newvar);
+      }
+   }
+   }
+}
+
+/******************************************************************************/
+/*                           Addtolistnom                                     */
+/******************************************************************************/
+/* This subroutine is used to add a variable to the list                      */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+listnom *Addtolistnom(char *nom, listnom *listin,int value)
+{
+   listnom *newnom;
+   listnom *parcours;
+   int out;
+
+   newnom=(listnom *) malloc (sizeof (listnom));
+   strcpy(newnom->o_nom,nom);
+   Save_Length(nom,23);
+   newnom->o_val = value;
+   newnom->suiv = NULL;
+
+   if ( !listin ) listin = newnom;
+   else
+   {
+      parcours = listin;
+      out = 0 ;
+      while ( parcours && out == 0 )
+      {
+         if ( !strcasecmp(parcours->o_nom,nom) ) out = 1 ;
+         else parcours=parcours->suiv;
+      }
+      if ( out == 0 )
+      {
+          newnom->suiv = listin;
+          listin = newnom;
+      }
+      else
+      {
+         free(newnom);
+      }
+   }
+   return listin;
+}
+
+/******************************************************************************/
+/*                           Addtolistname                                    */
+/******************************************************************************/
+/* This subroutine is used to add a        variable to the list               */
+/******************************************************************************/
+/*        _______     _______     _______     _______     _______             */
+/*       +      +    +      +    +      +    +      +    +      +             */
+/*       + NEW  +--->+ glob +--->+ glob +--->+ glob +--->+ glob +             */
+/*       +______+    +______+    +______+    +______+    +______+             */
+/*                                                                            */
+/*                                                                            */
+/*                                                                            */
+/******************************************************************************/
+listname *Addtolistname(char *nom,listname *input)
+{
+   listname *newnom;
+   listname *parcours;
+   int out;
+
+   if ( !input )
+   {
+      newnom=(listname *) malloc (sizeof (listname));
+      strcpy(newnom->n_name,nom);
+      Save_Length(nom,20);
+      newnom->suiv = NULL;
+      input = newnom;
+   }
+   else
+   {
+      parcours = input;
+      out = 0 ;
+      while ( parcours && out == 0 )
+      {
+         if ( !strcasecmp(parcours->n_name,nom) ) out = 1;
+         else parcours=parcours->suiv;
+      }
+      if ( out == 0 )
+      {
+         newnom=(listname *) malloc (sizeof (listname));
+         strcpy(newnom->n_name,nom);
+         Save_Length(nom,20);
+         newnom->suiv = input;
+         input = newnom;
+      }
+   }
+   return input;
+}
+
+/******************************************************************************/
+/*                    ModuleIsDefineInInputFile                               */
+/******************************************************************************/
+/* This subroutine is used to know if the module is defined in the input file */
+/******************************************************************************/
+/*                                                                            */
+/*                                                                            */
+/******************************************************************************/
+int ModuleIsDefineInInputFile(char *name)
+{
+   listnom *newnom;
+   int out;
+
+   out = 0;
+   if ( listofmodules )
+   {
+      newnom = listofmodules;
+      while( newnom && out == 0 )
+      {
+         if ( !strcasecmp(newnom->o_nom,name) ) out = 1 ;
+         else newnom=newnom->suiv;
+      }
+   }
+   return out;
+}
+
+/******************************************************************************/
+/*                      Addmoduletothelisttmp                                 */
+/******************************************************************************/
+/* This subroutine is used to add a record to a list of struct                */
+/* listusemodule                                                              */
+/******************************************************************************/
+/*                                                                            */
+/*       subroutine sub ... USE mod1 ===> insert in list                      */
+/*        _______     _______     _______     _______     _______             */
+/*       +      +    +      +    +      +    +      +    +      +             */
+/*       + NEW  +--->+ list +--->+ list +--->+ list +--->+ list +             */
+/*       +______+    +______+    +______+    +______+    +______+             */
+/*                                                                            */
+/*       list =  listofmoduletmp                                              */
+/*                                                                            */
+/******************************************************************************/
+void Addmoduletothelisttmp(char *name)
+{
+  listusemodule *newmodule;
+  listusemodule *parcours;
+  int out;
+
+  if ( !listofmoduletmp)
+  {
+    newmodule =(listusemodule *)malloc(sizeof(listusemodule));
+    strcpy(newmodule->u_usemodule,name);
+    Save_Length(name,16);
+    strcpy(newmodule->u_cursubroutine,subroutinename);
+    Save_Length(subroutinename,18);
+    newmodule->suiv = NULL;
+    listofmoduletmp = newmodule ;
+  }
+  else
+  {
+    parcours = listofmoduletmp;
+    out = 0;
+    while( parcours && out == 0 )
+    {
+       if ( !strcasecmp(parcours->u_usemodule,name) ) out = 1;
+       else parcours = parcours->suiv;
+    }
+    if ( out == 0 )
+    {
+       newmodule =(listusemodule *)malloc(sizeof(listusemodule));
+       strcpy(newmodule->u_usemodule,name);
+       Save_Length(name,16);
+       strcpy(newmodule->u_cursubroutine,subroutinename);
+       Save_Length(subroutinename,18);
+       newmodule->suiv = listofmoduletmp;
+       listofmoduletmp = newmodule;
+    }
+  }
+}
+
+/******************************************************************************/
+/*                          Add_NameOfModule_1                                */
+/******************************************************************************/
+/* This subroutine is used to add a        variable to the list               */
+/******************************************************************************/
+/*        _______     _______     _______     _______     _______             */
+/*       +      +    +      +    +      +    +      +    +      +             */
+/*       + NEW  +--->+ glob +--->+ glob +--->+ glob +--->+ glob +             */
+/*       +______+    +______+    +______+    +______+    +______+             */
+/*                                                                            */
+/*                                                                            */
+/*                                                                            */
+/******************************************************************************/
+void Add_NameOfModule_1(char *nom)
+{
+   listnom *newnom;
+
+   if ( firstpass == 1 )
+   {
+      newnom=(listnom *) malloc (sizeof (listnom));
+      strcpy(newnom->o_nom,nom);
+      Save_Length(nom,23);
+      newnom->suiv = List_NameOfModule;
+      List_NameOfModule = newnom;
+   }
+}
+
+/******************************************************************************/
+/*                          Add_NameOfCommon_1                                */
+/******************************************************************************/
+/* This subroutine is used to add a        variable to the list               */
+/******************************************************************************/
+/*        _______     _______     _______     _______     _______             */
+/*       +      +    +      +    +      +    +      +    +      +             */
+/*       + NEW  +--->+ glob +--->+ glob +--->+ glob +--->+ glob +             */
+/*       +______+    +______+    +______+    +______+    +______+             */
+/*                                                                            */
+/*                                                                            */
+/*                                                                            */
+/******************************************************************************/
+void Add_NameOfCommon_1(char *nom)
+{
+   listnom *newnom;
+   listnom *parcours;
+
+   if ( firstpass == 1 )
+   {
+      parcours = List_NameOfCommon;
+      while ( parcours && strcasecmp(parcours->o_nom,nom) )
+                                                      parcours = parcours->suiv;
+      if ( !parcours )
+      {
+         newnom=(listnom *) malloc (sizeof (listnom));
+         strcpy(newnom->o_nom,nom);
+         Save_Length(nom,23);
+         newnom->suiv = List_NameOfCommon;
+         List_NameOfCommon = newnom;
+      }
+   }
+}
+
+/******************************************************************************/
+/*                     Add_CouplePointed_Var_1                                */
+/******************************************************************************/
+/* Firstpass 1                                                                */
+/* We should complete the listvarpointtovar                                   */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+void Add_CouplePointed_Var_1(char *namemodule,listcouple *couple)
+{
+   listvarpointtovar *pointtmp;
+
+   if ( firstpass == 1 )
+   {
+      /* we should complete the List_CouplePointed_Var                        */
+      pointtmp=(listvarpointtovar *)malloc(sizeof(listvarpointtovar));
+      strcpy(pointtmp->t_usemodule,namemodule);
+      Save_Length(namemodule,28);
+      strcpy(pointtmp->t_cursubroutine,subroutinename);
+      Save_Length(subroutinename,29);
+      pointtmp->t_couple = couple;
+      if ( List_CouplePointed_Var )
+      {
+         pointtmp->suiv = List_CouplePointed_Var;
+         List_CouplePointed_Var = pointtmp;
+      }
+      else
+      {
+         pointtmp->suiv = NULL;
+         List_CouplePointed_Var = pointtmp;
+      }
+   }
+}
+
+/******************************************************************************/
+/*                           Add_Include_1                                    */
+/******************************************************************************/
+/* This subroutine is used to add a record to a list of struct                */
+/*  List_Include                                                              */
+/******************************************************************************/
+/*                                                                            */
+/*       subroutine sub ... include mod1 ===> insert in list                  */
+/*        _______     _______     _______     _______     _______             */
+/*       +      +    +      +    +      +    +      +    +      +             */
+/*       + NEW  +--->+ list +--->+ list +--->+ list +--->+ list +             */
+/*       +______+    +______+    +______+    +______+    +______+             */
+/*                                                                            */
+/*       list =  List_Include                                                 */
+/*                                                                            */
+/******************************************************************************/
+void Add_Include_1(char *name)
+{
+  listusemodule *newinclude;
+
+  if ( firstpass == 1 )
+  {
+  newinclude =(listusemodule *)malloc(sizeof(listusemodule));
+  strcpy(newinclude->u_usemodule,name);
+  Save_Length(name,16);
+  strcpy(newinclude->u_cursubroutine,subroutinename);
+  Save_Length(subroutinename,18);
+  newinclude->suiv = NULL;
+
+  if ( !List_Include)
+  {
+     List_Include  = newinclude ;
+  }
+  else
+  {
+    newinclude->suiv = List_Include;
+    List_Include = newinclude;
+  }
+  }
+}
+
+/******************************************************************************/
+/*                     Add_ImplicitNoneSubroutine_1                           */
+/******************************************************************************/
+/* This subroutine is used to add a record to a list of struct                */
+/******************************************************************************/
+/*                                                                            */
+/*                                                                            */
+/******************************************************************************/
+void Add_ImplicitNoneSubroutine_1()
+{
+
+  if ( firstpass == 1 )
+  {
+     List_ImplicitNoneSubroutine = Addtolistname(subroutinename,
+                                                   List_ImplicitNoneSubroutine);
+  }
+}
+
+
+/******************************************************************************/
+/*                        WriteIncludeDeclaration                             */
+/******************************************************************************/
+/* Firstpass 0                                                                */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+void WriteIncludeDeclaration()
+{
+  listusemodule *newinclude;
+
+  newinclude = List_Include;
+  fprintf(fortranout,"\n");
+  while ( newinclude )
+  {
+     if ( !strcasecmp(newinclude->u_cursubroutine,subroutinename) )
+     {
+        fprintf(fortranout,"      INCLUDE %s \n",newinclude->u_usemodule);
+     }
+     newinclude = newinclude ->suiv;
+  }
+}
+
+/******************************************************************************/
+/*                          Add_Save_Var_1                                    */
+/******************************************************************************/
+/* This subroutine is used to add a record to List_Save_Var                   */
+/******************************************************************************/
+/*        _______     _______     _______     _______     _______             */
+/*       +      +    +      +    +      +    +      +    +      +             */
+/*       + NEW  +--->+ Save +--->+ Save +--->+ Save +--->+  Save+             */
+/*       +______+    +______+    +______+    +______+    +______+             */
+/*                                                                            */
+/******************************************************************************/
+void Add_Save_Var_1 (char *name,listdim *d)
+{
+  listvar *newvar;
+  listdim *dims;
+  char ligne[LONG_C];
+  char listdimension[LONG_C];
+
+  if ( firstpass == 1 )
+  {
+     newvar=(listvar *)malloc(sizeof(listvar));
+     newvar->var=(variable *)malloc(sizeof(variable));
+     /*                                                                       */
+     Init_Variable(newvar->var);
+     /*                                                                       */
+     newvar->var->v_save=1;
+     strcpy(newvar->var->v_nomvar,name);
+     Save_Length(name,4);
+     strcpy(newvar->var->v_modulename,curmodulename);
+     Save_Length(curmodulename,6);
+     strcpy(newvar->var->v_subroutinename,subroutinename);
+     Save_Length(subroutinename,11);
+     strcpy(newvar->var->v_commoninfile,mainfile);
+     Save_Length(mainfile,10);
+
+     newvar->var->v_dimension=d;
+     /* Creation of the string for the dimension of this variable             */
+     dimsempty = 1;
+     if ( d )
+     {
+        newvar->var->v_dimensiongiven=1;
+        dims = d;
+        while (dims)
+        {
+           if ( strcasecmp(dims->dim.first,"") || strcasecmp(dims->dim.last,""))
+                                                                  dimsempty = 0;
+           sprintf(ligne,"%s:%s",dims->dim.first,dims->dim.last);
+           strcat(listdimension,ligne);
+           if ( dims->suiv )
+           {
+              strcat(listdimension,",");
+           }
+           dims = dims->suiv;
+        }
+        if ( dimsempty == 1 ) newvar->var->v_dimsempty=1;
+     }
+     strcpy(newvar->var->v_readedlistdimension,listdimension);
+     Save_Length(listdimension,15);
+     /*                                                                       */
+     newvar->suiv = NULL;
+
+     if ( !List_Save_Var )
+     {
+        List_Save_Var  = newvar ;
+     }
+     else
+     {
+        newvar->suiv = List_Save_Var;
+        List_Save_Var = newvar;
+     }
+  }
+}
+
+void Add_Save_Var_dcl_1 (listvar *var)
+{
+  listvar *newvar;
+  listvar *parcours;
+
+  if ( firstpass == 1 )
+  {
+     parcours = var;
+     while ( parcours )
+     {
+        newvar=(listvar *)malloc(sizeof(listvar));
+        newvar->var=(variable *)malloc(sizeof(variable));
+        /*                                                                    */
+        Init_Variable(newvar->var);
+        /*                                                                    */
+        newvar->var->v_save=1;
+        strcpy(newvar->var->v_nomvar,parcours->var->v_nomvar);
+        strcpy(newvar->var->v_modulename,curmodulename);
+        Save_Length(curmodulename,6);
+        strcpy(newvar->var->v_subroutinename,subroutinename);
+        Save_Length(subroutinename,11);
+        strcpy(newvar->var->v_commoninfile,mainfile);
+        Save_Length(mainfile,10);
+        /*                                                                    */
+        strcpy(newvar->var->v_readedlistdimension,
+             parcours->var->v_readedlistdimension);
+        newvar->var->v_nbdim = parcours->var->v_nbdim;
+        newvar->var->v_dimension = parcours->var->v_dimension;
+        /*                                                                    */
+        newvar->var->v_dimensiongiven=parcours->var->v_dimensiongiven;
+        /*                                                                    */
+        newvar->suiv = NULL;
+
+        if ( !List_Save_Var ) List_Save_Var  = newvar ;
+        else
+        {
+           newvar->suiv = List_Save_Var;
+           List_Save_Var = newvar;
+        }
+        parcours = parcours->suiv;
+     }
+  }
+}
Index: /vendors/AGRIF/r_00/LIB/Makefile
===================================================================
--- /vendors/AGRIF/r_00/LIB/Makefile	(revision 1902)
+++ /vendors/AGRIF/r_00/LIB/Makefile	(revision 1902)
@@ -0,0 +1,50 @@
+#- option to debug
+C_D = -g # -g -Wall
+# Compilation:
+CC		= cc -O
+#-
+OBJS = main.o WriteInFile.o toamr.o fortran.o  \
+       dependfile.o SubLoopCreation.o WorkWithlistvarindoloop.o \
+       WorkWithvarofsubroutineliste.o WorkWithParameterlist.o \
+       Writedeclarations.o WorkWithglobliste.o UtilFortran.o \
+       UtilNotGridDep.o WorkWithlistdatavariable.o \
+       DiversListe.o UtilAgrif.o WorkWithAllocatelist.o \
+       UtilCharacter.o UtilListe.o UtilFile.o \
+       WorkWithlistofmodulebysubroutine.o WorkWithlistmoduleinfile.o \
+       WorkWithlistofcoupled.o
+
+
+.SUFFIXES:
+.SUFFIXES: .c .o
+
+all : conv
+	@echo CONV is ok
+
+conv :  $(OBJS)
+	@$(CC) $(OBJS) -o ../$@
+
+main.o : main.c
+fortran.o : fortran.c	
+toamr.o : toamr.c decl.h
+WriteInFile.o : WriteInFile.c decl.h
+dependfile.o : dependfile.c decl.h	
+SubLoopCreation.o : SubLoopCreation.c decl.h	
+WorkWithglobliste.o : WorkWithglobliste.c decl.h	
+WorkWithlistvarindoloop.o : WorkWithlistvarindoloop.c decl.h	
+WorkWithvarofsubroutineliste.o : WorkWithvarofsubroutineliste.c decl.h	
+Writedeclarations.o : Writedeclarations.c decl.h	
+UtilFortran.o : UtilFortran.c decl.h	
+WorkWithParameterlist.o : WorkWithParameterlist.c decl.h	
+UtilNotGridDep.o : UtilNotGridDep.c decl.h	
+WorkWithlistdatavariable.o : WorkWithlistdatavariable.c decl.h	
+DiversListe.o : DiversListe.c decl.h	
+UtilAgrif.o : UtilAgrif.c decl.h	
+WorkWithAllocatelist.o : WorkWithAllocatelist.c decl.h
+UtilCharacter.o : UtilCharacter.c decl.h
+UtilListe.o : UtilListe.c decl.h
+UtilFile.o : UtilFile.c decl.h
+WorkWithlistofmodulebysubroutine.o : WorkWithlistofmodulebysubroutine.c decl.h
+WorkWithlistmoduleinfile.o : WorkWithlistmoduleinfile.c decl.h
+WorkWithlistofcoupled.o : WorkWithlistofcoupled.c decl.h
+clean : 
+	/bin/rm -f *.o y.output
Index: /vendors/AGRIF/r_00/LIB/Makefile.lex
===================================================================
--- /vendors/AGRIF/r_00/LIB/Makefile.lex	(revision 1902)
+++ /vendors/AGRIF/r_00/LIB/Makefile.lex	(revision 1902)
@@ -0,0 +1,73 @@
+# Compilation:
+CC		= cc -O -g
+LEX		= flex
+
+# option de flex et pas de lex
+LEXFLAGS=-i
+YACC = byacc -t -v
+
+
+OBJS = main.o WriteInFile.o toamr.o fortran.o  \
+       dependfile.o SubLoopCreation.o WorkWithlistvarindoloop.o \
+       WorkWithvarofsubroutineliste.o WorkWithParameterlist.o \
+       Writedeclarations.o WorkWithglobliste.o UtilFortran.o \
+       UtilNotGridDep.o WorkWithlistdatavariable.o \
+       DiversListe.o UtilAgrif.o WorkWithAllocatelist.o \
+       UtilCharacter.o UtilListe.o UtilFile.o \
+       WorkWithlistofmodulebysubroutine.o WorkWithlistmoduleinfile.o \
+       WorkWithlistofcoupled.o
+
+.SUFFIXES:
+.SUFFIXES: .c .o
+
+all : conv
+
+conv :  $(OBJS)
+	$(CC) $(OBJS)  $(LEXLIB) -o ../$@
+
+main.o : main.c
+main.c : convert.tab.c  convert.yy.c
+	rm -f main.c
+	cat convert.tab.c  convert.yy.c > main.c
+	rm -f convert.yy.c convert.tab.c
+fortran.o : fortran.c
+fortran.c : fortran.tab.c fortran.yy.c
+	rm -f fortran.c
+	cat fortran.tab.c  fortran.yy.c > fortran.c
+#rm -f fortran.yy.c fortran.tab.c
+convert.tab.c : convert.y decl.h
+	$(YACC) convert.y
+	mv -f y.tab.c convert.tab.c
+fortran.tab.c : fortran.y decl.h
+	$(YACC) -p fortran fortran.y
+	mv -f y.tab.c fortran.tab.c
+convert.yy.c : convert.lex
+	$(LEX) $(LEXFLAGS) -oconvert.yy.c convert.lex
+fortran.yy.c : fortran.lex
+	$(LEX) $(LEXFLAGS) -Pfortran -ofortran.yy.c fortran.lex
+	
+toamr.o : toamr.c decl.h
+WriteInFile.o : WriteInFile.c decl.h
+dependfile.o : dependfile.c decl.h
+SubLoopCreation.o : SubLoopCreation.c decl.h
+WorkWithglobliste.o : WorkWithglobliste.c decl.h
+WorkWithlistvarindoloop.o : WorkWithlistvarindoloop.c decl.h
+WorkWithvarofsubroutineliste.o : WorkWithvarofsubroutineliste.c decl.h
+Writedeclarations.o : Writedeclarations.c decl.h
+UtilFortran.o : UtilFortran.c decl.h
+WorkWithParameterlist.o : WorkWithParameterlist.c decl.h
+UtilNotGridDep.o : UtilNotGridDep.c decl.h
+WorkWithlistdatavariable.o : WorkWithlistdatavariable.c decl.h
+DiversListe.o : DiversListe.c decl.h
+UtilAgrif.o : UtilAgrif.c decl.h
+WorkWithAllocatelist.o : WorkWithAllocatelist.c decl.h
+UtilCharacter.o : UtilCharacter.c decl.h
+UtilListe.o : UtilListe.c decl.h
+UtilFile.o : UtilFile.c decl.h
+WorkWithlistofmodulebysubroutine.o : WorkWithlistofmodulebysubroutine.c decl.h
+WorkWithlistmoduleinfile.o : WorkWithlistmoduleinfile.c decl.h
+WorkWithlistofcoupled.o : WorkWithlistofcoupled.c decl.h
+clean : 
+	/bin/rm -f *.o y.tab.c main.c lex.yy.c fortran.c \
+	fortran.tab.c fortran.yy.c convert.tab.c convert.yy.c \
+	y.output
Index: /vendors/AGRIF/r_00/LIB/SubLoopCreation.c
===================================================================
--- /vendors/AGRIF/r_00/LIB/SubLoopCreation.c	(revision 1902)
+++ /vendors/AGRIF/r_00/LIB/SubLoopCreation.c	(revision 1902)
@@ -0,0 +1,567 @@
+/******************************************************************************/
+/*                                                                            */
+/*     CONV (converter) for Agrif (Adaptive Grid Refinement In Fortran)       */
+/*                                                                            */
+/* Copyright or   or Copr. Laurent Debreu (Laurent.Debreu@imag.fr)            */
+/*                        Cyril Mazauric (Cyril_Mazauric@yahoo.fr)            */
+/* This software is governed by the CeCILL-C license under French law and     */
+/* abiding by the rules of distribution of free software.  You can  use,      */
+/* modify and/ or redistribute the software under the terms of the CeCILL-C   */
+/* license as circulated by CEA, CNRS and INRIA at the following URL          */
+/* "http://www.cecill.info".                                                  */
+/*                                                                            */
+/* As a counterpart to the access to the source code and  rights to copy,     */
+/* modify and redistribute granted by the license, users are provided only    */
+/* with a limited warranty  and the software's author,  the holder of the     */
+/* economic rights,  and the successive licensors  have only  limited         */
+/* liability.                                                                 */
+/*                                                                            */
+/* In this respect, the user's attention is drawn to the risks associated     */
+/* with loading,  using,  modifying and/or developing or reproducing the      */
+/* software by the user in light of its specific status of free software,     */
+/* that may mean  that it is complicated to manipulate,  and  that  also      */
+/* therefore means  that it is reserved for developers  and  experienced      */
+/* professionals having in-depth computer knowledge. Users are therefore      */
+/* encouraged to load and test the software's suitability as regards their    */
+/* requirements in conditions enabling the security of their systems and/or   */
+/* data to be ensured and,  more generally, to use and operate it in the      */
+/* same conditions as regards security.                                       */
+/*                                                                            */
+/* The fact that you are presently reading this means that you have had       */
+/* knowledge of the CeCILL-C license and that you accept its terms.           */
+/******************************************************************************/
+/* version 1.7                                                                */
+/******************************************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "decl.h"
+
+
+/******************************************************************************/
+/*     preparation and write of the argument list of a subroutine             */
+/******************************************************************************/
+
+
+/******************************************************************************/
+/*                             writeheadnewsub_0                              */
+/******************************************************************************/
+/* Firstpass 0                                                                */
+/* We should write the head of the subroutine sub_loop_<subroutinename>       */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+void writeheadnewsub_0()
+{
+   char ligne[LONG_C];
+
+   if ( firstpass == 0 && IsTabvarsUseInArgument_0() == 1 )
+   {
+      if ( todebug == 1 ) printf("Enter in writeheadnewsub_0\n");
+      /* we should add the use agrif_uti l if it is necessary                 */
+      WriteHeadofSubroutineLoop();
+      WriteUsemoduleDeclaration();
+      if ( ImplicitNoneInSubroutine() == 1 ) fprintf(fortranout,
+                                                       "      IMPLICIT NONE\n");
+      WriteIncludeDeclaration();
+      /*                                                                      */
+      /* We should write once the declaration of tables (extract              */
+      /*    from pointer) in the new subroutine                               */
+      if ( mark == 1 ) fprintf(fortranout,"!!! 000000000000000 \n");
+      if ( SubInList_ContainsSubroutine() == 0 ) WriteLocalParamDeclaration();
+      if ( mark == 1 ) fprintf(fortranout,"!!! 111111111111111 \n");
+
+      sprintf(ligne,"\n#include \"ParamFile%s.h\" \n",subroutinename);
+      tofich(fortranout,ligne,1);
+
+      WriteArgumentDeclaration_Sort();
+
+      if ( mark == 1 ) fprintf(fortranout,"!!! 222222222222222 \n");
+      writesub_loopdeclaration_tab(List_UsedInSubroutine_Var,fortranout);
+      if ( mark == 1 ) fprintf(fortranout,"!!! 333333333333333 \n");
+      writesub_loopdeclaration_scalar(List_UsedInSubroutine_Var,paramout);
+      if ( mark == 1 ) fprintf(fortranout,"!!! 444444444444444 \n");
+      /* now we should write the function declaration                         */
+      /*    case if it is the                                                 */
+      WriteFunctionDeclaration(1);
+      if ( mark == 1 ) fprintf(fortranout,"!!! 555555555555555 \n");
+
+//      if ( SubInList_ContainsSubroutine() == 0 ) WriteSubroutineDeclaration(1);
+  
+      if ( mark == 1 ) fprintf(fortranout,"!!! 666666666666666 \n");
+      if ( todebug == 1 ) printf("Out of writeheadnewsub_0\n");
+   }
+   else if ( firstpass == 0 )
+   {
+      AddUseAgrifUtil_0(fortranout);
+      WriteUsemoduleDeclaration();
+      WriteIncludeDeclaration();
+      if ( ImplicitNoneInSubroutine() == 1 ) fprintf(fortranout,
+                                                       "      IMPLICIT NONE\n");
+      if ( mark == 1 ) fprintf(fortranout,"!!! aaaaaaaaaaaaaaa \n");
+      WriteLocalParamDeclaration();
+      if ( mark == 1 ) fprintf(fortranout,"!!! bbbbbbbbbbbbbbb \n");
+      if ( functiondeclarationisdone == 0 ) WriteFunctionDeclaration(1);
+      WriteArgumentDeclaration_beforecall();
+/*      writesub_loopdeclaration_scalar(List_SubroutineArgument_Var,fortranout);
+      writesub_loopdeclaration_tab(List_SubroutineArgument_Var,fortranout);*/
+      if ( mark == 1 ) fprintf(fortranout,"!!! ccccccccccccccc \n");
+      if ( mark == 1 ) fprintf(fortranout,"!!! ddddddddddddddd \n");
+//      WriteSubroutineDeclaration(1);
+      if ( mark == 1 ) fprintf(fortranout,"!!! eeeeeeeeeeeeeee \n");
+   }
+}
+
+
+/******************************************************************************/
+/*                    WriteVariablelist_subloop                               */
+/******************************************************************************/
+/* This subroutine is used to write the list of the variable which            */
+/* should be called by the sub_loop_<name> subroutine                         */
+/* The first part is composed by the list of the local variables              */
+/******************************************************************************/
+/*                                                                            */
+/*    List_SubroutineDeclaration_Var    a,b,c,  &                             */
+/*                                      d,e,f,  &                             */
+/*     a,b,c,d,e,f,g,h     ========>    g,h                                   */
+/*                                                                            */
+/******************************************************************************/
+void WriteVariablelist_subloop(FILE *outputfile)
+{
+   listvar *parcours;
+   char ligne[LONG_C];
+   int compteur;
+
+   if ( todebug == 1 ) printf("Enter in WriteVariablelist_subloop\n");
+   parcours = List_SubroutineArgument_Var;
+   didvariableadded = 0;
+   compteur = 0 ;
+
+   while ( parcours )
+   {
+
+      /* if the readed variable is a variable of the subroutine               */
+      /*    subroutinename we should write the name of this variable          */
+      /*    in the output file                                                */
+      if ( !strcasecmp(parcours->var->v_subroutinename,subroutinename) )
+      {
+         if ( didvariableadded == 0 )
+         {
+            strcpy(ligne,"");
+         }
+         else
+         {
+            if ( compteur == 0 ) strcpy(ligne,"");
+            strcat(ligne,",");
+         }
+         strcat(ligne,parcours->var->v_nomvar);
+         didvariableadded = 1;
+         compteur = compteur + 1;
+         if ( compteur == 3 )
+         {
+            if ( retour77 == 0 )
+            {
+               strcat(ligne," &");
+               fprintf(outputfile,"\n      %s",ligne);
+            }
+            else fprintf(outputfile,"\n     & %s",ligne);
+            compteur = 0;
+         }
+      }
+      parcours = parcours -> suiv;
+   }
+   parcours = List_FunctionType_Var;
+   while ( parcours )
+   {
+      if ( !strcasecmp(parcours->var->v_subroutinename,subroutinename) )
+      {
+         if ( didvariableadded == 0 )
+         {
+            strcpy(ligne,"");
+         }
+         else
+         {
+            if ( compteur == 0 ) strcpy(ligne,"");
+            strcat(ligne,",");
+         }
+         strcat(ligne,parcours->var->v_nomvar);
+         didvariableadded = 1;
+         compteur = compteur + 1;
+         if ( compteur == 3 )
+         {
+            if ( retour77 == 0 )
+            {
+               strcat(ligne," &");
+               fprintf(outputfile,"\n      %s",ligne);
+            }
+            else fprintf(outputfile,"\n     & %s",ligne);
+            compteur = 0;
+         }
+      }
+      parcours = parcours -> suiv;
+   }
+   if ( compteur != 3 && compteur != 0 )
+   {
+      if ( retour77 == 0 ) fprintf(outputfile,"\n      %s &",ligne);
+      else fprintf(outputfile,"\n     & %s ",ligne);
+   }
+   if ( todebug == 1 ) printf("Out of WriteVariablelist_subloop\n");
+}
+
+
+/******************************************************************************/
+/*                     WriteVariablelist_subloop_Call                         */
+/******************************************************************************/
+/* This subroutine is used to write the list of the variable which            */
+/* should be called by the sub_loop_<name> subroutine into the called         */
+/* The second part is composed by the list of the global table                */
+/******************************************************************************/
+/*                                                                            */
+/*   List_UsedInSubroutine_Var SubloopScalar = 0 | SubloopScalar = 1          */
+/*                                a,b,c,  &      |  a,b(1,1),c,      &        */
+/*     a,b,c,d,e,f,g,h  =====>    d,e,f,  &      |  d(1),e(1,1,1),f, &        */
+/*                                g,h            |  g,h(1,1)                  */
+/*                                                                            */
+/******************************************************************************/
+void WriteVariablelist_subloop_Call(FILE *outputfile)
+{
+   listvar *parcours;
+   char ligne[LONG_40M];
+   char ligne2[10];
+   int i;
+   int compteur ;
+
+   strcpy(ligne,"");
+   
+   if ( todebug == 1 ) printf("Enter in WriteVariablelist_subloop_Call\n");
+   parcours = List_UsedInSubroutine_Var;
+   compteur = 0 ;
+   while ( parcours )
+   {
+      /* if the readed variable is a variable of the subroutine               */
+      /*    subroutinename we should write the name of this variable          */
+      /*    in the output file                                                */
+      if ( !strcasecmp(parcours->var->v_subroutinename,subroutinename)  &&
+          (parcours->var->v_allocatable == 0  || !strcasecmp(parcours->var->v_typevar,"type"))      &&
+           parcours->var->v_pointerdeclare == 0
+         )
+      {
+         if ( didvariableadded == 0 )
+         {
+            if ( retour77 == 1 ) strcpy(ligne,"\n     & ");
+            else strcpy(ligne,"\n      ");
+         }
+         else
+         {
+            if ( compteur == 0 )
+            {
+               if ( retour77 == 1 ) strcpy(ligne,"\n     & ");
+               else strcpy(ligne,"\n      ");
+            }
+            strcat(ligne," , ");
+         }
+         strcat(ligne,vargridcurgridtabvars(parcours->var,0));
+         /* if it is asked in the call of the conv we should give             */
+         /* scalar in argument, so we should put (1,1,1) after the            */
+         /* the name of the variable                                          */
+         if (  SubloopScalar != 0 &&
+               (IsVarAllocatable_0(parcours->var->v_nomvar) == 0 &&
+               parcours->var->v_pointerdeclare == 0 ) &&
+               parcours->var->v_nbdim != 0 )
+         {
+             i = 1;
+             while ( i <=  parcours->var->v_nbdim )
+             {
+                if ( i == 1 ) strcat(ligne,"( ");
+                if ( SubloopScalar == 2 )
+                {
+                   strcat(ligne,":");
+                   if ( i != parcours->var->v_nbdim ) strcat(ligne,",");
+                }
+                else
+                {
+                   strcat(ligne," lbound( ");
+                   strcat(ligne,vargridcurgridtabvars(parcours->var,0));
+                   strcat(ligne,",");
+                   strcpy(ligne2,"");
+                   sprintf(ligne2,"%d",i);
+                   strcat(ligne,ligne2);
+                   if ( i != parcours->var->v_nbdim ) strcat(ligne,"),");
+                }
+                if ( i == parcours->var->v_nbdim ) strcat(ligne,"))");
+                i++;
+             }
+         }
+         didvariableadded = 1;
+         compteur = compteur +1 ;
+         /*if ( retour77 == 0 )
+         {
+            strcat(ligne," &");
+            fprintf(outputfile,"\n");
+         }
+         else fprintf(outputfile,"\n     & ");*/
+         /*tofich(outputfile,ligne,0);*/
+      }
+      parcours = parcours -> suiv;
+   }
+   
+   Save_Length(ligne,41);
+   tofich(outputfile,ligne,0);
+   /* Now we should replace the last ", &" by " &"                            */
+/*   if ( didvariableadded != 0 && retour77 == 0 ) fseek(outputfile,-1,SEEK_CUR);
+   if ( didvariableadded == 0 ) fseek(outputfile,-1,SEEK_CUR);*/
+   if ( todebug == 1 ) printf("Out of WriteVariablelist_subloop_Call\n");
+}
+
+
+/******************************************************************************/
+/*                       WriteVariablelist_subloop_Def                        */
+/******************************************************************************/
+/* This subroutine is used to write the list of the variable which            */
+/* should be called by the sub_loop_<name> subroutine into the def            */
+/* The second part is composed by the list of the global table                */
+/* <name>_tmp                                                                 */
+/******************************************************************************/
+/*                                                                            */
+/*       List_UsedInSubroutine_Var                                            */
+/*                                a-tmp,b-tmp,c_tmp, &                        */
+/*     a,b,c,d,e,f,g,h  =====>    d_tmp,e_tmp,f_tmp, &                        */
+/*                                g_tmp,h_tmp                                 */
+/*                                                                            */
+/******************************************************************************/
+void WriteVariablelist_subloop_Def(FILE *outputfile)
+{
+   listvar *parcours;
+/*   char ligne[LONG_40M];*/
+   char *ligne;
+   int compteur;
+
+/*   strcpy(ligne," ");*/
+
+   ligne=(char *)malloc(LONG_40M*sizeof(char));
+   
+   if ( todebug == 1 ) printf("Enter in WriteVariablelist_subloop_Def\n");
+   parcours = List_UsedInSubroutine_Var;
+   compteur = 0 ;
+   while ( parcours )
+   {
+      /* if the readed variable is a variable of the subroutine               */
+      /*    subrotinename we should write the name of this variable           */
+      /*    in the output file                                                */
+      if ( !strcasecmp(parcours->var->v_subroutinename,subroutinename)  &&
+          (parcours->var->v_allocatable == 0  || !strcasecmp(parcours->var->v_typevar,"type"))      &&
+           parcours->var->v_pointerdeclare == 0
+         )
+      {
+         if ( didvariableadded == 0 )
+         {
+            if ( retour77 == 1 ) strcpy(ligne,"\n     &");
+            else strcpy(ligne,"\n      ");
+         }
+         else
+         {
+            if ( compteur == 0 )
+            {
+               if ( retour77 == 1 ) strcpy(ligne,"\n     & ");
+               else strcpy(ligne,"\n      ");
+            }
+            strcat(ligne,",");
+         }
+         strcat(ligne,parcours->var->v_nomvar);
+         compteur = compteur + 1;
+         didvariableadded = 1;
+/*         if ( compteur == 3 )
+         {
+            if ( retour77 == 0 )
+            {
+               strcat(ligne," &");
+               fprintf(outputfile,"\n      %s",ligne);
+            }
+            else fprintf(outputfile,"\n     & %s",ligne);
+            compteur = 0;
+         }*/
+      }
+      parcours = parcours -> suiv;
+   }
+ /*  if ( compteur != 3 && compteur != 0 )
+   {
+      if ( retour77 == 0 ) fprintf(outputfile,"\n      %s &",ligne);
+      else fprintf(outputfile,"\n     & %s",ligne);
+   }*/
+   Save_Length(ligne,41);
+   tofich(outputfile,ligne,0);
+
+   /* Now we should replace the last ", &" by " &"                            */
+  /* if ( didvariableadded != 0 && retour77 == 0 ) fseek(outputfile,-1,SEEK_CUR);
+   if ( didvariableadded == 0 ) fseek(outputfile,-1,SEEK_CUR);*/
+   if ( todebug == 1 ) printf("Out of WriteVariablelist_subloop_Def\n");
+   strcpy(ligne,"");
+   
+   free(ligne);
+}
+
+
+
+/******************************************************************************/
+/*                      WriteHeadofSubroutineLoop                             */
+/******************************************************************************/
+/* This subroutine is used to write the head of the subroutine                */
+/* Sub_Loop_<name>                                                            */
+/******************************************************************************/
+/*                 Sub_loop_subroutine.h                                      */
+/*                                                                            */
+/*                 subroutine Sub_Loop_subroutine ( &                         */
+/*                 a,b,c, &                                                   */
+/* SubLoopScalar   d,e(1,1),f(1,1,1), &                                       */
+/*                 g,h  &                                                     */
+/*                 )                                                          */
+/******************************************************************************/
+void WriteHeadofSubroutineLoop()
+{
+   char ligne[LONG_C];
+   FILE * subloop;
+
+   if ( todebug == 1 ) printf("Enter in WriteHeadofSubroutineLoop\n");
+   tofich(fortranout,"\n",1);
+   /* Open this newfile                                                       */
+   sprintf(ligne,"Sub_Loop_%s.h",subroutinename);
+   subloop = associate(ligne);
+   /*                                                                         */
+   if ( retour77 == 0 ) sprintf(ligne,"      subroutine Sub_Loop_%s( &"
+                                                               ,subroutinename);
+   else sprintf(ligne,"      subroutine Sub_Loop_%s( ",subroutinename);
+   fprintf(subloop,ligne);
+   /*                                                                         */
+   WriteVariablelist_subloop(subloop);
+   WriteVariablelist_subloop_Def(subloop);
+   /*                                                                         */
+   sprintf(ligne,")");
+   fprintf(subloop,ligne);
+   /* if USE agrif_Uti l should be add                                        */
+   AddUseAgrifUtil_0(subloop);
+   /*                                                                         */
+   oldfortranout = fortranout;
+   fortranout = subloop;
+   if ( todebug == 1 ) printf("Out of WriteHeadofSubroutineLoop\n");
+}
+
+/******************************************************************************/
+/*                closeandcallsubloopandincludeit_0                           */
+/******************************************************************************/
+/* Firstpass 0                                                                */
+/* We should close the sub_loop subroutine, call it and close the             */
+/* function (suborfun = 0)                                                    */
+/* subroutine (suborfun = 1)                                                  */
+/* end (suborfun = 2)                                                         */
+/* end program (suborfun = 3)                                                 */
+/* and include the sub_loop subroutine after                                  */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+void closeandcallsubloopandincludeit_0(int suborfun)
+{
+   char ligne[LONG_C];
+
+   if ( firstpass == 0 )
+   {
+   if ( todebug == 1 ) printf("Enter in closeandcallsubloopandincludeit_0\n");
+   if ( IsTabvarsUseInArgument_0() == 1 )
+   {
+      /* We should remove the key word end subroutine                         */
+      RemoveWordCUR_0(fortranout,(long)(-(pos_cur-pos_endsubroutine)),
+                                          pos_cur-pos_endsubroutine);
+      /* We should close the loop subroutine                                  */
+      sprintf(ligne,"\n      end subroutine Sub_Loop_%s",subroutinename);
+      tofich(fortranout,ligne,1);
+      fclose(fortranout);
+      fortranout = oldfortranout;
+
+
+      AddUseAgrifUtilBeforeCall_0(fortranout);
+      if ( functiondeclarationisdone == 0 ) WriteFunctionDeclaration(0);
+      WriteArgumentDeclaration_beforecall();
+      if ( !strcasecmp(subofagrifinitgrids,subroutinename) )
+                     fprintf(oldfortranout,"      Call Agrif_Init_Grids () \n");
+      /* Now we add the call af the new subroutine                            */
+      if ( retour77 == 0 ) sprintf(ligne,"\n      Call Sub_Loop_%s( &"
+                                                               ,subroutinename);
+      else sprintf(ligne,"\n      Call Sub_Loop_%s( ",subroutinename);
+      fprintf(fortranout,ligne);
+      /* Write the list of the local variables used in this new subroutine    */
+      WriteVariablelist_subloop(fortranout);
+      /* Write the list of the global tables used in this new subroutine      */
+      /*    in doloop                                                         */
+      WriteVariablelist_subloop_Call(fortranout);
+      /* Close the parenthesis of the new subroutine called                   */
+      sprintf(ligne,")");
+      fprintf(fortranout,ligne);
+      /* We should close the original subroutine                              */
+      if ( suborfun == 3 ) sprintf(ligne,"\n      end program %s"
+                                                               ,subroutinename);
+      if ( suborfun == 2 ) sprintf(ligne,"\n      end");
+      if ( suborfun == 1 ) sprintf(ligne,"\n      end subroutine %s"
+                                                               ,subroutinename);
+      if ( suborfun == 0 ) sprintf(ligne,"\n      end function %s"
+                                                               ,subroutinename);
+      tofich(fortranout,ligne,1);
+      /* we should include the above file in the original code                */
+      sprintf(ligne,"\n#include \"Sub_Loop_%s.h\" \n",subroutinename);
+      tofich(fortranout,ligne,1);
+      }
+    oldfortranout = (FILE *)NULL;      
+   if ( todebug == 1 ) printf("Out of closeandcallsubloopandincludeit_0\n");
+   }
+   
+}
+
+
+
+
+void closeandcallsubloop_contains_0()
+{
+   char ligne[LONG_C];
+
+   if ( firstpass == 0 )
+   {
+   if ( todebug == 1 ) printf("Enter in closeandcallsubloopandincludeit_0\n");
+   if ( IsTabvarsUseInArgument_0() == 1 )
+   {
+      Remove_Word_Contains_0();
+      sprintf(ligne,"\n      end subroutine Sub_Loop_%s",subroutinename);
+      tofich(fortranout,ligne,1);
+      fclose(fortranout);
+      fortranout = oldfortranout;
+
+      AddUseAgrifUtilBeforeCall_0(fortranout);
+      if ( ImplicitNoneInSubroutine() == 1 ) fprintf(fortranout,
+                                                       "      IMPLICIT NONE\n");
+      WriteLocalParamDeclaration();
+      if ( functiondeclarationisdone == 0 ) WriteFunctionDeclaration(0);
+      WriteArgumentDeclaration_beforecall();
+      WriteSubroutineDeclaration(0);
+      if ( !strcasecmp(subofagrifinitgrids,subroutinename) )
+                     fprintf(oldfortranout,"      Call Agrif_Init_Grids () \n");
+      /* Now we add the call af the new subroutine                            */
+      if ( retour77 == 0 ) sprintf(ligne,"\n      Call Sub_Loop_%s( &"
+                                                               ,subroutinename);
+      else sprintf(ligne,"\n      Call Sub_Loop_%s( ",subroutinename);
+      fprintf(fortranout,ligne);
+      /* Write the list of the local variables used in this new subroutine    */
+      WriteVariablelist_subloop(fortranout);
+      /* Write the list of the global tables used in this new subroutine      */
+      /*    in doloop                                                         */
+      WriteVariablelist_subloop_Call(fortranout);
+      /* Close the parenthesis of the new subroutine called                   */
+      sprintf(ligne,")");
+      tofich(fortranout,ligne,1);
+      /* We should close the original subroutine                              */
+      sprintf(ligne,"\n      contains");
+      tofich(fortranout,ligne,1);
+      /* we should include the above file in the original code                */
+      sprintf(ligne,"\n#include \"Sub_Loop_%s.h\" \n",subroutinename);
+      tofich(fortranout,ligne,1);
+      }
+   oldfortranout = (FILE *)NULL;
+   if ( todebug == 1 ) printf("Out of closeandcallsubloopandincludeit_0\n");
+   }
+}
Index: /vendors/AGRIF/r_00/LIB/UtilAgrif.c
===================================================================
--- /vendors/AGRIF/r_00/LIB/UtilAgrif.c	(revision 1902)
+++ /vendors/AGRIF/r_00/LIB/UtilAgrif.c	(revision 1902)
@@ -0,0 +1,989 @@
+/******************************************************************************/
+/*                                                                            */
+/*     CONV (converter) for Agrif (Adaptive Grid Refinement In Fortran)       */
+/*                                                                            */
+/* Copyright or   or Copr. Laurent Debreu (Laurent.Debreu@imag.fr)            */
+/*                        Cyril Mazauric (Cyril_Mazauric@yahoo.fr)            */
+/* This software is governed by the CeCILL-C license under French law and     */
+/* abiding by the rules of distribution of free software.  You can  use,      */
+/* modify and/ or redistribute the software under the terms of the CeCILL-C   */
+/* license as circulated by CEA, CNRS and INRIA at the following URL          */
+/* "http://www.cecill.info".                                                  */
+/*                                                                            */
+/* As a counterpart to the access to the source code and  rights to copy,     */
+/* modify and redistribute granted by the license, users are provided only    */
+/* with a limited warranty  and the software's author,  the holder of the     */
+/* economic rights,  and the successive licensors  have only  limited         */
+/* liability.                                                                 */
+/*                                                                            */
+/* In this respect, the user's attention is drawn to the risks associated     */
+/* with loading,  using,  modifying and/or developing or reproducing the      */
+/* software by the user in light of its specific status of free software,     */
+/* that may mean  that it is complicated to manipulate,  and  that  also      */
+/* therefore means  that it is reserved for developers  and  experienced      */
+/* professionals having in-depth computer knowledge. Users are therefore      */
+/* encouraged to load and test the software's suitability as regards their    */
+/* requirements in conditions enabling the security of their systems and/or   */
+/* data to be ensured and,  more generally, to use and operate it in the      */
+/* same conditions as regards security.                                       */
+/*                                                                            */
+/* The fact that you are presently reading this means that you have had       */
+/* knowledge of the CeCILL-C license and that you accept its terms.           */
+/******************************************************************************/
+/* version 1.7                                                                */
+/******************************************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "decl.h"
+/******************************************************************************/
+/*                      Vartonumber                                           */
+/******************************************************************************/
+/* This subroutine is used to know if Agrif_ is locate in the char            */
+/* tokname                                                                    */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+int Vartonumber(char *tokname)
+{
+   int agrifintheword;
+
+   agrifintheword = 0;
+        if ( !strcasecmp(tokname,"Agrif_parent")         ) agrifintheword = 1;
+   else if ( !strcasecmp(tokname,"Agrif_set_type")       ) agrifintheword = 1;
+   else if ( !strcasecmp(tokname,"Agrif_set_raf")        ) agrifintheword = 1;
+   else if ( !strcasecmp(tokname,"Agrif_set_bc")         ) agrifintheword = 1;
+   else if ( !strcasecmp(tokname,"Agrif_set_bcinterp")   ) agrifintheword = 1;
+   else if ( !strcasecmp(tokname,"Agrif_Root")           ) agrifintheword = 1;
+   else if ( !strcasecmp(tokname,"Agrif_CFixed")         ) agrifintheword = 1;
+   else if ( !strcasecmp(tokname,"Agrif_Fixed")          ) agrifintheword = 1;
+   else if ( !strcasecmp(tokname,"Agrif_bc_variable")    ) agrifintheword = 1;
+   else if ( !strcasecmp(tokname,"Agrif_set_parent")     ) agrifintheword = 1;
+   else if ( !strcasecmp(tokname,"Agrif_interp_variable")) agrifintheword = 1;
+   else if ( !strcasecmp(tokname,"Agrif_init_variable")  ) agrifintheword = 1;
+   else if ( !strcasecmp(tokname,"Agrif_update_variable")) agrifintheword = 1;
+   else if ( !strcasecmp(tokname,"Agrif_Set_interp")     ) agrifintheword = 1;
+   else if ( !strcasecmp(tokname,"Agrif_Set_Update")     ) agrifintheword = 1;
+   else if ( !strcasecmp(tokname,"Agrif_Set_UpdateType") ) agrifintheword = 1;
+   else if ( !strcasecmp(tokname,"Agrif_Set_restore")    ) agrifintheword = 1;
+   else if ( !strcasecmp(tokname,"agrif_init_grids")     ) agrifintheword = 1;
+   else if ( !strcasecmp(tokname,"agrif_step")           ) agrifintheword = 1;
+
+   return agrifintheword;
+}
+
+/******************************************************************************/
+/*                              Agrif_in_Tok_NAME                             */
+/******************************************************************************/
+/* This subroutine is used to know if Agrif_ is locate in the char            */
+/* tokname                                                                    */
+/******************************************************************************/
+/*                                                                            */
+/*                 Agrif_name --------------> Agrif_in_Tok_NAME = 1           */
+/*                       name --------------> Agrif_in_Tok_NAME = 0           */
+/*                                                                            */
+/******************************************************************************/
+int Agrif_in_Tok_NAME(char *tokname)
+{
+   int agrifintheword;
+
+   if ( strncasecmp(tokname,"Agrif_",6) == 0 )  agrifintheword = 1;
+   else agrifintheword = 0;
+
+   return agrifintheword;
+}
+
+/******************************************************************************/
+/*                     ModifyTheVariableName_0                                */
+/******************************************************************************/
+/* Firstpass 0                                                                */
+/******************************************************************************/
+/*                                                                            */
+/*               Agrif_<toto>(variable) ====>     Agrif_<toto>(variable)      */
+/*                                                                            */
+/******************************************************************************/
+void ModifyTheVariableName_0(char *ident, int lengthname)
+{
+   listvar *newvar;
+   int out;
+   
+   if ( firstpass == 0 )
+   {
+      newvar = List_Global_Var;
+      out=0;
+      while ( newvar && out == 0 )
+      {
+         if ( !strcasecmp(newvar->var->v_nomvar,ident) ) out = 1;
+         else newvar=newvar->suiv;
+      }
+
+      if ( out == 0 )
+      {
+         newvar = List_ModuleUsed_Var;
+         while ( newvar && out == 0 )
+         {
+            if ( !strcasecmp(newvar->var->v_nomvar,ident) ) out = 1;
+            else newvar=newvar->suiv;
+         }
+      }
+      if ( out == 0 )
+      {
+         newvar = List_Common_Var;
+         while ( newvar && out == 0 )
+         {
+            if ( !strcasecmp(newvar->var->v_nomvar,ident) ) out = 1;
+            else newvar=newvar->suiv;
+         }
+      }
+
+      if ( out == 0 )
+      {
+         newvar = List_ModuleUsedInModuleUsed_Var;
+         while ( newvar && out == 0 )
+         {
+            if ( !strcasecmp(newvar->var->v_nomvar,ident) ) out = 1;
+            else newvar=newvar->suiv;
+         }
+      }
+
+      if ( out == 1 )
+      {
+         /* remove the variable                                               */
+         RemoveWordCUR_0(fortranout,(long)(-lengthname),
+                               lengthname);
+         fseek(fortranout,(long)(-lengthname),SEEK_CUR);
+         /* then write the new name                                           */
+         if ( inagrifcallargument == 1 && agrif_parentcall == 0 )
+            fprintf(fortranout,"%d",newvar->var->v_indicetabvars);
+         else
+         {
+            if ( retour77 == 0 )
+            {
+               fprintf(fortranout," Agrif_tabvars & \n      ");
+            }
+            else
+            {
+               fprintf(fortranout,"Agrif_tabvars");
+               fprintf(fortranout," \n     & ");
+            }
+            fprintf(fortranout,"%s",
+                             vargridcurgridtabvarswithoutAgrif_Gr(newvar->var));
+            colnum = strlen(vargridcurgridtabvarswithoutAgrif_Gr(newvar->var));
+         }
+      }
+      else
+      {
+         /* we should look in the List_ModuleUsed_Var                         */
+         if ( inagrifcallargument != 1 )
+         {
+            newvar = List_ModuleUsed_Var;
+            while ( newvar && out == 0 )
+            {
+               if ( !strcasecmp(newvar->var->v_nomvar,ident) ) out = 1;
+               else newvar=newvar->suiv;
+            }
+            if ( out == 1 )
+            {
+               /* remove the variable                                         */
+               RemoveWordCUR_0(fortranout,(long)(-lengthname),
+                                     lengthname);
+               fseek(fortranout,(long)(-lengthname),SEEK_CUR);
+               /* then write the new name                                     */
+               if ( retour77 == 0 )
+               {
+                  fprintf(fortranout," Agrif_tabvars & \n      ");
+               }
+               else
+               {
+                  fprintf(fortranout," \n     & Agrif_tabvars");
+               }
+               fprintf(fortranout,"%s",
+                             vargridcurgridtabvarswithoutAgrif_Gr(newvar->var));
+               colnum = strlen(
+                             vargridcurgridtabvarswithoutAgrif_Gr(newvar->var));
+            }
+         }
+      }
+   }
+}
+
+/******************************************************************************/
+/*                     ModifyTheVariableName_0                                */
+/******************************************************************************/
+/* Firstpass 0                                                                */
+/******************************************************************************/
+/*                                                                            */
+/*               Agrif_<toto>(variable) ====>     Agrif_<toto>(variable)      */
+/*                                                                            */
+/******************************************************************************/
+void ModifyTheVariableNamecoupled_0(char *ident, char* coupledident)
+{
+   listvar *newvar;
+   int out;
+   
+   if ( firstpass == 0 )
+   {
+      newvar = List_Global_Var;
+      out=0;
+      while ( newvar && out == 0 )
+      {
+         if ( !strcasecmp(newvar->var->v_nomvar,coupledident) ) out = 1;
+         else newvar=newvar->suiv;
+      }
+
+      if ( out == 0 )
+      {
+         newvar = List_ModuleUsed_Var;
+         while ( newvar && out == 0 )
+         {
+            if ( !strcasecmp(newvar->var->v_nomvar,coupledident) ) out = 1;
+            else newvar=newvar->suiv;
+         }
+      }
+      if ( out == 0 )
+      {
+         newvar = List_Common_Var;
+         while ( newvar && out == 0 )
+         {
+            if ( !strcasecmp(newvar->var->v_nomvar,coupledident) ) out = 1;
+            else newvar=newvar->suiv;
+         }
+      }
+
+      if ( out == 0 )
+      {
+         newvar = List_ModuleUsedInModuleUsed_Var;
+         while ( newvar && out == 0 )
+         {
+            if ( !strcasecmp(newvar->var->v_nomvar,coupledident) ) out = 1;
+            else newvar=newvar->suiv;
+         }
+      }
+
+      if ( out == 1 )
+      {
+         /* remove the variable                                               */
+         RemoveWordCUR_0(fortranout,(long)(-strlen(ident)),
+                               strlen(ident));
+         fseek(fortranout,(long)(-strlen(ident)),SEEK_CUR);
+         /* then write the new name                                           */
+         if ( inagrifcallargument == 1 && agrif_parentcall == 0 )
+            fprintf(fortranout,"%d",newvar->var->v_indicetabvars);
+         else
+         {
+            if ( retour77 == 0 )
+            {
+               fprintf(fortranout," Agrif_tabvars & \n      ");
+            }
+            else
+            {
+               fprintf(fortranout,"Agrif_tabvars");
+               fprintf(fortranout," \n     & ");
+            }
+            fprintf(fortranout,"%s",
+                             vargridcurgridtabvarswithoutAgrif_Gr(newvar->var));
+            colnum = strlen(vargridcurgridtabvarswithoutAgrif_Gr(newvar->var));
+         }
+      }
+      else
+      {
+         /* we should look in the List_ModuleUsed_Var                         */
+         if ( inagrifcallargument != 1 )
+         {
+            newvar = List_ModuleUsed_Var;
+            while ( newvar && out == 0 )
+            {
+               if ( !strcasecmp(newvar->var->v_nomvar,coupledident) ) out = 1;
+               else newvar=newvar->suiv;
+            }
+            if ( out == 1 )
+            {
+               /* remove the variable                                         */
+               RemoveWordCUR_0(fortranout,(long)(-strlen(ident)),
+                                     strlen(ident));
+               fseek(fortranout,(long)(-strlen(ident)),SEEK_CUR);
+               /* then write the new name                                     */
+               if ( retour77 == 0 )
+               {
+                  fprintf(fortranout," Agrif_tabvars & \n      ");
+               }
+               else
+               {
+                  fprintf(fortranout," \n     & Agrif_tabvars");
+               }
+               fprintf(fortranout,"%s",
+                             vargridcurgridtabvarswithoutAgrif_Gr(newvar->var));
+               colnum = strlen(
+                             vargridcurgridtabvarswithoutAgrif_Gr(newvar->var));
+            }
+         }
+      }
+   }
+}
+
+
+
+/******************************************************************************/
+/*                         Add_SubroutineWhereAgrifUsed_1                     */
+/******************************************************************************/
+/* This subroutine is used to add a record to                                 */
+/* List_SubroutineWhereAgrifUsed                                              */
+/******************************************************************************/
+/*                                                                            */
+/*       subroutine sub ... Agrif_<something>                                 */
+/*                                                                            */
+/*        _______     _______     _______     _______     _______             */
+/*       +      +    +      +    +      +    +      +    +      +             */
+/*       + list +--->+ list +--->+ list +--->+ list +--->+ sub  +             */
+/*       +______+    +______+    +______+    +______+    +______+             */
+/*                                                                            */
+/*       list = List_SubroutineWhereAgrifUsed                                 */
+/*                                                                            */
+/******************************************************************************/
+void Add_SubroutineWhereAgrifUsed_1(char *sub,char *mod)
+{
+  listnom *listnomtmp;
+  listnom *parcours;
+
+  if ( firstpass == 1 )
+  {
+  if ( !List_SubroutineWhereAgrifUsed )
+  {
+     listnomtmp=(listnom *)malloc(sizeof(listnom));
+     strcpy(listnomtmp->o_nom,sub);
+     Save_Length(sub,23);
+     strcpy(listnomtmp->o_module,mod);
+     Save_Length(mod,24);
+     listnomtmp->suiv = NULL;
+     List_SubroutineWhereAgrifUsed  =  listnomtmp;
+  }
+  else
+  {
+    parcours = List_SubroutineWhereAgrifUsed;
+    while ( parcours && strcasecmp(parcours->o_nom,sub) )
+    {
+       parcours = parcours->suiv;
+    }
+    if ( !parcours )
+    {
+       listnomtmp=(listnom *)malloc(sizeof(listnom));
+       strcpy(listnomtmp->o_nom,sub);
+       Save_Length(sub,23);
+       strcpy(listnomtmp->o_module,mod);
+       Save_Length(mod,24);
+       listnomtmp->suiv = List_SubroutineWhereAgrifUsed;
+       List_SubroutineWhereAgrifUsed  =  listnomtmp;
+    }
+  }
+  }
+}
+
+/******************************************************************************/
+/*                                AddUseAgrifUtil_0                           */
+/******************************************************************************/
+/* Add use Agrif_Util at the beginning of the subroutine definition           */
+/* if it is necessary                                                         */
+/******************************************************************************/
+/*                                                                            */
+/*       subroutine sub            |  subroutine sub                          */
+/*                                 |  USE Agrif_Util                          */
+/*       implicit none             |  implicit none                           */
+/*       ...                       |  ...                                     */
+/*       ... Agrif_<something>     |  ... Agrif_<something>                   */
+/*       ...                       |  ...                                     */
+/*       end                       |  end                                     */
+/*                                                                            */
+/*                                                                            */
+/******************************************************************************/
+void  AddUseAgrifUtil_0(FILE *fileout)
+{
+  listnom *parcours;
+
+  if ( firstpass == 0 )
+  {
+     parcours = List_SubroutineWhereAgrifUsed;
+     while ( parcours && strcasecmp(parcours->o_nom,subroutinename) )
+                                                    parcours = parcours -> suiv;
+     if ( parcours && parcours->o_val != 0 )
+                                   fprintf(fileout,"\n      USE Agrif_Util \n");
+  }
+}
+
+void  AddUseAgrifUtilBeforeCall_0(FILE *fileout)
+{
+  listusemodule *parcours;
+
+  int out;
+
+  if ( firstpass == 0 )
+  {
+     parcours = List_NameOfModuleUsed;
+     out = 0 ;
+     while ( parcours && out == 0 )
+     {
+        if ( !strcasecmp(parcours->u_usemodule,"Agrif_Util")     &&
+             !strcasecmp(parcours->u_modulename,curmodulename)   &&
+             !strcasecmp(parcours->u_cursubroutine,subroutinename)
+            ) out = 1;
+        else parcours = parcours->suiv;
+     }
+     if ( out == 0 )
+     {
+        fprintf(fileout,"\n      USE Agrif_Util \n");
+     }
+  }
+}
+
+/******************************************************************************/
+/*                         NotifyAgrifFunction_0                              */
+/******************************************************************************/
+/* Firstpass 0                                                                */
+/******************************************************************************/
+/*                                                                            */
+/*               Agrif_<toto>(variable) ====>     Agrif_<toto>(variable)      */
+/*                                                                            */
+/******************************************************************************/
+void NotifyAgrifFunction_0(char *ident)
+{
+   if ( firstpass == 0 )
+   {
+      if ( !strcasecmp(ident,"Agrif_parent") )
+      {
+         InAgrifParentDef = 1;
+         pos_curagrifparent = setposcur()-12;
+      }
+      else if ( !strcasecmp(ident,"Agrif_Get_Coarse_grid") )
+      {
+         InAgrifParentDef = 2;
+         pos_curagrifparent = setposcur()-21;
+      }
+      else if ( !strcasecmp(ident,"Agrif_Rhox") )
+      {
+         InAgrifParentDef = 3;
+         pos_curagrifparent = setposcur()-10;
+      }
+      else if ( !strcasecmp(ident,"Agrif_Parent_Rhox") )
+      {
+         InAgrifParentDef = 4;
+         pos_curagrifparent = setposcur()-17;
+      }
+      else if ( !strcasecmp(ident,"Agrif_IRhox") )
+      {
+         InAgrifParentDef = 5;
+         pos_curagrifparent = setposcur()-11;
+      }
+      else if ( !strcasecmp(ident,"Agrif_Parent_IRhox") )
+      {
+         InAgrifParentDef = 6;
+         pos_curagrifparent = setposcur()-18;
+      }
+      else if ( !strcasecmp(ident,"Agrif_Rhoy") )
+      {
+         InAgrifParentDef = 7;
+         pos_curagrifparent = setposcur()-10;
+      }
+      else if ( !strcasecmp(ident,"Agrif_Parent_Rhoy") )
+      {
+         InAgrifParentDef = 8;
+         pos_curagrifparent = setposcur()-17;
+      }
+      else if ( !strcasecmp(ident,"Agrif_IRhoy") )
+      {
+         InAgrifParentDef = 9;
+         pos_curagrifparent = setposcur()-11;
+      }
+      else if ( !strcasecmp(ident,"Agrif_Parent_IRhoy") )
+      {
+         InAgrifParentDef = 10;
+         pos_curagrifparent = setposcur()-18;
+      }
+      else if ( !strcasecmp(ident,"Agrif_Rhoz") )
+      {
+         InAgrifParentDef = 11;
+         pos_curagrifparent = setposcur()-10;
+      }
+      else if ( !strcasecmp(ident,"Agrif_Parent_Rhoz") )
+      {
+         InAgrifParentDef = 12;
+         pos_curagrifparent = setposcur()-17;
+      }
+      else if ( !strcasecmp(ident,"Agrif_IRhoz") )
+      {
+         InAgrifParentDef = 13;
+         pos_curagrifparent = setposcur()-11;
+      }
+      else if ( !strcasecmp(ident,"Agrif_Parent_IRhoz") )
+      {
+         InAgrifParentDef = 14;
+         pos_curagrifparent = setposcur()-18;
+      }
+      else if ( !strcasecmp(ident,"Agrif_NearCommonBorderX") )
+      {
+         InAgrifParentDef = 15;
+         pos_curagrifparent = setposcur()-23;
+      }
+      else if ( !strcasecmp(ident,"Agrif_NearCommonBorderY") )
+      {
+         InAgrifParentDef = 16;
+         pos_curagrifparent = setposcur()-23;
+      }
+      else if ( !strcasecmp(ident,"Agrif_NearCommonBorderZ") )
+      {
+         InAgrifParentDef = 17;
+         pos_curagrifparent = setposcur()-23;
+      }
+      else if ( !strcasecmp(ident,"Agrif_DistantCommonBorderX") )
+      {
+         InAgrifParentDef = 18;
+         pos_curagrifparent = setposcur()-26;
+      }
+      else if ( !strcasecmp(ident,"Agrif_DistantCommonBorderY") )
+      {
+         InAgrifParentDef = 19;
+         pos_curagrifparent = setposcur()-26;
+      }
+      else if ( !strcasecmp(ident,"Agrif_DistantCommonBorderZ") )
+      {
+         InAgrifParentDef = 20;
+         pos_curagrifparent = setposcur()-26;
+      }
+      else if ( !strcasecmp(ident,"Agrif_Get_parent_id") )
+      {
+         InAgrifParentDef = 21;
+         pos_curagrifparent = setposcur()-19;
+      }
+      else if ( !strcasecmp(ident,"Agrif_Get_grid_id") )
+      {
+         InAgrifParentDef = 22;
+         pos_curagrifparent = setposcur()-17;
+      }
+      else if ( !strcasecmp(ident,"Agrif_Parent_Iz") )
+      {
+         InAgrifParentDef = 23;
+         pos_curagrifparent = setposcur()-15;
+      }
+      else if ( !strcasecmp(ident,"Agrif_Parent_Iy") )
+      {
+         InAgrifParentDef = 24;
+         pos_curagrifparent = setposcur()-15;
+      }
+      else if ( !strcasecmp(ident,"Agrif_Parent_Ix") )
+      {
+         InAgrifParentDef = 25;
+         pos_curagrifparent = setposcur()-15;
+      }
+      else if ( !strcasecmp(ident,"Agrif_Iz") )
+      {
+         InAgrifParentDef = 26;
+         pos_curagrifparent = setposcur()-8;
+      }
+      else if ( !strcasecmp(ident,"Agrif_Iy") )
+      {
+         InAgrifParentDef = 27;
+         pos_curagrifparent = setposcur()-8;
+      }
+      else if ( !strcasecmp(ident,"Agrif_Ix") )
+      {
+         InAgrifParentDef = 28;
+         pos_curagrifparent = setposcur()-8;
+      }
+      else if ( !strcasecmp(ident,"Agrif_Nb_Fixed_Grids") )
+      {
+         InAgrifParentDef = 29;
+         pos_curagrifparent = setposcur()-20;
+      }
+      else if ( !strcasecmp(ident,"Agrif_Nb_Fine_Grids") )
+      {
+         InAgrifParentDef = 29;
+         pos_curagrifparent = setposcur()-19;
+      }
+      else if ( !strcasecmp(ident,"AGRIF_Nb_Step") )
+      {
+         InAgrifParentDef = 30;
+         pos_curagrifparent = setposcur()-13;
+      }
+   }
+}
+
+/******************************************************************************/
+/*                       ModifyTheAgrifFunction_0                             */
+/******************************************************************************/
+/* Firstpass 0                                                                */
+/******************************************************************************/
+/*                                                                            */
+/*               Agrif_<toto>(variable) ====>     Agrif_<toto>(variable)      */
+/*                                                                            */
+/******************************************************************************/
+void ModifyTheAgrifFunction_0(char *ident)
+{
+   if ( InAgrifParentDef != 0 )
+          AgriffunctionModify_0(ident,InAgrifParentDef);
+   /*                                                                         */
+   InAgrifParentDef = 0;
+}
+
+
+/******************************************************************************/
+/*                         AgriffunctionModify_0                              */
+/******************************************************************************/
+/* Firstpass 0                                                                */
+/******************************************************************************/
+/* if whichone = 1 Agrif_parent ===>                                          */
+/*                                                                            */
+/* if whichone = 2 Agrif_Get_coarse_grid ===>                                 */
+/*                                                                            */
+/* if whichone = 3 Agrif_Rhox ===>                                            */
+/*                                                                            */
+/* if whichone = 4 Agrif_Parent_Rhox ===>                                     */
+/*                                                                            */
+/* if whichone = 5 Agrif_IRhox ===>                                           */
+/*                                                                            */
+/* if whichone = 6 Agrif_Parent_IRhox ===>                                    */
+/*                                                                            */
+/* if whichone = 7 Agrif_Rhoy ===>                                            */
+/*                                                                            */
+/* if whichone = 8 Agrif_Parent_Rhoy ===>                                     */
+/*                                                                            */
+/* if whichone = 9 Agrif_IRhoy ===>                                           */
+/*                                                                            */
+/* if whichone = 10 Agrif_Parent_IRhoy ===>                                   */
+/*                                                                            */
+/* if whichone = 11 Agrif_Rhoz ===>                                           */
+/*                                                                            */
+/* if whichone = 12 Agrif_Parent_Rhoz ===>                                    */
+/*                                                                            */
+/* if whichone = 13 Agrif_IRhoz ===>                                          */
+/*                                                                            */
+/* if whichone = 14 Agrif_Parent_IRhoz ===>                                   */
+/*                                                                            */
+/* if whichone = 15 Agrif_NearCommonBorderX ===>                              */
+/*                                                                            */
+/* if whichone = 16 Agrif_NearCommonBorderX ===>                              */
+/*                                                                            */
+/* if whichone = 17 Agrif_NearCommonBorderX ===>                              */
+/*                                                                            */
+/* if whichone = 18 Agrif_DistantCommonBorderX ===>                           */
+/*                                                                            */
+/* if whichone = 19 Agrif_DistantCommonBorderY ===>                           */
+/*                                                                            */
+/* if whichone = 20 Agrif_DistantCommonBorderZ ===>                           */
+/*                                                                            */
+/* if whichone = 21 Agrif_Get_parent_id ===>                                  */
+/*                                                                            */
+/* if whichone = 22 Agrif_Get_grid_id ===>                                    */
+/*                                                                            */
+/* if whichone = 23 Agrif_Parent_Iz ===>                                      */
+/*                                                                            */
+/* if whichone = 24 Agrif_Parent_Iy ===>                                      */
+/*                                                                            */
+/* if whichone = 25 Agrif_Parent_Ix ===>                                      */
+/*                                                                            */
+/* if whichone = 26 Agrif_Iz ===>                                             */
+/*                                                                            */
+/* if whichone = 27 Agrif_Iy ===>                                             */
+/*                                                                            */
+/* if whichone = 28 Agrif_Ix ===>                                             */
+/*                                                                            */
+/* if whichone = 29 Agrif_Nb_Fixed_Grids ===>                                 */
+/*                                                                            */
+/* if whichone = 29 Agrif_Nb_Fine_Grids ===>                                  */
+/*                                                                            */
+/* if whichone = 30 AGRIF_Nb_Step ===>                                        */
+/*                                                                            */
+/*                                                                            */
+/******************************************************************************/
+void AgriffunctionModify_0(char *ident,int whichone)
+{
+   char toprint[LONG_C];
+   if ( firstpass == 0 )
+   {
+      strcpy(toprint,"");
+      pos_end = setposcur();
+      fseek(fortranout,pos_curagrifparent,SEEK_SET);
+      if ( whichone == 1 || whichone == 2 )
+      {
+         /*                                                                   */
+         FindAndChangeNameToTabvars(ident,toprint,List_Global_Var,1);
+         if ( !strcasecmp(ident,toprint) )
+         {
+            /* la liste des use de cette subroutine                           */
+            strcpy(toprint,"");
+            FindAndChangeNameToTabvars(ident,
+                                          toprint,List_Common_Var,whichone);
+         }
+         if ( !strcasecmp(ident,toprint) )
+         {
+            /* la liste des use de cette subroutine                           */
+            strcpy(toprint,"");
+            FindAndChangeNameToTabvars(ident,
+                                          toprint,List_ModuleUsed_Var,whichone);
+         }
+      }
+      else if ( whichone == 3 ) /* Agrif_Rhox                                 */
+      {
+         sprintf(toprint,"REAL(");
+         if( retour77 == 0 ) strcat(toprint," & \n");
+         else strcat(toprint,"\n     & ");
+         strcat(toprint,"Agrif_Curgrid % spaceref(1))");
+      }
+      else if ( whichone == 4 ) /* Agrif_Parent_Rhox                          */
+      {
+         sprintf(toprint,"REAL(");
+         if( retour77 == 0 ) strcat(toprint," & \n");
+         else strcat(toprint,"\n     & ");
+         strcat(toprint,"Agrif_Curgrid % parent % spaceref(1))");
+      }
+      else if ( whichone == 5 ) /* Agrif_Rhox                                 */
+      {
+         sprintf(toprint,"Agrif_Curgrid");
+         if( retour77 == 0 ) strcat(toprint," & \n");
+         else strcat(toprint,"\n     & ");
+         strcat(toprint,"% spaceref(1)");
+      }
+      else if ( whichone == 6 ) /* Agrif_Parent_Rhox                          */
+      {
+         sprintf(toprint,"Agrif_Curgrid");
+         if( retour77 == 0 ) strcat(toprint," & \n");
+         else strcat(toprint,"\n     & ");
+         strcat(toprint,"% parent % spaceref(1)");
+      }
+      else if ( whichone == 7 ) /* Agrif_Rhoy                                 */
+      {
+         sprintf(toprint,"REAL(Agrif_Curgrid");
+         if( retour77 == 0 ) strcat(toprint," & \n");
+         else strcat(toprint,"\n     & ");
+         strcat(toprint,"% spaceref(2))");
+      }
+      else if ( whichone == 8 ) /* Agrif_Parent_Rhoy                          */
+      {
+         sprintf(toprint,"REAL(Agrif_Curgrid");
+         if( retour77 == 0 ) strcat(toprint," & \n");
+         else strcat(toprint,"\n     & ");
+         strcat(toprint,"% parent % spaceref(2))");
+      }
+      else if ( whichone == 9 ) /* Agrif_Rhoy                                 */
+      {
+         sprintf(toprint,"Agrif_Curgrid");
+         if( retour77 == 0 ) strcat(toprint," & \n");
+         else strcat(toprint,"\n     & ");
+         strcat(toprint,"% spaceref(2)");
+      }
+      else if ( whichone == 10 ) /* Agrif_Parent_Rhoy                         */
+      {
+         sprintf(toprint,"Agrif_Curgrid");
+         if( retour77 == 0 ) strcat(toprint," & \n");
+         else strcat(toprint,"\n     & ");
+         strcat(toprint,"% parent % spaceref(2)");
+      }
+      else if ( whichone == 11 ) /* Agrif_Rhoz                                */
+      {
+         sprintf(toprint,"REAL(Agrif_Curgrid");
+         if( retour77 == 0 ) strcat(toprint," & \n");
+         else strcat(toprint,"\n     & ");
+         strcat(toprint,"% spaceref(3))");
+      }
+      else if ( whichone == 12 ) /* Agrif_Parent_Rhoz                         */
+      {
+         sprintf(toprint,"REAL(Agrif_Curgrid");
+         if( retour77 == 0 ) strcat(toprint," & \n");
+         else strcat(toprint,"\n     & ");
+         strcat(toprint,"% parent % spaceref(3))");
+      }
+      else if ( whichone == 13 ) /* Agrif_Rhoz                                */
+      {
+         sprintf(toprint,"Agrif_Curgrid");
+         if( retour77 == 0 ) strcat(toprint," & \n");
+         else strcat(toprint,"\n     & ");
+         strcat(toprint,"% spaceref(3)");
+      }
+      else if ( whichone == 14 ) /* Agrif_Parent_Rhoz                         */
+      {
+         sprintf(toprint,"Agrif_Curgrid");
+         if( retour77 == 0 ) strcat(toprint," & \n");
+         else strcat(toprint,"\n     & ");
+         strcat(toprint,"% parent % spaceref(3)");
+      }
+      else if ( whichone == 15 ) /* Agrif_NearCommonBorderX                   */
+      {
+         sprintf(toprint,"Agrif_Curgrid");
+         if( retour77 == 0 ) strcat(toprint," & \n");
+         else strcat(toprint,"\n     & ");
+         strcat(toprint,"% NearRootBorder(1)");
+      }
+      else if ( whichone == 16 ) /* Agrif_NearCommonBorderY                   */
+      {
+         sprintf(toprint,"Agrif_Curgrid");
+         if( retour77 == 0 ) strcat(toprint," & \n");
+         else strcat(toprint,"\n     & ");
+         strcat(toprint,"% NearRootBorder(2)");
+      }
+      else if ( whichone == 17 ) /* Agrif_NearCommonBorderZ                   */
+      {
+         sprintf(toprint,"Agrif_Curgrid");
+         if( retour77 == 0 ) strcat(toprint," & \n");
+         else strcat(toprint,"\n     & ");
+         strcat(toprint,"% NearRootBorder(3)");
+      }
+      else if ( whichone == 18 ) /* Agrif_NearCommonBorderX                   */
+      {
+         sprintf(toprint,"Agrif_Curgrid");
+         if( retour77 == 0 ) strcat(toprint," & \n");
+         else strcat(toprint,"\n     & ");
+         strcat(toprint,"% DistantRootBorder(1)");
+      }
+      else if ( whichone == 19 ) /* Agrif_NearCommonBorderY                   */
+      {
+         sprintf(toprint,"Agrif_Curgrid");
+         if( retour77 == 0 ) strcat(toprint," & \n");
+         else strcat(toprint,"\n     & ");
+         strcat(toprint,"% DistantRootBorder(2)");
+      }
+      else if ( whichone == 20 ) /* Agrif_NearCommonBorderZ                   */
+      {
+         sprintf(toprint,"Agrif_Curgrid");
+         if( retour77 == 0 ) strcat(toprint," & \n");
+         else strcat(toprint,"\n     & ");
+         strcat(toprint,"% DistantRootBorder(3)");
+      }
+      else if ( whichone == 21 ) /* Agrif_Get_parent_id                       */
+      {
+         sprintf(toprint,"Agrif_Curgrid");
+         if( retour77 == 0 ) strcat(toprint," & \n");
+         else strcat(toprint,"\n     & ");
+         strcat(toprint,"% parent % grid_id");
+      }
+      else if ( whichone == 22 ) /*  Agrif_Get_grid_id                        */
+      {
+         sprintf(toprint,"Agrif_Curgrid");
+         if( retour77 == 0 ) strcat(toprint," & \n");
+         else strcat(toprint,"\n     & ");
+         strcat(toprint,"% grid_id");
+      }
+      else if ( whichone == 23 ) /*  Agrif_Parent_Iz                          */
+      {
+         sprintf(toprint,"Agrif_Curgrid");
+         if( retour77 == 0 ) strcat(toprint," & \n");
+         else strcat(toprint,"\n     & ");
+         strcat(toprint,"% parent % ix(3)");
+      }
+      else if ( whichone == 24 ) /*  Agrif_Parent_Iy                          */
+      {
+         sprintf(toprint,"Agrif_Curgrid");
+         if( retour77 == 0 ) strcat(toprint," & \n");
+         else strcat(toprint,"\n     & ");
+         strcat(toprint,"% parent % ix(2)");
+      }
+      else if ( whichone == 25 ) /*  Agrif_Parent_Ix                          */
+      {
+         sprintf(toprint,"Agrif_Curgrid");
+         if( retour77 == 0 ) strcat(toprint," & \n");
+         else strcat(toprint,"\n     & ");
+         strcat(toprint,"% parent % ix(1)");
+      }
+      else if ( whichone == 26 ) /* Agrif_Iz                                  */
+      {
+         sprintf(toprint,"Agrif_Curgrid");
+         if( retour77 == 0 ) strcat(toprint," & \n");
+         else strcat(toprint,"\n     & ");
+         strcat(toprint," % ix(3)");
+      }
+      else if ( whichone == 27 ) /* Agrif_Iy                                  */
+      {
+         sprintf(toprint,"Agrif_Curgrid");
+         if( retour77 == 0 ) strcat(toprint," & \n");
+         else strcat(toprint,"\n     & ");
+         strcat(toprint,"% ix(2)");
+      }
+      else if ( whichone == 28 ) /* Agrif_Ix                                  */
+      {
+         sprintf(toprint,"Agrif_Curgrid");
+         if( retour77 == 0 ) strcat(toprint," & \n");
+         else strcat(toprint,"\n     & ");
+         strcat(toprint,"% ix(1)");
+      }
+      else if ( whichone == 29 ) /* Agrif_Nb_Fixed_Grids                      */
+      {
+         sprintf(toprint,"Agrif_nbfixedgrids");
+      }
+      else if ( whichone == 30 ) /* AGRIF_Nb_Step                             */
+      {
+         sprintf(toprint,"Agrif_Curgrid");
+         if( retour77 == 0 ) strcat(toprint," & \n");
+         else strcat(toprint,"\n     & ");
+         strcat(toprint,"% ngridstep");
+      }
+      /*                                                                      */
+      if ( whichone == 1 || whichone == 2 )
+      {
+         Save_Length(toprint,43);
+         tofich(fortranout,toprint,2);
+      }
+      else
+      {
+/*         if( retour77 == 0 ) fprintf(fortranout," & \n");
+         else fprintf(fortranout,"\n     & ");*/
+         Save_Length(toprint,43);
+         fprintf(fortranout,"%s",toprint);
+      }
+   }
+}
+
+
+/******************************************************************************/
+/*                             Instanciation_0                                */
+/******************************************************************************/
+/* Firstpass 0                                                                */
+/******************************************************************************/
+/*                                                                            */
+/*               Agrif_<toto>(variable) ====>     Agrif_<toto>(variable)      */
+/*                                                                            */
+/******************************************************************************/
+void Instanciation_0(char *ident)
+{
+   listvar *newvar;
+   int out;
+
+   if ( firstpass == 0 && sameagrifargument == 1 )
+   {
+      newvar = List_Global_Var;
+
+      out=0;
+      while ( newvar && out == 0 )
+      {
+         if ( !strcasecmp(newvar->var->v_nomvar,ident) ) out = 1;
+         else newvar=newvar->suiv;
+      }
+
+      if ( out == 0 )
+      {
+         newvar = List_Common_Var;
+
+         out=0;
+         while ( newvar && out == 0 )
+         {
+            if ( !strcasecmp(newvar->var->v_nomvar,ident) ) out = 1;
+            else newvar=newvar->suiv;
+         }
+      }
+      if ( out == 0 )
+      {
+         newvar = List_ModuleUsed_Var;
+
+         out=0;
+         while ( newvar && out == 0 )
+         {
+            if ( !strcasecmp(newvar->var->v_nomvar,ident) ) out = 1;
+            else newvar=newvar->suiv;
+         }
+      }
+
+      if ( out == 1 )
+      {
+         /* then write the instanciation                                      */
+         fprintf(fortranout,"\n      %s = %s",ident,
+                                          vargridcurgridtabvars(newvar->var,3));
+         colnum = 0;
+      }
+   }
+   sameagrifargument = 0;
+}
Index: /vendors/AGRIF/r_00/LIB/UtilCharacter.c
===================================================================
--- /vendors/AGRIF/r_00/LIB/UtilCharacter.c	(revision 1902)
+++ /vendors/AGRIF/r_00/LIB/UtilCharacter.c	(revision 1902)
@@ -0,0 +1,445 @@
+/******************************************************************************/
+/*                                                                            */
+/*     CONV (converter) for Agrif (Adaptive Grid Refinement In Fortran)       */
+/*                                                                            */
+/* Copyright or   or Copr. Laurent Debreu (Laurent.Debreu@imag.fr)            */
+/*                        Cyril Mazauric (Cyril_Mazauric@yahoo.fr)            */
+/* This software is governed by the CeCILL-C license under French law and     */
+/* abiding by the rules of distribution of free software.  You can  use,      */
+/* modify and/ or redistribute the software under the terms of the CeCILL-C   */
+/* license as circulated by CEA, CNRS and INRIA at the following URL          */
+/* "http://www.cecill.info".                                                  */
+/*                                                                            */
+/* As a counterpart to the access to the source code and  rights to copy,     */
+/* modify and redistribute granted by the license, users are provided only    */
+/* with a limited warranty  and the software's author,  the holder of the     */
+/* economic rights,  and the successive licensors  have only  limited         */
+/* liability.                                                                 */
+/*                                                                            */
+/* In this respect, the user's attention is drawn to the risks associated     */
+/* with loading,  using,  modifying and/or developing or reproducing the      */
+/* software by the user in light of its specific status of free software,     */
+/* that may mean  that it is complicated to manipulate,  and  that  also      */
+/* therefore means  that it is reserved for developers  and  experienced      */
+/* professionals having in-depth computer knowledge. Users are therefore      */
+/* encouraged to load and test the software's suitability as regards their    */
+/* requirements in conditions enabling the security of their systems and/or   */
+/* data to be ensured and,  more generally, to use and operate it in the      */
+/* same conditions as regards security.                                       */
+/*                                                                            */
+/* The fact that you are presently reading this means that you have had       */
+/* knowledge of the CeCILL-C license and that you accept its terms.           */
+/******************************************************************************/
+/* version 1.7                                                                */
+/******************************************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "decl.h"
+
+
+
+
+/******************************************************************************/
+/*                         FindAndChangeNameToTabvars                         */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+/* if  whichone = 0 ----> Agrif_tabvars(i) % var % array2                     */
+/*                                                                            */
+/* if  whichone = 1 ----> Agrif_tabvars(i) % parentvar % var % array2         */
+/*                                                                            */
+/******************************************************************************/
+void FindAndChangeNameToTabvars(char name[LONG_C],char toprint[LONG_4C],
+                                              listvar * listtosee, int whichone)
+{
+   listvar *newvar;
+   int out;
+   
+
+   if ( strcasecmp(name,"") )
+   {
+      newvar=listtosee;
+      out=0;
+      while( newvar && out == 0 )
+      {
+         if ( !strcasecmp(newvar->var->v_nomvar,name) )
+         {
+
+            if ( LookingForVariableInListName(
+                             List_SubroutineArgument_Var,name) == 0 )
+            {
+               out = 1;
+               strcat(toprint,vargridcurgridtabvars(newvar->var,whichone));
+            }
+            else newvar=newvar->suiv;
+         }
+         else newvar=newvar->suiv;
+      }
+      if ( out == 0 ) strcat(toprint,name);
+   }
+   Save_Length(toprint,44);
+}
+
+
+/******************************************************************************/
+/*                     ChangeTheInitalvaluebyTabvarsName                      */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+/*                                                                            */
+/*                                                                            */
+/*                                                                            */
+/******************************************************************************/
+char *ChangeTheInitalvaluebyTabvarsName(char *nom,listvar *listtoread,
+                                                                   int whichone)
+{
+   char toprinttmp[LONG_4C];
+   int i;
+   char chartmp[2];
+
+   i=0;
+   strcpy(toprintglob,"");
+   strcpy(toprinttmp,"");
+
+   /*                                                                         */
+   while ( i < strlen(nom) )
+   {
+      if ( nom[i] == '+' )
+      {
+        FindAndChangeNameToTabvars(toprinttmp,toprintglob,listtoread,whichone);
+         strcpy(toprinttmp,"");
+         strcat(toprintglob,"+");
+      }
+      else if ( nom[i] == '-' )
+      {
+         FindAndChangeNameToTabvars(toprinttmp,toprintglob,listtoread,whichone);
+         strcpy(toprinttmp,"");
+         strcat(toprintglob,"-");
+      }
+      else if ( nom[i] == '*' )
+      {
+         FindAndChangeNameToTabvars(toprinttmp,toprintglob,listtoread,whichone);
+         strcpy(toprinttmp,"");
+         strcat(toprintglob,"*");
+      }
+      else if ( nom[i] == '/' )
+      {
+         FindAndChangeNameToTabvars(toprinttmp,toprintglob,listtoread,whichone);
+         strcpy(toprinttmp,"");
+         strcat(toprintglob,"/");
+      }
+      else if ( nom[i] == '(' )
+      {
+         FindAndChangeNameToTabvars(toprinttmp,toprintglob,listtoread,whichone);
+         strcpy(toprinttmp,"");
+         strcat(toprintglob,"(");
+      }
+      else if ( nom[i] == ')' )
+      {
+         FindAndChangeNameToTabvars(toprinttmp,toprintglob,listtoread,whichone);
+         strcpy(toprinttmp,"");
+         strcat(toprintglob,")");
+      }
+      else if ( nom[i] == ':' )
+      {
+         FindAndChangeNameToTabvars(toprinttmp,toprintglob,listtoread,whichone);
+         strcpy(toprinttmp,"");
+         strcat(toprintglob,":");
+      }
+      else if ( nom[i] == ',' )
+      {
+         FindAndChangeNameToTabvars(toprinttmp,toprintglob,listtoread,whichone);
+         strcpy(toprinttmp,"");
+         strcat(toprintglob,",");
+      }
+      else
+      {
+         sprintf(chartmp,"%c",nom[i]);
+         strcat(toprinttmp,chartmp);
+      }
+      /*                                                                      */
+      i=i+1;
+   }
+   FindAndChangeNameToTabvars(toprinttmp,toprintglob,listtoread,whichone);
+   strcpy(toprinttmp,"");
+
+   Save_Length(toprinttmp,44);
+   Save_Length(toprintglob,39);
+
+   /*                                                                         */
+   return toprintglob;
+}
+
+/******************************************************************************/
+/*                            IsVariableReal                                  */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+/*                                                                            */
+/*                                                                            */
+/*                                                                            */
+/******************************************************************************/
+int IsVariableReal(char *nom)
+{
+   int Real;
+
+   Real = 0;
+   if ( ( nom[0] >= 'a' && nom[0] <= 'h' ) ||
+        ( nom[0] >= 'A' && nom[0] <= 'H' ) ||
+        ( nom[0] >= 'o' && nom[0] <= 'z' ) ||
+        ( nom[0] >= 'O' && nom[0] <= 'Z' )
+       )
+       {
+          Real = 1;
+       }
+   /*                                                                         */
+   return Real;
+}
+/******************************************************************************/
+/*                         IsVarInUseFile                                     */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+/*                                                                            */
+/*                                                                            */
+/*                                                                            */
+/******************************************************************************/
+void IsVarInUseFile(char *nom)
+{
+   listvar *parcours;
+   listparameter *parcoursparam;
+   int out;
+
+   out = 0;
+
+   parcours = List_Global_Var;
+   while( parcours && out == 0 )
+   {
+      if ( !strcasecmp(nom,parcours->var->v_nomvar) ) out =1 ;
+     else parcours=parcours->suiv;
+   }
+   if ( out == 0 )
+   {
+      parcours = List_Common_Var;
+      while( parcours && out == 0 )
+      {
+         if ( !strcasecmp(nom,parcours->var->v_nomvar) ) out =1 ;
+        else parcours=parcours->suiv;
+      }
+   }
+   if ( out == 0 )
+   {
+      parcours = List_GlobalParameter_Var;
+      while( parcours && out == 0 )
+      {
+         if ( !strcasecmp(nom,parcours->var->v_nomvar) ) out =1 ;
+        else parcours=parcours->suiv;
+      }
+   }
+   if ( out == 0 )
+   {
+      parcours = List_Parameter_Var;
+      while( parcours && out == 0 )
+      {
+         if ( !strcasecmp(nom,parcours->var->v_nomvar) ) out =1 ;
+        else parcours=parcours->suiv;
+      }
+   }
+   if ( out == 0 )
+   {
+      parcoursparam = List_GlobParamModuleUsed_Var;
+      while( parcoursparam && out == 0 )
+      {
+         if ( !strcasecmp(nom,parcoursparam->p_name) ) out =2 ;
+         else parcoursparam=parcoursparam->suiv;
+      }
+   }
+   if ( out == 0 )
+   {
+      parcours = List_ModuleUsed_Var;
+      while( parcours && out == 0 )
+      {
+         if ( !strcasecmp(nom,parcours->var->v_nomvar) ) out =2 ;
+        else parcours=parcours->suiv;
+      }
+   }
+   if ( out == 0 || out == 2 )
+   {
+      parcoursparam = List_GlobParamModuleUsedInModuleUsed_Var;
+      while( parcoursparam && out != 1 )
+      {
+         if ( !strcasecmp(nom,parcoursparam->p_name) ) out =1 ;
+         else parcoursparam=parcoursparam->suiv;
+      }
+      if ( out == 1 )
+      {
+         strcpy(charusemodule,parcoursparam->p_modulename);
+         Addmoduletothelist(parcoursparam->p_modulename);
+      }
+   }
+   if ( out == 0 &&
+        strcasecmp(nom,"MAX")             &&
+        strcasecmp(nom,"mpi_status_size")
+      )
+   {
+      printf("--- in UtilCharacter we do not found the \n");
+      printf("---  variable %s, the module where this \n",nom);
+      printf("---  variable has been defined has not been\n");
+      printf("---  found.\n");
+   }
+}
+
+/******************************************************************************/
+/*                      DecomposeTheNameinlistnom                             */
+/******************************************************************************/
+/* Firstpass 0                                                                */
+/******************************************************************************/
+/*                                                                            */
+/*                                                                            */
+/******************************************************************************/
+listnom *DecomposeTheNameinlistnom(char *nom, listnom * listout)
+{
+   char toprinttmp[LONG_4C];
+   int i;
+   char chartmp[2];
+
+   i=0;
+   strcpy(toprinttmp,"");
+   /*                                                                         */
+   while ( i < strlen(nom) )
+   {
+      if ( nom[i] == '+' ||
+           nom[i] == '-' ||
+           nom[i] == '*' ||
+           nom[i] == '/' ||
+           nom[i] == ')' ||
+           nom[i] == '(' ||
+           nom[i] == ',' ||
+           nom[i] == ':'
+         )
+      {
+         if (strcasecmp(toprinttmp,"") && ( toprinttmp[0] >= 'A' ) )
+         {
+             listout = Addtolistnom(toprinttmp,listout,0);
+         }
+         strcpy(toprinttmp,"");
+      }
+      else
+      {
+         sprintf(chartmp,"%c",nom[i]);
+         strcat(toprinttmp,chartmp);
+      }
+      /*                                                                      */
+      i=i+1;
+   }
+   if (strcasecmp(toprinttmp,"") && ( toprinttmp[0] >= 'A' ) )
+   {
+      listout = Addtolistnom(toprinttmp,listout,0);
+   }
+   strcpy(toprinttmp,"");
+   Save_Length(toprinttmp,44);
+
+   return listout;
+}
+
+
+/******************************************************************************/
+/*                      DecomposeTheName                                      */
+/******************************************************************************/
+/* Firstpass 0                                                                */
+/******************************************************************************/
+/*                                                                            */
+/*               Agrif_<toto>(variable) ====>     Agrif_<toto>(variable)      */
+/*                                                                            */
+/******************************************************************************/
+void DecomposeTheName(char *nom)
+{
+   char toprinttmp[LONG_4C];
+   int i;
+   char chartmp[2];
+
+   i=0;
+   strcpy(toprinttmp,"");
+   /*                                                                         */
+   while ( i < strlen(nom) )
+   {
+      if ( nom[i] == '+' ||
+           nom[i] == '-' ||
+           nom[i] == '*' ||
+           nom[i] == '/' ||
+           nom[i] == ')' ||
+           nom[i] == '(' ||
+           nom[i] == ',' ||
+           nom[i] == ':'
+         )
+      {
+         if (strcasecmp(toprinttmp,"") && ( toprinttmp[0] >= 'A' ) )
+         {
+            ajoutevarindoloop_definedimension (toprinttmp);
+            /* Is this variable present in globvarofusefile                   */
+            IsVarInUseFile(toprinttmp);
+         }
+         strcpy(toprinttmp,"");
+      }
+      else
+      {
+         sprintf(chartmp,"%c",nom[i]);
+         strcat(toprinttmp,chartmp);
+      }
+      /*                                                                      */
+      i=i+1;
+   }
+   Save_Length(toprinttmp,44);
+   if (strcasecmp(toprinttmp,"") && ( toprinttmp[0] >= 'A' ) )
+   {
+      ajoutevarindoloop_definedimension (toprinttmp);
+      /* Is this variable present in globvarofusefile                         */
+      IsVarInUseFile(toprinttmp);
+   }
+   strcpy(toprinttmp,"");
+
+}
+
+void convert2lower(char *name)
+{
+   int l;
+   int i;
+   int caractere;
+
+   l=strlen(name)-1;
+   for (i=0;i<=l;i++)
+   {
+      caractere=name[i];
+      if ((caractere>=65 && caractere<=90)||(caractere>=192 && caractere<=221))
+      {
+         name[i]+=32;
+      }
+   }
+}
+
+int convert2int(char *name)
+{
+   int i;
+   int caractere;
+   int value;
+   int value_tmp;
+   int longueur;
+
+   value = 0;
+
+   longueur = strlen(name) - 1;
+   for (i=0;i<=longueur;i++)
+   {
+      caractere=name[i];
+      value_tmp = caractere -'0';
+      if ( value_tmp > 9 ) return 0;
+           if ( longueur+1-i == 6 ) value = value + value_tmp *100000;
+      else if ( longueur+1-i == 5 ) value = value + value_tmp *10000;
+      else if ( longueur+1-i == 4 ) value = value + value_tmp *1000;
+      else if ( longueur+1-i == 3 ) value = value + value_tmp *100;
+      else if ( longueur+1-i == 2 ) value = value + value_tmp *10;
+      else if ( longueur+1-i == 1 ) value = value + value_tmp *1;
+   }
+   return value;
+}
Index: /vendors/AGRIF/r_00/LIB/UtilFile.c
===================================================================
--- /vendors/AGRIF/r_00/LIB/UtilFile.c	(revision 1902)
+++ /vendors/AGRIF/r_00/LIB/UtilFile.c	(revision 1902)
@@ -0,0 +1,146 @@
+/******************************************************************************/
+/*                                                                            */
+/*     CONV (converter) for Agrif (Adaptive Grid Refinement In Fortran)       */
+/*                                                                            */
+/* Copyright or   or Copr. Laurent Debreu (Laurent.Debreu@imag.fr)            */
+/*                        Cyril Mazauric (Cyril_Mazauric@yahoo.fr)            */
+/* This software is governed by the CeCILL-C license under French law and     */
+/* abiding by the rules of distribution of free software.  You can  use,      */
+/* modify and/ or redistribute the software under the terms of the CeCILL-C   */
+/* license as circulated by CEA, CNRS and INRIA at the following URL          */
+/* "http://www.cecill.info".                                                  */
+/*                                                                            */
+/* As a counterpart to the access to the source code and  rights to copy,     */
+/* modify and redistribute granted by the license, users are provided only    */
+/* with a limited warranty  and the software's author,  the holder of the     */
+/* economic rights,  and the successive licensors  have only  limited         */
+/* liability.                                                                 */
+/*                                                                            */
+/* In this respect, the user's attention is drawn to the risks associated     */
+/* with loading,  using,  modifying and/or developing or reproducing the      */
+/* software by the user in light of its specific status of free software,     */
+/* that may mean  that it is complicated to manipulate,  and  that  also      */
+/* therefore means  that it is reserved for developers  and  experienced      */
+/* professionals having in-depth computer knowledge. Users are therefore      */
+/* encouraged to load and test the software's suitability as regards their    */
+/* requirements in conditions enabling the security of their systems and/or   */
+/* data to be ensured and,  more generally, to use and operate it in the      */
+/* same conditions as regards security.                                       */
+/*                                                                            */
+/* The fact that you are presently reading this means that you have had       */
+/* knowledge of the CeCILL-C license and that you accept its terms.           */
+/******************************************************************************/
+/* version 1.7                                                                */
+/******************************************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "decl.h"
+
+
+/******************************************************************************/
+/*                            associate                                       */
+/******************************************************************************/
+/* This subroutine is used to open a file                                     */
+/******************************************************************************/
+FILE * associate (char *filename)
+{
+  char filefich[LONG_C];
+  sprintf(filefich,"%s/%s",nomdir,filename);
+  return fopen (filefich, "w");
+}
+
+
+/******************************************************************************/
+/*                          associateaplus                                    */
+/******************************************************************************/
+/* This subroutine is used to open a file with option a+                      */
+/******************************************************************************/
+FILE * associateaplus (char *filename)
+{
+  char filefich[LONG_C];
+  sprintf(filefich,"%s/%s",nomdir,filename);
+  return fopen (filefich, "a+");
+}
+
+
+/******************************************************************************/
+/*                           setposcurname                                       */
+/******************************************************************************/
+/* This subroutine is used to know the current position in the file in argument    */
+/******************************************************************************/
+/*                                                                            */
+/*                      setposcur ---------> position in file                 */
+/*                                                                            */
+/******************************************************************************/
+long int setposcurname(FILE *fileout)
+{
+   fflush(fileout);
+   return ftell(fileout);
+}
+
+/******************************************************************************/
+/*                           setposcur                                        */
+/******************************************************************************/
+/* This subroutine is used to know the current position in the file           */
+/******************************************************************************/
+/*                                                                            */
+/*                      setposcur ---------> position in file                 */
+/*                                                                            */
+/******************************************************************************/
+long int setposcur()
+{
+   fflush(fortranout);
+   return ftell(fortranout);
+}
+
+/******************************************************************************/
+/*                      setposcurinoldfortranout                              */
+/******************************************************************************/
+/* This subroutine is used to know the position in the oldfortranout         */
+/******************************************************************************/
+/*                                                                            */
+/*             setposcurinoldfortranout ---------> position in file           */
+/*                                                                            */
+/******************************************************************************/
+long int setposcurinoldfortranout()
+{
+   fflush(oldfortranout);
+   return ftell(oldfortranout);
+}
+
+/******************************************************************************/
+/*                         copyuse_0                                          */
+/******************************************************************************/
+/* Firstpass 0                                                                */
+/* We should write in the fortranout the USE tok_name                         */
+/* read in the original file                                                  */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+void copyuse_0(char *namemodule)
+{
+   if (firstpass == 0 && IsTabvarsUseInArgument_0() == 1 )
+   {
+      /* We should write this declaration into the original subroutine too    */
+      fprintf(oldfortranout,"      USE %s \n",namemodule);
+   }
+}
+
+/******************************************************************************/
+/*                         copyuseonly_0                                      */
+/******************************************************************************/
+/* Firstpass 0                                                                */
+/* We should write in the fortranout the USE tok_name, only                   */
+/* read in the original file                                                  */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+void copyuseonly_0(char *namemodule)
+{
+   if (firstpass == 0 && IsTabvarsUseInArgument_0() == 1 )
+   {
+      /* We should write this declaration into the original subroutine too    */
+      fprintf(oldfortranout,"      USE %s , ONLY : \n",namemodule);
+   }
+}
Index: /vendors/AGRIF/r_00/LIB/UtilFortran.c
===================================================================
--- /vendors/AGRIF/r_00/LIB/UtilFortran.c	(revision 1902)
+++ /vendors/AGRIF/r_00/LIB/UtilFortran.c	(revision 1902)
@@ -0,0 +1,784 @@
+/******************************************************************************/
+/*                                                                            */
+/*     CONV (converter) for Agrif (Adaptive Grid Refinement In Fortran)       */
+/*                                                                            */
+/* Copyright or   or Copr. Laurent Debreu (Laurent.Debreu@imag.fr)            */
+/*                        Cyril Mazauric (Cyril_Mazauric@yahoo.fr)            */
+/* This software is governed by the CeCILL-C license under French law and     */
+/* abiding by the rules of distribution of free software.  You can  use,      */
+/* modify and/ or redistribute the software under the terms of the CeCILL-C   */
+/* license as circulated by CEA, CNRS and INRIA at the following URL          */
+/* "http://www.cecill.info".                                                  */
+/*                                                                            */
+/* As a counterpart to the access to the source code and  rights to copy,     */
+/* modify and redistribute granted by the license, users are provided only    */
+/* with a limited warranty  and the software's author,  the holder of the     */
+/* economic rights,  and the successive licensors  have only  limited         */
+/* liability.                                                                 */
+/*                                                                            */
+/* In this respect, the user's attention is drawn to the risks associated     */
+/* with loading,  using,  modifying and/or developing or reproducing the      */
+/* software by the user in light of its specific status of free software,     */
+/* that may mean  that it is complicated to manipulate,  and  that  also      */
+/* therefore means  that it is reserved for developers  and  experienced      */
+/* professionals having in-depth computer knowledge. Users are therefore      */
+/* encouraged to load and test the software's suitability as regards their    */
+/* requirements in conditions enabling the security of their systems and/or   */
+/* data to be ensured and,  more generally, to use and operate it in the      */
+/* same conditions as regards security.                                       */
+/*                                                                            */
+/* The fact that you are presently reading this means that you have had       */
+/* knowledge of the CeCILL-C license and that you accept its terms.           */
+/******************************************************************************/
+/* version 1.7                                                                */
+/******************************************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "decl.h"
+
+/******************************************************************************/
+/*                            initdimprob                                     */
+/******************************************************************************/
+/* This subroutine is used to initialized grid dimension variable             */
+/******************************************************************************/
+/*                                                                            */
+/*                                                                            */
+/*                                                                            */
+/******************************************************************************/
+void initdimprob(int dimprobmod, char * nx, char * ny,char* nz)
+{
+  dimprob = dimprobmod;
+
+  strcpy(nbmaillesX,nx);
+  strcpy(nbmaillesY,ny);
+  strcpy(nbmaillesZ,nz);
+}
+
+/******************************************************************************/
+/*                      Variableshouldberemove                                */
+/******************************************************************************/
+/* Firstpass 0                                                                */
+/******************************************************************************/
+/*                                                                            */
+/*               Agrif_<toto>(variable) ====>     Agrif_<toto>(variable)      */
+/*                                                                            */
+/******************************************************************************/
+int Variableshouldberemove(char *nom)
+{
+
+   int remove;
+
+   remove = 0 ;
+
+   if ( remove == 0 && Agrif_in_Tok_NAME(nom) == 1 ) remove = 1 ;
+
+   return remove;
+}
+
+/******************************************************************************/
+/*                          variableisglobal                                  */
+/******************************************************************************/
+/* This subroutine is to know if a variable is global                         */
+/******************************************************************************/
+int variableisglobal(listvar *curvar, listvar *listin)
+{
+  int Globalite;
+  listvar *newvar;
+
+
+  Globalite = 0;
+  newvar = listin;
+  while ( newvar && Globalite == 0 )
+  {
+     if ( !strcasecmp(newvar->var->v_nomvar,curvar->var->v_nomvar) )
+     {
+        Globalite = 1;
+        /* Now we should give the definition of the variable in the           */
+        /* table List_UsedInSubroutine_Var                                    */
+        strcpy(curvar->var->v_typevar,newvar->var->v_typevar);
+        strcpy(curvar->var->v_dimchar,newvar->var->v_dimchar);
+        curvar->var->v_nbdim = newvar->var->v_nbdim;
+        curvar->var->v_dimensiongiven = newvar->var->v_dimensiongiven;
+        curvar->var->v_allocatable = newvar->var->v_allocatable;
+        curvar->var->v_pointerdeclare = newvar->var->v_pointerdeclare;
+        curvar->var->v_indicetabvars = newvar->var->v_indicetabvars;
+        strcpy(curvar->var->v_nameinttypename,newvar->var->v_nameinttypename);
+        strcpy(curvar->var->v_precision,newvar->var->v_precision);
+        strcpy(curvar->var->v_readedlistdimension,
+                                            newvar->var->v_readedlistdimension);
+        strcpy(curvar->var->v_commoninfile,newvar->var->v_commoninfile);
+     }
+     else
+     {
+         newvar = newvar->suiv;
+     }
+  }
+
+  return Globalite ;
+}
+
+int VariableIsInListCommon(listvar *curvar,listvar *listin)
+{
+  int present;
+  listvar *newvar;
+
+  present = 0;
+  newvar = listin;
+  while ( newvar && present == 0 )
+  {
+     if ( !strcasecmp(newvar->var->v_nomvar,curvar->var->v_nomvar) &&
+          !strcasecmp(newvar->var->v_subroutinename,
+                                    curvar->var->v_subroutinename)
+        )
+     {
+        CopyRecord(curvar->var,newvar->var);
+        present = 1;
+     }
+     else newvar = newvar->suiv;
+  }
+
+  return present;
+}
+
+int VariableIsInList(listvar *curvar,listvar *listin)
+{
+  int present;
+  listvar *newvar;
+
+  present = 0;
+  newvar = listin;
+  while ( newvar && present == 0 )
+  {
+     if ( !strcasecmp(newvar->var->v_nomvar,curvar->var->v_nomvar) )
+     {
+        CopyRecord(curvar->var,newvar->var);
+        present = 1;
+     }
+     else newvar = newvar->suiv;
+  }
+
+  return present;
+}
+
+/******************************************************************************/
+/*                      variableisglobalinmodule                              */
+/******************************************************************************/
+/* This subroutine is to know if a variable is global                         */
+/******************************************************************************/
+void variableisglobalinmodule(listcouple *listin, char *module, FILE *fileout, long int oldposcuruse)
+{
+  int Globalite;
+  listcouple *newvar;
+  listcouple *newvarprec;
+  listvar *tempo;
+  listvar *newvar2;
+  int out;
+  char truename[LONG_C];  
+
+  Globalite = 1;
+  newvarprec = (listcouple *)NULL;
+  tempo = (listvar *)NULL;
+  tempo = Readthedependfile(module,tempo);
+  newvar = listin;
+
+  while ( newvar )
+  {
+     if (!strcmp(newvar->c_namepointedvar,"")) {
+       strcpy(truename,newvar->c_namevar);
+     }
+     else
+     {
+       strcpy(truename,newvar->c_namepointedvar);
+     }
+     
+     out = 0;
+     newvar2 = tempo;
+     while ( newvar2 && out == 0 )
+     {
+        if ( !strcasecmp(newvar2->var->v_nomvar,truename) ) out = 1;
+        else newvar2 = newvar2 ->suiv;
+     }
+     if ( out == 1 )
+     {
+        /* remove from the listin                                             */
+        if ( newvar == listin )
+        {
+           listin = listin->suiv;
+           newvar = listin;
+        }
+        else
+        {
+           newvarprec->suiv = newvar->suiv;
+           newvar = newvar->suiv;
+        }
+     }
+     else
+     {
+         newvarprec = newvar;
+         newvar = newvar->suiv;
+         Globalite = 0;
+     }
+  }
+  if ( Globalite == 0 || !newvar)
+  {
+     pos_end = setposcurname(fileout);
+     RemoveWordSET_0(fileout,oldposcuruse,
+                                pos_end-oldposcuruse);
+                                  
+     newvar = listin;
+     while ( newvar )
+     {
+        fprintf(fileout,"      USE %s, ONLY : %s \n",module,newvar->c_namevar);
+        newvar = newvar->suiv;
+     }
+  }
+}
+
+
+void Remove_Word_Contains_0()
+{
+   if ( firstpass == 0 )
+   {
+      RemoveWordCUR_0(fortranout,(long)(-9),9);
+   }
+}
+
+void Remove_Word_end_module_0(int modulenamelength)
+{
+   if ( firstpass == 0 )
+   {
+      RemoveWordCUR_0(fortranout,(long)(-modulenamelength-12),
+                                         modulenamelength+11);
+   }
+}
+
+void Write_Word_Contains_0()
+{
+   if ( firstpass == 0 )
+   {
+      fprintf(fortranout,"\n      contains\n");
+   }
+}
+
+
+void Write_Word_end_module_0()
+{
+   if ( firstpass == 0 )
+   {
+      fprintf(fortranout,"\n      end module %s",curmodulename);
+   }
+}
+
+void Add_Subroutine_For_Alloc(char *nom)
+{
+   listnom *parcours;
+   listnom *newvar;
+   int out;
+
+   newvar = (listnom *)malloc(sizeof(listnom));
+   strcpy(newvar->o_nom,nom);
+   Save_Length(nom,23);
+   newvar->suiv = NULL;
+
+   if ( !List_Subroutine_For_Alloc )
+   {
+      List_Subroutine_For_Alloc = newvar;
+   }
+   else
+   {
+      parcours = List_Subroutine_For_Alloc;
+      out = 0 ;
+      while ( parcours->suiv && out == 0 )
+      {
+         if ( !strcasecmp(parcours->o_nom,nom) ) out = 1 ;
+         else parcours = parcours ->suiv;
+      }
+      /*                                                                      */
+      if ( out == 0 )
+      {
+         if ( strcasecmp(parcours->o_nom,nom) ) parcours->suiv = newvar;
+      }
+   }
+}
+
+
+void Write_Alloc_Subroutine_0()
+{
+   listnom *parcours_nom;
+   listnom *parcours_nomprec;
+   int out;
+   char ligne[LONG_C];
+
+   if ( firstpass == 0 )
+   {
+      parcours_nomprec = (listnom *)NULL;
+      parcours_nom = List_NameOfModule;
+      out = 0 ;
+      while ( parcours_nom && out == 0 )
+      {
+         /*                                                                   */
+         if ( !strcasecmp(curmodulename,parcours_nom->o_nom) ) out = 1;
+         else parcours_nom = parcours_nom -> suiv;
+      }
+      if ( out == 1 )
+      {
+         if ( parcours_nom->o_val == 1 )
+         {
+            strcpy (ligne, "\n      PUBLIC Alloc_agrif_");
+            strcat (ligne, curmodulename);
+            strcat (ligne, "\n");
+            convert2lower(ligne);
+            fprintf(fortranout,ligne);
+         }
+      }
+      Write_Word_Contains_0();
+      if ( out == 1 )
+      {
+         if ( parcours_nom->o_val == 1 )
+         {
+            sprintf (ligne, "Subroutine Alloc_agrif_%s(Agrif_Gr)",
+                                                                 curmodulename);
+            tofich(fortranout,ligne,1);
+            strcpy(ligne,"Use Agrif_Util");
+            tofich(fortranout,ligne,1);
+            strcpy (ligne, "Type(Agrif_grid), Pointer :: Agrif_Gr");
+            tofich(fortranout,ligne,1);
+            strcpy(ligne, "INTEGER :: i");
+            tofich (fortranout, ligne,1);
+            strcpy (ligne, "\n#include \"alloc_agrif_");
+            strcat (ligne, curmodulename);
+            strcat (ligne, ".h\"\n");
+            convert2lower(ligne);
+            fprintf(fortranout,ligne);
+            strcpy (ligne, "Return");
+            tofich(fortranout,ligne,1);
+            sprintf (ligne, "End Subroutine Alloc_agrif_%s",curmodulename);
+            tofich(fortranout,ligne,1);
+            /* List all Call Alloc_agrif_                                     */
+            Add_Subroutine_For_Alloc(curmodulename);
+         }
+         else
+         {
+            parcours_nom = List_Subroutine_For_Alloc;
+            out = 0;
+            while ( parcours_nom && out == 0 )
+            {
+               if ( !strcasecmp(parcours_nom->o_nom,curmodulename) ) out = 1;
+               else
+               {
+                  parcours_nomprec = parcours_nom;
+                  parcours_nom = parcours_nom->suiv;
+               }
+            }
+            if ( out == 1 )
+            {
+               if ( parcours_nom == List_Subroutine_For_Alloc)
+               {
+                  List_Subroutine_For_Alloc = List_Subroutine_For_Alloc->suiv;
+               }
+               else
+               {
+                  parcours_nomprec->suiv = parcours_nom->suiv;
+                  parcours_nom = parcours_nomprec->suiv ;
+               }
+            }
+         }
+      }
+   }
+}
+
+
+void Write_Alloc_Subroutine_For_End_0()
+{
+   listnom *parcours_nom;
+   listnom *parcours_nomprec;
+   int out;
+   char ligne[LONG_C];
+
+   if ( firstpass == 0 )
+   {
+      parcours_nomprec = (listnom *)NULL;
+      parcours_nom = List_NameOfModule;
+      out = 0 ;
+      while ( parcours_nom && out == 0 )
+      {
+         /*                                                                   */
+         if ( !strcasecmp(curmodulename,parcours_nom->o_nom) ) out = 1;
+         else parcours_nom = parcours_nom -> suiv;
+      }
+      if ( out == 1 )
+      {
+         if ( parcours_nom->o_val == 1 )
+         {
+            strcpy (ligne, "\n      PUBLIC Alloc_agrif_");
+            strcat (ligne, curmodulename);
+            strcat (ligne, "\n");
+            convert2lower(ligne);
+            fprintf(fortranout,ligne);
+            strcpy (ligne, "\n      contains\n");
+            fprintf(fortranout,ligne);
+            sprintf (ligne, "Subroutine Alloc_agrif_%s(Agrif_Gr)",
+                                                                 curmodulename);
+            tofich(fortranout,ligne,1);
+            strcpy(ligne,"Use Agrif_Util");
+            tofich(fortranout,ligne,1);
+            strcpy (ligne, "Type(Agrif_grid), Pointer :: Agrif_Gr");
+            tofich(fortranout,ligne,1);
+            strcpy(ligne, "INTEGER :: i");
+            tofich (fortranout, ligne,1);
+            strcpy (ligne, "\n#include \"alloc_agrif_");
+            strcat (ligne, curmodulename);
+            strcat (ligne, ".h\"\n");
+            convert2lower(ligne);
+            fprintf(fortranout,ligne);
+            strcpy (ligne, "Return");
+            tofich(fortranout,ligne,1);
+            sprintf (ligne, "End Subroutine Alloc_agrif_%s",curmodulename);
+            tofich(fortranout,ligne,1);
+            /* List all Call Alloc_agrif                                      */
+            Add_Subroutine_For_Alloc(parcours_nom->o_nom);
+         }
+         else
+         {
+            parcours_nom = List_Subroutine_For_Alloc;
+            out = 0;
+            while ( parcours_nom && out == 0 )
+            {
+               if ( !strcasecmp(parcours_nom->o_nom,curmodulename) ) out = 1;
+               else
+               {
+                  parcours_nomprec = parcours_nom;
+                  parcours_nom = parcours_nom->suiv;
+               }
+            }
+            if ( out == 1 )
+            {
+               if ( parcours_nom == List_Subroutine_For_Alloc)
+               {
+                  List_Subroutine_For_Alloc = List_Subroutine_For_Alloc->suiv;
+               }
+               else
+               {
+                  parcours_nomprec->suiv = parcours_nom->suiv;
+                  parcours_nom = parcours_nomprec->suiv ;
+               }
+            }
+         }
+      }
+   }
+}
+
+void Write_GlobalParameter_Declaration_0()
+{
+   listvar *parcours;
+
+   if ( firstpass == 0 )
+   {
+      parcours = List_GlobalParameter_Var;
+      while( parcours )
+      {
+         if ( !strcasecmp(parcours->var->v_modulename,curmodulename) )
+         {
+            writevardeclaration(parcours,module_declar,0,1);
+         }
+         parcours = parcours -> suiv;
+      }
+   }
+}
+
+void Write_GlobalType_Declaration_0()
+{
+   listvar *parcours;
+   int out = 0;
+   int headtypewritten = 0;
+   char ligne[LONGNOM];
+   int changeval;
+
+   if ( firstpass == 0 )
+   {
+      parcours = List_Global_Var;
+      while( parcours )
+      {
+         if ( !strcasecmp(parcours->var->v_modulename,curmodulename) )
+         {
+           if (!strcasecmp(parcours->var->v_typevar,"type"))
+           {
+            out = 1;
+            if (headtypewritten == 0)
+              {
+                sprintf(ligne,"TYPE :: Agrif_%s",curmodulename);
+                tofich(module_declar,ligne,1);
+                headtypewritten = 1;
+              }
+            changeval = 0;
+            if (parcours->var->v_allocatable == 1)
+             {
+               changeval = 1;
+               parcours->var->v_allocatable = 0;
+               parcours->var->v_pointerdeclare = 1;
+             }
+            writevardeclaration(parcours,module_declar,0,0);
+            if (changeval == 1)
+              {
+               parcours->var->v_allocatable = 1;
+               parcours->var->v_pointerdeclare = 0;
+              }
+            }
+         }
+         parcours = parcours -> suiv;
+      }
+      if (out == 1)
+        {
+                sprintf(ligne,"END TYPE Agrif_%s",curmodulename);
+                tofich(module_declar,ligne,1);
+                sprintf(ligne,"TYPE(Agrif_%s), DIMENSION(:), ALLOCATABLE :: Agrif_%s_var",curmodulename,curmodulename); 
+                tofich(module_declar,ligne,1);
+        }
+   }
+}
+
+void Write_NotGridDepend_Declaration_0()
+{
+   listvar *parcours;
+
+   if ( firstpass == 0 )
+   {
+      parcours = List_NotGridDepend_Var;
+      while( parcours )
+      {
+         if ( !strcasecmp(parcours->var->v_modulename,curmodulename) )
+         {
+            writevardeclaration(parcours,fortranout,0,1);
+         }
+         parcours = parcours -> suiv;
+      }
+   }
+}
+
+/******************************************************************************/
+/*                          IsTabvarsUseInArgument_0                          */
+/******************************************************************************/
+/* Firstpass 1                                                                */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+int IsTabvarsUseInArgument_0()
+{
+   int out;
+   int doloopout;
+   listvar *parcours;
+
+   out=1;
+
+   if ( List_UsedInSubroutine_Var )
+   {
+      doloopout = 0;
+      parcours = List_UsedInSubroutine_Var;
+      while ( parcours && doloopout == 0 )
+      {
+         if ( !strcasecmp(parcours->var->v_subroutinename,subroutinename) )
+                                                                  doloopout = 1;
+         else parcours = parcours->suiv;
+      }
+      if (  doloopout == 0 ) out = 0;
+      else out = 1 ;
+   }
+   else out = 0;
+
+   return out;
+}
+
+
+/******************************************************************************/
+/*                        ImplicitNoneInSubroutine                            */
+/******************************************************************************/
+/* Firstpass 0                                                                */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+int ImplicitNoneInSubroutine()
+{
+  listname *parcours;
+  int out;
+
+  parcours= List_ImplicitNoneSubroutine;
+  out = 0 ;
+  while ( parcours && out == 0 )
+  {
+     if ( !strcasecmp(parcours->n_name,subroutinename) ) out = 1;
+     else parcours = parcours->suiv;
+  }
+  return out;
+}
+
+/******************************************************************************/
+/*                            Add_Pointer_Var_From_List_1                     */
+/******************************************************************************/
+/* Firstpass 1                                                                */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+void Add_Pointer_Var_From_List_1(listvar *listin)
+{
+   listvar *parcours;
+
+   if ( firstpass == 1 )
+   {
+       parcours = listin;
+       while ( parcours )
+       {
+          Add_Pointer_Var_1(parcours->var->v_nomvar);
+          parcours = parcours -> suiv ;
+       }
+   }
+}
+
+/******************************************************************************/
+/*                            Add_Pointer_Var_1                               */
+/******************************************************************************/
+/* Firstpass 1                                                                */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+void Add_Pointer_Var_1(char *nom)
+{
+   listname *newvar;
+   listname *parcours;
+   int out;
+
+   if ( firstpass == 1 )
+   {
+      if ( !List_Pointer_Var )
+      {
+         newvar = (listname *)malloc(sizeof(listname));
+         strcpy(newvar->n_name,nom);
+         Save_Length(nom,20);
+         newvar->suiv = NULL;
+         List_Pointer_Var = newvar;
+      }
+      else
+      {
+         parcours = List_Pointer_Var;
+         out = 0 ;
+         while ( parcours->suiv && out == 0 )
+         {
+            if (  !strcasecmp(parcours->n_name,nom) ) out = 1;
+            else
+               parcours=parcours->suiv;
+         }
+         if ( out == 0 )
+         {
+            if (  !strcasecmp(parcours->n_name,nom) ) out = 1;
+            else
+            {
+               /* add the record                                              */
+              newvar = (listname *)malloc(sizeof(listname));
+              strcpy(newvar->n_name,nom);
+              Save_Length(nom,20);
+              newvar->suiv = NULL;
+              parcours->suiv = newvar;
+            }
+         }
+      }
+   }
+}
+
+/******************************************************************************/
+/*                          varispointer_0                                    */
+/******************************************************************************/
+/* Firstpass 0                                                                */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+int varispointer_0(char *ident)
+{
+   listname *newname;
+   int out;
+
+   out =0;
+   if ( firstpass == 0 )
+   {
+      newname = List_Pointer_Var;
+      while( newname && out == 0 )
+      {
+         if ( !strcasecmp(ident,newname->n_name) ) out = 1 ;
+         else newname = newname->suiv;
+      }
+   }
+   return out;
+}
+
+/******************************************************************************/
+/*                          varistyped_0                                    */
+/******************************************************************************/
+/* Firstpass 0                                                                */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+int varistyped_0(char *ident)
+{
+   listvar *parcours;
+   int out;
+
+   out =0;
+   if ( firstpass == 0 )
+   {
+      parcours = List_Global_Var;
+      while( parcours && out == 0 )
+      {
+         if ( !strcasecmp(ident,parcours->var->v_nomvar) ) 
+             {
+             if (!strcasecmp(parcours->var->v_typevar,"type")) out = 1;
+             }
+         parcours = parcours->suiv;
+      }
+   }
+   return out;
+}
+
+
+/******************************************************************************/
+/*                          VariableIsNotFunction                             */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+int VariableIsNotFunction(char *ident)
+{
+   int out;
+   listvar *newvar;
+
+   out =0;
+
+   if ( !strcasecmp(ident,"size") ||
+        !strcasecmp(ident,"if")   ||
+        !strcasecmp(ident,"max")  ||
+        !strcasecmp(ident,"min")
+      )
+   {
+      newvar = List_SubroutineDeclaration_Var;
+      while ( newvar && out == 0 )
+      {
+         if ( !strcasecmp(subroutinename, newvar->var->v_subroutinename) &&
+              !strcasecmp(ident, newvar->var->v_nomvar) ) out = 1;
+         newvar = newvar -> suiv ;
+      }
+      if ( out == 1 ) out = 0;
+      else out = 1;
+      /* if it has not been found                                             */
+      if ( out == 1 )
+      {
+         out = 0;
+         newvar = List_Global_Var;
+         while ( newvar && out == 0 )
+         {
+            if ( !strcasecmp(ident, newvar->var->v_nomvar) ) out = 1;
+            newvar = newvar -> suiv ;
+         }
+         if ( out == 1 ) out = 0;
+         else out = 1;
+      }
+   }
+   /*                                                                         */
+   return out;
+}
Index: /vendors/AGRIF/r_00/LIB/UtilListe.c
===================================================================
--- /vendors/AGRIF/r_00/LIB/UtilListe.c	(revision 1902)
+++ /vendors/AGRIF/r_00/LIB/UtilListe.c	(revision 1902)
@@ -0,0 +1,619 @@
+/******************************************************************************/
+/*                                                                            */
+/*     CONV (converter) for Agrif (Adaptive Grid Refinement In Fortran)       */
+/*                                                                            */
+/* Copyright or   or Copr. Laurent Debreu (Laurent.Debreu@imag.fr)            */
+/*                        Cyril Mazauric (Cyril_Mazauric@yahoo.fr)            */
+/* This software is governed by the CeCILL-C license under French law and     */
+/* abiding by the rules of distribution of free software.  You can  use,      */
+/* modify and/ or redistribute the software under the terms of the CeCILL-C   */
+/* license as circulated by CEA, CNRS and INRIA at the following URL          */
+/* "http://www.cecill.info".                                                  */
+/*                                                                            */
+/* As a counterpart to the access to the source code and  rights to copy,     */
+/* modify and redistribute granted by the license, users are provided only    */
+/* with a limited warranty  and the software's author,  the holder of the     */
+/* economic rights,  and the successive licensors  have only  limited         */
+/* liability.                                                                 */
+/*                                                                            */
+/* In this respect, the user's attention is drawn to the risks associated     */
+/* with loading,  using,  modifying and/or developing or reproducing the      */
+/* software by the user in light of its specific status of free software,     */
+/* that may mean  that it is complicated to manipulate,  and  that  also      */
+/* therefore means  that it is reserved for developers  and  experienced      */
+/* professionals having in-depth computer knowledge. Users are therefore      */
+/* encouraged to load and test the software's suitability as regards their    */
+/* requirements in conditions enabling the security of their systems and/or   */
+/* data to be ensured and,  more generally, to use and operate it in the      */
+/* same conditions as regards security.                                       */
+/*                                                                            */
+/* The fact that you are presently reading this means that you have had       */
+/* knowledge of the CeCILL-C license and that you accept its terms.           */
+/******************************************************************************/
+/* version 1.7                                                                */
+/******************************************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "decl.h"
+
+
+void Init_Variable(variable *var)
+{
+   strcpy(var->v_typevar            ,"");
+   strcpy(var->v_nomvar             ,"");
+   strcpy(var->v_oldname            ,"");
+   strcpy(var->v_dimchar            ,"");
+   strcpy(var->v_modulename         ,"");
+   strcpy(var->v_commonname         ,"");
+   strcpy(var->v_vallengspec        ,"");
+   strcpy(var->v_nameinttypename    ,"");
+   strcpy(var->v_commoninfile       ,"");
+   strcpy(var->v_subroutinename     ,"");
+   strcpy(var->v_precision          ,"");
+   strcpy(var->v_initialvalue       ,"");
+   strcpy(var->v_IntentSpec         ,"");
+   strcpy(var->v_readedlistdimension,"");
+   var->v_nbdim               = 0 ;
+   var->v_common              = 0 ;
+   var->v_positioninblock     = 0 ;
+   var->v_module              = 0 ;
+   var->v_save                = 0 ;
+   var->v_VariableIsParameter = 0 ;
+   var->v_PublicDeclare       = 0 ;
+   var->v_PrivateDeclare      = 0 ;
+   var->v_ExternalDeclare     = 0 ;
+   var->v_pointedvar          = 0 ;
+   var->v_notgrid             = 0 ;
+   var->v_dimensiongiven      = 0 ;
+   var->v_c_star              = 0 ;
+   var->v_indicetabvars       = 0 ;
+   var->v_pointerdeclare      = 0 ;
+   var->v_optionaldeclare     = 0 ;
+   var->v_allocatable         = 0 ;
+   var->v_dimsempty           = 0 ;
+   var->v_dimension = (listdim *)NULL;
+}
+/******************************************************************************/
+/*                            AddListvartolistvar                             */
+/******************************************************************************/
+/* This subroutine is used to add a listvar l at the end of a listvar         */
+/* glob.                                                                      */
+/*                                                                            */
+/******************************************************************************/
+/*        _______     _______     _______     _______     _______             */
+/*       +      +    +      +    +      +    +      +    +      +             */
+/*       + glob +--->+ glob +--->+ glob +--->+ glob +--->+  l   +             */
+/*       +______+    +______+    +______+    +______+    +______+             */
+/*                                                                            */
+/******************************************************************************/
+listvar * AddListvarToListvar(listvar *l,listvar *glob,int ValueFirstpass)
+{
+   listvar *newvar;
+   if ( firstpass == ValueFirstpass )
+   {
+      if ( !glob) glob = l ;
+      else
+      {
+         newvar=glob;
+         while (newvar->suiv) newvar = newvar->suiv;
+         newvar->suiv = l;
+      }
+   }
+   return glob;
+}
+
+/******************************************************************************/
+/*                       CreateAndFillin_Curvar                               */
+/******************************************************************************/
+/* This subroutine is used to create the record corresponding to the          */
+/* list of declaration                                                        */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+void CreateAndFillin_Curvar(char *type,variable *curvar)
+{
+   if (!strcasecmp(type,"character") && strcasecmp(CharacterSize,"") )
+   {
+      strcpy(curvar->v_dimchar,CharacterSize);
+      Save_Length(CharacterSize,5);
+   }
+
+  /* On donne la precision de la variable si elle a ete donnee                */
+  curvar->v_c_star = 0;
+  if ( c_star == 1 ) curvar->v_c_star = 1;
+  /*                                                                          */
+  strcpy(curvar->v_vallengspec,"");
+  if ( strcasecmp(vallengspec,"") )
+  {
+     strcpy(curvar->v_vallengspec,vallengspec);
+     Save_Length(vallengspec,8);
+  }
+
+  strcpy(curvar->v_precision,"");
+  if ( strcasecmp(NamePrecision,"") )
+  {
+     strcpy(curvar->v_precision,NamePrecision);
+     Save_Length(NamePrecision,12);
+  }
+  /* Si cette variable a ete declaree dans un module on met curvar->module=1  */
+  if ( inmoduledeclare == 1 || SaveDeclare == 1)
+  {
+      curvar->v_module = 1;
+   }
+   /* Puis on donne le nom du module dans curvar->v_modulename                */
+   strcpy(curvar->v_modulename,curmodulename);
+   Save_Length(curmodulename,6);
+   /* Si cette variable a ete initialisee                                     */
+   if (InitialValueGiven == 1 )
+   {
+      strcpy(curvar->v_initialvalue,InitValue);
+      Save_Length(InitValue,14);
+   }
+   /* Si cette variable est declaree en save                                  */
+   if (SaveDeclare == 1 ) curvar->v_save = 1;
+   /* Si cette variable est v_allocatable                                     */
+   if (Allocatabledeclare == 1 ) curvar->v_allocatable=1;
+   /* if INTENT spec has been given                                           */
+   if ( strcasecmp(IntentSpec,"") )
+   {
+      strcpy(curvar->v_IntentSpec,IntentSpec);
+      Save_Length(IntentSpec,13);
+   }
+}
+
+
+/******************************************************************************/
+/*                        duplicatelistvar                                    */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+void duplicatelistvar(listvar *orig)
+{
+   listvar *parcours;
+   listvar *tmplistvar;
+   listvar *tmplistvarprec;
+   listdim *tmplistdim;
+   variable *tmpvar;
+
+   tmplistvarprec = (listvar *)NULL;
+   parcours = orig;
+   while ( parcours )
+   {
+      tmplistvar = (listvar *)malloc(sizeof(listvar));
+      tmpvar = (variable *)malloc(sizeof(variable));
+      /*                                                                      */
+      Init_Variable(tmpvar);
+      /*                                                                      */
+      strcpy(tmpvar->v_typevar,parcours->var->v_typevar);
+      strcpy(tmpvar->v_nomvar,parcours->var->v_nomvar);
+      strcpy(tmpvar->v_oldname,parcours->var->v_oldname);
+      strcpy(tmpvar->v_dimchar,parcours->var->v_dimchar);
+      if ( parcours->var->v_dimension )
+      {
+         tmplistdim = (listdim *)malloc(sizeof(listdim));
+         tmplistdim = parcours->var->v_dimension;
+         tmpvar->v_dimension = tmplistdim;
+      }
+      tmpvar->v_nbdim=parcours->var->v_nbdim;
+      tmpvar->v_common=parcours->var->v_common;
+      tmpvar->v_positioninblock=parcours->var->v_positioninblock;
+      tmpvar->v_module=parcours->var->v_module;
+      tmpvar->v_save=parcours->var->v_save;
+      tmpvar->v_VariableIsParameter=parcours->var->v_VariableIsParameter;
+      tmpvar->v_indicetabvars=parcours->var->v_indicetabvars;
+      strcpy(tmpvar->v_modulename,parcours->var->v_modulename);
+      strcpy(tmpvar->v_commonname,parcours->var->v_commonname);
+      strcpy(tmpvar->v_vallengspec,parcours->var->v_vallengspec);
+
+      strcpy(tmpvar->v_nameinttypename,parcours->var->v_nameinttypename);
+            
+      tmpvar->v_pointedvar=parcours->var->v_pointedvar;
+      strcpy(tmpvar->v_commoninfile,mainfile);
+      Save_Length(mainfile,10);
+      strcpy(tmpvar->v_subroutinename,parcours->var->v_subroutinename);
+      tmpvar->v_dimensiongiven=parcours->var->v_dimensiongiven;
+      tmpvar->v_c_star=parcours->var->v_c_star;
+      strcpy(tmpvar->v_precision,parcours->var->v_precision);
+      strcpy(tmpvar->v_initialvalue,parcours->var->v_initialvalue);
+      tmpvar->v_pointerdeclare=parcours->var->v_pointerdeclare;
+      tmpvar->v_optionaldeclare=parcours->var->v_optionaldeclare;
+      tmpvar->v_allocatable=parcours->var->v_allocatable;
+      strcpy(tmpvar->v_IntentSpec,parcours->var->v_IntentSpec);
+      tmpvar->v_dimsempty=parcours->var->v_dimsempty;
+      strcpy(tmpvar->v_readedlistdimension,
+                                          parcours->var->v_readedlistdimension);
+      /*                                                                      */
+      tmplistvar->var = tmpvar;
+      tmplistvar->suiv = NULL;
+      /*                                                                      */
+      if ( !listduplicated )
+      {
+         listduplicated = tmplistvar;
+         tmplistvarprec = listduplicated;
+      }
+      else
+      {
+         tmplistvarprec->suiv = tmplistvar;
+         tmplistvarprec = tmplistvar;
+      }
+      /*                                                                      */
+      parcours = parcours->suiv;
+   }
+}
+
+/******************************************************************************/
+/*                           insertdim                                        */
+/******************************************************************************/
+/* This subroutine is used to insert a record in a list of                    */
+/* struct : listdim                                                           */
+/******************************************************************************/
+/*        _______     _______     _______     _______     _______             */
+/*       +      +    +      +    +      +    +      +    +      +             */
+/*       + NEW  +--->+ lin  +--->+ lin  +--->+ lin  +--->+  lin +             */
+/*       +______+    +______+    +______+    +______+    +______+             */
+/*                                                                            */
+/******************************************************************************/
+listdim * insertdim(listdim *lin,typedim nom)
+{
+   listdim *newdim ;
+   listdim *parcours ;
+
+   newdim=(listdim *) malloc (sizeof (listdim));
+   newdim->dim=nom;
+   newdim->suiv=NULL;
+
+   if ( ! lin )
+   {
+      lin = newdim;
+   }
+   else
+   {
+      parcours = lin;
+      while ( parcours->suiv ) parcours=parcours->suiv;
+      parcours->suiv = newdim;
+   }
+
+   return lin;
+}
+
+/******************************************************************************/
+/*                            change_dim_char                                 */
+/******************************************************************************/
+/* This subroutine is used to change the dimension in the list lin            */
+/******************************************************************************/
+/*        _______     _______                 _______     _______             */
+/*       +  l   +    +  l   +                +  l   +    +   l  +             */
+/*       + old  +--->+ old  +--------------->+ lin  +--->+  lin +             */
+/*       +______+    +______+                +______+    +______+             */
+/*                                                                            */
+/******************************************************************************/
+void change_dim_char(listdim *lin,listvar * l)
+{
+   listvar *parcours_var;
+   variable *v;
+
+   parcours_var=l;
+   while(parcours_var)
+   {
+      v=parcours_var->var;
+      strcpy(v->v_dimchar,(lin->dim).last);
+      Save_Length((lin->dim).last,5);
+      parcours_var=parcours_var->suiv;
+   }
+}
+
+
+/******************************************************************************/
+/*                                num_dims                                    */
+/******************************************************************************/
+/* This subroutine is used to know the dimension of a table                   */
+/******************************************************************************/
+/*                                                                            */
+/*             Dimension(jpi,jpj,jpk) ----------> num_dims = 3                */
+/*                                                                            */
+/******************************************************************************/
+int num_dims(listdim *d)
+{
+   listdim *parcours;
+   int compteur = 0;
+
+   parcours = d;
+   while(parcours)
+   {
+     compteur++;
+     parcours=parcours->suiv;
+   }
+   return compteur;
+}
+
+
+/******************************************************************************/
+/*                          CREATEVAR                                         */
+/******************************************************************************/
+/* This subroutine is used to create and initialized a record of the          */
+/*      struct : variable                                                     */
+/******************************************************************************/
+variable * createvar(char *nom,listdim *d)
+{
+  variable *var;
+  listdim *dims;
+  char ligne[LONG_C];
+  char listdimension[LONG_C];
+
+   var=(variable *) malloc(sizeof(variable));
+   /*                                                                         */
+   Init_Variable(var);
+   /*                                                                         */
+   strcpy(var->v_nomvar,nom);
+   Save_Length(nom,4);
+   /*                                                                         */
+   strcpy(listdimension,"");
+   strcpy(var->v_modulename,curmodulename);
+   Save_Length(curmodulename,6);
+   strcpy(var->v_commoninfile,mainfile);
+   Save_Length(mainfile,10);
+   strcpy(var->v_subroutinename,subroutinename);
+   Save_Length(subroutinename,11);
+   /*                                                                         */
+   if ( strcasecmp(nameinttypename,"") )
+   {
+      strcpy(var->v_nameinttypename,nameinttypename);
+      Save_Length(nameinttypename,9);
+   }
+         
+   if ( optionaldeclare     == 1 ) var->v_optionaldeclare = 1;
+   if ( pointerdeclare      == 1 ) var->v_pointerdeclare = 1;
+   if ( VariableIsParameter == 1 ) var->v_VariableIsParameter = 1 ;
+   if ( PublicDeclare       == 1 ) var->v_PublicDeclare = 1 ;
+   if ( PrivateDeclare      == 1 ) var->v_PrivateDeclare = 1;
+   if ( ExternalDeclare     == 1 ) var->v_ExternalDeclare = 1;
+   /*                                                                         */
+   var->v_dimension=d;
+
+   /* Creation of the string for the dimension of this variable               */
+   dimsempty = 1;
+   if ( d )
+   {
+      var->v_dimensiongiven=1;
+      dims = d;
+      while (dims)
+      {
+         if ( strcasecmp(dims->dim.first,"") || strcasecmp(dims->dim.last,""))
+                                                                  dimsempty = 0;
+         sprintf(ligne,"%s:%s",dims->dim.first,dims->dim.last);
+         strcat(listdimension,ligne);
+         if ( dims->suiv )
+         {
+            strcat(listdimension,",");
+         }
+         dims = dims->suiv;
+      }
+      if ( dimsempty == 1 ) var->v_dimsempty=1;
+   }
+   strcpy(var->v_readedlistdimension,listdimension);
+   Save_Length(listdimension,15);
+   /*                                                                         */
+   var->v_nbdim=num_dims(d);
+   /*                                                                         */
+   return var;
+}
+
+/******************************************************************************/
+/*                            INSERTVAR                                       */
+/******************************************************************************/
+/* This subroutine is used to insert a record in a list of the                */
+/*      struct : listvar                                                      */
+/******************************************************************************/
+/*        _______     _______     _______     _______     _______             */
+/*       +      +    +      +    +      +    +      +    +      +             */
+/*       +  lin +--->+  lin +--->+ lin  +--->+ lin  +--->+ NEW  +             */
+/*       +______+    +______+    +______+    +______+    +______+             */
+/*                                                                            */
+/*                                                                            */
+/******************************************************************************/
+listvar * insertvar(listvar *lin,variable *v)
+{
+   listvar *newvar ;
+   listvar *tmpvar ;
+
+   newvar=(listvar *) malloc (sizeof (listvar));
+   newvar->var=v;
+   newvar->suiv = NULL;
+   if (!lin)
+   {
+      newvar->suiv=NULL;
+      lin = newvar;
+   }
+   else
+   {
+      tmpvar = lin ;
+      while (tmpvar->suiv)
+      {
+         tmpvar = tmpvar ->suiv ;
+      }
+      tmpvar -> suiv = newvar;
+   }
+   return lin;
+}
+
+/******************************************************************************/
+/*                             SETTYPE                                        */
+/******************************************************************************/
+/* This subroutine is used to give the same variable type at each             */
+/*      record of the list of the struct : listvar                            */
+/******************************************************************************/
+/*        _______     _______     _______     _______     _______             */
+/*       + REAL +    + REAL +    + REAL +    + REAL +    + REAL +             */
+/*       +  lin +--->+  lin +--->+ lin  +--->+ lin  +--->+ lin  +             */
+/*       +______+    +______+    +______+    +______+    +______+             */
+/*                                                                            */
+/*                                                                            */
+/******************************************************************************/
+listvar *settype(char *nom,listvar *lin)
+{
+   listvar *newvar;
+   variable *v;
+
+   newvar=lin;
+   while (newvar)
+   {
+      v=newvar->var;
+      strcpy(v->v_typevar,nom);
+      Save_Length(nom,3);
+      newvar=newvar->suiv;
+   }
+   newvar=lin;
+   return newvar ;
+}
+
+/******************************************************************/
+/* printliste  */
+/* print the list given in argulent */
+/******************************************************************/
+
+void printliste(listvar * lin)
+{
+   listvar *newvar;
+   variable *v;
+
+   newvar=lin;
+   while (newvar)
+   {
+      v=newvar->var;
+      printf("nom = %s, allocatable = %d dim = %s\n",v->v_nomvar,v->v_allocatable,(v->v_dimension)->dim.last);
+      newvar=newvar->suiv;
+   }
+}
+
+/******************************************************************************/
+/*   IsinListe : return 1 if name nom is in list lin                          */
+/*                                                                            */
+/******************************************************************************/
+ int IsinListe(listvar *lin,char *nom)
+{
+   listvar *newvar;
+   variable *v;
+   int out ;
+   
+   newvar=lin;
+   out = 0;
+   while (newvar && (out == 0))
+   {
+      v=newvar->var;
+      if (!strcasecmp(v->v_nomvar,nom) && !strcasecmp(v->v_subroutinename,subroutinename)) {
+      out = 1;
+      }
+      newvar=newvar->suiv;
+   }
+
+   return out ;
+}
+
+listname *Insertname(listname *lin,char *nom)
+{
+   listname *newvar ;
+   listname *tmpvar;
+
+   newvar=(listname *) malloc (sizeof (listname));
+   strcpy(newvar->n_name,nom);
+   newvar->suiv = NULL;
+   if (!lin)
+   {
+      newvar->suiv=NULL;
+      lin = newvar;
+   }
+   else
+   {
+      tmpvar = lin ;
+      while (tmpvar->suiv)
+      {
+         tmpvar = tmpvar ->suiv ;
+      }
+      tmpvar -> suiv = newvar;
+   }
+   return lin;
+}
+
+/******************************************************************/
+/* printname  */
+/* print the list given in argulent */
+/******************************************************************/
+
+void printname(listname * lin)
+{
+   listname *newvar;
+
+   newvar=lin;
+   while (newvar)
+   {
+      printf("nom = %s \n",newvar->n_name);
+      newvar=newvar->suiv;
+   }
+}
+
+void removeglobfromlist(listname **lin)
+{
+  listname *listemp;
+  listname *parcours1;
+  listvar *parcours2;
+  listname * parcourspres;
+  int out;
+  
+  parcours1 = *lin;
+  parcourspres = (listname *)NULL;
+  
+  while (parcours1)
+  {
+  parcours2 = List_Global_Var;
+  out = 0;
+  while (parcours2 && out == 0)
+  {
+    if (!strcasecmp(parcours2->var->v_nomvar,parcours1->n_name))
+    {
+    out = 1;
+    }
+    parcours2 = parcours2->suiv;
+  }
+  if (out == 1)
+  {
+  if (parcours1 == *lin)
+   {
+   *lin = (*lin)->suiv;
+   parcours1 = *lin;
+   }
+   else
+   {
+   parcourspres->suiv = parcours1->suiv;
+   parcours1 = parcourspres->suiv;
+   }
+   }
+   else
+   {
+   parcourspres = parcours1;
+    parcours1 = parcours1->suiv;  
+    }
+  }
+}
+
+void writelistpublic(listname *lin)
+{
+  listname *parcours1;
+  char ligne[LONG_40M];
+  char tempname[LONG_4M];
+  
+  if (lin)
+  {
+  sprintf(ligne,"public :: ");
+  parcours1 = lin;
+  
+  while (parcours1)
+  {
+    strcat(ligne,parcours1->n_name);
+    if (parcours1->suiv) strcat(ligne,", ");
+    parcours1 = parcours1->suiv;  
+  }
+  tofich(fortranout,ligne,1);
+  }
+
+}
Index: /vendors/AGRIF/r_00/LIB/UtilNotGridDep.c
===================================================================
--- /vendors/AGRIF/r_00/LIB/UtilNotGridDep.c	(revision 1902)
+++ /vendors/AGRIF/r_00/LIB/UtilNotGridDep.c	(revision 1902)
@@ -0,0 +1,110 @@
+/******************************************************************************/
+/*                                                                            */
+/*     CONV (converter) for Agrif (Adaptive Grid Refinement In Fortran)       */
+/*                                                                            */
+/* Copyright or   or Copr. Laurent Debreu (Laurent.Debreu@imag.fr)            */
+/*                        Cyril Mazauric (Cyril_Mazauric@yahoo.fr)            */
+/* This software is governed by the CeCILL-C license under French law and     */
+/* abiding by the rules of distribution of free software.  You can  use,      */
+/* modify and/ or redistribute the software under the terms of the CeCILL-C   */
+/* license as circulated by CEA, CNRS and INRIA at the following URL          */
+/* "http://www.cecill.info".                                                  */
+/*                                                                            */
+/* As a counterpart to the access to the source code and  rights to copy,     */
+/* modify and redistribute granted by the license, users are provided only    */
+/* with a limited warranty  and the software's author,  the holder of the     */
+/* economic rights,  and the successive licensors  have only  limited         */
+/* liability.                                                                 */
+/*                                                                            */
+/* In this respect, the user's attention is drawn to the risks associated     */
+/* with loading,  using,  modifying and/or developing or reproducing the      */
+/* software by the user in light of its specific status of free software,     */
+/* that may mean  that it is complicated to manipulate,  and  that  also      */
+/* therefore means  that it is reserved for developers  and  experienced      */
+/* professionals having in-depth computer knowledge. Users are therefore      */
+/* encouraged to load and test the software's suitability as regards their    */
+/* requirements in conditions enabling the security of their systems and/or   */
+/* data to be ensured and,  more generally, to use and operate it in the      */
+/* same conditions as regards security.                                       */
+/*                                                                            */
+/* The fact that you are presently reading this means that you have had       */
+/* knowledge of the CeCILL-C license and that you accept its terms.           */
+/******************************************************************************/
+/* version 1.7                                                                */
+/******************************************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "decl.h"
+
+/******************************************************************************/
+/*                     Add_NotGridDepend_Var_1                                */
+/******************************************************************************/
+/* This subroutine is used to add a record into List_NotGridDepend_Var        */
+/*    This variable is add only if it is not present in the list              */
+/*    This variable is add at the end of the list                             */
+/******************************************************************************/
+/*        _______     _______     _______     _______     _______             */
+/*       + not  +    + not  +    +  not +    +  not +    +      +             */
+/*       + grid +--->+ grid +--->+ grid +--->+ grid +--->+ NEW  +             */
+/*       +______+    +______+    +______+    +______+    +______+             */
+/*                                                                            */
+/******************************************************************************/
+void Add_NotGridDepend_Var_1 (char *name)
+{
+   listvar *parcours;
+   listvar *newvar;
+   /*                                                                         */
+   /* look in the List_NotGridDepend_Var if this variable exist               */
+   parcours = List_NotGridDepend_Var;
+   while (parcours)
+   {
+     if (!strcasecmp(parcours->var->v_nomvar,name))
+     {
+        /* if this variable exist -> exit of the program                      */
+        printf(" The variable %s\n",name);
+        printf(" has been declared twice \n");
+        printf(" as a non grid dependent variable \n");
+        exit(1);
+     }
+     parcours= parcours->suiv;
+   }
+   /* if variable does not exist, we add it                                   */
+   newvar=(listvar *)malloc(sizeof(listvar));
+   newvar->var=(variable *)malloc(sizeof(variable));
+   strcpy(newvar->var->v_nomvar,name);
+   Save_Length(name,4);
+   strcpy(newvar->var->v_commoninfile,mainfile);
+   Save_Length(mainfile,10);
+   strcpy(newvar->var->v_subroutinename,subroutinename);
+   Save_Length(subroutinename,11);
+   newvar->var->v_notgrid = 1 ;
+   newvar->suiv = List_NotGridDepend_Var;
+   List_NotGridDepend_Var = newvar;
+}
+
+/******************************************************************************/
+/*                      VarIsNonGridDepend                                    */
+/******************************************************************************/
+/* This subroutine is used to know if a variable has been declared as non     */
+/* grid dependent                                                             */
+/******************************************************************************/
+/*                                                                            */
+/*  notgriddepend variable;    ----------->  VarIsNonGridDepend = 1           */
+/*                                                                            */
+/*                                                                            */
+/******************************************************************************/
+int VarIsNonGridDepend(char *name)
+{
+   listvar *newvar;
+   int out;
+
+   newvar = List_NotGridDepend_Var;
+   out=0;
+   while (newvar && out == 0 )
+   {
+      if ( !strcasecmp(newvar->var->v_nomvar,name) ) out = 1;
+      else newvar = newvar->suiv;
+   }
+   return out;
+}
Index: /vendors/AGRIF/r_00/LIB/WorkWithAllocatelist.c
===================================================================
--- /vendors/AGRIF/r_00/LIB/WorkWithAllocatelist.c	(revision 1902)
+++ /vendors/AGRIF/r_00/LIB/WorkWithAllocatelist.c	(revision 1902)
@@ -0,0 +1,152 @@
+/******************************************************************************/
+/*                                                                            */
+/*     CONV (converter) for Agrif (Adaptive Grid Refinement In Fortran)       */
+/*                                                                            */
+/* Copyright or   or Copr. Laurent Debreu (Laurent.Debreu@imag.fr)            */
+/*                        Cyril Mazauric (Cyril_Mazauric@yahoo.fr)            */
+/* This software is governed by the CeCILL-C license under French law and     */
+/* abiding by the rules of distribution of free software.  You can  use,      */
+/* modify and/ or redistribute the software under the terms of the CeCILL-C   */
+/* license as circulated by CEA, CNRS and INRIA at the following URL          */
+/* "http://www.cecill.info".                                                  */
+/*                                                                            */
+/* As a counterpart to the access to the source code and  rights to copy,     */
+/* modify and redistribute granted by the license, users are provided only    */
+/* with a limited warranty  and the software's author,  the holder of the     */
+/* economic rights,  and the successive licensors  have only  limited         */
+/* liability.                                                                 */
+/*                                                                            */
+/* In this respect, the user's attention is drawn to the risks associated     */
+/* with loading,  using,  modifying and/or developing or reproducing the      */
+/* software by the user in light of its specific status of free software,     */
+/* that may mean  that it is complicated to manipulate,  and  that  also      */
+/* therefore means  that it is reserved for developers  and  experienced      */
+/* professionals having in-depth computer knowledge. Users are therefore      */
+/* encouraged to load and test the software's suitability as regards their    */
+/* requirements in conditions enabling the security of their systems and/or   */
+/* data to be ensured and,  more generally, to use and operate it in the      */
+/* same conditions as regards security.                                       */
+/*                                                                            */
+/* The fact that you are presently reading this means that you have had       */
+/* knowledge of the CeCILL-C license and that you accept its terms.           */
+/******************************************************************************/
+/* version 1.7                                                                */
+/******************************************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "decl.h"
+
+/******************************************************************************/
+/*                               Add_Allocate_Var_1                           */
+/******************************************************************************/
+/* Firstpass 1                                                                */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+void Add_Allocate_Var_1(char *nom,char *nommodule)
+{
+   listallocate *newvar;
+   listallocate *parcours;
+   int out;
+
+   if ( firstpass == 1 )
+   {
+      if ( !List_Allocate_Var )
+      {
+         newvar = (listallocate *)malloc(sizeof(listallocate));
+         strcpy(newvar->a_nomvar,nom);
+         Save_Length(nom,25);
+         strcpy(newvar->a_subroutine,subroutinename);
+         Save_Length(subroutinename,26);
+         strcpy(newvar->a_module,nommodule);
+         Save_Length(nommodule,27);
+         newvar->suiv = NULL;
+         List_Allocate_Var = newvar;
+      }
+      else
+      {
+         parcours = List_Allocate_Var;
+         out = 0 ;
+         while ( parcours->suiv && out == 0 )
+         {
+            if (  !strcasecmp(parcours->a_nomvar,nom) &&
+                  !strcasecmp(parcours->a_subroutine,subroutinename) &&
+                  !strcasecmp(parcours->a_module,nommodule) ) out = 1;
+            else
+               parcours=parcours->suiv;
+         }
+         if ( out == 0 )
+         {
+            if (  !strcasecmp(parcours->a_nomvar,nom) &&
+                  !strcasecmp(parcours->a_subroutine,subroutinename) &&
+                  !strcasecmp(parcours->a_module,nommodule) ) out = 1;
+            else
+            {
+               /* add the record                                              */
+              newvar = (listallocate *)malloc(sizeof(listallocate));
+              strcpy(newvar->a_nomvar,nom);
+              Save_Length(nom,25);
+              strcpy(newvar->a_subroutine,subroutinename);
+              Save_Length(subroutinename,26);
+              strcpy(newvar->a_module,nommodule);
+              Save_Length(nommodule,27);
+              newvar->suiv = NULL;
+              parcours->suiv = newvar;
+            }
+         }
+      }
+   }
+}
+
+
+/******************************************************************************/
+/*                            IsVarAllocatable_0                              */
+/******************************************************************************/
+/* Firstpass 0                                                                */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+int IsVarAllocatable_0(char *ident)
+{
+   listallocate *parcours;
+   int out;
+
+   out = 0 ;
+   if ( firstpass == 0 )
+   {
+      parcours = List_Allocate_Var;
+      while ( parcours && out == 0 )
+      {
+         if ( !strcasecmp(parcours->a_nomvar,ident)  ) out = 1 ;
+         else parcours=parcours->suiv;
+      }
+   }
+   return out;
+}
+
+
+/******************************************************************************/
+/*                          varisallocatable_0                                */
+/******************************************************************************/
+/* Firstpass 0                                                                */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+int varisallocatable_0(char *ident)
+{
+   listallocate *newvaralloc;
+   int out;
+
+   out =0;
+   if (firstpass == 0 )
+   {
+         newvaralloc = List_Allocate_Var;
+         while ( newvaralloc && out == 0 )
+         {
+            if ( !strcasecmp(ident,newvaralloc->a_nomvar) )  out = 1;
+            else newvaralloc = newvaralloc->suiv;
+         }
+   }
+   return out;
+}
Index: /vendors/AGRIF/r_00/LIB/WorkWithParameterlist.c
===================================================================
--- /vendors/AGRIF/r_00/LIB/WorkWithParameterlist.c	(revision 1902)
+++ /vendors/AGRIF/r_00/LIB/WorkWithParameterlist.c	(revision 1902)
@@ -0,0 +1,106 @@
+/******************************************************************************/
+/*                                                                            */
+/*     CONV (converter) for Agrif (Adaptive Grid Refinement In Fortran)       */
+/*                                                                            */
+/* Copyright or   or Copr. Laurent Debreu (Laurent.Debreu@imag.fr)            */
+/*                        Cyril Mazauric (Cyril_Mazauric@yahoo.fr)            */
+/* This software is governed by the CeCILL-C license under French law and     */
+/* abiding by the rules of distribution of free software.  You can  use,      */
+/* modify and/ or redistribute the software under the terms of the CeCILL-C   */
+/* license as circulated by CEA, CNRS and INRIA at the following URL          */
+/* "http://www.cecill.info".                                                  */
+/*                                                                            */
+/* As a counterpart to the access to the source code and  rights to copy,     */
+/* modify and redistribute granted by the license, users are provided only    */
+/* with a limited warranty  and the software's author,  the holder of the     */
+/* economic rights,  and the successive licensors  have only  limited         */
+/* liability.                                                                 */
+/*                                                                            */
+/* In this respect, the user's attention is drawn to the risks associated     */
+/* with loading,  using,  modifying and/or developing or reproducing the      */
+/* software by the user in light of its specific status of free software,     */
+/* that may mean  that it is complicated to manipulate,  and  that  also      */
+/* therefore means  that it is reserved for developers  and  experienced      */
+/* professionals having in-depth computer knowledge. Users are therefore      */
+/* encouraged to load and test the software's suitability as regards their    */
+/* requirements in conditions enabling the security of their systems and/or   */
+/* data to be ensured and,  more generally, to use and operate it in the      */
+/* same conditions as regards security.                                       */
+/*                                                                            */
+/* The fact that you are presently reading this means that you have had       */
+/* knowledge of the CeCILL-C license and that you accept its terms.           */
+/******************************************************************************/
+/* version 1.7                                                                */
+/******************************************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "decl.h"
+
+/******************************************************************************/
+/*                       Add_GlobalParameter_Var_1                            */
+/******************************************************************************/
+/*  This subroutines is used to add the variable defined in common in the     */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+void Add_GlobalParameter_Var_1(listvar *listin)
+{
+   if ( firstpass == 1 )
+   {
+      if ( VariableIsParameter == 1 ) List_GlobalParameter_Var =
+                         AddListvarToListvar(listin,List_GlobalParameter_Var,1);
+   }
+}
+
+/******************************************************************************/
+/*                       Add_Parameter_Var_1                                  */
+/******************************************************************************/
+/*  This subroutines is used to add the variable defined in common in the     */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+void Add_Parameter_Var_1(listvar *listin)
+{
+   listvar *parcours;
+
+   if ( firstpass == 1 && VariableIsParameter == 1 )
+   {
+      if ( !List_Parameter_Var )
+      {
+         List_Parameter_Var = listin;
+      }
+      else
+      {
+         parcours = List_Parameter_Var;
+         while (parcours->suiv) parcours=parcours->suiv;
+         parcours->suiv = listin;
+      }
+   }
+}
+
+/******************************************************************************/
+/*                       Add_Dimension_Var_1                                  */
+/******************************************************************************/
+/*  This subroutines is used to add the variable defined in common in the     */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+void Add_Dimension_Var_1(listvar *listin)
+{
+   listvar *parcours;
+
+   if ( firstpass == 1 )
+   {
+      if ( !List_Dimension_Var )
+      {
+         List_Dimension_Var = listin;
+      }
+      else
+      {
+         parcours = List_Dimension_Var;
+         while (parcours->suiv) parcours=parcours->suiv;
+         parcours->suiv = listin;
+      }
+   }
+}
Index: /vendors/AGRIF/r_00/LIB/WorkWithglobliste.c
===================================================================
--- /vendors/AGRIF/r_00/LIB/WorkWithglobliste.c	(revision 1902)
+++ /vendors/AGRIF/r_00/LIB/WorkWithglobliste.c	(revision 1902)
@@ -0,0 +1,111 @@
+/******************************************************************************/
+/*                                                                            */
+/*     CONV (converter) for Agrif (Adaptive Grid Refinement In Fortran)       */
+/*                                                                            */
+/* Copyright or   or Copr. Laurent Debreu (Laurent.Debreu@imag.fr)            */
+/*                        Cyril Mazauric (Cyril_Mazauric@yahoo.fr)            */
+/* This software is governed by the CeCILL-C license under French law and     */
+/* abiding by the rules of distribution of free software.  You can  use,      */
+/* modify and/ or redistribute the software under the terms of the CeCILL-C   */
+/* license as circulated by CEA, CNRS and INRIA at the following URL          */
+/* "http://www.cecill.info".                                                  */
+/*                                                                            */
+/* As a counterpart to the access to the source code and  rights to copy,     */
+/* modify and redistribute granted by the license, users are provided only    */
+/* with a limited warranty  and the software's author,  the holder of the     */
+/* economic rights,  and the successive licensors  have only  limited         */
+/* liability.                                                                 */
+/*                                                                            */
+/* In this respect, the user's attention is drawn to the risks associated     */
+/* with loading,  using,  modifying and/or developing or reproducing the      */
+/* software by the user in light of its specific status of free software,     */
+/* that may mean  that it is complicated to manipulate,  and  that  also      */
+/* therefore means  that it is reserved for developers  and  experienced      */
+/* professionals having in-depth computer knowledge. Users are therefore      */
+/* encouraged to load and test the software's suitability as regards their    */
+/* requirements in conditions enabling the security of their systems and/or   */
+/* data to be ensured and,  more generally, to use and operate it in the      */
+/* same conditions as regards security.                                       */
+/*                                                                            */
+/* The fact that you are presently reading this means that you have had       */
+/* knowledge of the CeCILL-C license and that you accept its terms.           */
+/******************************************************************************/
+/* version 1.7                                                                */
+/******************************************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "decl.h"
+
+/******************************************************************************/
+/*                          Add_Globliste_1                                   */
+/******************************************************************************/
+/* Firstpass 1                                                                */
+/* We should add this declaration to the List_Global_Var                      */
+/******************************************************************************/
+void Add_Globliste_1(listvar *listtoadd)
+{
+   if ( firstpass == 1 )
+   {
+      if ( aftercontainsdeclare == 0 &&
+           VariableIsParameter  == 0 )
+      {
+         List_Global_Var = AddListvarToListvar(listtoadd,List_Global_Var,1);
+      }
+   }
+}
+
+/******************************************************************************/
+/*                  Add_SubroutineDeclarationSave_Var_1                       */
+/******************************************************************************/
+/* Firstpass 1                                                                */
+/* We should add this declaration to the List_Global_Var. case SAVE           */
+/******************************************************************************/
+void Add_SubroutineDeclarationSave_Var_1(listvar *listtoadd)
+{
+   if ( firstpass == 1 )
+   {
+      if ( VariableIsParameter == 0 &&
+           SaveDeclare         == 1 )
+      {
+         List_Global_Var = AddListvarToListvar(listtoadd,List_Global_Var,1);
+      }
+   }
+}
+
+void checkandchangedims(listvar *listsecondpass)
+{
+listvar *parcours;
+listvar *parcours1;
+variable * newvar;
+variable * oldvar;
+
+int out ;
+
+printliste(List_Global_Var);
+printliste(List_SubroutineDeclaration_Var);
+
+parcours = listsecondpass;
+while (parcours)
+{
+newvar = parcours->var;
+parcours1 = List_SubroutineDeclaration_Var;
+out = 0;
+while (parcours1 && out == 0)
+{
+  oldvar = parcours1->var;
+  if (!strcasecmp(newvar->v_nomvar,oldvar->v_nomvar) && !strcasecmp(newvar->v_subroutinename,subroutinename))
+   {
+   if (newvar->v_dimensiongiven == 1)
+   {
+    strcpy(oldvar->v_dimension->dim.last,newvar->v_dimension->dim.last);
+    strcpy(oldvar->v_dimension->dim.first,newvar->v_dimension->dim.first);    
+   }
+   out = 1;
+   }
+  parcours1 = parcours1->suiv;
+}
+parcours = parcours->suiv;
+}
+printliste(List_SubroutineDeclaration_Var);
+}
Index: /vendors/AGRIF/r_00/LIB/WorkWithlistdatavariable.c
===================================================================
--- /vendors/AGRIF/r_00/LIB/WorkWithlistdatavariable.c	(revision 1902)
+++ /vendors/AGRIF/r_00/LIB/WorkWithlistdatavariable.c	(revision 1902)
@@ -0,0 +1,84 @@
+/******************************************************************************/
+/*                                                                            */
+/*     CONV (converter) for Agrif (Adaptive Grid Refinement In Fortran)       */
+/*                                                                            */
+/* Copyright or   or Copr. Laurent Debreu (Laurent.Debreu@imag.fr)            */
+/*                        Cyril Mazauric (Cyril_Mazauric@yahoo.fr)            */
+/* This software is governed by the CeCILL-C license under French law and     */
+/* abiding by the rules of distribution of free software.  You can  use,      */
+/* modify and/ or redistribute the software under the terms of the CeCILL-C   */
+/* license as circulated by CEA, CNRS and INRIA at the following URL          */
+/* "http://www.cecill.info".                                                  */
+/*                                                                            */
+/* As a counterpart to the access to the source code and  rights to copy,     */
+/* modify and redistribute granted by the license, users are provided only    */
+/* with a limited warranty  and the software's author,  the holder of the     */
+/* economic rights,  and the successive licensors  have only  limited         */
+/* liability.                                                                 */
+/*                                                                            */
+/* In this respect, the user's attention is drawn to the risks associated     */
+/* with loading,  using,  modifying and/or developing or reproducing the      */
+/* software by the user in light of its specific status of free software,     */
+/* that may mean  that it is complicated to manipulate,  and  that  also      */
+/* therefore means  that it is reserved for developers  and  experienced      */
+/* professionals having in-depth computer knowledge. Users are therefore      */
+/* encouraged to load and test the software's suitability as regards their    */
+/* requirements in conditions enabling the security of their systems and/or   */
+/* data to be ensured and,  more generally, to use and operate it in the      */
+/* same conditions as regards security.                                       */
+/*                                                                            */
+/* The fact that you are presently reading this means that you have had       */
+/* knowledge of the CeCILL-C license and that you accept its terms.           */
+/******************************************************************************/
+/* version 1.7                                                                */
+/******************************************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "decl.h"
+/******************************************************************************/
+/*                          Add_Data_Var_1                                    */
+/******************************************************************************/
+/* This subroutine is used to add a record to List_Data_Var                   */
+/******************************************************************************/
+/*        _______     _______     _______     _______     _______             */
+/*       +      +    +      +    +      +    +      +    +      +             */
+/*       + NEW  +--->+ data +--->+ data +--->+ data +--->+  data+             */
+/*       +______+    +______+    +______+    +______+    +______+             */
+/*                                                                            */
+/******************************************************************************/
+void Add_Data_Var_1 (char *name,char *values)
+{
+  listvar *newvar;
+
+  if ( firstpass == 1 )
+  {
+     newvar=(listvar *)malloc(sizeof(listvar));
+     newvar->var=(variable *)malloc(sizeof(variable));
+     /*                                                                       */
+     Init_Variable(newvar->var);
+     /*                                                                       */
+     if ( inmoduledeclare == 1 ) newvar->var->v_module=1;
+     strcpy(newvar->var->v_nomvar,name);
+     Save_Length(name,4);
+     strcpy(newvar->var->v_subroutinename,subroutinename);
+     Save_Length(subroutinename,11);
+     strcpy(newvar->var->v_modulename,curmodulename);
+     Save_Length(curmodulename,6);
+     strcpy(newvar->var->v_commoninfile,mainfile);
+     Save_Length(mainfile,10);
+     strcpy(newvar->var->v_initialvalue,values);
+     Save_Length(values,14);
+     newvar->suiv = NULL;
+
+     if ( !List_Data_Var )
+     {
+        List_Data_Var  = newvar ;
+     }
+     else
+     {
+        newvar->suiv = List_Data_Var;
+        List_Data_Var = newvar;
+     }
+  }
+}
Index: /vendors/AGRIF/r_00/LIB/WorkWithlistmoduleinfile.c
===================================================================
--- /vendors/AGRIF/r_00/LIB/WorkWithlistmoduleinfile.c	(revision 1902)
+++ /vendors/AGRIF/r_00/LIB/WorkWithlistmoduleinfile.c	(revision 1902)
@@ -0,0 +1,530 @@
+/******************************************************************************/
+/*                                                                            */
+/*     CONV (converter) for Agrif (Adaptive Grid Refinement In Fortran)       */
+/*                                                                            */
+/* Copyright or   or Copr. Laurent Debreu (Laurent.Debreu@imag.fr)            */
+/*                        Cyril Mazauric (Cyril_Mazauric@yahoo.fr)            */
+/* This software is governed by the CeCILL-C license under French law and     */
+/* abiding by the rules of distribution of free software.  You can  use,      */
+/* modify and/ or redistribute the software under the terms of the CeCILL-C   */
+/* license as circulated by CEA, CNRS and INRIA at the following URL          */
+/* "http://www.cecill.info".                                                  */
+/*                                                                            */
+/* As a counterpart to the access to the source code and  rights to copy,     */
+/* modify and redistribute granted by the license, users are provided only    */
+/* with a limited warranty  and the software's author,  the holder of the     */
+/* economic rights,  and the successive licensors  have only  limited         */
+/* liability.                                                                 */
+/*                                                                            */
+/* In this respect, the user's attention is drawn to the risks associated     */
+/* with loading,  using,  modifying and/or developing or reproducing the      */
+/* software by the user in light of its specific status of free software,     */
+/* that may mean  that it is complicated to manipulate,  and  that  also      */
+/* therefore means  that it is reserved for developers  and  experienced      */
+/* professionals having in-depth computer knowledge. Users are therefore      */
+/* encouraged to load and test the software's suitability as regards their    */
+/* requirements in conditions enabling the security of their systems and/or   */
+/* data to be ensured and,  more generally, to use and operate it in the      */
+/* same conditions as regards security.                                       */
+/*                                                                            */
+/* The fact that you are presently reading this means that you have had       */
+/* knowledge of the CeCILL-C license and that you accept its terms.           */
+/******************************************************************************/
+/* version 1.7                                                                */
+/******************************************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "decl.h"
+
+void Save_Length(char *nom, int whichone)
+{
+   if ( whichone == 1  && strlen(nom) > length_last )
+   {
+      length_last               = strlen(nom);
+      if ( length_last > LONG_C )
+      {
+         printf("WARNING 1 : The value of LONG_C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",length_last+100);
+      }
+   }
+   if ( whichone == 2  && strlen(nom) > length_first )
+   {
+      length_first              = strlen(nom);
+      if ( length_first > LONG_C )
+      {
+         printf("WARNING 2 : The value of LONG_C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",length_first+100);
+      }
+   }
+   if ( whichone == 3  && strlen(nom) > length_v_typevar )
+   {
+      length_v_typevar          = strlen(nom);
+      if ( length_v_typevar > LONG_C )
+      {
+         printf("WARNING 3 : The value of LONG_C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",length_v_typevar+100);
+      }
+   }
+   if ( whichone == 4  && strlen(nom) > length_v_nomvar )
+   {
+      length_v_nomvar           = strlen(nom);
+      if ( length_v_nomvar > LONG_C )
+      {
+         printf("WARNING 4 : The value of LONG_C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",length_v_nomvar+100);
+      }
+   }
+   if ( whichone == 5  && strlen(nom) > length_v_dimchar )
+   {
+      length_v_dimchar          = strlen(nom);
+      if ( length_v_dimchar > LONG_C )
+      {
+         printf("WARNING 5 : The value of LONG_C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",
+                                                          length_v_dimchar+100);
+      }
+   }
+   if ( whichone == 6  && strlen(nom) > length_v_modulename )
+   {
+      length_v_modulename       = strlen(nom);
+      if ( length_v_modulename > LONG_C )
+      {
+         printf("WARNING 6 : The value of LONG_C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",
+                                                       length_v_modulename+100);
+      }
+   }
+   if ( whichone == 7  && strlen(nom) > length_v_commonname )
+   {
+      length_v_commonname       = strlen(nom);
+      if ( length_v_commonname > LONG_C )
+      {
+         printf("WARNING 7 : The value of LONG_C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",
+                                                       length_v_commonname+100);
+      }
+   }
+   if ( whichone == 8  && strlen(nom) > length_v_vallengspec )
+   {
+      length_v_vallengspec      = strlen(nom);
+      if ( length_v_vallengspec > LONG_C )
+      {
+         printf("WARNING 8 : The value of LONG_C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",
+                                                      length_v_vallengspec+100);
+      }
+   }
+   if ( whichone == 9  && strlen(nom) > length_v_nameinttypename )
+   {
+      length_v_nameinttypename  = strlen(nom);
+      if ( length_v_nameinttypename > LONG_C )
+      {
+         printf("WARNING 9 : The value of LONG_C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",
+                                                  length_v_nameinttypename+100);
+      }
+   }
+   if ( whichone == 10 && strlen(nom) > length_v_commoninfile )
+   {
+      length_v_commoninfile     = strlen(nom);
+      if ( length_v_commoninfile > LONG_C )
+      {
+         printf("WARNING 10 : The value of LONG_C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",
+                                                     length_v_commoninfile+100);
+      }
+   }
+   if ( whichone == 11 && strlen(nom) > length_v_subroutinename )
+   {
+      length_v_subroutinename   = strlen(nom);
+      if ( length_v_subroutinename > LONG_C )
+      {
+         printf("WARNING 11 : The value of LONG_C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",
+                                                   length_v_subroutinename+100);
+      }
+   }
+   if ( whichone == 12 && strlen(nom) > length_v_precision )
+   {
+      length_v_precision        = strlen(nom);
+      if ( length_v_precision > LONG_C )
+      {
+         printf("WARNING 12 : The value of LONG_C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",
+                                                        length_v_precision+100);
+      }
+   }
+   if ( whichone == 13 && strlen(nom) > length_v_IntentSpec )
+   {
+      length_v_IntentSpec       = strlen(nom);
+      if ( length_v_IntentSpec > LONG_C )
+      {
+         printf("WARNING 13 : The value of LONG_C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",
+                                                       length_v_IntentSpec+100);
+      }
+   }
+   if ( whichone == 14 && strlen(nom) > length_v_initialvalue )
+   {
+      length_v_initialvalue     = strlen(nom);
+      if ( length_v_initialvalue > LONG_4C )
+      {
+         printf("WARNING 14 : The value of LONG_4C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",
+                                                     length_v_initialvalue+100);
+      }
+   }
+   if ( whichone == 15 && strlen(nom) > length_v_readedlistdimension )
+   {
+      length_v_readedlistdimension = strlen(nom);
+      if ( length_v_readedlistdimension > LONG_C )
+      {
+         printf("WARNING 15 : The value of LONG_C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",
+                                              length_v_readedlistdimension+100);
+      }
+   }
+   if ( whichone == 16 && strlen(nom) > length_u_usemodule )
+   {
+      length_u_usemodule        = strlen(nom);
+      if ( length_u_usemodule > LONG_C )
+      {
+         printf("WARNING 16 : The value of LONG_C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",
+                                                        length_u_usemodule+100);
+      }
+   }
+   if ( whichone == 17 && strlen(nom) > length_u_charusemodule )
+   {
+      length_u_charusemodule    = strlen(nom);
+      if ( length_u_charusemodule > LONG_C )
+      {
+         printf("WARNING 17 : The value of LONG_C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",
+                                                    length_u_charusemodule+100);
+      }
+   }
+   if ( whichone == 18 && strlen(nom) > length_u_cursubroutine )
+   {
+      length_u_cursubroutine    = strlen(nom);
+      if ( length_u_cursubroutine > LONG_C )
+      {
+         printf("WARNING 18 : The value of LONG_C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",
+                                                    length_u_cursubroutine+100);
+      }
+   }
+   if ( whichone == 19 && strlen(nom) > length_u_modulename )
+   {
+      length_u_modulename       = strlen(nom);
+      if ( length_u_modulename > LONG_C )
+      {
+         printf("WARNING 19 : The value of LONG_C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",
+                                                       length_u_modulename+100);
+      }
+   }
+   if ( whichone == 20 && strlen(nom) > length_n_name )
+   {
+      length_n_name             = strlen(nom);
+      if ( length_n_name > LONG_C )
+      {
+         printf("WARNING 20 : The value of LONG_C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",length_n_name+100);
+      }
+   }
+   if ( whichone == 21 && strlen(nom) > length_c_namevar )
+   {
+      length_c_namevar          = strlen(nom);
+      if ( length_c_namevar > LONG_C )
+      {
+         printf("WARNING 21 : The value of LONG_C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",length_c_namevar+100);
+      }
+   }
+   if ( whichone == 22 && strlen(nom) > length_c_namepointedvar )
+   {
+      length_c_namepointedvar   = strlen(nom);
+      if ( length_c_namepointedvar > LONG_C )
+      {
+         printf("WARNING 22 : The value of LONG_C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",
+                                                   length_c_namepointedvar+100);
+      }
+   }
+   if ( whichone == 23 && strlen(nom) > length_o_nom )
+   {
+      length_o_nom              = strlen(nom);
+      if ( length_o_nom > LONG_C )
+      {
+         printf("WARNING 23 : The value of LONG_C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",length_o_nom+100);
+      }
+   }
+   if ( whichone == 24 && strlen(nom) > length_o_module )
+   {
+      length_o_module           = strlen(nom);
+      if ( length_o_module > LONG_C )
+      {
+         printf("WARNING 24 : The value of LONG_C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",length_o_module+100);
+      }
+   }
+   if ( whichone == 25 && strlen(nom) > length_a_nomvar )
+   {
+      length_a_nomvar           = strlen(nom);
+      if ( length_a_nomvar > LONG_C )
+      {
+         printf("WARNING 25 : The value of LONG_C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",length_a_nomvar+100);
+      }
+   }
+   if ( whichone == 26 && strlen(nom) > length_a_subroutine )
+   {
+      length_a_subroutine       = strlen(nom);
+      if ( length_a_subroutine > LONG_C )
+      {
+         printf("WARNING 26 : The value of LONG_C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",
+                                                       length_a_subroutine+100);
+      }
+   }
+   if ( whichone == 27 && strlen(nom) > length_a_module )
+   {
+      length_a_module           = strlen(nom);
+      if ( length_a_module > LONG_C )
+      {
+         printf("WARNING 27 : The value of LONG_C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",length_a_module+100);
+      }
+   }
+   if ( whichone == 28 && strlen(nom) > length_t_usemodule )
+   {
+      length_t_usemodule        = strlen(nom);
+      if ( length_t_usemodule > LONG_C )
+      {
+         printf("WARNING 28 : The value of LONG_C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",
+                                                        length_t_usemodule+100);
+      }
+   }
+   if ( whichone == 29 && strlen(nom) > length_t_cursubroutine )
+   {
+      length_t_cursubroutine    = strlen(nom);
+      if ( length_t_cursubroutine > LONG_C )
+      {
+         printf("WARNING 29 : The value of LONG_C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",
+                                                    length_t_cursubroutine+100);
+      }
+   }
+   if ( whichone == 30 && strlen(nom) > length_curfilename )
+   {
+      length_curfilename        = strlen(nom);
+      if (length_curfilename  > LONG_C )
+      {
+         printf("WARNING 30 : The value of LONG_C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",
+                                                        length_curfilename+100);
+      }
+   }
+   if ( whichone == 31 && strlen(nom) > length_nomfileoutput )
+   {
+      length_nomfileoutput      = strlen(nom);
+      if ( length_nomfileoutput > LONG_C )
+      {
+         printf("WARNING 31 : The value of LONG_C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",
+                                                      length_nomfileoutput+100);
+      }
+   }
+   if ( whichone == 32 && strlen(nom) > length_motparse )
+   {
+      length_motparse           = strlen(nom);
+      if ( length_motparse > LONG_4C )
+      {
+         printf("WARNING 32 : The value of LONG_4C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",length_motparse+100);
+      }
+   }
+   if ( whichone == 33 && strlen(nom) > length_mainfile )
+   {
+      length_mainfile           = strlen(nom);
+      if ( length_mainfile > LONG_C )
+      {
+         printf("WARNING 33 : The value of LONG_C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",length_mainfile+100);
+      }
+   }
+   if ( whichone == 34 && strlen(nom) > length_nomdir )
+   {
+      length_nomdir             = strlen(nom);
+      if ( length_nomdir > LONG_C )
+      {
+         printf("WARNING 34 : The value of LONG_C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",length_nomdir+100);
+      }
+   }
+   if ( whichone == 35 && strlen(nom) > length_commondirout )
+   {
+      length_commondirout       = strlen(nom);
+      if ( length_commondirout > LONG_C )
+      {
+         printf("WARNING 35 : The value of LONG_C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",
+                                                       length_commondirout+100);
+      }
+   }
+   if ( whichone == 36 && strlen(nom) > length_commondirin )
+   {
+      length_commondirin        = strlen(nom);
+      if ( length_commondirin > LONG_C )
+      {
+         printf("WARNING 36 : The value of LONG_C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",
+                                                        length_commondirin+100);
+      }
+   }
+   if ( whichone == 37 && strlen(nom) > length_filetoparse )
+   {
+      length_filetoparse        = strlen(nom);
+      if ( length_filetoparse > LONG_C )
+      {
+         printf("WARNING 37 : The value of LONG_C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",
+                                                        length_filetoparse+100);
+      }
+   }
+   if ( whichone == 38 && strlen(nom) > length_curbuf )
+   {
+      length_curbuf             = strlen(nom);
+      if ( length_curbuf > LONG_40M )
+      {
+         printf("WARNING 38 : The value of LONG_40M - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",length_curbuf+100);
+      }
+   }
+   if ( whichone == 39 && strlen(nom) > length_toprintglob )
+   {
+      length_toprintglob        = strlen(nom);
+      if ( length_toprintglob > LONG_4C )
+      {
+         printf("WARNING 39 : The value of LONG_4C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",
+                                                        length_toprintglob+100);
+      }
+   }
+   if ( whichone == 40 && strlen(nom) > length_tmpvargridname )
+   {
+      length_tmpvargridname     = strlen(nom);
+      if ( length_tmpvargridname > LONG_4C )
+      {
+         printf("WARNING 40 : The value of LONG_4C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",
+                                                     length_tmpvargridname+100);
+      }
+   }
+   if ( whichone == 41 && strlen(nom) > length_ligne_Subloop )
+   {
+       length_ligne_Subloop    = strlen(nom);
+      if ( length_ligne_Subloop > LONG_40M )
+      {
+         printf("WARNING 41 : The value of LONG_40M - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",
+                                                      length_ligne_Subloop+100);
+      }
+   }
+   if ( whichone == 42 && strlen(nom) > length_lvargridname_toamr )
+   {
+      length_lvargridname_toamr     = strlen(nom);
+      if ( length_lvargridname_toamr > LONG_4C )
+      {
+         printf("WARNING 42 : The value of LONG_4C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",
+                                                 length_lvargridname_toamr+100);
+      }
+   }
+   if ( whichone == 43 && strlen(nom) > length_toprint_utilagrif )
+   {
+      length_toprint_utilagrif     = strlen(nom);
+      if ( length_toprint_utilagrif > LONG_C )
+      {
+         printf("WARNING 43 : The value of LONG_C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",
+                                                  length_toprint_utilagrif+100);
+      }
+   }
+   if ( whichone == 44 && strlen(nom) > length_toprinttmp_utilchar )
+   {
+      length_toprinttmp_utilchar     = strlen(nom);
+      if ( length_toprinttmp_utilchar > LONG_4C)
+      {
+         printf("WARNING 44 : The value of LONG_4C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",
+                                                length_toprinttmp_utilchar+100);
+      }
+   }
+   if ( whichone == 45 && strlen(nom) > length_ligne_writedecl )
+   {
+      length_ligne_writedecl     = strlen(nom);
+      if ( length_ligne_writedecl > LONG_4C )
+      {
+         printf("WARNING 45 : The value of LONG_4C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",
+                                                    length_ligne_writedecl+100);
+      }
+   }
+   if ( whichone == 46 && strlen(nom) > length_newname_toamr )
+   {
+      length_newname_toamr    = strlen(nom);
+      if ( length_newname_toamr > LONG_4C )
+      {
+         printf("WARNING 46 : The value of LONG_4C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",
+                                                      length_newname_toamr+100);
+      }
+   }
+   if ( whichone == 47 && strlen(nom) > length_newname_writedecl )
+   {
+      length_newname_writedecl    = strlen(nom);
+      if ( length_newname_writedecl > LONG_4C )
+      {
+         printf("WARNING 47 : The value of LONG_4C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",
+                                                 length_newname_writedecl +100);
+      }
+   }
+   if ( whichone == 48 && strlen(nom) > length_ligne_toamr )
+   {
+      length_ligne_toamr    = strlen(nom);
+      if ( length_ligne_toamr > LONGNOM )
+      {
+         printf("WARNING 48 : The value of LONGNOM - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",
+                                                       length_ligne_toamr +100);
+      }
+   }
+   if ( whichone == 49 && strlen(nom) > length_tmpligne_writedecl )
+   {
+      length_tmpligne_writedecl     = strlen(nom);
+      if ( length_tmpligne_writedecl > LONG_4C )
+      {
+         printf("WARNING 49 : The value of LONG_4C - define in decl.h -\n");
+         printf("             should be upgrated to %d\n",
+                                                 length_tmpligne_writedecl+100);
+      }
+   }
+}
+
+void Save_Length_int(int val, int whichone)
+{
+   if ( whichone == 1 && val > value_char_size )
+                               value_char_size                            = val;
+   if ( whichone == 2 && val > value_char_size1 )
+                               value_char_size1                           = val;
+   if ( whichone == 3 && val > value_char_size2 )
+                               value_char_size2                           = val;
+   if ( whichone == 4 && val > value_char_size3 )
+                               value_char_size3                           = val;
+}
Index: /vendors/AGRIF/r_00/LIB/WorkWithlistofcoupled.c
===================================================================
--- /vendors/AGRIF/r_00/LIB/WorkWithlistofcoupled.c	(revision 1902)
+++ /vendors/AGRIF/r_00/LIB/WorkWithlistofcoupled.c	(revision 1902)
@@ -0,0 +1,111 @@
+/******************************************************************************/
+/*                                                                            */
+/*     CONV (converter) for Agrif (Adaptive Grid Refinement In Fortran)       */
+/*                                                                            */
+/* Copyright or    or Copr. Laurent Debreu (Laurent.Debreu@imag.fr)           */
+/*                        Cyril Mazauric (Cyril_Mazauric@yahoo.fr)            */
+/* This software is governed by the CeCILL-C license under French law and     */
+/* abiding by the rules of distribution of free software.  You can  use,      */
+/* modify and/ or redistribute the software under the terms of the CeCILL-C   */
+/* license as circulated by CEA, CNRS and INRIA at the following URL          */
+/* "http://www.cecill.info".                                                  */
+/*                                                                            */
+/* As a counterpart to the access to the source code and  rights to copy,     */
+/* modify and redistribute granted by the license, users are provided only    */
+/* with a limited warranty  and the software's author,  the holder of the     */
+/* economic rights,  and the successive licensors  have only  limited         */
+/* liability.                                                                 */
+/*                                                                            */
+/* In this respect, the user's attention is drawn to the risks associated     */
+/* with loading,  using,  modifying and/or developing or reproducing the      */
+/* software by the user in light of its specific status of free software,     */
+/* that may mean  that it is complicated to manipulate,  and  that  also      */
+/* therefore means  that it is reserved for developers  and  experienced      */
+/* professionals having in-depth computer knowledge. Users are therefore      */
+/* encouraged to load and test the software's suitability as regards their    */
+/* requirements in conditions enabling the security of their systems and/or   */
+/* data to be ensured and,  more generally, to use and operate it in the      */
+/* same conditions as regards security.                                       */
+/*                                                                            */
+/* The fact that you are presently reading this means that you have had       */
+/* knowledge of the CeCILL-C license and that you accept its terms.           */
+/******************************************************************************/
+/* version 1.7                                                                */
+/******************************************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "decl.h"
+
+/******************************************************************************/
+/*                          varisallocatable_0                                */
+/******************************************************************************/
+/* Firstpass 0                                                                */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+int variscoupled_0(char *ident)
+{
+   listallocate *newvaralloc;
+  listvarpointtovar *pointtmplist; 
+  listcouple *coupletmp;   
+  int out;
+
+   out =0;
+   if (firstpass == 0 )
+   {
+  pointtmplist = List_CouplePointed_Var;
+  while ( pointtmplist && out == 0)
+  {
+      coupletmp = pointtmplist->t_couple;
+      while ( coupletmp && out == 0)
+      {
+           /* we should find the same variable name in the same subroutine    */
+           if ( !strcasecmp(ident,coupletmp->c_namevar) &&
+                !strcasecmp(subroutinename,
+                                       pointtmplist->t_cursubroutine) &&
+                 strcasecmp(coupletmp->c_namepointedvar,"")
+              )
+           {
+              out = 1;
+           }
+         coupletmp = coupletmp->suiv;
+     }
+     pointtmplist = pointtmplist->suiv;
+   }
+   }
+   return out;
+}
+
+char * getcoupledname_0(char *ident)
+{
+   listallocate *newvaralloc;
+  listvarpointtovar *pointtmplist; 
+  listcouple *coupletmp;   
+  int out;
+
+   out =0;
+   if (firstpass == 0 )
+   {
+  pointtmplist = List_CouplePointed_Var;
+  while ( pointtmplist && out == 0)
+  {
+      coupletmp = pointtmplist->t_couple;
+      while ( coupletmp && out == 0)
+      {
+           /* we should find the same variable name in the same subroutine    */
+           if ( !strcasecmp(ident,coupletmp->c_namevar) &&
+                !strcasecmp(subroutinename,
+                                       pointtmplist->t_cursubroutine) &&
+                 strcasecmp(coupletmp->c_namepointedvar,"")
+              )
+           {
+              return(coupletmp->c_namepointedvar);
+           }
+         coupletmp = coupletmp->suiv;
+     }
+     pointtmplist = pointtmplist->suiv;
+   }
+   }
+}
Index: /vendors/AGRIF/r_00/LIB/WorkWithlistofmodulebysubroutine.c
===================================================================
--- /vendors/AGRIF/r_00/LIB/WorkWithlistofmodulebysubroutine.c	(revision 1902)
+++ /vendors/AGRIF/r_00/LIB/WorkWithlistofmodulebysubroutine.c	(revision 1902)
@@ -0,0 +1,299 @@
+/******************************************************************************/
+/*                                                                            */
+/*     CONV (converter) for Agrif (Adaptive Grid Refinement In Fortran)       */
+/*                                                                            */
+/* Copyright or   or Copr. Laurent Debreu (Laurent.Debreu@imag.fr)            */
+/*                        Cyril Mazauric (Cyril_Mazauric@yahoo.fr)            */
+/* This software is governed by the CeCILL-C license under French law and     */
+/* abiding by the rules of distribution of free software.  You can  use,      */
+/* modify and/ or redistribute the software under the terms of the CeCILL-C   */
+/* license as circulated by CEA, CNRS and INRIA at the following URL          */
+/* "http://www.cecill.info".                                                  */
+/*                                                                            */
+/* As a counterpart to the access to the source code and  rights to copy,     */
+/* modify and redistribute granted by the license, users are provided only    */
+/* with a limited warranty  and the software's author,  the holder of the     */
+/* economic rights,  and the successive licensors  have only  limited         */
+/* liability.                                                                 */
+/*                                                                            */
+/* In this respect, the user's attention is drawn to the risks associated     */
+/* with loading,  using,  modifying and/or developing or reproducing the      */
+/* software by the user in light of its specific status of free software,     */
+/* that may mean  that it is complicated to manipulate,  and  that  also      */
+/* therefore means  that it is reserved for developers  and  experienced      */
+/* professionals having in-depth computer knowledge. Users are therefore      */
+/* encouraged to load and test the software's suitability as regards their    */
+/* requirements in conditions enabling the security of their systems and/or   */
+/* data to be ensured and,  more generally, to use and operate it in the      */
+/* same conditions as regards security.                                       */
+/*                                                                            */
+/* The fact that you are presently reading this means that you have had       */
+/* knowledge of the CeCILL-C license and that you accept its terms.           */
+/******************************************************************************/
+/* version 1.7                                                                */
+/******************************************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "decl.h"
+
+
+
+/******************************************************************************/
+/*                    RecordUseModulesVariables                               */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+void RecordUseModulesVariables()
+{
+  listusemodule *tmplistmodule;
+
+  /* we should record all variables defined in modules used in this file      */
+  if ( List_NameOfModuleUsed )
+  {
+     tmplistmodule = List_NameOfModuleUsed;
+     while ( tmplistmodule )
+     {
+        if ( tmplistmodule->u_firstuse == 1 )
+        {
+           /* check if the file .depend<u_usemodule> exist                    */
+           List_ModuleUsed_Var = Readthedependfile
+                               (tmplistmodule->u_usemodule,List_ModuleUsed_Var);
+
+           List_GlobParamModuleUsed_Var = ReaddependParameterList
+                      (tmplistmodule->u_usemodule,List_GlobParamModuleUsed_Var);
+
+        }
+
+        tmplistmodule = tmplistmodule->suiv;
+     }
+  }
+}
+
+/******************************************************************************/
+/*                RecordUseModulesUseModulesVariables                         */
+/******************************************************************************/
+/******************************************************************************/
+void  RecordUseModulesUseModulesVariables()
+{
+  listusemodule *tmplistmodule;
+  listusemodule *tmplistmodule1;
+
+  /* we should record all variables defined in modules used in this file      */
+  if ( List_NameOfModuleUsed )
+  {
+     /* and we should read the .depend of the module used by the module used  */
+     tmplistmodule = List_NameOfModuleUsed;
+     while ( tmplistmodule )
+     {
+        Readthedependlistofmoduleused(tmplistmodule->u_usemodule);
+        while( tmpuselocallist )
+        {
+           Addmoduletothelisttmp(tmpuselocallist->u_usemodule);
+           tmplistmodule1 = tmpuselocallist->suiv;
+           free(tmpuselocallist);
+           tmpuselocallist = tmplistmodule1;
+        }
+        tmplistmodule = tmplistmodule->suiv;
+     }
+
+     tmplistmodule = listofmoduletmp;
+     while ( tmplistmodule )
+     {
+        Readthedependlistofmoduleused(tmplistmodule->u_usemodule);
+        while( tmpuselocallist )
+        {
+           Addmoduletothelisttmp(tmpuselocallist->u_usemodule);
+           tmplistmodule1 = tmpuselocallist->suiv;
+           free(tmpuselocallist);
+           tmpuselocallist = tmplistmodule1;
+        }
+        tmplistmodule = tmplistmodule->suiv;
+     }
+
+
+
+     tmplistmodule = listofmoduletmp;
+     while ( tmplistmodule )
+     {
+        /* check if the file .depend<u_usemodule> exist                       */
+        List_ModuleUsedInModuleUsed_Var = Readthedependfile
+                   (tmplistmodule->u_usemodule,List_ModuleUsedInModuleUsed_Var);
+
+        List_GlobParamModuleUsedInModuleUsed_Var = ReaddependParameterList
+          (tmplistmodule->u_usemodule,List_GlobParamModuleUsedInModuleUsed_Var);
+        tmplistmodule = tmplistmodule->suiv;
+     }
+  }
+}
+
+/******************************************************************************/
+/*                      Add_NameOfModuleUsed_1                                */
+/******************************************************************************/
+/* This subroutine is used to add a record to a list of struct                */
+/* listusemodule                                                              */
+/******************************************************************************/
+/*                                                                            */
+/*       subroutine sub ... USE mod1 ===> insert in list                      */
+/*        _______     _______     _______     _______     _______             */
+/*       +      +    +      +    +      +    +      +    +      +             */
+/*       + NEW  +--->+ list +--->+ list +--->+ list +--->+ list +             */
+/*       +______+    +______+    +______+    +______+    +______+             */
+/*                                                                            */
+/*       list =  List_NameOfModuleUsed                                        */
+/*                                                                            */
+/******************************************************************************/
+void Add_NameOfModuleUsed_1(char *name)
+{
+  listusemodule *newmodule;
+  listusemodule *parcours;
+  int out;
+
+  if ( firstpass == 1 )
+  {
+     newmodule =(listusemodule *)malloc(sizeof(listusemodule));
+     strcpy(newmodule->u_usemodule,name);
+     Save_Length(name,16);
+     strcpy(newmodule->u_charusemodule,charusemodule);
+     Save_Length(charusemodule,17);
+     strcpy(newmodule->u_modulename,curmodulename);
+     Save_Length(curmodulename,19);
+     strcpy(newmodule->u_cursubroutine,subroutinename);
+     Save_Length(subroutinename,18);
+     newmodule->u_firstuse = 1 ;
+     newmodule->suiv = NULL;
+
+     if ( !List_NameOfModuleUsed)
+     {
+         List_NameOfModuleUsed = newmodule ;
+     }
+     else
+     {
+    parcours = List_NameOfModuleUsed;
+    while ( parcours && newmodule->u_firstuse == 1 )
+    {
+       if ( !strcasecmp(name,parcours->u_usemodule) )
+       {
+          newmodule->u_firstuse = 0 ;
+       }
+       parcours=parcours->suiv;
+    }
+    /* we can not add the same module twice for the same subroutine           */
+    parcours = List_NameOfModuleUsed;
+    out = 0 ;
+    while ( parcours && out == 0 )
+    {
+       if ( !strcasecmp(name,parcours->u_usemodule) &&
+            !strcasecmp(subroutinename,parcours->u_cursubroutine)
+           )
+       {
+          out = 1 ;
+          free(newmodule);
+       }
+       else parcours=parcours->suiv;
+    }
+    if ( out == 0 )
+    {
+       newmodule->suiv = List_NameOfModuleUsed;
+       List_NameOfModuleUsed = newmodule;
+    }
+  }
+  }
+}
+
+
+/******************************************************************************/
+/*                        Addmoduletothelist                                  */
+/******************************************************************************/
+/* This subroutine is used to add a record to a list of struct                */
+/* listusemodule                                                              */
+/******************************************************************************/
+/*                                                                            */
+/*       subroutine sub ... USE mod1 ===> insert in list                      */
+/*        _______     _______     _______     _______     _______             */
+/*       +      +    +      +    +      +    +      +    +      +             */
+/*       + NEW  +--->+ list +--->+ list +--->+ list +--->+ list +             */
+/*       +______+    +______+    +______+    +______+    +______+             */
+/*                                                                            */
+/*       list =  List_NameOfModuleUsed                                     */
+/*                                                                            */
+/******************************************************************************/
+void Addmoduletothelist(char *name)
+{
+  listusemodule *newmodule;
+  listusemodule *parcours;
+  int out;
+
+     newmodule =(listusemodule *)malloc(sizeof(listusemodule));
+     strcpy(newmodule->u_usemodule,name);
+     Save_Length(name,16);
+     strcpy(newmodule->u_charusemodule,charusemodule);
+     Save_Length(charusemodule,17);
+     strcpy(newmodule->u_cursubroutine,subroutinename);
+     Save_Length(subroutinename,18);
+     newmodule->u_firstuse = 1 ;
+     newmodule->suiv = NULL;
+
+     if ( !List_NameOfModuleUsed)
+     {
+         List_NameOfModuleUsed = newmodule ;
+     }
+     else
+     {
+    parcours = List_NameOfModuleUsed;
+    while ( parcours && newmodule->u_firstuse == 1 )
+    {
+       if ( !strcasecmp(name,parcours->u_usemodule) )
+       {
+          newmodule->u_firstuse = 0 ;
+       }
+       parcours=parcours->suiv;
+    }
+    /* we can not add the same module twice for the same subroutine           */
+    parcours = List_NameOfModuleUsed;
+    out = 0 ;
+    while ( parcours && out == 0 )
+    {
+       if ( !strcasecmp(name,parcours->u_usemodule) &&
+            !strcasecmp(subroutinename,parcours->u_cursubroutine)
+           )
+       {
+          out = 1 ;
+          free(newmodule);
+       }
+       else parcours=parcours->suiv;
+    }
+    if ( out == 0 )
+    {
+       newmodule->suiv = List_NameOfModuleUsed;
+       List_NameOfModuleUsed = newmodule;
+    }
+  }
+}
+
+
+/******************************************************************************/
+/*                        WriteUsemoduleDeclaration                           */
+/******************************************************************************/
+/* Firstpass 0                                                                */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+void WriteUsemoduleDeclaration()
+{
+  listusemodule *newmodule;
+
+  newmodule = List_NameOfModuleUsed;
+  fprintf(fortranout,"\n");
+
+  while ( newmodule )
+  {
+     if ( !strcasecmp(newmodule->u_cursubroutine,subroutinename) )
+     {
+             fprintf(fortranout,"      USE %s \n"
+                                                   ,newmodule->u_charusemodule);
+     }
+        newmodule = newmodule ->suiv;
+  }
+}
Index: /vendors/AGRIF/r_00/LIB/WorkWithlistvarindoloop.c
===================================================================
--- /vendors/AGRIF/r_00/LIB/WorkWithlistvarindoloop.c	(revision 1902)
+++ /vendors/AGRIF/r_00/LIB/WorkWithlistvarindoloop.c	(revision 1902)
@@ -0,0 +1,1865 @@
+/******************************************************************************/
+/*                                                                            */
+/*     CONV (converter) for Agrif (Adaptive Grid Refinement In Fortran)       */
+/*                                                                            */
+/* Copyright or    or Copr. Laurent Debreu (Laurent.Debreu@imag.fr)           */
+/*                        Cyril Mazauric (Cyril_Mazauric@yahoo.fr)            */
+/* This software is governed by the CeCILL-C license under French law and     */
+/* abiding by the rules of distribution of free software.  You can  use,      */
+/* modify and/ or redistribute the software under the terms of the CeCILL-C   */
+/* license as circulated by CEA, CNRS and INRIA at the following URL          */
+/* "http://www.cecill.info".                                                  */
+/*                                                                            */
+/* As a counterpart to the access to the source code and  rights to copy,     */
+/* modify and redistribute granted by the license, users are provided only    */
+/* with a limited warranty  and the software's author,  the holder of the     */
+/* economic rights,  and the successive licensors  have only  limited         */
+/* liability.                                                                 */
+/*                                                                            */
+/* In this respect, the user's attention is drawn to the risks associated     */
+/* with loading,  using,  modifying and/or developing or reproducing the      */
+/* software by the user in light of its specific status of free software,     */
+/* that may mean  that it is complicated to manipulate,  and  that  also      */
+/* therefore means  that it is reserved for developers  and  experienced      */
+/* professionals having in-depth computer knowledge. Users are therefore      */
+/* encouraged to load and test the software's suitability as regards their    */
+/* requirements in conditions enabling the security of their systems and/or   */
+/* data to be ensured and,  more generally, to use and operate it in the      */
+/* same conditions as regards security.                                       */
+/*                                                                            */
+/* The fact that you are presently reading this means that you have had       */
+/* knowledge of the CeCILL-C license and that you accept its terms.           */
+/******************************************************************************/
+/* version 1.7                                                                */
+/******************************************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "decl.h"
+
+/******************************************************************************/
+/*                         Add_UsedInSubroutine_Var_1                         */
+/******************************************************************************/
+/* Firstpass 1                                                                */
+/* We should complete the List_UsedInSubroutine_Var                           */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+void Add_UsedInSubroutine_Var_1 (char *ident)
+{
+  listvar *newvar;
+  listvar *tmpvar;
+  int out;
+
+   /* In the first pass we record all variables presents in the do loop       */
+   if (firstpass == 1 && insubroutinedeclare == 1 )
+   {
+
+  if ( !List_UsedInSubroutine_Var )
+  {
+      newvar=(listvar *)malloc(sizeof(listvar));
+      newvar->var=(variable *)malloc(sizeof(variable));
+      /*                                                                      */
+      Init_Variable(newvar->var);
+      /*                                                                      */
+      newvar->suiv = NULL;
+      strcpy(newvar->var->v_nomvar,ident);
+      Save_Length(ident,4);
+      strcpy(newvar->var->v_modulename,curmodulename);
+      Save_Length(curmodulename,6);
+      strcpy(newvar->var->v_commoninfile,mainfile);
+      Save_Length(mainfile,10);
+      strcpy(newvar->var->v_subroutinename,subroutinename);
+      Save_Length(subroutinename,11);
+      newvar->var->v_pointedvar=pointedvar;
+      List_UsedInSubroutine_Var = newvar ;
+  }
+  else
+  {
+      /* We should verify that this variable did not added                    */
+      tmpvar = List_UsedInSubroutine_Var;
+      out = 0 ;
+      while (tmpvar && out == 0 )
+      {
+         if ( !strcasecmp(tmpvar->var->v_nomvar,ident) &&
+              !strcasecmp(tmpvar->var->v_subroutinename,subroutinename))
+                                                                      out  = 1 ;
+         else tmpvar = tmpvar->suiv;
+      }
+      if ( out == 0 )
+      {
+         newvar=(listvar *)malloc(sizeof(listvar));
+         newvar->var=(variable *)malloc(sizeof(variable));
+         /*                                                                   */
+         Init_Variable(newvar->var);
+         /*                                                                   */
+         strcpy(newvar->var->v_nomvar,ident);
+         Save_Length(ident,4);
+         strcpy(newvar->var->v_commoninfile,mainfile);
+         Save_Length(mainfile,10);
+         strcpy(newvar->var->v_modulename,curmodulename);
+         Save_Length(curmodulename,6);
+         strcpy(newvar->var->v_subroutinename,subroutinename);
+         Save_Length(subroutinename,11);
+         newvar->var->v_pointedvar=pointedvar;
+         newvar->suiv = List_UsedInSubroutine_Var;
+         List_UsedInSubroutine_Var = newvar;
+      }
+  }
+
+   }
+}
+
+/******************************************************************************/
+/*                        AJOUTEVARINDOLOOP_DEFINEDIMENSION                   */
+/******************************************************************************/
+/* This subroutine is used to add a listvar to  List_UsedInSubroutine_Var     */
+/******************************************************************************/
+void ajoutevarindoloop_definedimension (char *name)
+{
+  listvar *newvar;
+  listvar *tmpvar;
+  listvar *tmpvarprec;
+  int out;
+  int tablemeet;
+
+  if ( !List_UsedInSubroutine_Var )
+  {
+      newvar=(listvar *)malloc(sizeof(listvar));
+      newvar->var=(variable *)malloc(sizeof(variable));
+      /*                                                                      */
+      Init_Variable(newvar->var);
+      /*                                                                      */
+      newvar->suiv = NULL;
+      strcpy(newvar->var->v_nomvar,name);
+      Save_Length(name,4);
+      strcpy(newvar->var->v_modulename,curmodulename);
+      Save_Length(curmodulename,6);
+      strcpy(newvar->var->v_commoninfile,mainfile);
+      Save_Length(mainfile,10);
+      strcpy(newvar->var->v_subroutinename,subroutinename);
+      Save_Length(subroutinename,11);
+      newvar->var->v_pointedvar=pointedvar;
+      List_UsedInSubroutine_Var = newvar ;
+  }
+  else
+  {
+      /* We should verify that this variable did not added                    */
+      tmpvarprec = (listvar *)NULL;
+      tmpvar = List_UsedInSubroutine_Var;
+      out = 0 ;
+      tablemeet = 0 ;
+      while (tmpvar && out == 0 )
+      {
+         if ( tablemeet == 0 && tmpvar->var->v_nbdim != 0 ) tablemeet = 1 ;
+         /*                                                                   */
+         if ( !strcasecmp(tmpvar->var->v_nomvar,name) &&
+              !strcasecmp(tmpvar->var->v_subroutinename,subroutinename))
+         {
+            out  = 1 ;
+            /* if this variable has been define before a table we do nothing  */
+            /*    else we should remove it                                    */
+            if ( tablemeet == 1 )
+            {
+               tmpvarprec->suiv = tmpvar -> suiv;
+               out = 2;
+            }
+         }
+         else
+         {
+            tmpvarprec = tmpvar;
+            tmpvar = tmpvar->suiv;
+         }
+      }
+      if ( out == 2 || out == 0 )
+      {
+         newvar=(listvar *)malloc(sizeof(listvar));
+         newvar->var=(variable *)malloc(sizeof(variable));
+         /*                                                                   */
+         Init_Variable(newvar->var);
+         /*                                                                   */
+         strcpy(newvar->var->v_nomvar,name);
+         Save_Length(name,4);
+         strcpy(newvar->var->v_modulename,curmodulename);
+         Save_Length(curmodulename,6);
+         strcpy(newvar->var->v_commoninfile,mainfile);
+         Save_Length(mainfile,10);
+         strcpy(newvar->var->v_subroutinename,subroutinename);
+         Save_Length(subroutinename,11);
+         newvar->var->v_pointedvar=pointedvar;
+         /* we should find this new variable to know the tabvars indice       */
+         if ( variableisglobal(newvar, List_Global_Var) == 1 )
+         {
+            newvar->suiv = List_UsedInSubroutine_Var;
+            List_UsedInSubroutine_Var = newvar;
+         }
+         else if ( variableisglobal(newvar, List_ModuleUsed_Var) == 1 )
+         {
+            newvar->suiv = List_UsedInSubroutine_Var;
+            List_UsedInSubroutine_Var = newvar;
+         }
+         else if ( variableisglobal(newvar, List_Common_Var) == 1 )
+         {
+            newvar->suiv = List_UsedInSubroutine_Var;
+            List_UsedInSubroutine_Var = newvar;
+         }
+         else
+         {
+            free(newvar);
+         }
+     }
+  }
+}
+
+/******************************************************************************/
+/*                        ModifyThelistvarindoloop                            */
+/******************************************************************************/
+/* This subroutine is to give the old name to the which has been              */
+/* declared as USE MOD, U => V in this case we should replace in the          */
+/* name V by the old name U in the List_UsedInSubroutine_Var                  */
+/******************************************************************************/
+void  ModifyThelistvarindoloop()
+{
+  listvar *newvar;
+
+  newvar = List_UsedInSubroutine_Var;
+  while ( newvar )
+  {
+     if ( strcasecmp(newvar->var->v_oldname,"") )
+     {
+        strcpy(newvar->var->v_nomvar,newvar->var->v_oldname);
+     }
+     newvar = newvar->suiv;
+  }
+}
+
+/******************************************************************************/
+/*                          CompleteThelistvarindoloop                        */
+/******************************************************************************/
+/* This subroutine is to add to the List_UsedInSubroutine_Var all variables   */
+/* which has been declared as USE MOD, U => V in this case we should replace  */
+/* in the List_UsedInSubroutine_Var the word U by the word V                  */
+/******************************************************************************/
+void  CompleteThelistvarindoloop()
+{
+  listvar *newvar;
+  listvarpointtovar *pointtmplist;
+  listcouple *coupletmp;
+  int outvar;
+
+  pointtmplist = List_CouplePointed_Var;
+  while ( pointtmplist )
+  {
+      coupletmp = pointtmplist->t_couple;
+      while ( coupletmp )
+      {
+         newvar = List_UsedInSubroutine_Var;
+         outvar = 0 ;
+         while ( newvar && outvar == 0)
+         {
+           /* we should find the same variable name in the same subroutine    */
+           if ( !strcasecmp(newvar->var->v_nomvar,coupletmp->c_namevar) &&
+                !strcasecmp(newvar->var->v_subroutinename,
+                                       pointtmplist->t_cursubroutine) &&
+                 strcasecmp(coupletmp->c_namepointedvar,"")
+              )
+           {
+              outvar = 1;
+              strcpy(newvar->var->v_oldname,newvar->var->v_nomvar);
+              strcpy(newvar->var->v_nomvar,coupletmp->c_namepointedvar);
+           }
+           else
+           {
+              newvar = newvar->suiv;
+           }
+         }
+         coupletmp = coupletmp->suiv;
+     }
+     pointtmplist = pointtmplist->suiv;
+  }
+}
+
+/******************************************************************************/
+/*                             CopyRecord                                     */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+void CopyRecord(variable *var1,variable *var2)
+{
+   if ( !strcasecmp(var1->v_typevar,"") )
+                                        strcpy(var1->v_typevar,var2->v_typevar);
+   else strcpy(var2->v_typevar,var1->v_typevar);
+
+   if ( !strcasecmp(var1->v_oldname,"") )
+                                        strcpy(var1->v_oldname,var2->v_oldname);
+   else strcpy(var2->v_oldname,var1->v_oldname);
+
+   if ( !strcasecmp(var1->v_dimchar,"") )
+                                        strcpy(var1->v_dimchar,var2->v_dimchar);
+   else strcpy(var2->v_dimchar,var1->v_dimchar);
+
+   if ( !strcasecmp(var1->v_commonname,"") )
+                                  strcpy(var1->v_commonname,var2->v_commonname);
+   else strcpy(var2->v_commonname,var1->v_commonname);
+
+   if ( !strcasecmp(var1->v_vallengspec,"") )
+                                strcpy(var1->v_vallengspec,var2->v_vallengspec);
+   else strcpy(var2->v_vallengspec,var1->v_vallengspec);
+
+   if ( !strcasecmp(var1->v_nameinttypename,"") )
+                        strcpy(var1->v_nameinttypename,var2->v_nameinttypename);
+   else strcpy(var2->v_nameinttypename,var1->v_nameinttypename);
+          
+   if ( !strcasecmp(var1->v_commoninfile,"") )
+                              strcpy(var1->v_commoninfile,var2->v_commoninfile);
+   else strcpy(var2->v_commoninfile,var1->v_commoninfile);
+
+   if ( !strcasecmp(var1->v_precision,"") )
+                                    strcpy(var1->v_precision,var2->v_precision);
+   else strcpy(var2->v_precision,var1->v_precision);
+
+   if ( !strcasecmp(var1->v_initialvalue,"") )
+                              strcpy(var1->v_initialvalue,var2->v_initialvalue);
+   else strcpy(var2->v_initialvalue,var1->v_initialvalue);
+
+   if ( !strcasecmp(var1->v_IntentSpec,"") )
+                                  strcpy(var1->v_IntentSpec,var2->v_IntentSpec);
+   else strcpy(var2->v_IntentSpec,var1->v_IntentSpec);
+
+   if ( !strcasecmp(var1->v_readedlistdimension,"") )
+                strcpy(var1->v_readedlistdimension,var2->v_readedlistdimension);
+   else strcpy(var2->v_readedlistdimension,var1->v_readedlistdimension);
+
+   if ( var1->v_dimension ) var2->v_dimension = var1->v_dimension ;
+   else var1->v_dimension = var2->v_dimension ;
+
+   if ( var1->v_nbdim == 0 ) var1->v_nbdim = var2->v_nbdim ;
+   else var2->v_nbdim = var1->v_nbdim ;
+
+   if ( var1->v_common == 0 ) var1->v_common = var2->v_common ;
+   else var2->v_common = var1->v_common ;
+
+   if ( var1->v_positioninblock == 0 ) var1->v_positioninblock =
+                                                       var2->v_positioninblock ;
+   else var2->v_positioninblock = var1->v_positioninblock ;
+
+   if ( var1->v_module == 0 ) var1->v_module = var2->v_module ;
+   else var2->v_module = var1->v_module ;
+
+   if ( var1->v_save == 0 ) var1->v_save = var2->v_save ;
+   else var2->v_save = var1->v_save ;
+
+   if ( var1->v_VariableIsParameter == 0 )
+                     var1->v_VariableIsParameter = var2->v_VariableIsParameter ;
+   else var2->v_VariableIsParameter = var1->v_VariableIsParameter ;
+
+   if ( var1->v_indicetabvars == 0 )
+                                 var1->v_indicetabvars = var2->v_indicetabvars ;
+   else var2->v_indicetabvars = var1->v_indicetabvars ;
+
+   if ( var1->v_ExternalDeclare == 0 )
+                             var1->v_ExternalDeclare = var2->v_ExternalDeclare ;
+   else var2->v_ExternalDeclare = var1->v_ExternalDeclare ;
+
+   if ( var1->v_pointedvar == 0 ) var1->v_pointedvar = var2->v_pointedvar ;
+   else var2->v_pointedvar = var1->v_pointedvar ;
+
+   if ( var1->v_dimensiongiven == 0 )
+                                var1->v_dimensiongiven = var2->v_dimensiongiven;
+   else var2->v_dimensiongiven = var1->v_dimensiongiven ;
+
+   if ( var1->v_c_star == 0 ) var1->v_c_star = var2->v_c_star;
+   else var2->v_c_star = var1->v_c_star ;
+
+   if ( var1->v_pointerdeclare == 0 )
+                               var1->v_pointerdeclare = var2->v_pointerdeclare ;
+   else var2->v_pointerdeclare = var1->v_pointerdeclare ;
+
+
+   if ( var1->v_notgrid == 0 ) var1->v_notgrid = var2->v_notgrid ;
+   else var2->v_notgrid = var1->v_notgrid;
+
+   if ( var1->v_optionaldeclare == 0 )
+                              var1->v_optionaldeclare = var2->v_optionaldeclare;
+   else var2->v_optionaldeclare = var1->v_optionaldeclare ;
+
+   if ( var1->v_allocatable == 0 ) var1->v_allocatable = var2->v_allocatable ;
+   else var2->v_allocatable = var1->v_allocatable ;
+
+   if ( var1->v_dimsempty == 0 ) var1->v_dimsempty = var2->v_dimsempty ;
+   else var2->v_dimsempty = var1->v_dimsempty ;
+}
+
+
+/******************************************************************************/
+/*                      Update_List_Subroutine_Var                            */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+void Update_List_Subroutine_Var(listvar *list_to_modify)
+{
+   listvar *parcours;
+   listvar *parcoursprec;
+   listvar *parcours1;
+   int out;
+
+   parcoursprec = (listvar *)NULL;
+   parcours = list_to_modify;
+   while( parcours )
+   {
+      /* looking in List_SubroutineDeclaration_Var                            */
+      parcours1 = List_SubroutineDeclaration_Var;
+      out = 0;
+      while ( parcours1 && out == 0 )
+      {
+         if ( !strcasecmp(parcours->var->v_nomvar,
+                          parcours1->var->v_nomvar)         &&
+              !strcasecmp(parcours->var->v_subroutinename,
+                          parcours1->var->v_subroutinename) &&
+              !strcasecmp(parcours->var->v_modulename,
+                          parcours1->var->v_modulename)
+            ) out = 1;
+         else parcours1 = parcours1->suiv;
+      }
+      /* if variable has been found                                           */
+      
+      if ( out == 1 ) CopyRecord(parcours->var,parcours1->var);
+      
+      /* looking in List_Dimension_Var                                        */
+      if (out == 0 )
+      {
+        parcours1 = List_Dimension_Var;
+        out = 0;
+        while ( parcours1 && out == 0 )
+        {
+           if ( !strcasecmp(parcours->var->v_nomvar,
+                            parcours1->var->v_nomvar)         &&
+                !strcasecmp(parcours->var->v_subroutinename,
+                            parcours1->var->v_subroutinename) &&
+                !strcasecmp(parcours->var->v_modulename,
+                            parcours1->var->v_modulename)
+              ) out = 1;
+           else
+           {
+              parcoursprec = parcours1;
+              parcours1 = parcours1->suiv;
+           }
+        }
+        /* if variable has been found                                         */
+        
+        if ( out == 1 )
+        {
+           CopyRecord(parcours->var,parcours1->var);
+           /* we should remove this record from the List_Dimension_Var        */
+           if ( parcours1 == List_Dimension_Var )
+           {
+              List_Dimension_Var = List_Dimension_Var -> suiv;
+           }
+           else
+           {
+              parcoursprec->suiv = parcours1 -> suiv;
+           }
+        }
+      }
+      /*                                                                      */
+      parcours = parcours->suiv;
+   }
+}
+
+void Update_List_Global_Var_From_List_Save_Var()
+{
+   listvar *parcours;
+   listvar *newvar;
+   char ligne[LONG_C];
+
+   parcours = List_Save_Var;
+   while( parcours )
+   {
+      if ( !strcasecmp(parcours->var->v_modulename,"") )
+      /* Save in subroutine which is not defined in a module                  */
+      {
+         newvar = (listvar *)malloc(sizeof(listvar));
+         newvar->var = (variable *)malloc(sizeof(variable));
+         /*                                                                   */
+         Init_Variable(newvar->var);
+         /*                                                                   */
+         newvar->suiv = NULL;
+         CopyRecord(parcours->var,newvar->var);
+         strcpy(newvar->var->v_subroutinename,parcours->var->v_subroutinename);
+         strcpy(newvar->var->v_nomvar,parcours->var->v_nomvar);
+         sprintf(ligne,"save_%s",parcours->var->v_subroutinename);
+         Add_NameOfCommon_1(ligne);
+         strcpy(newvar->var->v_commonname,ligne);
+         Save_Length(ligne,7);
+         List_Common_Var = AddListvarToListvar(newvar,List_Common_Var,1);
+      }
+      else
+      /* Save in subroutine which is defined in a module                      */
+      {
+         newvar = (listvar *)malloc(sizeof(listvar));
+         newvar->var = (variable *)malloc(sizeof(variable));
+         /*                                                                   */
+         Init_Variable(newvar->var);
+         /*                                                                   */
+         newvar->suiv = NULL;
+         CopyRecord(parcours->var,newvar->var);
+         strcpy(newvar->var->v_subroutinename,"");
+         strcpy(newvar->var->v_nomvar,parcours->var->v_nomvar);
+         strcpy(newvar->var->v_modulename,parcours->var->v_modulename);
+         List_Global_Var = AddListvarToListvar(newvar,List_Global_Var,1);
+      }
+      parcours = parcours->suiv;
+   }
+}
+
+/******************************************************************************/
+/*                      Update_List_From_Common_Var                           */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+void Update_List_From_Common_Var(listvar *list_to_modify)
+{
+   listvar *parcours;
+   listvar *parcours1;
+   int out;
+   parcours = list_to_modify;
+   while( parcours )
+   {
+      /* looking in List_Global_Var                                           */
+      parcours1 = List_Common_Var;
+      out = 0;
+      while ( parcours1 && out == 0 )
+      {
+         if ( !strcasecmp(parcours->var->v_nomvar,
+                          parcours1->var->v_nomvar)         &&
+              !strcasecmp(parcours->var->v_subroutinename,
+                          parcours1->var->v_subroutinename)
+            ) out = 1;
+         else parcours1 = parcours1->suiv;
+      }
+      /* if variable has been found                                           */
+      if ( out == 1 )
+      {
+         strcpy(parcours->var->v_commoninfile,parcours1->var->v_commoninfile);
+         CopyRecord(parcours->var,parcours1->var);
+      }
+      parcours = parcours->suiv;
+   }
+}
+
+/******************************************************************************/
+/*                          Update_List_Var                                   */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+void Update_List_Var(listvar *list_to_modify)
+{
+   listvar *parcours;
+   listvar *parcours1;
+   int out;
+   
+   parcours = list_to_modify;
+   while( parcours )
+   {
+      /* looking in List_Global_Var                                           */
+      
+      out = 0;
+      if (list_to_modify != List_SubroutineDeclaration_Var) {
+      parcours1 = List_Global_Var;
+      while ( parcours1 && out == 0 )
+      {
+         if ( !strcasecmp(parcours->var->v_nomvar,
+                          parcours1->var->v_nomvar)         &&
+              !strcasecmp(parcours->var->v_modulename,
+                          parcours1->var->v_modulename)
+            ) out = 1;
+         else parcours1 = parcours1->suiv;
+      }
+      }
+          
+      /* if variable has been found                                           */
+      if ( out == 1 ) {
+      CopyRecord(parcours->var,parcours1->var);
+      }
+      /* looking in List_SubroutineDeclaration_Var                            */
+      else
+      {
+         parcours1 = List_SubroutineDeclaration_Var ;
+         out = 0;
+         while ( parcours1 && out == 0 )
+         {
+            if ( !strcasecmp(parcours->var->v_nomvar,
+                             parcours1->var->v_nomvar)         &&
+                 !strcasecmp(parcours->var->v_subroutinename,
+                             parcours1->var->v_subroutinename) &&
+                 !strcasecmp(parcours->var->v_modulename,
+                             parcours1->var->v_modulename)
+               ) out = 1;
+            else parcours1 = parcours1->suiv;
+         }
+             
+         /* if variable has been found                                        */
+         if ( out == 1 ) {
+         CopyRecord(parcours->var,parcours1->var);
+         }
+         else
+         {
+            parcours1 = List_Common_Var ;
+            out = 0;
+            while ( parcours1 && out == 0 )
+            {
+               if ( !strcasecmp(parcours->var->v_nomvar,
+                                parcours1->var->v_nomvar)         &&
+                    !strcasecmp(parcours->var->v_subroutinename,
+                                parcours1->var->v_subroutinename) &&
+                    !strcasecmp(parcours->var->v_modulename,
+                                parcours1->var->v_modulename)
+                  ) out = 1;
+               else parcours1 = parcours1->suiv;
+            }
+            /* if variable has been found                                     */
+            if ( out == 1 ) CopyRecord(parcours->var,parcours1->var);       
+         }
+      }
+      parcours = parcours->suiv;
+   }
+   
+}
+
+
+void List_UsedInSubroutine_Var_Update_From_Module_Used()
+{
+   listvar *parcours;
+   listvar *parcours3;
+   listusemodule *parcours2;
+   int out;
+
+   parcours = List_UsedInSubroutine_Var;
+   while( parcours )
+   {
+      out = 0 ;
+      if ( parcours->var->v_indicetabvars == 0 )
+      {
+         parcours2 = List_NameOfModuleUsed;
+         while( parcours2 )
+         {
+            if ( !strcasecmp(parcours2->u_cursubroutine,"") &&
+                 !strcasecmp(parcours2->u_modulename,
+                             parcours->var->v_modulename)
+               )
+            {
+               parcours3 = List_Global_Var;
+               out = 0 ;
+               while ( parcours3 && out == 0 )
+               {
+                  if ( !strcasecmp(parcours->var->v_nomvar,
+                                   parcours3->var->v_nomvar)
+                     ) out = 1 ;
+                  else parcours3 = parcours3->suiv;
+               }
+               if ( out == 1 ) CopyRecord(parcours->var,parcours3->var);
+            }
+            else if ( !strcasecmp(parcours2->u_cursubroutine,
+                             parcours->var->v_subroutinename) &&
+                 !strcasecmp(parcours2->u_modulename,
+                             parcours->var->v_modulename)
+               )
+            {
+               parcours3 = List_Global_Var;
+               out = 0 ;
+               while ( parcours3 && out == 0 )
+               {
+                  if ( !strcasecmp(parcours->var->v_nomvar,
+                                   parcours3->var->v_nomvar)
+                     ) out = 1 ;
+                  else parcours3 = parcours3->suiv;
+               }
+               if ( out == 1 ) CopyRecord(parcours->var,parcours3->var);
+            }
+            parcours2 = parcours2->suiv;
+         }
+         /*                                                                   */
+         if ( out == 0 )
+         {
+            parcours3 = List_ModuleUsed_Var;
+            out = 0 ;
+            while ( parcours3 && out == 0 )
+            {
+               if ( !strcasecmp(parcours->var->v_nomvar,
+                                parcours3->var->v_nomvar)
+                  ) out = 1 ;
+               else parcours3 = parcours3->suiv;
+            }
+            if ( out == 1 ) CopyRecord(parcours->var,parcours3->var);
+         }
+         /*                                                                   */
+      }
+      parcours = parcours->suiv;
+   }
+}
+
+
+
+/******************************************************************************/
+/*                       Update_NotGridDepend_Var                             */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+void Update_NotGridDepend_Var(listvar *list_to_modify)
+{
+   listvar *parcours;
+   listvar *parcours1;
+   int out;
+
+   parcours = list_to_modify;
+   while( parcours )
+   {
+      /* looking in List_Global_Var                                           */
+      parcours1 = List_Global_Var;
+      out = 0;
+      while ( parcours1 && out == 0 )
+      {
+         if ( !strcasecmp(parcours->var->v_nomvar,
+                          parcours1->var->v_nomvar)
+            ) out = 1;
+         else parcours1 = parcours1->suiv;
+      }
+      /* if variable has been found                                           */
+      if ( out == 1 )
+      {
+         CopyRecord(parcours->var,parcours1->var);
+         strcpy(parcours->var->v_subroutinename,
+                parcours1->var->v_subroutinename);
+         strcpy(parcours->var->v_modulename,parcours1->var->v_modulename);
+      }
+      parcours = parcours->suiv;
+   }
+}
+
+int LookingForVariableInList(listvar *listin,variable *var)
+{
+   listvar *parcours1;
+   int out;
+
+   parcours1 = listin;
+   out = 0 ;
+   while ( parcours1 && out == 0 )
+   {
+      if ( !strcasecmp(var->v_nomvar,parcours1->var->v_nomvar)                &&
+           !strcasecmp(var->v_subroutinename,parcours1->var->v_subroutinename)&&
+           !strcasecmp(var->v_modulename,parcours1->var->v_modulename)        &&
+                       var->v_save == 0                                       &&
+                       var->v_common == 0
+         ) out = 1 ;
+      else parcours1 = parcours1 -> suiv;
+   }
+
+   return out;
+}
+
+int LookingForVariableInListGlobal(listvar *listin,variable *var)
+{
+   listvar *parcours1;
+   int out;
+
+   parcours1 = listin;
+   out = 0 ;
+   while ( parcours1 && out == 0 )
+   {
+      if ( !strcasecmp(var->v_nomvar,parcours1->var->v_nomvar)                &&
+           !strcasecmp(var->v_subroutinename,parcours1->var->v_subroutinename)&&
+           !strcasecmp(var->v_modulename,parcours1->var->v_modulename)
+         ) out = 1 ;
+      else parcours1 = parcours1 -> suiv;
+   }
+
+   return out;
+}
+
+int LookingForVariableInListName(listvar *listin,char *name)
+{
+   listvar *parcours1;
+   int out;
+
+   parcours1 = listin;
+   out = 0 ;
+   while ( parcours1 && out == 0 )
+   {
+      if ( !strcasecmp(name,parcours1->var->v_nomvar) &&
+           ( !strcasecmp(subroutinename,parcours1->var->v_subroutinename) ||
+             !strcasecmp(subroutinename,"") )
+         ) out = 1 ;
+      else parcours1 = parcours1 -> suiv;
+   }
+
+   return out;
+}
+
+int LookingForVariableInListGlob(listvar *listin,variable *var)
+{
+   listvar *parcours1;
+   int out;
+
+   parcours1 = listin;
+   out = 0 ;
+   while ( parcours1 && out == 0 )
+   {
+      if ( !strcasecmp(var->v_nomvar,parcours1->var->v_nomvar)                &&
+           !strcasecmp(var->v_modulename,parcours1->var->v_modulename)
+         ) out = 1 ;
+      else parcours1 = parcours1 -> suiv;
+   }
+
+   return out;
+}
+
+int LookingForVariableInListParamGlob(listparameter *listin,variable *var)
+{
+   listparameter *parcours1;
+   int out;
+
+   parcours1 = listin;
+   out = 0 ;
+   while ( parcours1 && out == 0 )
+   {
+      if ( !strcasecmp(var->v_nomvar,parcours1->p_name)
+         ) out = 1 ;
+      else parcours1 = parcours1 -> suiv;
+   }
+
+   return out;
+}
+
+void UpdateListDeclarationWithDimensionList()
+{
+   List_SubroutineDeclaration_Var = AddListvarToListvar(List_Dimension_Var,
+                                              List_SubroutineDeclaration_Var,1);
+}
+
+
+/* Remove from List_UsedInSubroutine_Var all variables comming from :         */
+/*       - List_SubroutineArgument_Var                                        */
+/*       - List_SubroutineDeclaration_Var                                     */
+/*       - List_Parameter_Var                                                 */
+/*       - List_FunctionType_Var                                              */
+/*       - List_GlobalParameter_Var                                           */
+/*       -                                                                    */
+/*       -                                                                    */
+void Clean_List_UsedInSubroutine_Var()
+{
+   listvar *parcours;
+   listvar *parcoursprec;
+   int remove;
+    
+        
+   parcoursprec = (listvar *)NULL;
+   parcours = List_UsedInSubroutine_Var;
+   while ( parcours )
+   {
+      /*                                                                      */
+      remove = LookingForVariableInListGlobal(List_SubroutineArgument_Var,
+                                                                 parcours->var);
+      if ( remove == 0 )
+           remove = LookingForVariableInList(List_SubroutineDeclaration_Var,
+                                                                 parcours->var);
+      if ( remove == 0 )
+           remove = LookingForVariableInList(List_Parameter_Var,
+                                                                 parcours->var);
+      if ( remove == 0 )
+           remove = LookingForVariableInList(List_FunctionType_Var,
+                                                                 parcours->var);
+      if ( remove == 0 )
+           remove = LookingForVariableInListGlob(List_GlobalParameter_Var,
+                                                                 parcours->var);
+      if ( remove == 0 )
+           remove = LookingForVariableInListParamGlob(
+                                    List_GlobParamModuleUsed_Var,parcours->var);
+      if ( remove == 0 )
+      {
+         if ( VariableIsInList(parcours,List_Global_Var)                 == 1 ||
+              VariableIsInListCommon(parcours,List_Common_Var)           == 1 ||
+              VariableIsInList(parcours,List_ModuleUsed_Var)             == 1 ||
+              VariableIsInList(parcours,List_ModuleUsedInModuleUsed_Var) == 1
+            ) remove = 0;
+         else remove = 1;
+      }
+      /************************************************************************/
+      /*                         Remove                                       */
+      /************************************************************************/
+      if ( remove == 1 )
+      {
+         if ( parcours == List_UsedInSubroutine_Var )
+         {
+           List_UsedInSubroutine_Var = List_UsedInSubroutine_Var -> suiv;
+           parcours = List_UsedInSubroutine_Var;
+         }
+         else
+         {
+            parcoursprec->suiv = parcours->suiv;
+            parcours = parcoursprec -> suiv ;
+         }
+      }
+      else
+      {
+         parcoursprec = parcours;
+         parcours = parcours -> suiv ;
+      }
+   }
+
+}
+
+
+void Clean_List_ModuleUsed_Var()
+{
+   listvar *parcours;
+   listvar *parcours1;
+   listvar *parcoursprec;
+   int remove;
+
+   parcoursprec = (listvar *)NULL;
+   parcours = List_ModuleUsed_Var;
+   while ( parcours )
+   {
+      /*                                                                      */
+      parcours1 = List_GlobalParameter_Var;
+      remove = 0 ;
+      while ( parcours1 && remove == 0 )
+      {
+         if ( !strcasecmp(parcours->var->v_nomvar,parcours1->var->v_nomvar)
+            ) remove = 1 ;
+         else parcours1 = parcours1 -> suiv;
+      }
+      /************************************************************************/
+      /*                         Remove                                       */
+      /************************************************************************/
+      if ( remove == 1 )
+      {
+         if ( parcours == List_ModuleUsed_Var )
+         {
+           List_ModuleUsed_Var = List_ModuleUsed_Var -> suiv;
+           parcours = List_ModuleUsed_Var;
+         }
+         else
+         {
+            parcoursprec->suiv = parcours->suiv;
+            parcours = parcoursprec -> suiv ;
+         }
+      }
+      else
+      {
+         parcoursprec = parcours;
+         parcours = parcours -> suiv ;
+      }
+   }
+
+}
+
+void Clean_List_SubroutineDeclaration_Var()
+{
+   listvar *parcours;
+   listvar *parcours1;
+   listvar *parcoursprec;
+   int out ;
+           
+   parcoursprec = (listvar *)NULL;
+   parcours = List_SubroutineDeclaration_Var;
+   while ( parcours )
+   {
+      parcours1 = List_FunctionType_Var;
+      out = 0 ;
+      while ( parcours1 && out == 0 )
+      {
+         if ( !strcasecmp(parcours->var->v_subroutinename,
+                          parcours1->var->v_subroutinename) &&
+              !strcasecmp(parcours->var->v_nomvar,
+                          parcours1->var->v_nomvar)
+            ) out = 1;
+         else parcours1 = parcours1->suiv;
+      }
+      if ( out == 0 )
+      {
+         parcours1 = List_SubroutineArgument_Var;
+         out = 0 ;
+         while ( parcours1 && out == 0 )
+         {
+            if ( !strcasecmp(parcours->var->v_subroutinename,
+                             parcours1->var->v_subroutinename) &&
+                 !strcasecmp(parcours->var->v_nomvar,
+                             parcours1->var->v_nomvar)
+               ) out = 1;
+            else parcours1 = parcours1->suiv;
+         }
+      }
+
+      if ( out == 1 )
+      {
+          if ( parcours == List_SubroutineDeclaration_Var )
+          {
+             List_SubroutineDeclaration_Var =
+                                         List_SubroutineDeclaration_Var -> suiv;
+             parcours = List_SubroutineDeclaration_Var;
+          }
+          else
+          {
+             parcoursprec->suiv = parcours->suiv;
+             parcours = parcoursprec->suiv;
+          }
+      }
+      else
+      {
+         parcoursprec = parcours;
+         parcours = parcours -> suiv;
+      }
+   }
+       
+}
+
+void Clean_List_Global_Var()
+{
+   listvar *parcours;
+   listvar *parcours2;
+   listvar *parcoursprec;
+   listvar *parcours2prec;
+
+   parcoursprec = (listvar *)NULL;
+   parcours2prec = (listvar *)NULL;
+   parcours = List_Global_Var;
+   while ( parcours )
+   {
+      if ( parcours->var->v_VariableIsParameter == 1 )
+      {
+         /* remove                                                            */
+         if ( parcours == List_Global_Var )
+         {
+            List_Global_Var = List_Global_Var->suiv;
+            free(parcours);
+            parcours = List_Global_Var;
+         }
+         else
+         {
+            parcoursprec->suiv = parcours->suiv;
+            free(parcours);
+            parcours = parcoursprec->suiv;
+         }
+      }
+      else
+      {
+         parcoursprec = parcours;
+         parcours = parcours->suiv;
+      }
+   }
+   /* looking for sevral declaration of the same variable                     */
+   parcours = List_Global_Var;
+   while ( parcours )
+   {
+      parcours2prec = parcours;
+      parcours2 = parcours->suiv;
+      while ( parcours2 )
+      {
+         if ( !strcasecmp(parcours->var->v_nomvar,
+                         parcours2->var->v_nomvar)     &&
+              !strcasecmp(parcours->var->v_modulename,
+                         parcours2->var->v_modulename) )
+         {
+            CopyRecord(parcours->var,parcours2->var);
+            /* remove var from the parcours2                                  */
+            parcours2prec ->suiv = parcours2->suiv;
+            free(parcours2);
+            parcours2 = parcours2prec ->suiv;
+         }
+         else
+         {
+            parcours2prec = parcours2;
+            parcours2 = parcours2->suiv;
+         }
+      }
+      parcours = parcours->suiv;
+   }
+}
+/******************************************************************************/
+/*                             ListClean                                      */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+void ListClean()
+{
+   listvar *newvar;
+
+   Clean_List_ModuleUsed_Var();
+   Clean_List_UsedInSubroutine_Var();
+   Clean_List_SubroutineDeclaration_Var();
+   
+   newvar = (listvar *)NULL;
+/*   newvar = List_Common_Var;*/
+   while(newvar)
+   {
+      printf("----- %s --- %s ---%s---%s---\n",newvar->var->v_nomvar,
+         newvar->var->v_commonname,
+         newvar->var->v_readedlistdimension,
+         newvar->var->v_subroutinename
+      );
+      newvar = newvar -> suiv;
+      printf("+++++++++++++++++++++++++\n");
+   }
+
+}
+
+
+/******************************************************************************/
+/*                             ListUpdate                                     */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+void ListUpdate()
+{
+   listvar *newvar;
+        
+   Update_List_Subroutine_Var(List_SubroutineArgument_Var);
+
+
+       
+   Update_List_Subroutine_Var(List_FunctionType_Var);
+   Update_List_Var(List_Parameter_Var);
+   Update_List_Var(List_Dimension_Var);
+   Update_List_Var(List_Data_Var);
+   Update_List_Var(List_Save_Var);
+   Update_List_Var(List_GlobalParameter_Var);
+   Update_List_Var(List_Common_Var);
+   Update_List_Var(List_SubroutineDeclaration_Var);
+   Update_List_Var(List_UsedInSubroutine_Var);
+   Update_List_From_Common_Var(List_UsedInSubroutine_Var);
+   Update_List_From_Common_Var(List_SubroutineDeclaration_Var);
+   Update_NotGridDepend_Var(List_NotGridDepend_Var);
+    
+   newvar =(listvar * )NULL;
+/*   newvar = List_Common_Var;*/
+/*   newvar = List_UsedInSubroutine_Var;*/
+   while ( newvar )
+   {
+      printf("++++ %s %d %s %s %s\n",
+      newvar->var->v_nomvar,
+      newvar->var->v_VariableIsParameter,
+      newvar->var->v_subroutinename,
+      newvar->var->v_modulename,
+      newvar->var->v_typevar
+            );
+      newvar = newvar->suiv;
+   }
+}
+
+void GiveTypeOfVariables()
+{
+   listvar *parcours;
+
+   /*                                                                         */
+   parcours = List_Common_Var;
+   while ( parcours )
+   {
+      if ( !strcasecmp(parcours->var->v_typevar,"") )
+      {
+         if ( IsVariableReal(parcours->var->v_nomvar) == 1 )
+                                        strcpy(parcours->var->v_typevar,"REAL");
+         else strcpy(parcours->var->v_typevar,"INTEGER");
+      }
+      parcours = parcours -> suiv ;
+   }
+   /*                                                                         */
+   parcours = List_UsedInSubroutine_Var;
+   while ( parcours )
+   {
+      if ( !strcasecmp(parcours->var->v_typevar,"") )
+      {
+         if ( IsVariableReal(parcours->var->v_nomvar) == 1 )
+                                        strcpy(parcours->var->v_typevar,"REAL");
+         else strcpy(parcours->var->v_typevar,"INTEGER");
+      }
+      parcours = parcours -> suiv ;
+   }
+   /*                                                                         */
+   parcours = List_SubroutineArgument_Var;
+   while ( parcours )
+   {
+      if ( !strcasecmp(parcours->var->v_typevar,"") )
+      {
+         if ( IsVariableReal(parcours->var->v_nomvar) == 1 )
+                                        strcpy(parcours->var->v_typevar,"REAL");
+         else strcpy(parcours->var->v_typevar,"INTEGER");
+      }
+      parcours = parcours -> suiv ;
+   }
+   /*                                                                         */
+   parcours = List_SubroutineDeclaration_Var;
+   while ( parcours )
+   {
+      if ( !strcasecmp(parcours->var->v_typevar,"") )
+      {
+         if ( IsVariableReal(parcours->var->v_nomvar) == 1 )
+                                        strcpy(parcours->var->v_typevar,"REAL");
+         else strcpy(parcours->var->v_typevar,"INTEGER");
+      }
+      parcours = parcours -> suiv ;
+   }
+       
+}
+
+
+
+void Sort_List_SubroutineArgument_Var()
+{
+   listvar *parcours;
+   listvar *parcours1;
+   int position;
+   int out;
+   char name_sub[LONG_C];
+
+   parcours = List_SubroutineArgument_Var;
+   position = 1;
+   while ( parcours )
+   {
+      parcours1 = List_SubroutineDeclaration_Var;
+      out = 0;
+      while ( parcours1 && out == 0 )
+      {
+         if ( !strcasecmp(parcours->var->v_nomvar,
+                         parcours1->var->v_nomvar)  &&
+              !strcasecmp(parcours->var->v_subroutinename,
+                         parcours1->var->v_subroutinename)
+             )
+         {
+            parcours1->var->v_positioninblock = position;
+            position = position +1 ;
+            out = 1;
+         }
+         else parcours1 = parcours1->suiv;
+      }
+      parcours = parcours->suiv;
+   }
+   /*                                                                         */
+   parcours = List_SubroutineDeclaration_Var;
+   strcpy(name_sub,"");
+   while ( parcours )
+   {
+      if ( !strcasecmp(name_sub,"") )
+      {
+         strcpy(name_sub,parcours->var->v_subroutinename);
+         position = 1;
+      }
+
+      if ( parcours->var->v_positioninblock != 0 )
+      {
+         parcours1 = List_SubroutineArgument_Var;
+         out = 0;
+         while ( parcours1 && out == 0 )
+         {
+            if ( !strcasecmp(parcours->var->v_nomvar,
+                            parcours1->var->v_nomvar)  &&
+                 !strcasecmp(parcours->var->v_subroutinename,
+                            parcours1->var->v_subroutinename)
+                )
+            {
+               parcours1->var->v_positioninblock = position;
+               position = position +1 ;
+               out = 1;
+            }
+            else parcours1 = parcours1->suiv;
+         }
+      }
+      if ( parcours->suiv )
+         if ( strcasecmp(name_sub,parcours->suiv->var->v_subroutinename) )
+            strcpy(name_sub,"");
+      parcours = parcours->suiv;
+   }
+       
+}
+
+
+
+/******************************************************************************/
+/*                      IndiceTabvars_Global_Var_Treated                      */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+void IndiceTabvars_Global_Var_Treated(char *nom)
+{
+   listvar *parcours;
+   listvar *parcoursprec;
+   listvar *parcours1;
+   listvar *List_ModuleUsed_Var;
+   listindice *newindice;
+   int out;
+
+   parcoursprec = (listvar *)NULL;
+
+   if ( mark == 1 ) printf("MODULE Treated %s \n",nom);
+
+   List_ModuleUsed_Var = (listvar *)NULL;
+   List_ModuleUsed_Var = Readthedependfile(nom,List_ModuleUsed_Var);
+
+   parcours = List_Global_Var;
+   while( parcours )
+   {
+      if ( !strcasecmp(parcours->var->v_modulename,nom) )
+      {
+         parcours1 = List_ModuleUsed_Var;
+         out = 0 ;
+         while ( parcours1 && out == 0 )
+         {
+            if ( !strcasecmp(parcours->var->v_nomvar,parcours1->var->v_nomvar)
+               ) out = 1;
+            else
+            {
+               parcoursprec = parcours1 ;
+               parcours1 = parcours1->suiv;
+            }
+         }
+         /* if we found the var Module name in the old list                   */
+         if ( out == 1 )
+         {
+            CopyRecord(parcours->var,parcours1->var);
+            /* Remove this variable from the List_ModuleUsed_Var              */
+            if ( parcours1 == List_ModuleUsed_Var )
+            {
+               List_ModuleUsed_Var = List_ModuleUsed_Var->suiv ;
+            }
+            else
+            {
+               parcoursprec->suiv = parcours1->suiv;
+               free(parcours1);
+               parcours1 = parcoursprec->suiv;
+            }
+         }
+         else
+         /* if we do not found the var Module name in the old list            */
+         {
+            if ( Listofavailableindices )
+            {
+               parcours->var->v_indicetabvars = Listofavailableindices ->
+                                                                       i_indice;
+               if ( Listofavailableindices->suiv )
+                          Listofavailableindices = Listofavailableindices->suiv;
+               else
+                          Listofavailableindices = (listindice *)NULL;
+            }
+            else
+            {
+               indicemaxtabvars = indicemaxtabvars + 1 ;
+               parcours->var->v_indicetabvars = indicemaxtabvars;
+            }
+         }
+      }
+      parcours = parcours->suiv;
+   }
+   /* if List_ModuleUsed_Var is not empty, some var have been removed from    */
+   /*    the last treatement                                                  */
+  parcours1 = List_ModuleUsed_Var;
+  while ( parcours1 )
+  {
+     newindice=(listindice *) malloc (sizeof (listindice));
+     newindice -> i_indice = parcours1 -> var -> v_indicetabvars;
+     newindice -> suiv = Listofavailableindices;
+     Listofavailableindices = newindice;
+     parcours1 = parcours1->suiv;
+  }
+}
+/******************************************************************************/
+/*                       IndiceTabvars_Global_Var_No_Treated                  */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+void IndiceTabvars_Global_Var_No_Treated(char *nom)
+{
+   listvar *parcours;
+
+   if ( mark == 1 ) printf("MODULE No Treated %s \n",nom);
+
+   parcours = List_Global_Var;
+   while( parcours )
+   {
+      if ( !strcasecmp(parcours->var->v_modulename,nom) &&
+           parcours->var->v_VariableIsParameter == 0    &&
+           parcours->var->v_notgrid == 0
+          )
+      {
+         indicemaxtabvars = indicemaxtabvars + 1 ;
+         parcours->var->v_indicetabvars = indicemaxtabvars;
+      }
+      parcours = parcours->suiv;
+   }
+}
+
+
+void UpdateTheRemainingList(listvar *record)
+{
+   listvar *parcours;
+
+   parcours = record;
+   while ( parcours )
+   {
+      if ( !strcasecmp(parcours->var->v_nomvar,record->var->v_nomvar) &&
+           !strcasecmp(parcours->var->v_commonname,record->var->v_commonname)
+         )
+      {
+         strcpy(parcours->var->v_commoninfile,record->var->v_commoninfile);
+         CopyRecord(parcours->var,record->var);
+      }
+      parcours = parcours -> suiv;
+   }
+}
+
+
+
+/******************************************************************************/
+/*                      IndiceTabvars_Common_Var_Treated                      */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+void IndiceTabvars_Common_Var_Treated(char *nom)
+{
+   listvar *parcours;
+   listvar *parcoursprec;
+   listvar *parcours1;
+   listvar *List_CommonUsed_Var;
+   listindice *newindice;
+   int out;
+
+   parcoursprec = (listvar *)NULL;
+
+   if ( mark == 1 ) printf("COMMON Treated %s \n",nom);
+
+   List_CommonUsed_Var = (listvar *)NULL;
+   List_CommonUsed_Var = Readthedependfile(nom,List_CommonUsed_Var);
+
+   parcours = List_Common_Var;
+   while( parcours )
+   {
+      if ( !strcasecmp(parcours->var->v_commonname,nom) )
+      {
+         parcours1 = List_CommonUsed_Var;
+         out = 0 ;
+         while ( parcours1 && out == 0 )
+         {
+
+            if ( !strcasecmp(parcours1->var->v_commonname,nom) &&
+                 !strcasecmp(parcours->var->v_nomvar,parcours1->var->v_nomvar)
+               ) out = 1;
+            else
+            {
+               parcoursprec = parcours1 ;
+               parcours1 = parcours1->suiv;
+            }
+         }
+         /* if we found the var common name in the old list                   */
+         if ( out == 1 )
+         {
+            strcpy(parcours->var->v_commoninfile,
+                   parcours1->var->v_commoninfile);
+            CopyRecord(parcours->var,parcours1->var);
+         }
+         else
+         /* if we do not found the var common name in the old list            */
+         {
+            if ( Listofavailableindices )
+            {
+               parcours->var->v_indicetabvars = Listofavailableindices ->
+                                                                       i_indice;
+               if ( Listofavailableindices->suiv )
+                          Listofavailableindices = Listofavailableindices->suiv;
+               else
+                          Listofavailableindices = (listindice *)NULL;
+            }
+            else
+            {
+               indicemaxtabvars = indicemaxtabvars + 1 ;
+               parcours->var->v_indicetabvars = indicemaxtabvars;
+            }
+         }
+         /* Look in the remaining list in the variable is define              */
+         UpdateTheRemainingList(parcours);
+      }
+      parcours = parcours->suiv;
+   }
+   /* if List_CommonUsed_Var is not empty, some var have been removed from    */
+   /*    the last treatement                                                  */
+  parcours1 = List_CommonUsed_Var;
+  while ( parcours1 )
+  {
+     if ( parcours1 -> var -> v_indicetabvars == 0 )
+     {
+        newindice=(listindice *) malloc (sizeof (listindice));
+        newindice -> i_indice = parcours1 -> var -> v_indicetabvars;
+        newindice -> suiv = Listofavailableindices;
+        Listofavailableindices = newindice;
+     }
+     parcours1 = parcours1->suiv;
+  }
+}
+/******************************************************************************/
+/*                     IndiceTabvars_Common_Var_No_Treated                    */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+void IndiceTabvars_Common_Var_No_Treated(char *nom)
+{
+   listvar *parcours;
+   listvar *parcours2;
+
+   if ( mark == 1 ) printf("COMMON No Treated %s \n",nom);
+
+   parcours = List_Common_Var;
+   while( parcours )
+   {
+      if ( !strcasecmp(parcours->var->v_commonname,nom) &&
+           strcasecmp(parcours->var->v_subroutinename,"") &&
+           parcours->var->v_indicetabvars == 0
+          )
+      {
+         indicemaxtabvars = indicemaxtabvars + 1 ;
+         parcours->var->v_indicetabvars = indicemaxtabvars;
+         parcours2 = parcours;
+         while ( parcours2 )
+         {
+            if ( !strcasecmp(parcours->var->v_nomvar,
+                             parcours2->var->v_nomvar) &&
+                 !strcasecmp(parcours->var->v_commonname,
+                             parcours2->var->v_commonname)
+               )
+               parcours2->var->v_indicetabvars = parcours->var->v_indicetabvars;
+            parcours2 = parcours2->suiv;
+         }
+      }
+      parcours = parcours->suiv;
+   }
+}
+
+
+/******************************************************************************/
+/*                       IndiceTabvarsIdentification                          */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+void IndiceTabvarsIdentification()
+{
+   listnom *parcours_nom;
+
+   /* Identification of tabvars indices in List_Global_Var                    */
+   parcours_nom = List_NameOfModule;
+   while ( parcours_nom )
+   {
+      if ( Did_module_common_treaded(parcours_nom->o_nom) == 1 )
+      {
+         IndiceTabvars_Global_Var_Treated(parcours_nom->o_nom);
+      }
+      else
+      {
+         IndiceTabvars_Global_Var_No_Treated(parcours_nom->o_nom);
+      }
+      parcours_nom = parcours_nom -> suiv;
+   }
+   /* Identification of tabvars indices in List_Common_Var                    */
+   parcours_nom = List_NameOfCommon;
+   while ( parcours_nom )
+   {
+      if ( Did_module_common_treaded(parcours_nom->o_nom) == 1 )
+      {
+         IndiceTabvars_Common_Var_Treated(parcours_nom->o_nom);
+      }
+      else
+      {
+         IndiceTabvars_Common_Var_No_Treated(parcours_nom->o_nom);
+      }
+      parcours_nom = parcours_nom -> suiv;
+   }
+
+}
+
+void New_Allocate_Subroutine_Is_Necessary()
+{
+   listnom *parcours_nom;
+   listvar *parcours;
+   int out;
+
+   parcours_nom = List_NameOfModule;
+   while ( parcours_nom )
+   {
+      /*                                                                      */
+      parcours = List_Global_Var;
+      out = 0 ;
+      while( parcours && out == 0 )
+      {
+         if ( !strcasecmp(parcours->var->v_modulename,parcours_nom->o_nom) &&
+              !strcasecmp(parcours->var->v_subroutinename,"")            &&
+              parcours->var->v_VariableIsParameter == 0                  &&
+              (parcours->var->v_allocatable == 0  || !strcasecmp(parcours->var->v_typevar,"type"))      &&
+              parcours->var->v_notgrid == 0                              &&
+              ( parcours->var->v_nbdim != 0 ||
+                strcasecmp(parcours->var->v_initialvalue,"")
+              ) ) out = 1;
+         else parcours = parcours -> suiv;
+      }
+      if ( out == 1 )
+      {
+         parcours_nom->o_val = 1 ;
+      }
+      /*                                                                      */
+      parcours_nom = parcours_nom -> suiv;
+   }
+}
+
+void New_Allocate_Subroutine_For_Common_Is_Necessary()
+{
+   listnom *parcours_nom;
+   listvar *parcours;
+   int out;
+
+   parcours_nom = List_NameOfCommon;
+   while ( parcours_nom )
+   {
+      /*                                                                      */
+      parcours = List_Common_Var;
+      out = 0 ;
+      while( parcours && out == 0 )
+      {
+         if ( !strcasecmp(parcours->var->v_commonname,parcours_nom->o_nom)  &&
+              strcasecmp(parcours->var->v_subroutinename,"")                &&
+              !strcasecmp(parcours->var->v_commoninfile,mainfile)           &&
+              ( parcours->var->v_nbdim != 0 ||
+                strcasecmp(parcours->var->v_initialvalue,"")
+              ) ) out = 1;
+         else parcours = parcours -> suiv;
+      }
+      if ( out == 1 )
+      {
+         parcours_nom->o_val = 1 ;
+      }
+      /*                                                                      */
+      parcours_nom = parcours_nom -> suiv;
+   }
+}
+
+void NewModule_Creation_0()
+{
+   listnom *parcours_nom;
+   char ligne[LONG_C];
+
+   if ( firstpass == 0 )
+   {
+      parcours_nom = List_NameOfCommon;
+      while ( parcours_nom )
+      {
+         if ( parcours_nom->o_val == 1 )
+         {
+            sprintf (ligne, "module %s",parcours_nom->o_nom);
+            tofich(fortranout,ligne,1);
+            strcpy(ligne,"implicit none");
+            tofich(fortranout,ligne,1);
+            sprintf (ligne, "public Alloc_agrif_%s",parcours_nom->o_nom);
+            tofich(fortranout,ligne,1);
+            strcpy (ligne, "contains");
+            tofich(fortranout,ligne,1);
+            sprintf (ligne, "subroutine Alloc_agrif_%s(Agrif_Gr)",
+                                                           parcours_nom->o_nom);
+            tofich(fortranout,ligne,1);
+            strcpy(ligne,"Use Agrif_Util");
+            tofich(fortranout,ligne,1);
+            strcpy (ligne, "Type(Agrif_grid), Pointer :: Agrif_Gr");
+            tofich(fortranout,ligne,1);
+            strcpy(ligne, "INTEGER :: i");
+            tofich (fortranout, ligne,1);
+            strcpy (ligne, "\n#include \"alloc_agrif_");
+            strcat (ligne, parcours_nom->o_nom);
+            strcat (ligne, ".h\"\n");
+            fprintf(fortranout,ligne);
+            strcpy (ligne, "Return");
+            tofich(fortranout,ligne,1);
+            sprintf (ligne, "end subroutine Alloc_agrif_%s",
+                                                           parcours_nom->o_nom);
+            tofich(fortranout,ligne,1);
+            sprintf (ligne, "end module %s",parcours_nom->o_nom);
+            tofich(fortranout,ligne,1);
+            /* List all Call Alloc_agrif                                      */
+            Add_Subroutine_For_Alloc(parcours_nom->o_nom);
+         }
+         parcours_nom = parcours_nom->suiv;
+      }
+   }
+}
+
+void UpdateList_SubroutineWhereAgrifUsed()
+{
+   listnom *parcours;
+   listusemodule *parcours1;
+   listallocate *parcours2;
+   listname *parcours3;
+   listvar *parcours4;
+   int out;
+   char name_module[LONG_C];
+
+   /* We should integrate allocate and pointer variables                      */
+   parcours2 = List_Allocate_Var;
+   while ( parcours2 )
+   {
+      parcours4 = List_UsedInSubroutine_Var;
+      out = 0 ;
+      while ( parcours4 && out == 0 )
+      {
+         if ( !strcasecmp(parcours2->a_nomvar,parcours4->var->v_nomvar) )
+         {
+            Add_SubroutineWhereAgrifUsed_1(parcours4->var->v_subroutinename,
+                                           parcours4->var->v_modulename);
+            out = 1;
+         }
+         else parcours4 = parcours4 -> suiv ;
+      }
+      parcours2 = parcours2->suiv;
+   }
+   /*                                                                         */
+   parcours3 = List_Pointer_Var;
+   while ( parcours3 )
+   {
+      parcours4 = List_UsedInSubroutine_Var;
+      out = 0 ;
+      while ( parcours4 && out == 0 )
+      {
+         if ( !strcasecmp(parcours3->n_name,parcours4->var->v_nomvar) )
+         {
+            Add_SubroutineWhereAgrifUsed_1(parcours4->var->v_subroutinename,
+                                           parcours4->var->v_modulename);
+            out = 1;
+         }
+         else parcours4 = parcours4 -> suiv ;
+      }
+      parcours3 = parcours3 -> suiv;
+   }
+   /*                                                                         */
+   parcours4 = List_UsedInSubroutine_Var;
+   while ( parcours4 )
+   {
+      if ( parcours4->var->v_allocatable == 1 && strcasecmp(parcours4->var->v_typevar,"type"))
+      {
+         Add_SubroutineWhereAgrifUsed_1(parcours4->var->v_subroutinename,
+                                        parcours4->var->v_modulename);
+      }
+      parcours4 = parcours4 -> suiv ;
+   }
+   /*                                                                         */
+   parcours = List_SubroutineWhereAgrifUsed;
+   while ( parcours )
+   {
+      parcours1 = List_NameOfModuleUsed;
+      out = 0 ;
+      strcpy(name_module,"");
+      while ( parcours1 && out == 0 )
+      {
+         if ( !strcasecmp(parcours->o_nom,parcours1->u_cursubroutine) &&
+              !strcasecmp(parcours1->u_usemodule,"Agrif_Util")
+            ) out = 1;
+         else
+         {
+            if ( !strcasecmp(parcours->o_nom,parcours1->u_cursubroutine) )
+            {
+               strcpy(name_module,parcours->o_module);
+            }
+            parcours1 = parcours1->suiv;
+         }
+      }
+      /* if out == 0 we should look in the module declaration                 */
+      if ( out == 0 )
+      {
+         parcours1 = List_NameOfModuleUsed;
+         out = 0 ;
+         while ( parcours1 && out == 0 )
+         {
+            if ( !strcasecmp(name_module,parcours1->u_modulename) &&
+                 !strcasecmp(parcours1->u_cursubroutine,"")&&
+                 !strcasecmp(parcours1->u_usemodule,"Agrif_Util")
+               ) out = 1;
+            else parcours1 = parcours1->suiv;
+         }
+      }
+      if ( out == 0 ) parcours->o_val = 1;
+      /*                                                                      */
+      parcours = parcours->suiv;
+   }
+}
+
+
+void UpdateList_UsedInSubroutine_With_dimension()
+{
+   listvar *parcours;
+
+   parcours = List_UsedInSubroutine_Var;
+   while ( parcours )
+   {
+      if ( parcours->var->v_nbdim != 0 )
+      {
+         strcpy(subroutinename,parcours->var->v_subroutinename);
+         DecomposeTheName(parcours->var->v_readedlistdimension);
+         strcpy(subroutinename,"");
+      }
+      parcours = parcours -> suiv;
+   }
+}
+
+void Affiche()
+{
+   listvar *parcours;
+
+   parcours = (listvar *)NULL;
+/*   parcours = List_Global_Var;                  */
+/*   parcours = List_SubroutineDeclaration_Var;   */
+
+/*   parcours = List_SubroutineArgument_Var;      */
+/*   parcours = List_FunctionType_Var;            */
+
+/*   parcours = List_Data_Var;                    */
+/*   parcours = List_Save_Var;                    */
+/*   parcours = List_UsedInSubroutine_Var;        */
+/*   parcours = List_Parameter_Var;               */
+/*   parcours = List_GlobalParameter_Var;         */
+/*   parcours = List_NotGridDepend_Var;           */
+
+/*   parcours = List_Common_Var;                  */
+
+   while( parcours )
+   {
+      printf("module- %s \n",parcours->var->v_modulename);
+      printf("subroutine- %s  \n",parcours->var->v_subroutinename);
+      printf("nom- %s  \n",parcours->var->v_nomvar);
+      printf("common- %s  \n",parcours->var->v_commonname);
+      printf("type- %s  \n",parcours->var->v_typevar);
+      printf("indice- %d  \n",parcours->var->v_indicetabvars);
+      printf("variableisparameter- %d \n",parcours->var->v_VariableIsParameter);
+      printf("module1- %d  \n",parcours->var->v_module);
+      printf("save- %d  \n",parcours->var->v_save);
+      printf("notgrid- %d  \n",parcours->var->v_notgrid);
+      printf("nbdim- %d  \n",parcours->var->v_nbdim);
+      printf("common1- %d  \n",parcours->var->v_common);
+      printf("v_dimensiongiven- %d  \n",parcours->var->v_dimensiongiven);
+      printf("v_dimsempty- %d  \n",parcours->var->v_dimsempty);
+      printf("initialvalue- %s\n \n",parcours->var->v_initialvalue);
+      printf("dim- %s\n \n",parcours->var->v_readedlistdimension);
+
+      parcours = parcours -> suiv ;
+   }
+   if ( mark == 1 ) printf("Indicemaxtabvars = %d \n",indicemaxtabvars);
+}
+
+
+
+
+int SubInList_ContainsSubroutine()
+{
+   int out;
+   listnom *parcours;
+
+   out = 0 ;
+   parcours = List_ContainsSubroutine;
+   while ( parcours && out == 0 )
+   {
+      if ( !strcasecmp(parcours->o_nom,subroutinename) ) out = 1 ;
+      else parcours = parcours -> suiv;
+   }
+
+   return out;
+}
Index: /vendors/AGRIF/r_00/LIB/WorkWithvarofsubroutineliste.c
===================================================================
--- /vendors/AGRIF/r_00/LIB/WorkWithvarofsubroutineliste.c	(revision 1902)
+++ /vendors/AGRIF/r_00/LIB/WorkWithvarofsubroutineliste.c	(revision 1902)
@@ -0,0 +1,105 @@
+/******************************************************************************/
+/*                                                                            */
+/*     CONV (converter) for Agrif (Adaptive Grid Refinement In Fortran)       */
+/*                                                                            */
+/* Copyright or   or Copr. Laurent Debreu (Laurent.Debreu@imag.fr)            */
+/*                        Cyril Mazauric (Cyril_Mazauric@yahoo.fr)            */
+/* This software is governed by the CeCILL-C license under French law and     */
+/* abiding by the rules of distribution of free software.  You can  use,      */
+/* modify and/ or redistribute the software under the terms of the CeCILL-C   */
+/* license as circulated by CEA, CNRS and INRIA at the following URL          */
+/* "http://www.cecill.info".                                                  */
+/*                                                                            */
+/* As a counterpart to the access to the source code and  rights to copy,     */
+/* modify and redistribute granted by the license, users are provided only    */
+/* with a limited warranty  and the software's author,  the holder of the     */
+/* economic rights,  and the successive licensors  have only  limited         */
+/* liability.                                                                 */
+/*                                                                            */
+/* In this respect, the user's attention is drawn to the risks associated     */
+/* with loading,  using,  modifying and/or developing or reproducing the      */
+/* software by the user in light of its specific status of free software,     */
+/* that may mean  that it is complicated to manipulate,  and  that  also      */
+/* therefore means  that it is reserved for developers  and  experienced      */
+/* professionals having in-depth computer knowledge. Users are therefore      */
+/* encouraged to load and test the software's suitability as regards their    */
+/* requirements in conditions enabling the security of their systems and/or   */
+/* data to be ensured and,  more generally, to use and operate it in the      */
+/* same conditions as regards security.                                       */
+/*                                                                            */
+/* The fact that you are presently reading this means that you have had       */
+/* knowledge of the CeCILL-C license and that you accept its terms.           */
+/******************************************************************************/
+/* version 1.7                                                                */
+/******************************************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "decl.h"
+
+/******************************************************************************/
+/*                      Add_SubroutineArgument_Var_1                          */
+/******************************************************************************/
+/* Firstpass 1                                                                */
+/* We should complete the                                                     */
+/******************************************************************************/
+/*                                                                            */
+/*                                                                            */
+/******************************************************************************/
+void Add_SubroutineArgument_Var_1(listvar *listtoadd)
+{
+
+   if ( firstpass == 1 )
+   {
+       List_SubroutineArgument_Var = AddListvarToListvar
+                              (listtoadd,List_SubroutineArgument_Var,1);
+   }
+}
+
+/******************************************************************************/
+/*                             Add_FunctionType_Var_1                         */
+/******************************************************************************/
+/* Firstpass 1                                                                */
+/* We should complete the                                                     */
+/******************************************************************************/
+/*                                                                            */
+/*                                                                            */
+/******************************************************************************/
+void Add_FunctionType_Var_1(char *nom)
+{
+   listvar *newvar;
+
+   if ( firstpass == 1 )
+   {
+      curvar=createvar(nom,NULL);
+      strcpy(curvar->v_typevar,DeclType);
+      newvar = insertvar(NULL,curvar);
+      List_FunctionType_Var = AddListvarToListvar
+                              (newvar,List_FunctionType_Var,1);
+   }
+}
+
+
+/******************************************************************************/
+/*                      Add_SubroutineDeclaration_Var_1                       */
+/******************************************************************************/
+/* Firstpass 1                                                                */
+/* We should complete the listvarofsubroutine                                 */
+/******************************************************************************/
+/*                                                                            */
+/*                                                                            */
+/******************************************************************************/
+void Add_SubroutineDeclaration_Var_1 (listvar *listtoadd)
+{
+   if ( firstpass == 1 )
+   {
+      if ( VariableIsParameter == 0 &&
+           SaveDeclare         == 0 )
+      {
+         listduplicated = (listvar *)NULL;
+         duplicatelistvar(listtoadd);
+         List_SubroutineDeclaration_Var = AddListvarToListvar
+                              (listduplicated,List_SubroutineDeclaration_Var,1);
+      }
+   }
+}
Index: /vendors/AGRIF/r_00/LIB/WriteInFile.c
===================================================================
--- /vendors/AGRIF/r_00/LIB/WriteInFile.c	(revision 1902)
+++ /vendors/AGRIF/r_00/LIB/WriteInFile.c	(revision 1902)
@@ -0,0 +1,248 @@
+/******************************************************************************/
+/*                                                                            */
+/*     CONV (converter) for Agrif (Adaptive Grid Refinement In Fortran)       */
+/*                                                                            */
+/* Copyright or   or Copr. Laurent Debreu (Laurent.Debreu@imag.fr)            */
+/*                        Cyril Mazauric (Cyril_Mazauric@yahoo.fr)            */
+/* This software is governed by the CeCILL-C license under French law and     */
+/* abiding by the rules of distribution of free software.  You can  use,      */
+/* modify and/ or redistribute the software under the terms of the CeCILL-C   */
+/* license as circulated by CEA, CNRS and INRIA at the following URL          */
+/* "http://www.cecill.info".                                                  */
+/*                                                                            */
+/* As a counterpart to the access to the source code and  rights to copy,     */
+/* modify and redistribute granted by the license, users are provided only    */
+/* with a limited warranty  and the software's author,  the holder of the     */
+/* economic rights,  and the successive licensors  have only  limited         */
+/* liability.                                                                 */
+/*                                                                            */
+/* In this respect, the user's attention is drawn to the risks associated     */
+/* with loading,  using,  modifying and/or developing or reproducing the      */
+/* software by the user in light of its specific status of free software,     */
+/* that may mean  that it is complicated to manipulate,  and  that  also      */
+/* therefore means  that it is reserved for developers  and  experienced      */
+/* professionals having in-depth computer knowledge. Users are therefore      */
+/* encouraged to load and test the software's suitability as regards their    */
+/* requirements in conditions enabling the security of their systems and/or   */
+/* data to be ensured and,  more generally, to use and operate it in the      */
+/* same conditions as regards security.                                       */
+/*                                                                            */
+/* The fact that you are presently reading this means that you have had       */
+/* knowledge of the CeCILL-C license and that you accept its terms.           */
+/******************************************************************************/
+/* version 1.7                                                                */
+/******************************************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "decl.h"
+
+/******************************************************************************/
+/*                            tofich_reste                                    */
+/******************************************************************************/
+/* This subroutine is used to write the string s into the fileout             */
+/******************************************************************************/
+void tofich_reste (FILE * filout, char *s,int returnlineornot)
+{
+  char temp[61];
+  char *tmp;
+  int size;
+  int val_min;
+
+  if (strlen (s) <= 60)
+    {
+      if ( returnlineornot == 0 ) fprintf (filout, "     &%s", s);
+      else if ( returnlineornot == 2 ) fprintf (filout, "&%s", s);
+      else if ( returnlineornot == 3 ) fprintf (filout, "&%s\n", s);
+      else                             fprintf (filout, "     &%s\n", s);
+      if ( returnlineornot == 0 ||
+           returnlineornot == 2 ) colnum=colnum+strlen(s)+6;
+      else colnum=0;
+    }
+  else
+    {
+      val_min = 60;
+      strncpy (temp, s, 60);
+      strcpy (&temp[60], "\0");
+
+      tmp = strrchr(temp, '+');
+      if ( tmp )
+      if ( strlen(tmp) < val_min ) val_min = strlen(tmp);
+      tmp = strrchr(temp, '-');
+      if ( tmp )
+      if ( strlen(tmp) < val_min ) val_min = strlen(tmp);
+      tmp = strrchr(temp, '/');
+      if ( tmp )
+      if ( strlen(tmp) < val_min ) val_min = strlen(tmp);
+      tmp = strrchr(temp, '*');
+      if ( tmp )
+      if ( strlen(tmp) < val_min ) val_min = strlen(tmp);
+      tmp = strrchr(temp, '%');
+      if ( tmp )
+      if ( strlen(tmp) < val_min ) val_min = strlen(tmp);
+      tmp = strrchr(temp, ',');
+      if ( tmp )
+      if ( strlen(tmp) < val_min ) val_min = strlen(tmp);
+      tmp = strrchr(temp, ')');
+      if ( tmp )
+      if ( strlen(tmp) < val_min ) val_min = strlen(tmp);
+      tmp = strrchr(temp, '(');
+      if ( tmp )
+      if ( strlen(tmp) < val_min ) val_min = strlen(tmp);
+
+      size = val_min;
+
+      strcpy (&temp[60-size], "\0");
+
+      if ( retour77 == 0 ) fprintf (filout, "     &%s&\n", temp);
+      else fprintf (filout, "     &%s\n", temp);
+      colnum=0;
+      tofich_reste (filout, (char *) &s[60-size],returnlineornot);
+    }
+}
+
+/******************************************************************************/
+/*                            tofich                                          */
+/******************************************************************************/
+/* This subroutine is used to write the string s into the fileout             */
+/******************************************************************************/
+void tofich (FILE * filout, char *s, int returnlineornot)
+{
+  char temp[61];
+  char *tmp;
+  int size;
+  int val_min;
+
+  if (strlen (s) <= 60)
+    {
+      if ( returnlineornot == 0 ) fprintf (filout, "      %s", s);
+      else if ( returnlineornot == 2 ) fprintf (filout, "%s", s);
+      else if ( returnlineornot == 3 ) fprintf (filout, "%s\n", s);
+      else                             fprintf (filout, "      %s\n", s);
+      if ( returnlineornot == 0 || returnlineornot == 2 )
+                                                      colnum=colnum+strlen(s)+6;
+      else colnum=0;
+    }
+  else
+    {
+      val_min = 60;
+      strncpy (temp, s, 60);
+      strcpy (&temp[60], "\0");
+
+      tmp = strrchr(temp, '+');
+      if ( tmp )
+      if ( strlen(tmp) < val_min ) val_min = strlen(tmp);
+      tmp = strrchr(temp, '-');
+      if ( tmp )
+      if ( strlen(tmp) < val_min ) val_min = strlen(tmp);
+      tmp = strrchr(temp, '/');
+      if ( tmp )
+      if ( strlen(tmp) < val_min ) val_min = strlen(tmp);
+      tmp = strrchr(temp, '*');
+      if ( tmp )
+      if ( strlen(tmp) < val_min ) val_min = strlen(tmp);
+      tmp = strrchr(temp, '%');
+      if ( tmp )
+      if ( strlen(tmp) < val_min ) val_min = strlen(tmp);
+      tmp = strrchr(temp, ',');
+      if ( tmp )
+      if ( strlen(tmp) < val_min ) val_min = strlen(tmp);
+      tmp = strrchr(temp, ')');
+      if ( tmp )
+      if ( strlen(tmp) < val_min ) val_min = strlen(tmp);
+      tmp = strrchr(temp, '(');
+      if ( tmp )
+      if ( strlen(tmp) < val_min ) val_min = strlen(tmp);
+
+      size = val_min;
+
+      strcpy (&temp[60-size], "\0");
+
+      if ( retour77 == 0 ) fprintf (filout, "      %s&\n", temp);
+      else fprintf (filout, "      %s\n", temp);
+      colnum=0;
+      tofich_reste (filout, (char *) &s[60-size], returnlineornot);
+    }
+}
+
+/******************************************************************************/
+/*                       tofich_blanc                                         */
+/******************************************************************************/
+/* This subroutine is used to write size blank into the fileout               */
+/******************************************************************************/
+void tofich_blanc (FILE * filout, int size)
+{
+  int i;
+
+  if (size <= 65) fprintf (filout, "%*s\n",size,EmptyChar);
+  else
+  {
+      i=0;
+      do
+      {
+         fprintf (filout, "%*s\n",65,EmptyChar);
+         i = i+1;
+      } while ( i <= size / 65 );
+         fprintf (filout, "%*s\n",size%65,EmptyChar);
+  }
+
+}
+/******************************************************************************/
+/*                       tofich_line                                          */
+/******************************************************************************/
+/* This subroutine is used to write size blank into the fileout               */
+/******************************************************************************/
+void tofich_line (FILE * filout, int size, int long position)
+{
+  int i;
+  int retour;
+
+  if (size <= 65) fprintf (filout, "%*s",size,EmptyChar);
+  else
+  {
+      i=0;
+      do
+      {
+         fprintf (filout, "%*s",65,EmptyChar);
+         i = i+1;
+      } while ( i <= size / 65 );
+         fprintf (filout, "%*s",size%65,EmptyChar);
+  }
+
+   if ( !strstr(motparse1,"\n") ) retour=0;
+   else retour=1;
+
+   fseek(filout,position,SEEK_SET);
+   if (retour == 1 ) fprintf (filout, "\n");
+
+}
+
+
+/******************************************************************************/
+/*                           RemoveWordSET_0                                  */
+/******************************************************************************/
+/* This subroutine is used to remove a sentence in the file filout            */
+/******************************************************************************/
+void RemoveWordSET_0(FILE * filout, long int position, long int sizetoremove)
+{
+   if ( firstpass == 0 && couldaddvariable == 1 )
+   {
+      fseek(filout,position,SEEK_SET);
+      tofich_line(filout,sizetoremove,position);
+   }
+}
+
+
+/******************************************************************************/
+/*                         RemoveWordCUR_0                                    */
+/******************************************************************************/
+/* This subroutine is used to remove a sentence in the file filout            */
+/******************************************************************************/
+void RemoveWordCUR_0(FILE * filout, long int position, long int sizetoremove)
+{
+   if ( firstpass == 0  && couldaddvariable == 1 )
+   {
+      fseek(filout,position,SEEK_CUR);
+      tofich_blanc(filout,sizetoremove);
+   }
+}
Index: /vendors/AGRIF/r_00/LIB/Writedeclarations.c
===================================================================
--- /vendors/AGRIF/r_00/LIB/Writedeclarations.c	(revision 1902)
+++ /vendors/AGRIF/r_00/LIB/Writedeclarations.c	(revision 1902)
@@ -0,0 +1,659 @@
+/******************************************************************************/
+/*                                                                            */
+/*     CONV (converter) for Agrif (Adaptive Grid Refinement In Fortran)       */
+/*                                                                            */
+/* Copyright or   or Copr. Laurent Debreu (Laurent.Debreu@imag.fr)            */
+/*                        Cyril Mazauric (Cyril_Mazauric@yahoo.fr)            */
+/* This software is governed by the CeCILL-C license under French law and     */
+/* abiding by the rules of distribution of free software.  You can  use,      */
+/* modify and/ or redistribute the software under the terms of the CeCILL-C   */
+/* license as circulated by CEA, CNRS and INRIA at the following URL          */
+/* "http://www.cecill.info".                                                  */
+/*                                                                            */
+/* As a counterpart to the access to the source code and  rights to copy,     */
+/* modify and redistribute granted by the license, users are provided only    */
+/* with a limited warranty  and the software's author,  the holder of the     */
+/* economic rights,  and the successive licensors  have only  limited         */
+/* liability.                                                                 */
+/*                                                                            */
+/* In this respect, the user's attention is drawn to the risks associated     */
+/* with loading,  using,  modifying and/or developing or reproducing the      */
+/* software by the user in light of its specific status of free software,     */
+/* that may mean  that it is complicated to manipulate,  and  that  also      */
+/* therefore means  that it is reserved for developers  and  experienced      */
+/* professionals having in-depth computer knowledge. Users are therefore      */
+/* encouraged to load and test the software's suitability as regards their    */
+/* requirements in conditions enabling the security of their systems and/or   */
+/* data to be ensured and,  more generally, to use and operate it in the      */
+/* same conditions as regards security.                                       */
+/*                                                                            */
+/* The fact that you are presently reading this means that you have had       */
+/* knowledge of the CeCILL-C license and that you accept its terms.           */
+/******************************************************************************/
+/* version 1.7                                                                */
+/******************************************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "decl.h"
+
+/******************************************************************************/
+/*                         WriteBeginDeclaration                              */
+/******************************************************************************/
+/* This subroutine is used to write the begin of a declaration                */
+/* taken in a variable record                                                 */
+/*                                                                            */
+/******************************************************************************/
+/*                                                                            */
+/*       integer variable ----------->   INTEGER                              */
+/*                                                                            */
+/******************************************************************************/
+void WriteBeginDeclaration(variable *v,char ligne[LONG_4C], int visibility)
+{
+  char tmpligne[LONG_4C];
+
+  if ( !strcasecmp(v->v_typevar,"") )
+  {
+     printf("WARNING : The type of the variable %s \n",v->v_nomvar);
+     printf("          is unknown. CONV should define a type\n");
+  }
+  
+  sprintf (ligne, "%s", v->v_typevar);
+  if ( v->v_c_star == 1 ) strcat(ligne,"*");
+  
+  /* We should give the precision of the variable if it has been given        */
+  if ( strcasecmp(v->v_precision,"") )
+  {
+     sprintf(tmpligne,"(%s)",v->v_precision);
+     Save_Length(tmpligne,49);
+     strcat(ligne,tmpligne);
+  }
+  
+  if (strcasecmp(v->v_dimchar,""))
+  {
+     sprintf(tmpligne,"(%s)",v->v_dimchar);
+     Save_Length(tmpligne,49);
+     strcat(ligne,tmpligne);
+  }
+  
+  if ( strcasecmp(v->v_nameinttypename,"") )
+  {
+     sprintf(tmpligne,"*%s",v->v_nameinttypename);
+     Save_Length(tmpligne,49);
+     strcat(ligne,tmpligne);
+  }
+  if (strcasecmp (v->v_IntentSpec, ""))
+  {
+     sprintf(tmpligne,",INTENT(%s) ",v->v_IntentSpec);
+     Save_Length(tmpligne,49);
+     strcat(ligne,tmpligne);
+  }
+  if ( v->v_VariableIsParameter == 1 ) strcat(ligne, ", PARAMETER");
+  if (visibility == 1)
+  {
+  if ( v->v_PublicDeclare       == 1 ) strcat(ligne, ", PUBLIC");
+  if ( v->v_PrivateDeclare      == 1 ) strcat(ligne, ", PRIVATE");
+  }
+  if ( v->v_ExternalDeclare     == 1 ) strcat(ligne, ", EXTERNAL");
+  if ( v->v_allocatable         == 1 &&
+       v->v_save                == 0 )
+       {strcat(ligne,", ALLOCATABLE");
+       }
+  if ( v->v_optionaldeclare     == 1 ) strcat(ligne,", OPTIONAL");
+  if ( v->v_pointerdeclare      == 1 ) strcat(ligne,", POINTER");
+  Save_Length(ligne,45);
+}
+
+
+/******************************************************************************/
+/*                         WriteScalarDeclaration                             */
+/******************************************************************************/
+/* This subroutine is used to write a scalar declaration                      */
+/* taken in a variable record                                                 */
+/*                                                                            */
+/******************************************************************************/
+/*                                                                            */
+/*       integer variable ----------->   INTEGER :: VARIABLE                  */
+/*                                                                            */
+/******************************************************************************/
+void WriteScalarDeclaration(variable *v,char ligne[LONG_4C])
+{
+
+  strcat (ligne, " :: ");
+  strcat (ligne, v->v_nomvar);
+  if ( strcasecmp(v->v_vallengspec,"") ) strcat(ligne,v->v_vallengspec);
+  if ( v->v_VariableIsParameter == 1 )
+  {
+     strcat(ligne," = ");
+     strcat(ligne,v->v_initialvalue);
+  }
+  Save_Length(ligne,45);
+}
+
+
+/******************************************************************************/
+/*                         WriteTableDeclaration                              */
+/******************************************************************************/
+/* This subroutine is used to write a Table declaration                       */
+/* taken in a variable record                                                 */
+/*                                                                            */
+/******************************************************************************/
+/*                                                                            */
+/*  integer variable(nb) ----------->                                         */
+/*                      INTEGER, DIMENSION(1:nb) :: variable                  */
+/*                                                                            */
+/******************************************************************************/
+void WriteTableDeclaration(variable * v,char ligne[LONG_4C],int tmpok)
+{
+  char newname[LONG_4C];
+
+  strcat (ligne, ", Dimension(");
+
+  if ( v->v_dimensiongiven == 1 && tmpok == 1 )
+  {
+                                         strcat(ligne,v->v_readedlistdimension);
+                                         }
+  if ( v->v_dimensiongiven == 1 && tmpok == 0 )
+  {
+     strcpy(newname,ChangeTheInitalvaluebyTabvarsName
+                                  (v->v_readedlistdimension,List_Global_Var,0));
+
+     if ( !strcasecmp(newname,"") ) strcat(newname,v->v_readedlistdimension);
+
+        strcpy(newname,ChangeTheInitalvaluebyTabvarsName
+                                 (newname,List_Common_Var,0));
+
+     if ( !strcasecmp(newname,"") ) strcat(newname,v->v_readedlistdimension); 
+     
+        strcpy(newname,ChangeTheInitalvaluebyTabvarsName
+                              (newname,List_ModuleUsed_Var,0));
+        if ( !strcasecmp(newname,"") ) strcat(newname,v->v_readedlistdimension);
+
+     Save_Length(newname,47);
+     strcat(ligne,newname);
+  }
+  strcat (ligne, ")");
+  strcat (ligne, " :: ");
+  strcat (ligne, v->v_nomvar);
+  if ( strcasecmp(vallengspec,"") ) strcat(ligne,v->v_vallengspec);
+
+  if ( v->v_VariableIsParameter == 1 )
+  {
+     strcat(ligne," = ");
+     strcat(ligne,v->v_initialvalue);
+  }
+  Save_Length(ligne,45);
+}
+
+/******************************************************************************/
+/*                        writevardeclaration                                 */
+/******************************************************************************/
+/* This subroutine is used to write the initial declaration in the file       */
+/* fileout of a variable                                                      */
+/*                                                                            */
+/******************************************************************************/
+/*                                                                            */
+/*  integer variable(nb) ----------->                                         */
+/*                      INTEGER, DIMENSION(1:nb),Pointer :: variable          */
+/*                                                                            */
+/******************************************************************************/
+void writevardeclaration (listvar * var_record, FILE *fileout, int value, int visibility)
+{
+  FILE *filecommon;
+  listvar *newvar;
+  variable *v;
+  char ligne[LONG_4C];
+
+  filecommon=fileout;
+  newvar = var_record;
+  
+  if ( newvar->var->v_save == 0 || inmodulemeet == 0 )
+  {
+     v = newvar->var;
+     
+     WriteBeginDeclaration(v,ligne,visibility);
+
+     if ( v->v_nbdim == 0 ) WriteScalarDeclaration(v,ligne);
+     else WriteTableDeclaration(v,ligne,value);
+
+     if ( v->v_VariableIsParameter != 1 && strcasecmp(v->v_initialvalue,"") )
+     {
+        strcat(ligne," = ");
+        strcat(ligne,v->v_initialvalue);
+     }
+     
+     tofich (filecommon, ligne,1);
+  }
+  Save_Length(ligne,45);
+  
+}
+
+
+void WriteLocalParamDeclaration()
+{
+   listvar *parcours;
+
+   parcours = List_Parameter_Var;
+   while ( parcours )
+   {
+      if ( !strcasecmp(parcours->var->v_subroutinename,subroutinename) )
+      {
+         writevardeclaration(parcours,fortranout,0,1);
+      }
+      parcours = parcours -> suiv;
+   }
+}
+
+void WriteFunctionDeclaration(int value)
+{
+   listvar *parcours;
+
+   parcours = List_FunctionType_Var;
+   while ( parcours )
+   {
+      if ( !strcasecmp(parcours->var->v_subroutinename,subroutinename) &&
+            strcasecmp(parcours->var->v_typevar,"")
+         )
+      {
+         writevardeclaration(parcours,fortranout,value,1);
+      }
+      parcours = parcours -> suiv;
+   }
+}
+
+void WriteSubroutineDeclaration(int value)
+{
+   listvar *parcours;
+
+   parcours = List_SubroutineDeclaration_Var;
+   while ( parcours )
+   {
+      if ( !strcasecmp(parcours->var->v_subroutinename,subroutinename) &&
+           parcours->var->v_save == 0                                  &&
+          (parcours->var->v_allocatable == 0  || !strcasecmp(parcours->var->v_typevar,"type"))      &&
+           parcours->var->v_pointerdeclare == 0                        &&
+           parcours->var->v_VariableIsParameter == 0                   &&
+           parcours->var->v_common == 0
+         )
+      {
+         writevardeclaration(parcours,fortranout,value,1);
+
+      }
+      else if ( !strcasecmp(parcours->var->v_subroutinename,subroutinename) &&
+           parcours->var->v_save == 0                                  &&
+           parcours->var->v_VariableIsParameter == 0                   &&
+           parcours->var->v_common == 0
+              )
+      {
+         writevardeclaration(parcours,fortranout,value,1);
+
+      }
+      parcours = parcours -> suiv;
+   }
+}
+
+void WriteArgumentDeclaration_beforecall()
+{
+   int position;
+   listnom *neededparameter;
+   FILE *paramtoamr;
+   listvar *newvar;
+   char ligne[LONG_4C];
+
+   fprintf(fortranout,"#include \"Param_BeforeCall_%s.h\" \n",subroutinename);
+   /*                                                                         */
+   sprintf(ligne,"Param_BeforeCall_%s.h",subroutinename);
+   paramtoamr = associate (ligne);
+   /*                                                                         */
+   neededparameter = (listnom * )NULL;
+   /*                                                                         */
+   position = 1;
+   newvar = List_SubroutineArgument_Var;
+   while ( newvar )
+   {
+      if ( !strcasecmp(newvar->var->v_subroutinename,subroutinename) &&
+                       newvar->var->v_positioninblock == position
+         )
+      {
+         position = position + 1;
+
+         writevardeclaration(newvar,fortranout,0,1);
+         neededparameter = writedeclarationintoamr(List_Parameter_Var,
+                   paramtoamr,newvar->var,newvar->var->v_subroutinename,
+                   neededparameter,subroutinename);
+
+         newvar = List_SubroutineArgument_Var;
+      }
+      else newvar = newvar -> suiv;
+   }
+   Save_Length(ligne,45);
+   fclose(paramtoamr);
+}
+
+void WriteArgumentDeclaration_Sort()
+{
+   int position;
+   listvar *newvar;
+
+   /*                                                                         */
+   position = 1;
+   newvar = List_SubroutineArgument_Var;
+   while ( newvar )
+   {
+      if ( !strcasecmp(newvar->var->v_subroutinename,subroutinename) &&
+                       newvar->var->v_positioninblock == position
+         )
+      {
+         position = position + 1;
+
+         writevardeclaration(newvar,fortranout,1,1);
+         /*                                                                   */
+         newvar = List_SubroutineArgument_Var;
+      }
+      else newvar = newvar -> suiv;
+   }
+   /*                                                                         */
+   newvar = List_SubroutineArgument_Var;
+   while ( newvar )
+   {
+      if ( !strcasecmp(newvar->var->v_subroutinename,subroutinename) &&
+                       newvar->var->v_positioninblock == 0           &&
+                       newvar->var->v_nbdim == 0
+         )
+      {
+
+         writevardeclaration(newvar,fortranout,1,1);
+      }
+      newvar = newvar -> suiv;
+   }
+   /*                                                                         */
+   newvar = List_SubroutineArgument_Var;
+   while ( newvar )
+   {
+      if ( !strcasecmp(newvar->var->v_subroutinename,subroutinename) &&
+                       newvar->var->v_positioninblock == 0           &&
+                       newvar->var->v_nbdim != 0
+         )
+      {
+         writevardeclaration(newvar,fortranout,1,1);
+      }
+      newvar = newvar -> suiv;
+   }
+}
+
+/******************************************************************************/
+/*                      writedeclarationintoamr                               */
+/******************************************************************************/
+/* This subroutine is used to write the declaration of parameters needed in   */
+/*    allocation subroutines creates in toamr.c                               */
+/******************************************************************************/
+/*                                                                            */
+/*                                                                            */
+/******************************************************************************/
+listnom *writedeclarationintoamr (listvar * deb_common, FILE *fileout,
+                              variable *var , char commonname[LONG_C],
+                           listnom *neededparameter, char name_common[LONG_C])
+{
+  listvar *newvar;
+  variable *v;
+  char ligne[LONG_4C];
+  int changeval;
+  int out;
+  int writeit;
+  listnom *parcours;
+  listnom *parcoursprec;
+
+  parcoursprec = (listnom * )NULL;
+  /* we should list the needed parameter                                      */
+  if ( !strcasecmp(name_common,commonname) )
+     neededparameter = DecomposeTheNameinlistnom(var->v_readedlistdimension,
+                                                               neededparameter);
+  /*                                                                          */
+  parcours = neededparameter;
+  while (parcours)
+  {
+     newvar = deb_common;
+     out = 0 ;
+     while ( newvar && out == 0 )
+     {
+        if ( !strcasecmp(parcours->o_nom,newvar->var->v_nomvar) )
+        {
+           out=1;
+        /* add the name to the list of needed parameter                       */
+           neededparameter = DecomposeTheNameinlistnom(
+                 newvar->var->v_initialvalue,
+                 neededparameter );
+        }
+        else newvar=newvar->suiv;
+     }
+     parcours=parcours->suiv;
+   }
+  /*                                                                          */
+  parcours = neededparameter;
+  while (parcours)
+  {
+     newvar = deb_common;
+     out = 0 ;
+     while ( newvar && out == 0 )
+     {
+        if ( !strcasecmp(parcours->o_nom,newvar->var->v_nomvar) )
+        {
+           out=1;
+        /* add the name to the list of needed parameter                       */
+           neededparameter = DecomposeTheNameinlistnom(
+                 newvar->var->v_initialvalue,
+                 neededparameter );
+        }
+        else newvar=newvar->suiv;
+     }
+     parcours=parcours->suiv;
+   }
+  /*                                                                          */
+  tofich (fileout, "",1);
+  parcours = neededparameter;
+  while (parcours)
+  {
+     writeit = 0;
+     newvar = deb_common;
+     while ( newvar && writeit == 0 )
+     {
+        if ( !strcasecmp(parcours->o_nom,newvar->var->v_nomvar) &&
+             parcours->o_val == 0 )
+        {
+           writeit=1;
+           parcours->o_val = 1;
+        }
+        else newvar = newvar->suiv;
+     }
+
+     if ( writeit == 1  )
+     {
+        changeval = 0;
+        v = newvar->var;
+        if ( v->v_allocatable == 1 && strcasecmp(v->v_typevar,"type") )
+        {
+           changeval = 1;
+           v->v_allocatable = 0;
+        }
+        WriteBeginDeclaration(v,ligne,1);
+        if ( v->v_nbdim == 0 ) WriteScalarDeclaration(v,ligne);
+        else WriteTableDeclaration(v,ligne,1);
+
+        tofich (fileout, ligne,1);
+        if ( changeval == 1 )
+        {
+           v->v_allocatable = 1;
+        }
+     }
+     else
+     {
+        if (  strncasecmp(parcours->o_nom,"mpi_",4) == 0 &&
+              shouldincludempif                     == 1 )
+        {
+           shouldincludempif = 0;
+           fprintf(fileout,"      include \'mpif.h\' \n");
+        }
+     }
+     parcours=parcours->suiv;
+  }
+  Save_Length(ligne,45);
+  return neededparameter;
+}
+
+
+/******************************************************************************/
+/*                       writesub_loopdeclaration_scalar                      */
+/******************************************************************************/
+/* This subroutine is used to write the declaration part of subloop           */
+/*    subroutines                                                             */
+/******************************************************************************/
+/*                                                                            */
+/*  integer variable(nb) ----------->                                         */
+/*                                                                            */
+/*          INTEGER, DIMENSION(1:nb)         :: variable                      */
+/*                                                                            */
+/******************************************************************************/
+void writesub_loopdeclaration_scalar (listvar * deb_common, FILE *fileout)
+{
+  listvar *newvar;
+  variable *v;
+  char ligne[LONG_4C];
+
+  tofich (fileout, "",1);
+  newvar = deb_common;
+  while (newvar)
+  {
+     if ( newvar->var->v_nbdim == 0 &&
+          !strcasecmp(newvar->var->v_subroutinename,subroutinename)  &&
+          (newvar->var->v_allocatable == 0  || !strcasecmp(newvar->var->v_typevar,"type"))      &&
+           newvar->var->v_pointerdeclare == 0
+         )
+     {
+        v = newvar->var;
+
+        WriteBeginDeclaration(v,ligne,1);
+        WriteScalarDeclaration(v,ligne);
+        tofich (fileout, ligne,1);
+     }
+     newvar = newvar->suiv;
+  }
+  Save_Length(ligne,45);
+}
+
+/******************************************************************************/
+/*                       writesub_loopdeclaration_tab                         */
+/******************************************************************************/
+/* This subroutine is used to write the declaration part of subloop           */
+/*    subroutines                                                             */
+/******************************************************************************/
+/*                                                                            */
+/*  integer variable(nb) ----------->                                         */
+/*                                                                            */
+/*          INTEGER, DIMENSION(1:nb)         :: variable                      */
+/*                                                                            */
+/******************************************************************************/
+void writesub_loopdeclaration_tab (listvar * deb_common, FILE *fileout)
+{
+  listvar *newvar;
+  variable *v;
+  char ligne[LONG_4C];
+  int changeval;
+
+  tofich (fileout, "",1);
+  newvar = deb_common;
+  while (newvar)
+  {
+     if ( newvar->var->v_nbdim != 0                                 &&
+          !strcasecmp(newvar->var->v_subroutinename,subroutinename) &&
+          (newvar->var->v_allocatable == 0  || !strcasecmp(newvar->var->v_typevar,"type"))      &&
+          newvar->var->v_pointerdeclare == 0
+        )
+     {
+        changeval = 0;
+        v = newvar->var;
+        if ( v->v_allocatable == 1)
+        {
+          if (strcasecmp(v->v_typevar,"type"))
+           {
+           changeval = 1;
+           v->v_allocatable = 0;
+           }
+          else
+           {
+           changeval = 2;
+           v->v_allocatable = 0;
+           v->v_pointerdeclare = 1;
+           }
+        }
+
+        WriteBeginDeclaration(v,ligne,1);
+        WriteTableDeclaration(v,ligne,1);
+        tofich (fileout, ligne,1);
+        if ( changeval >= 1 ) v->v_allocatable = 1;
+        if ( changeval == 2 ) v->v_pointerdeclare = 0;
+     }
+     newvar = newvar->suiv;
+  }
+  Save_Length(ligne,45);
+}
+
+
+void ReWriteDeclarationAndAddTosubroutine_01(listvar *listdecl)
+{
+listvar *parcours;
+listvar *parcours2;
+listvar *parcours3;
+int out;
+
+if (insubroutinedeclare == 1)
+{
+parcours = listdecl;
+while (parcours)
+{
+/*
+parcours2 = List_SubroutineArgument_Var;
+out = 0;
+while (parcours2 && out == 0)
+{
+if (!strcasecmp(parcours2->var->v_subroutinename,subroutinename) && !strcasecmp(parcours2->var->v_nomvar,parcours->var->v_nomvar))
+ {
+ out = 1;
+ }
+parcours2 = parcours2->suiv;
+}
+*/
+out = LookingForVariableInList(List_SubroutineArgument_Var,parcours->var);
+if (out == 0) out = VariableIsInListCommon(parcours,List_Common_Var);
+if (out == 0) out = LookingForVariableInList(List_Parameter_Var,parcours->var);
+if (out == 0) out = LookingForVariableInList(List_FunctionType_Var,parcours->var);
+
+/*
+parcours2 = List_Common_Var;
+while (parcours2 && out == 0)
+{
+if (!strcasecmp(parcours2->var->v_commoninfile,mainfile) && !strcasecmp(parcours2->var->v_nomvar,parcours->var->v_nomvar))
+ {
+ out = 1;
+ }
+parcours2 = parcours2->suiv;
+}
+*/
+//printf("nom = %s %d %d %d\n",parcours->var->v_nomvar,out,VariableIsParameter,SaveDeclare);
+if (firstpass == 0 && out == 0 && VariableIsParameter == 0 && SaveDeclare == 0) 
+
+{
+writevardeclaration(parcours,fortranout,1,1);
+}
+//if (firstpass == 1 && out == 1)
+if (firstpass == 1)
+  {
+  if (VariableIsParameter == 0 && SaveDeclare == 0)
+    {
+    List_SubroutineDeclaration_Var = insertvar(List_SubroutineDeclaration_Var,parcours->var);
+    }
+  }
+parcours = parcours->suiv;
+}
+}
+}
Index: /vendors/AGRIF/r_00/LIB/convert.lex
===================================================================
--- /vendors/AGRIF/r_00/LIB/convert.lex	(revision 1902)
+++ /vendors/AGRIF/r_00/LIB/convert.lex	(revision 1902)
@@ -0,0 +1,87 @@
+/******************************************************************************/
+/*                                                                            */
+/*     CONV (converter) for Agrif (Adaptive Grid Refinement In Fortran)       */
+/*                                                                            */
+/* Copyright or   or Copr. Laurent Debreu (Laurent.Debreu@imag.fr)            */
+/*                        Cyril Mazauric (Cyril_Mazauric@yahoo.fr)            */
+/* This software is governed by the CeCILL-C license under French law and     */
+/* abiding by the rules of distribution of free software.  You can  use,      */
+/* modify and/ or redistribute the software under the terms of the CeCILL-C   */
+/* license as circulated by CEA, CNRS and INRIA at the following URL          */
+/* "http://www.cecill.info".                                                  */
+/*                                                                            */
+/* As a counterpart to the access to the source code and  rights to copy,     */
+/* modify and redistribute granted by the license, users are provided only    */
+/* with a limited warranty  and the software's author,  the holder of the     */
+/* economic rights,  and the successive licensors  have only  limited         */
+/* liability.                                                                 */
+/*                                                                            */
+/* In this respect, the user's attention is drawn to the risks associated     */
+/* with loading,  using,  modifying and/or developing or reproducing the      */
+/* software by the user in light of its specific status of free software,     */
+/* that may mean  that it is complicated to manipulate,  and  that  also      */
+/* therefore means  that it is reserved for developers  and  experienced      */
+/* professionals having in-depth computer knowledge. Users are therefore      */
+/* encouraged to load and test the software's suitability as regards their    */
+/* requirements in conditions enabling the security of their systems and/or   */
+/* data to be ensured and,  more generally, to use and operate it in the      */
+/* same conditions as regards security.                                       */
+/*                                                                            */
+/* The fact that you are presently reading this means that you have had       */
+/* knowledge of the CeCILL-C license and that you accept its terms.           */
+/******************************************************************************/
+/* version 1.7                                                                */
+/******************************************************************************/
+%s character
+%{
+#include <math.h>
+#include <stdlib.h>
+#include <string.h>
+int line_num=1;
+extern FILE * yyin;
+#define MAX_INCLUDE_DEPTH 30
+YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH];
+%}
+
+COMMENT "%"
+SEPARATEUR "::"
+NIMPORTEQUOI .
+COMMENTAIRES1 {COMMENT}{NIMPORTEQUOI}*{COMMENT}
+PROBTYPE "1D"|"2D"|"3D"
+USEITEM "FIXED_GRIDS"|"ONLY_FIXED_GRIDS"|"F77"
+NAME [a-zA-Z\_][a-zA-Z0-9\_]*
+DIGIT [0-9]+
+NEXTLINE \n+[ \t]+"$"|\n+[ \t]+"&"
+%%
+parammodule return TOK_MODULEMAIN; /* name of the module                      */
+notgriddep  return TOK_NOTGRIDDEP; /* variable which are not grid dependent   */
+use         return TOK_USE;
+{COMMENTAIRES1}    {}
+{SEPARATEUR}        return TOK_SEP;
+{USEITEM}          {strcpy(yylval.na,yytext); return TOK_USEITEM;}
+{PROBTYPE}         {strcpy(yylval.na,yytext); return TOK_PROBTYPE;}
+                                   /* dimension of the problem                */
+{NAME}             {strcpy(yylval.na,yytext); return TOK_NAME;}
+;|\,|\(|\)|:|\[|\] {return (int) *yytext;}
+\n                 {line_num++;return (int) *yytext;}
+[ \t]+ ;
+%%
+
+
+int yywrap()
+{
+}
+
+
+yyerror(char *s)
+{
+if (!strcasecmp(curfile,mainfile))
+{
+   printf("Dans convert %s line %d, fichier %s\n",s,line_num,curfile);
+}
+else
+{
+   printf("Dans convert %s line %d, fichier %s\n",s,line_num,curfile);
+}
+exit(0);
+}
Index: /vendors/AGRIF/r_00/LIB/convert.y
===================================================================
--- /vendors/AGRIF/r_00/LIB/convert.y	(revision 1902)
+++ /vendors/AGRIF/r_00/LIB/convert.y	(revision 1902)
@@ -0,0 +1,450 @@
+/******************************************************************************/
+/*                                                                            */
+/*     CONV (converter) for Agrif (Adaptive Grid Refinement In Fortran)       */
+/*                                                                            */
+/* Copyright or   or Copr. Laurent Debreu (Laurent.Debreu@imag.fr)            */
+/*                        Cyril Mazauric (Cyril_Mazauric@yahoo.fr)            */
+/* This software is governed by the CeCILL-C license under French law and     */
+/* abiding by the rules of distribution of free software.  You can  use,      */
+/* modify and/ or redistribute the software under the terms of the CeCILL-C   */
+/* license as circulated by CEA, CNRS and INRIA at the following URL          */
+/* "http://www.cecill.info".                                                  */
+/*                                                                            */
+/* As a counterpart to the access to the source code and  rights to copy,     */
+/* modify and redistribute granted by the license, users are provided only    */
+/* with a limited warranty  and the software's author,  the holder of the     */
+/* economic rights,  and the successive licensors  have only  limited         */
+/* liability.                                                                 */
+/*                                                                            */
+/* In this respect, the user's attention is drawn to the risks associated     */
+/* with loading,  using,  modifying and/or developing or reproducing the      */
+/* software by the user in light of its specific status of free software,     */
+/* that may mean  that it is complicated to manipulate,  and  that  also      */
+/* therefore means  that it is reserved for developers  and  experienced      */
+/* professionals having in-depth computer knowledge. Users are therefore      */
+/* encouraged to load and test the software's suitability as regards their    */
+/* requirements in conditions enabling the security of their systems and/or   */
+/* data to be ensured and,  more generally, to use and operate it in the      */
+/* same conditions as regards security.                                       */
+/*                                                                            */
+/* The fact that you are presently reading this means that you have had       */
+/* knowledge of the CeCILL-C license and that you accept its terms.           */
+/******************************************************************************/
+/* version 1.7                                                                */
+/******************************************************************************/
+%{
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include "decl.h"
+%}
+
+%union {
+       int ival;
+       char na[LONG_C];
+       listnom * ln;
+       }
+
+%token TOK_SEP
+%token TOK_USE
+%token TOK_MODULEMAIN      /* name of the module                              */
+%token TOK_NOTGRIDDEP      /* Variable which are not grid dependent           */
+%token <na> TOK_USEITEM
+%token <na> TOK_NAME
+%token <na> TOK_PROBTYPE   /* dimension of the problem                        */
+%token ','
+%token ';'
+%token ':'
+%token '('
+%token ')'
+%token '['
+%token ']'
+%%
+input :
+      | input line
+;
+line :'\n'
+      | TOK_PROBTYPE TOK_NAME ';'                   {initdimprob(1,$2,"0","0");}
+      | TOK_PROBTYPE TOK_NAME ',' TOK_NAME ';'      {initdimprob(2,$2, $4,"0");}
+      | TOK_PROBTYPE TOK_NAME ',' TOK_NAME ',' TOK_NAME ';'
+                                                    {initdimprob(3,$2, $4, $6);}
+      | TOK_MODULEMAIN TOK_NAME ';'
+                             {listofmodules = Addtolistnom($2,listofmodules,0);
+                                                        Addmoduletothelist($2);}
+      | TOK_NOTGRIDDEP TOK_SEP TOK_NAME ';'       {Add_NotGridDepend_Var_1($3);}
+      | TOK_USE TOK_USEITEM ';'  {
+                                    if (!strcasecmp($2,"FIXED_GRIDS"))
+                                                                 fixedgrids=1;
+                                    if (!strcasecmp($2,"ONLY_FIXED_GRIDS"))
+                                                             onlyfixedgrids=1;
+                                 }
+      ;
+%%
+
+int main(int argc,char *argv[])
+{
+   extern FILE * yyin ;
+   FILE *dependglobaloutput;
+   int i;
+   listnom *parcours;
+   listvar *newvar;
+   int stylegiven = 0;
+   int infreegiven ;
+   int infixedgiven ;
+   int lengthmainfile;
+
+   if (argc < 2)
+   {
+       printf("usage : conv <file> [-rm] [-incdir <directory>] \n");
+       printf(" [-comdirin   <directory>] [-comdirout <directory>]\n");
+       printf(" [-convfile  <FILENAME >] -SubloopScalar -SubloopScalar1 \n");
+       printf(" [-free|-fixed]\n");
+       exit(0);
+   }
+/******************************************************************************/
+/*  1-  Variables initialization                                              */
+/******************************************************************************/
+   List_Global_Var=(listvar *)NULL;
+   List_GlobalParameter_Var=(listvar *)NULL;
+   List_Allocate_Var=(listallocate *)NULL;
+   List_Common_Var=(listvar *)NULL;
+   List_SubroutineWhereAgrifUsed=(listnom *)NULL;
+   List_Subroutine_For_Alloc=(listnom *)NULL;
+   List_Include=(listusemodule *)NULL;
+   List_NameOfModuleUsed=(listusemodule *)NULL;
+   listofmoduletmp=(listusemodule *)NULL;
+   List_SubroutineDeclaration_Var=(listvar *)NULL;
+   List_UsedInSubroutine_Var=(listvar *)NULL;
+   List_NotGridDepend_Var=(listvar *)NULL;
+   Listofavailableindices=(listindice *)NULL;
+   List_CouplePointed_Var=(listvarpointtovar *)NULL;
+   List_ModuleUsed_Var = (listvar *)NULL;
+   List_ModuleUsedInModuleUsed_Var = (listvar *)NULL;
+   List_GlobParamModuleUsed_Var = (listparameter *)NULL;
+   List_GlobParamModuleUsedInModuleUsed_Var = (listparameter *)NULL;
+   List_SubroutineArgument_Var = (listvar *)NULL;
+   List_FunctionType_Var = (listvar *)NULL;
+   tmpuselocallist = (listusemodule *)NULL;
+   List_ContainsSubroutine = (listnom *)NULL;
+   oldfortranout = (FILE *)NULL;
+
+   strcpy(mainfile,argv[1]);
+   strcpy(nomdir,"AGRIF_INC");
+   strcpy(commondirin,".");
+   strcpy(commondirout,".");
+   strcpy(filetoparse," ");
+   strcpy(subofagrifinitgrids,"");
+   strcpy(meetagrifinitgrids,"");
+   strcpy(mpiinitvar,"");
+
+   length_last = 0 ;
+   length_first = 0 ;
+   length_v_typevar = 0 ;
+   length_v_nomvar = 0 ;
+   length_v_dimchar = 0 ;
+   length_v_modulename = 0 ;
+   length_v_commonname = 0 ;
+   length_v_vallengspec = 0 ;
+   length_v_nameinttypename = 0 ;
+   length_v_commoninfile = 0 ;
+   length_v_subroutinename = 0 ;
+   length_v_precision = 0 ;
+   length_v_IntentSpec = 0 ;
+   length_v_initialvalue = 0 ;
+   length_v_readedlistdimension = 0 ;
+   length_u_usemodule = 0 ;
+   length_u_charusemodule = 0 ;
+   length_u_cursubroutine = 0 ;
+   length_u_modulename = 0 ;
+   length_n_name = 0 ;
+   length_c_namevar = 0 ;
+   length_c_namepointedvar = 0 ;
+   length_o_nom = 0 ;
+   length_o_module = 0 ;
+   length_a_nomvar = 0 ;
+   length_a_subroutine = 0 ;
+   length_a_module = 0 ;
+   length_t_usemodule = 0 ;
+   length_t_cursubroutine = 0 ;
+   length_curfilename = 0 ;
+   length_nomfileoutput = 0 ;
+   length_motparse = 0 ;
+   length_mainfile = 0 ;
+   length_nomdir = 0 ;
+   length_commondirout = 0 ;
+   length_commondirin = 0 ;
+   length_filetoparse = 0 ;
+   length_curbuf = 0 ;
+   length_toprintglob = 0 ;
+   length_tmpvargridname = 0 ;
+   length_ligne_Subloop = 0 ;
+   length_lvargridname_toamr = 0 ;
+   length_toprint_utilagrif = 0 ;
+   length_toprinttmp_utilchar = 0 ;
+   length_ligne_writedecl = 0 ;
+   length_newname_toamr = 0 ;
+   length_newname_writedecl = 0 ;
+   length_ligne_toamr = 0 ;
+   length_tmpligne_writedecl = 0 ;
+   value_char_size = 0 ;
+   value_char_size1 = 0 ;
+   value_char_size2 = 0 ;
+   value_char_size3 = 0 ;
+   inallocate = 0;
+   infixed = 1;
+   infree  = 0;
+
+   checkexistcommon=1;
+   todebug=0;
+   onlyfixedgrids=0;
+   fixedgrids=0;
+   InAgrifParentDef = 0;
+   IndicenbmaillesX=0;
+   IndicenbmaillesY=0;
+   IndicenbmaillesZ=0;
+   created_dimensionlist = 1;
+   indicemaxtabvars = 0;   /* current indice in the table tabvars             */
+   SubloopScalar = 0;
+   todebug = 0;
+   todebugfree = 0;
+   retour77 = 1 ;
+   mark = 0 ;
+   shouldincludempif = 0 ;
+   Read_val_max();
+/******************************************************************************/
+/*  2-  Program arguments                                                     */
+/******************************************************************************/
+
+   if ((yyin=fopen(argv[1],"r"))==NULL)
+   {
+      printf("the file %s doesn't exist \n",argv[1]);
+      exit(0);
+   }
+
+   i=2;
+   while (i<argc)
+   {
+      if (!strcasecmp(argv[i],"-incdir"))
+      {
+         strcpy(nomdir,argv[i+1]);
+         i++;
+      }
+      else if (!strcasecmp(argv[i],"-comdirin")) /* input directory           */
+      {
+         strcpy(commondirin,argv[i+1]);
+         i++;
+      }
+      else if (!strcasecmp(argv[i],"-comdirout")) /* output directory         */
+      {
+         strcpy(commondirout,argv[i+1]);
+         i++;
+      }
+      else if (!strcasecmp(argv[i],"-convfile")) /* file to parse             */
+      {
+         strcpy(filetoparse,argv[i+1]);
+         i++;
+         lengthmainfile = strlen(filetoparse);
+         if (!strcasecmp(&filetoparse[lengthmainfile-4],".f90"))
+         {
+         infixed = 0;
+         infree = 1;
+         }
+         else
+         {
+         infixed = 1;
+         infree = 0;
+         }
+      }
+      else if (!strcasecmp(argv[i],"-free")) /* file to parse        */
+      {
+         stylegiven = 1;
+         infreegiven  = 1 ;
+         infixedgiven = 0;
+      }   
+      else if (!strcasecmp(argv[i],"-fixed")) /* file to parse        */
+      {
+         stylegiven = 1;
+         infreegiven  = 0;
+         infixedgiven = 1;
+      }         
+      else if (!strcasecmp(argv[i],"-SubloopScalar")) /* file to parse        */
+      {
+         SubloopScalar = 1 ;
+      }
+      else if (!strcasecmp(argv[i],"-SubloopScalar1")) /* file to parse       */
+      {
+         SubloopScalar = 2 ;
+      }
+      else if (!strcasecmp(argv[i],"-todebug")) /* file to parse       */
+      {
+         todebug = 1 ;
+      }
+      else if (!strcasecmp(argv[i],"-mark")) /* file to parse       */
+      {
+         mark = 1 ;
+      }
+      else if (!strcasecmp(argv[i],"-todebugfree")) /* file to parse       */
+      {
+         todebugfree = 1 ;
+      }
+      else if (!strcasecmp(argv[i],"-rm"))
+      {
+         checkexistcommon=0;
+      }
+      else
+      {
+         printf("Unkwon option : %s\n",argv[i]);
+         exit(0);
+      }
+      i++;
+   }
+
+   if (stylegiven == 1) 
+   {
+   infree = infreegiven;
+   infixed = infixedgiven;   
+   }
+   Save_Length(nomdir,34);
+   Save_Length(commondirout,35);
+   Save_Length(commondirin,36);
+   Save_Length(filetoparse,37);
+
+/******************************************************************************/
+/*  3-  Parsing of the  conv file <name>.in                                   */
+/******************************************************************************/
+
+   if ((yyin=fopen(argv[1],"r"))==NULL)
+   {
+       printf("the file %s doesn't exist \n",argv[1]);
+       exit(0);
+   }
+   strcpy(mainfile,argv[1]);
+   Save_Length(mainfile,33);
+
+   if ( strstr(filetoparse,".f90") ||
+        strstr(filetoparse,".F90") ) retour77 = 0;
+
+   yyparse();
+
+/******************************************************************************/
+/*  4-  Preparation of the file parsing                                       */
+/******************************************************************************/
+   if ((yyin=fopen(filetoparse,"r"))==NULL) /* Is the file to parse exist ?   */
+   {
+      printf("the file %s doesn't exist \n",filetoparse);
+      exit(0);
+   }
+   /* mainfile : the name of the file to parse                                */
+   strcpy(mainfile,filetoparse);
+   /*                                                                         */
+   if ((dependglobaloutput=fopen(".dependglobal_agrif","r"))!=NULL)
+   {
+      fscanf(dependglobaloutput,"%d\n",&indicemaxtabvars);
+      fclose(dependglobaloutput);
+   }
+   Readthedependavailablefile();
+   /* Read the .dependnbxnby file which contains indices of nbmaillsX,        */
+   /*    nbmailleY and nbmailleZ                                              */
+   Readthedependnbxnbyfile();
+   Read_Subroutine_For_Alloc();
+/******************************************************************************/
+/*  5-  Parsing of the input file (2 times)                                   */
+/******************************************************************************/
+   /* Record all variable in list                                             */
+   firstpass = 1;
+   processfortran(filetoparse);
+   /*                                                                         */
+   CompleteThelistvarindoloop();
+   /* Read list of module used                                                */
+   RecordUseModulesVariables();
+   /* Read list of module used in module used                                 */
+   RecordUseModulesUseModulesVariables();
+   /* Save variables are considered as globals ones                           */
+   Update_List_Global_Var_From_List_Save_Var();
+   /* Update all lists                                                        */
+   ListUpdate();
+   /*                                                                         */
+   Clean_List_Global_Var();
+   /* Indice tabvars identification                                           */
+   IndiceTabvarsIdentification();
+   /* Update all lists                                                        */
+   ListUpdate();
+   /* The allocation subroutine is necessary ????                             */
+   New_Allocate_Subroutine_Is_Necessary();
+   /* The allocation subroutine is necessary for common list                  */
+   New_Allocate_Subroutine_For_Common_Is_Necessary();
+   /* Sort List_SubroutineArgument_Var                                        */
+   Sort_List_SubroutineArgument_Var();
+   /* Clean all lists                                                         */
+   ListClean();
+   /* Update Indice of List_UsedInSubroutine_Var from module used             */
+   List_UsedInSubroutine_Var_Update_From_Module_Used();
+   /* Update List_SubroutineWhereAgrifUsed                                    */
+   UpdateList_SubroutineWhereAgrifUsed();
+   /* Update List_UsedInSubroutine_Var with v_readedlistdimension             */
+   UpdateList_UsedInSubroutine_With_dimension();;
+   /*                                                                         */
+   ModifyThelistvarindoloop();
+   /*                                                                         */
+   UpdateListDeclarationWithDimensionList();
+   /*                                                                         */
+   GiveTypeOfVariables();
+   Affiche();
+   /* Build new subroutines                                                   */
+   firstpass = 0;
+   processfortran(filetoparse);
+
+   newvar = (listvar *)NULL;
+/*newvar = List_Global_Var; */
+   while ( newvar )
+   {
+      printf("++++ %s %d %s %s %s\n",
+      newvar->var->v_nomvar,
+      newvar->var->v_nbdim,
+      newvar->var->v_subroutinename,
+      newvar->var->v_modulename,
+      newvar->var->v_typevar
+             );
+      newvar = newvar->suiv;
+   }
+/******************************************************************************/
+/*  6-  Write informations in output files                                    */
+/******************************************************************************/
+
+   /* Write the .dependglobal_agrif file which contain the max indice         */
+   /*    of the tabvars table                                                 */
+   dependglobaloutput = fopen(".dependglobal_agrif","w");
+   fprintf(dependglobaloutput,"%d\n",indicemaxtabvars);
+   fclose(dependglobaloutput);
+   /* Write the list of available indice                                      */
+   Writethedependavailablefile();
+   /* Write the .dependnbxnby file which contains indices of nbmaillsX,       */
+   /*    nbmailleY and nbmailleZ                                              */
+   Writethedependnbxnbyfile();
+   /* Write the .depend<namefile> file which contain general informations     */
+   /*    about variable of this file                                          */
+   parcours = List_NameOfModule;
+   while( parcours )
+   {
+      Writethedependlistofmoduleused(parcours->o_nom);
+      WritedependParameterList(parcours->o_nom);
+      Writethedependfile(parcours->o_nom,List_Global_Var);
+      parcours=parcours->suiv;
+   }
+   parcours = List_NameOfCommon;
+   while( parcours )
+   {
+      Writethedependfile(parcours->o_nom,List_Common_Var);
+      parcours=parcours->suiv;
+   }
+   Write_Subroutine_For_Alloc();
+/******************************************************************************/
+/*  7-  Create files in AGRIF_INC directory                                   */
+/******************************************************************************/
+   creefichieramr(NameTamponfile);
+
+   Write_val_max();
+
+   if ( todebug == 1 ) printf("Out of CONV \n");
+   return 0;
+}
Index: /vendors/AGRIF/r_00/LIB/decl.h
===================================================================
--- /vendors/AGRIF/r_00/LIB/decl.h	(revision 1902)
+++ /vendors/AGRIF/r_00/LIB/decl.h	(revision 1902)
@@ -0,0 +1,730 @@
+/******************************************************************************/
+/*                                                                            */
+/*     CONV (converter) for Agrif (Adaptive Grid Refinement In Fortran)       */
+/*                                                                            */
+/* Copyright or   or Copr. Laurent Debreu (Laurent.Debreu@imag.fr)            */
+/*                        Cyril Mazauric (Cyril_Mazauric@yahoo.fr)            */
+/* This software is governed by the CeCILL-C license under French law and     */
+/* abiding by the rules of distribution of free software.  You can  use,      */
+/* modify and/ or redistribute the software under the terms of the CeCILL-C   */
+/* license as circulated by CEA, CNRS and INRIA at the following URL          */
+/* "http://www.cecill.info".                                                  */
+/*                                                                            */
+/* As a counterpart to the access to the source code and  rights to copy,     */
+/* modify and redistribute granted by the license, users are provided only    */
+/* with a limited warranty  and the software's author,  the holder of the     */
+/* economic rights,  and the successive licensors  have only  limited         */
+/* liability.                                                                 */
+/*                                                                            */
+/* In this respect, the user's attention is drawn to the risks associated     */
+/* with loading,  using,  modifying and/or developing or reproducing the      */
+/* software by the user in light of its specific status of free software,     */
+/* that may mean  that it is complicated to manipulate,  and  that  also      */
+/* therefore means  that it is reserved for developers  and  experienced      */
+/* professionals having in-depth computer knowledge. Users are therefore      */
+/* encouraged to load and test the software's suitability as regards their    */
+/* requirements in conditions enabling the security of their systems and/or   */
+/* data to be ensured and,  more generally, to use and operate it in the      */
+/* same conditions as regards security.                                       */
+/*                                                                            */
+/* The fact that you are presently reading this means that you have had       */
+/* knowledge of the CeCILL-C license and that you accept its terms.           */
+/******************************************************************************/
+/* version 1.7                                                                */
+/******************************************************************************/
+#define LONGNOM 8000
+
+#define LONG_C 3000
+#define LONG_4C 4000
+#define LONG_4M 4000
+#define LONG_40M 40000
+
+/******************************************************************************/
+/*********** Declaration of structures used in conv ***************************/
+/******************************************************************************/
+
+typedef struct
+{
+   char first[LONG_C];
+   char last[LONG_C];
+} typedim ;                /* fortran dimension as 'ndeb:nfin'                */
+
+typedef struct listdim
+{
+   typedim dim;
+   struct listdim *suiv;
+} listdim;                 /* list of the dimensions of a variable            */
+
+typedef struct variable
+{
+   char v_typevar[LONG_C];
+   char v_nomvar[LONG_C] ;
+   char v_oldname[LONG_C] ;
+   char v_dimchar[LONG_C];
+   char v_modulename[LONG_C];
+   char v_commonname[LONG_C];
+   char v_vallengspec[LONG_C];
+   char v_nameinttypename[LONG_C];
+   char v_commoninfile[LONG_C];
+   char v_subroutinename[LONG_C];
+   char v_precision[LONG_C];
+   char v_initialvalue[LONG_4C];
+   char v_IntentSpec[LONG_C];
+   char v_readedlistdimension[LONG_C];
+   int  v_nbdim;
+   int  v_common;
+   int  v_positioninblock;
+   int  v_module;
+   int  v_save;
+   int  v_VariableIsParameter;
+   int  v_PublicDeclare;
+   int  v_PrivateDeclare;
+   int  v_ExternalDeclare;
+   int  v_pointedvar;
+   int  v_notgrid;
+   int  v_dimensiongiven;
+   int  v_c_star;
+   int  v_indicetabvars;
+   int  v_pointerdeclare;
+   int  v_optionaldeclare;
+   int  v_allocatable;
+   int  v_dimsempty;
+   listdim *v_dimension;
+} variable ;               /* type of a variable                              */
+                           /* v_typevar : type (integer, real, ...)           */
+                           /* v_nomvar : name of the variable                 */
+                           /* v_dimension : list of dimensions of the variable*/
+                           /* v_nbdim: 1 if the variable is 1d, etc ...       */
+                           /* precision : Name of the variable which          */
+                           /* determine the precision. example : wp in the    */
+                           /* case where REAL(wp)                             */
+
+typedef struct listvar
+{
+   variable *var ;
+   struct listvar * suiv;
+} listvar ;                /* list of variables                               */
+
+
+typedef struct listusemodule
+{
+   char u_usemodule[LONG_C];
+   char u_charusemodule[LONG_C];
+   char u_cursubroutine[LONG_C];
+   char u_modulename[LONG_C];
+   int  u_firstuse;
+   struct listusemodule * suiv;
+} listusemodule;           /* list of names                                   */
+
+typedef struct listparameter
+{
+   char p_name[LONG_C];
+   char p_modulename[LONG_C];
+   struct listparameter * suiv;
+} listparameter ;           /* list of names                                  */
+
+typedef struct listname
+{
+   char n_name[LONG_C];
+   struct  listname* suiv;
+} listname ;            /* list of names                                  */
+
+typedef struct listcouple
+{
+   char c_namevar[LONG_C];
+   char c_namepointedvar[LONG_C];
+   struct listcouple * suiv;
+} listcouple;              /* list of names                                   */
+
+
+typedef struct listnom
+{
+   char o_nom[LONG_C];
+   char o_module[LONG_C];
+   int  o_val;
+   listcouple *couple;
+   struct listnom * suiv;
+} listnom;                 /* list of names                                   */
+
+
+typedef struct listallocate
+{
+   char a_nomvar[LONG_C];
+   char a_subroutine[LONG_C];
+   char a_module[LONG_C];
+   struct listallocate * suiv;
+} listallocate ;
+
+
+typedef struct listvarpointtovar
+{
+   char t_usemodule[LONG_C];
+   char t_cursubroutine[LONG_C];
+   listcouple *t_couple;
+   struct  listvarpointtovar* suiv;
+}listvarpointtovar ;       /* list of names                                   */
+
+
+typedef struct listindice
+{
+   int i_indice;
+   struct  listindice * suiv;
+} listindice;              /* list of indiced                                 */
+
+ variable *curvar;
+
+ listvar *List_ModuleUsedInModuleUsed_Var;
+ listvar *List_ModuleUsed_Var;
+ listvar *listduplicated;
+
+ listvar *List_GlobalParameter_Var;
+ listvar *List_Global_Var;
+ listvar *List_Data_Var;
+ listvar *List_Save_Var;
+ listvar *List_SubroutineArgument_Var;
+ listvar *List_SubroutineDeclaration_Var;
+ listvar *List_UsedInSubroutine_Var;
+ listvar *List_Parameter_Var;
+ listvar *List_Dimension_Var;
+ listvar *List_FunctionType_Var;
+ listvar *List_NotGridDepend_Var;
+ listvar *List_Common_Var;
+
+
+ listname *List_Pointer_Var;
+ listname *List_ImplicitNoneSubroutine;
+
+ listusemodule *List_NameOfModuleUsed;
+ listusemodule *List_Include;
+ listusemodule *listofmoduletmp;
+ listusemodule *tmpuselocallist;
+
+ listparameter *List_GlobParamModuleUsedInModuleUsed_Var;
+ listparameter *List_GlobParamModuleUsed_Var;
+
+ listnom *List_ContainsSubroutine;
+ listnom *List_Subroutine_For_Alloc;
+ listnom *listofmodules;
+ listnom *List_NameOfModule;
+ listnom *List_NameOfCommon;
+ listnom *List_SubroutineWhereAgrifUsed;
+
+ listallocate *List_Allocate_Var;
+
+ listvarpointtovar *List_CouplePointed_Var;
+                           /*  variables which are pointed to an other one    */
+
+ listindice *Listofavailableindices;
+                           /* List of available indices in the tabvars table  */
+
+ listdim *curdim;
+ listdim *commondim;
+
+/******************************************************************************/
+/****************   *** COMMON Variables ***  *********************************/
+/******************************************************************************/
+
+ int positioninblock;
+ char commonvar[LONG_C];
+ char commonblockname[LONG_C];
+
+/******************************************************************************/
+/****************   *** AGRIF Variables ***   *********************************/
+/******************************************************************************/
+ int inagrifcallargument;
+ int sameagrifargument;
+ int InAgrifParentDef;
+ char sameagrifname[LONG_C];
+/******************************************************************************/
+/****************   *** VAR DEF Variables ***   *******************************/
+/******************************************************************************/
+ int indicemaxtabvars;     /* Number of variables in the model i.e. last      */
+                           /*    indice used in  the tabvars table            */
+ int PublicDeclare;        /* Variable has been declared as PUBLIC */
+ int PrivateDeclare;       /* Variable has been declared as PRIVATE */
+ int ExternalDeclare;      /* Variable has been declared as EXTERNAL */
+ int InitialValueGiven;    /* An initial value has been given */
+ int Allocatabledeclare;
+ int SaveDeclare;
+ int functiondeclarationisdone;
+ int pointerdeclare;
+ int optionaldeclare;
+ int VarType;
+ int VarTypepar;
+ int VariableIsParameter;
+ int dimsgiven;
+ int shouldincludempif;
+ int c_star;
+ char DeclType[LONG_C];
+ char nameinttypename[LONG_C];
+ char nameinttypenameback[LONG_C]; 
+ int GlobalDeclaration;
+ char InitValue[LONG_4C];
+ char IntentSpec[LONG_C];
+ char NamePrecision[LONG_C];
+ char CharacterSize[LONG_C];
+ char curmodulename[LONG_C];
+ char vallengspec[LONG_C];
+ char subroutinename[LONG_C];
+
+/******************************************************************************/
+/****************   *** CONV Variables ***   **********************************/
+/******************************************************************************/
+ int dimprob ;             /* dimension of the problem : 1 for 1D,2 for 2D,   */
+                           /*    3 for 3D                                     */
+ int onlyfixedgrids;       /* = 1 if onlyfixedgrids is true                   */
+ int todebug;
+ int mark;
+ int todebugfree;
+ int fixedgrids;           /* = 1 if fixedgrids is true                       */
+ char nbmaillesX[LONG_C]; /* number of cells in the x direction              */
+ char nbmaillesY[LONG_C]; /* number of cells in the y direction              */
+ char nbmaillesZ[LONG_C]; /* number of cells in the z direction              */
+ int IndicenbmaillesX;
+ int IndicenbmaillesY;
+ int IndicenbmaillesZ;
+
+ int inmodulemeet;
+ int incalldeclare;
+ int aftercontainsdeclare; /* Signale si l'on vient d'un contains ou non */
+ int retour77;
+ int colnum;
+ int callagrifinitgrids;
+ int callmpiinit;
+ int firstpass;
+ int couldaddvariable;
+ int pointedvar;
+ int NbMailleXDefined;
+ int agrif_parentcall;
+ int didvariableadded;
+ int SubloopScalar;        /* = 1 we should put in argument of sub_loop       */
+                           /*    only                                         */
+                           /*    scalar and not table u(1,1,1) in place of u  */
+ int checkexistcommon;
+ int insubroutinedeclare;
+ int inmoduledeclare;
+ int dimsempty;
+ int created_dimensionlist;
+
+ char meetagrifinitgrids[LONG_C];
+ char mpiinitvar[LONG_C];
+ char *NameTamponfile;
+ char toprintglob[LONG_4C];
+ char tmpvargridname[LONG_4C];
+ char EmptyChar[2];        /* An empty char */
+ char curfilename[LONG_C];
+ char nomfileoutput[LONG_C];
+ char curbuf[LONG_40M];
+ char motparse[LONG_4C];
+ char motparse1[LONG_4C];
+ char charusemodule[LONG_C];
+ char subofagrifinitgrids[LONG_C];
+ char curfile[LONG_C];
+ char mainfile[LONG_C];
+ char nomdir[LONG_C];
+ char commondirout[LONG_C];
+ char commondirin[LONG_C];
+ char filetoparse[LONG_C];
+
+ FILE *fortranout;          /* Output File                                    */
+ FILE *fortranin;           /* Input File                                     */
+ FILE *oldfortranout;
+ FILE *subloop;
+ FILE *module_declar;
+ FILE *allocationagrif;
+ FILE *paramout;
+
+ long int pos_cur;         /* current position in the output file             */
+ long int pos_curagrifparent;
+                           /* current position in the output file             */
+ long int pos_curcall;     /* current position in the output file             */
+ long int pos_curuse;      /* current position in the output file             */
+ long int pos_curuseold;   /* current position in the output file             */
+ long int pos_curfunction; /* current position in the output file             */
+ long int pos_cur_decl;    /* current position in the output file             */
+ long int pos_curdata;     /* current position in the output file             */
+ long int pos_curparameter;/* current position in the output file             */
+ long int pos_curcommon;   /* current position in the output file             */
+ long int pos_cursave;     /* current position in the output file             */
+ long int pos_curdimension;/* current position in the output file             */
+ long int pos_curinit;     /* current position in the output file             */
+ long int pos_curinclude;  /* final position of a line in file                */
+ long int pos_end;         /* final position of a line in file                */
+ long int pos_endsubroutine;
+                           /* final position of a line in file                */
+
+/* v_oldname = v_nomvar; */
+/* commonvar = v_nomvar; */
+/* commonblockname = v_commonname;*/
+/* sameagrifname = v_nomvar ; */
+/* DeclType = v_typevar; */
+/* nameinttypename = v_nameinttypename; */
+/* IntentSpec = v_IntentSpec; */
+/* NamePrecision = v_precision; */
+/* CharacterSize = v_dimchar; */
+/* curmodulename = v_modulename; */
+/* vallengspec = v_vallengspec; */
+/* subroutinename = v_subroutinename; */
+/* meetagrifinitgrids = v_subroutinename; */
+/* nbmaillesX = v_nomvar; */
+/* nbmaillesY = v_nomvar; */
+/* nbmaillesZ = v_nomvar; */
+/* mpiinitvar = v_nomvar; */
+/* EmptyChar = 2; */
+/* motparse1 = motparse;*/
+/* charusemodule = p_modulename; */
+/* subofagrifinitgrids = v_subroutinename; */
+/* curfile = mainfile; */
+/* InitValue = v_initialvalue; */
+
+/* p_name;???????? */
+/* p_modulename; ?????????????*/
+
+ int length_last;
+ int length_first;
+ int length_v_typevar;
+ int length_v_nomvar;
+ int length_v_dimchar;
+ int length_v_modulename;
+ int length_v_commonname;
+ int length_v_vallengspec;
+ int length_v_nameinttypename;
+ int length_v_commoninfile;
+ int length_v_subroutinename;
+ int length_v_precision;
+ int length_v_IntentSpec;
+ int length_v_initialvalue;
+ int length_v_readedlistdimension;
+ int length_u_usemodule;
+ int length_u_charusemodule;
+ int length_u_cursubroutine;
+ int length_u_modulename;
+ int length_n_name;
+ int length_c_namevar;
+ int length_c_namepointedvar;
+ int length_o_nom;
+ int length_o_module;
+ int length_a_nomvar;
+ int length_a_subroutine;
+ int length_a_module;
+ int length_t_usemodule;
+ int length_t_cursubroutine;
+ int length_curfilename;
+ int length_nomfileoutput;
+ int length_motparse;
+ int length_mainfile;
+ int length_nomdir;
+ int length_commondirout;
+ int length_commondirin;
+ int length_filetoparse;
+ int length_curbuf;
+ int length_toprintglob;
+ int length_tmpvargridname;
+ int length_ligne_Subloop;
+ int length_lvargridname_toamr;
+ int length_toprint_utilagrif;
+ int length_toprinttmp_utilchar;
+ int length_ligne_writedecl;
+ int length_newname_toamr;
+ int length_newname_writedecl;
+ int length_ligne_toamr;
+ int length_tmpligne_writedecl;
+ int value_char_size;
+ int value_char_size1;
+ int value_char_size2;
+ int value_char_size3;
+
+ 
+ int inallocate;
+ int infixed;
+ int infree;
+/******************************************************************************/
+/*********** Declaration of externals subroutines *****************************/
+/***************************************************** ************************/
+/******************************************************************************/
+/*********** convert.y ********************************************************/
+/******************************************************************************/
+extern int main(int argc,char *argv[]);
+/******************************************************************************/
+/*********** fortran.y ********************************************************/
+/******************************************************************************/
+extern void processfortran(char *fichier_entree);
+/******************************************************************************/
+/*********** dependfile.c *****************************************************/
+/******************************************************************************/
+extern void Writethedependnbxnbyfile();
+extern void Readthedependnbxnbyfile();
+extern void Writethedependlistofmoduleused(char *NameTampon );
+extern void Readthedependlistofmoduleused(char *NameTampon);
+extern void WritedependParameterList(char *NameTampon );
+extern listparameter *ReaddependParameterList(char *NameTampon,
+                                                        listparameter *listout);
+extern void Writethedependfile(char *NameTampon, listvar *input );
+extern listvar *Readthedependfile( char *NameTampon , listvar *listout);
+extern void Write_Subroutine_For_Alloc();
+extern void Read_Subroutine_For_Alloc();
+extern void Writethedependavailablefile();
+extern void Readthedependavailablefile();
+extern int Did_filetoparse_readed(char *NameTampon);
+extern int Did_module_common_treaded(char *NameTampon);
+extern void Write_val_max();
+extern void Read_val_max();
+/******************************************************************************/
+/*********** DiversListe.c ****************************************************/
+/******************************************************************************/
+extern void Add_Common_var_1();
+extern listnom *Addtolistnom(char *nom, listnom *listin,int value);
+extern listname *Addtolistname(char *nom,listname *input);
+extern int ModuleIsDefineInInputFile(char *name);
+extern void Addmoduletothelisttmp(char *name);
+extern void Add_NameOfModule_1(char *nom);
+extern void Add_NameOfCommon_1(char *nom);
+extern void Add_CouplePointed_Var_1(char *namemodule,listcouple *couple);
+extern void Add_Include_1(char *name);
+extern void Add_ImplicitNoneSubroutine_1();
+extern void WriteIncludeDeclaration();
+extern void Add_Save_Var_1 (char *name,listdim *d);
+extern void Add_Save_Var_dcl_1 (listvar *var);
+/******************************************************************************/
+/*********** SubLoopCreation.c ************************************************/
+/******************************************************************************/
+extern void writeheadnewsub_0();
+extern void WriteVariablelist_subloop(FILE *outputfile);
+extern void WriteVariablelist_subloop_Call(FILE *outputfile);
+extern void WriteVariablelist_subloop_Def(FILE *outputfile);
+extern void WriteHeadofSubroutineLoop();
+extern void closeandcallsubloopandincludeit_0(int suborfun);
+extern void closeandcallsubloop_contains_0();
+/******************************************************************************/
+/*********** toamr.c **********************************************************/
+/******************************************************************************/
+extern char *variablenameroottabvars (variable * var);
+extern char *variablenametabvars (variable * var, int iorindice);
+extern char *variablecurgridtabvars (variable * var,int ParentOrCurgrid);
+extern void WARNING_CharSize(variable *var);
+extern char *vargridnametabvars (variable * var,int iorindice);
+extern char *vargridcurgridtabvars (variable * var,int ParentOrCurgrid);
+extern char *vargridcurgridtabvarswithoutAgrif_Gr (variable * var);
+extern char *vargridparam (variable * v, int whichone);
+extern void write_probdimagrif_file();
+extern void write_keysagrif_file();
+extern void write_modtypeagrif_file();
+extern void write_createvarnameagrif_file(variable *v,FILE *createvarname,
+                                                                int *InitEmpty);
+extern void write_Setnumberofcells_file();
+extern void write_Getnumberofcells_file();
+extern void write_initialisationsagrif_file(variable *v,FILE *initproc,
+                                                             int *VarnameEmpty);
+extern void Write_Alloc_Agrif_Files();
+extern int IndiceInlist(int indic, listindice *listin);
+extern void write_allocation_Common_0();
+extern void write_allocation_Global_0();
+extern void creefichieramr (char *NameTampon);
+/******************************************************************************/
+/*********** UtilAgrif.c ******************************************************/
+/******************************************************************************/
+extern int Vartonumber(char *tokname);
+extern int Agrif_in_Tok_NAME(char *tokname);
+extern void ModifyTheVariableName_0(char *ident,int lengthname);
+extern void Add_SubroutineWhereAgrifUsed_1(char *sub,char *mod);
+extern void AddUseAgrifUtil_0(FILE *fileout);
+extern void AddUseAgrifUtilBeforeCall_0(FILE *fileout);
+extern void NotifyAgrifFunction_0(char *ident);
+extern void ModifyTheAgrifFunction_0(char *ident);
+extern void AgriffunctionModify_0(char *ident,int whichone);
+extern void Instanciation_0(char *ident);
+/******************************************************************************/
+/*********** UtilCharacter.c **************************************************/
+/******************************************************************************/
+extern void FindAndChangeNameToTabvars(char name[LONG_C],char toprint[LONG_4C],
+                                             listvar * listtosee, int whichone);
+extern char *ChangeTheInitalvaluebyTabvarsName(char *nom,listvar *listtoread,
+                                                                  int whichone);
+extern int IsVariableReal(char *nom);
+extern void IsVarInUseFile(char *nom);
+extern listnom *DecomposeTheNameinlistnom(char *nom, listnom * listout);
+extern void DecomposeTheName(char *nom);
+extern void convert2lower(char *name);
+extern int convert2int(char *name);
+/******************************************************************************/
+/*********** UtilFile.c *******************************************************/
+/******************************************************************************/
+extern FILE * associate (char *filename);
+extern FILE * associateaplus (char *filename);
+extern long int setposcur();
+extern long int setposcurname(FILE *fileout);
+extern long int setposcurinoldfortranout();
+extern void copyuse_0(char *namemodule);
+extern void copyuseonly_0(char *namemodule);
+/******************************************************************************/
+/*********** UtilFortran.c ****************************************************/
+/******************************************************************************/
+extern void initdimprob(int dimprobmod, char * nx, char * ny,char* nz);
+extern int Variableshouldberemove(char *nom);
+extern int variableisglobal(listvar *curvar, listvar *listin);
+extern int VariableIsInListCommon(listvar *curvar,listvar *listin);
+extern int VariableIsInList(listvar *curvar,listvar *listin);
+extern void variableisglobalinmodule(listcouple *listin, char *module,
+                                                                 FILE *fileout,long int oldposcuruse);
+extern void Remove_Word_Contains_0();
+extern void Remove_Word_end_module_0(int modulenamelength);
+extern void Write_Word_Contains_0();
+extern void Write_Word_end_module_0();
+extern void Add_Subroutine_For_Alloc(char *nom);
+extern void Write_Alloc_Subroutine_0();
+extern void Write_Alloc_Subroutine_For_End_0();
+extern void Write_GlobalParameter_Declaration_0();
+extern void Write_GlobalType_Declaration_0();
+extern void Write_NotGridDepend_Declaration_0();
+extern int IsTabvarsUseInArgument_0();
+extern int ImplicitNoneInSubroutine();
+extern void Add_Pointer_Var_From_List_1(listvar *listin);
+extern void Add_Pointer_Var_1(char *nom);
+extern int varispointer_0(char *ident);
+extern int VariableIsNotFunction(char *ident);
+extern int varistyped_0(char *ident);
+/******************************************************************************/
+/*********** UtilListe.c ******************************************************/
+/******************************************************************************/
+extern void Init_Variable(variable *var);
+extern listvar * AddListvarToListvar(listvar *l,listvar *glob,
+                                                            int ValueFirstpass);
+extern void CreateAndFillin_Curvar(char *type,variable *curvar);
+extern void duplicatelistvar(listvar *orig);
+extern listdim * insertdim(listdim *lin,typedim nom);
+extern void change_dim_char(listdim *lin,listvar * l);
+extern int num_dims(listdim *d);
+extern variable * createvar(char *nom,listdim *d);
+extern listvar * insertvar(listvar *lin,variable *v);
+extern listvar *settype(char *nom,listvar *lin);
+extern void printliste(listvar * lin);
+extern int IsinListe(listvar *lin,char *nom);
+extern listname *Insertname(listname *lin,char *nom);
+extern void printname(listname * lin);
+extern void removeglobfromlist(listname **lin);
+extern void writelistpublic(listname *lin);
+/******************************************************************************/
+/*********** UtilNotGridDep.c *************************************************/
+/******************************************************************************/
+extern void Add_NotGridDepend_Var_1 (char *name);
+extern int VarIsNonGridDepend(char *name);
+/******************************************************************************/
+/*********** WorkWithAllocatelist.c *******************************************/
+/******************************************************************************/
+extern void Add_Allocate_Var_1(char *nom,char *nommodule);
+extern int IsVarAllocatable_0(char *ident);
+extern int varisallocatable_0(char *ident);
+/******************************************************************************/
+/*********** WorkWithglobliste.c **********************************************/
+/******************************************************************************/
+extern void Add_Globliste_1(listvar *listtoadd);
+extern void Add_SubroutineDeclarationSave_Var_1(listvar *listtoadd);
+extern void checkandchangedims(listvar *listsecondpass);
+/******************************************************************************/
+/*********** WorkWithlistdatavariable.c ***************************************/
+/******************************************************************************/
+extern void Add_Data_Var_1 (char *name,char *values);
+/******************************************************************************/
+/*********** WorkWithlistmoduleinfile.c ***************************************/
+/******************************************************************************/
+extern void Save_Length(char *nom, int whichone);
+extern void Save_Length_int(int val, int whichone);
+/******************************************************************************/
+/*********** WorkWithlistofmodulebysubroutine.c *******************************/
+/******************************************************************************/
+extern void RecordUseModulesVariables();
+extern void  RecordUseModulesUseModulesVariables();
+extern void Add_NameOfModuleUsed_1(char *name);
+extern void Addmoduletothelist(char *name);
+extern void WriteUsemoduleDeclaration();
+/******************************************************************************/
+/*********** WorkWithlistvarindoloop.c ****************************************/
+/******************************************************************************/
+extern void Add_UsedInSubroutine_Var_1 (char *ident);
+extern void ajoutevarindoloop_definedimension (char *name);
+extern void  ModifyThelistvarindoloop();
+extern void  CompleteThelistvarindoloop();
+extern void CopyRecord(variable *var1,variable *var2);
+extern void Update_List_Subroutine_Var(listvar *list_to_modify);
+extern void Update_List_Global_Var_From_List_Save_Var();
+extern void Update_List_From_Common_Var(listvar *list_to_modify);
+extern void Update_List_Var(listvar *list_to_modify);
+extern void List_UsedInSubroutine_Var_Update_From_Module_Used();
+extern void Update_NotGridDepend_Var(listvar *list_to_modify);
+extern int LookingForVariableInList(listvar *listin,variable *var);
+extern int LookingForVariableInListGlobal(listvar *listin,variable *var);
+extern int LookingForVariableInListName(listvar *listin,char *var);
+extern int LookingForVariableInListGlob(listvar *listin,variable *var);
+extern int LookingForVariableInListParamGlob(listparameter *listin,
+                                                                 variable *var);
+extern void UpdateListDeclarationWithDimensionList();
+extern void Clean_List_UsedInSubroutine_Var();
+extern void Clean_List_SubroutineDeclaration_Var();
+extern void Clean_List_Global_Var();
+extern void ListClean();
+extern void ListUpdate();
+extern void GiveTypeOfVariables();
+extern void Sort_List_SubroutineArgument_Var();
+extern void IndiceTabvars_Global_Var_Treated(char *nom);
+extern void IndiceTabvars_Global_Var_No_Treated(char *nom);
+extern void UpdateTheRemainingList(listvar *record);
+extern void IndiceTabvars_Common_Var_Treated(char *nom);
+extern void IndiceTabvars_Common_Var_No_Treated(char *nom);
+extern void IndiceTabvarsIdentification();
+extern void New_Allocate_Subroutine_Is_Necessary();
+extern void New_Allocate_Subroutine_For_Common_Is_Necessary();
+extern void NewModule_Creation_0();
+extern void UpdateList_SubroutineWhereAgrifUsed();
+extern void UpdateList_UsedInSubroutine_With_dimension();
+extern void Affiche();
+extern int SubInList_ContainsSubroutine();
+/******************************************************************************/
+/*********** WorkWithParameterlist.c ******************************************/
+/******************************************************************************/
+extern void Add_GlobalParameter_Var_1(listvar *listin);
+extern void Add_Parameter_Var_1(listvar *listin);
+extern void Add_Dimension_Var_1(listvar *listin);
+/******************************************************************************/
+/*********** WorkWithvarofsubroutineliste.c ***********************************/
+/******************************************************************************/
+extern void Add_SubroutineArgument_Var_1(listvar *listtoadd);
+extern void Add_FunctionType_Var_1(char *nom);
+extern void Add_SubroutineDeclaration_Var_1 (listvar *listtoadd);
+/******************************************************************************/
+/*********** Writedeclarations.c **********************************************/
+/******************************************************************************/
+extern void WriteBeginDeclaration(variable *v,char ligne[LONG_4C],int visibility);
+extern void WriteScalarDeclaration(variable *v,char ligne[LONG_4C]);
+extern void WriteTableDeclaration(variable * v,char ligne[LONG_4C],int tmpok);
+extern void writevardeclaration (listvar * var_record, FILE *fileout,
+                                                                     int value,int visibility);
+extern void WriteLocalParamDeclaration();
+extern void WriteFunctionDeclaration(int value);
+extern void WriteSubroutineDeclaration(int value);
+extern void WriteArgumentDeclaration_beforecall();
+extern void WriteArgumentDeclaration_Sort();
+extern listnom *writedeclarationintoamr (listvar * deb_common, FILE *fileout,
+                                       variable *var , char commonname[LONG_C],
+                           listnom *neededparameter, char name_common[LONG_C]);
+extern void writesub_loopdeclaration_scalar (listvar * deb_common,
+                                                                 FILE *fileout);
+extern void writesub_loopdeclaration_tab (listvar * deb_common, FILE *fileout);
+extern void ReWriteDeclarationAndAddTosubroutine_01(listvar *listdecl);
+/******************************************************************************/
+/*********** WriteInFile.c ****************************************************/
+/******************************************************************************/
+extern void tofich_reste (FILE * filout, char *s,int returnlineornot);
+extern void tofich (FILE * filout, char *s, int returnlineornot);
+extern void tofich_blanc (FILE * filout, int size);
+extern void tofich_line (FILE * filout, int size, int long position);
+extern void RemoveWordSET_0(FILE * filout, long int position,
+                                                         long int sizetoremove);
+extern void RemoveWordCUR_0(FILE * filout, long int position,
+                                                         long int sizetoremove);
+
+/******************************************************************************/
+/*********** WorkWithlistofcoupled.c **********************************************/
+/******************************************************************************/                                                        
+extern int variscoupled_0(char *ident) ;
+extern char * getcoupledname_0(char *ident);
+extern void ModifyTheVariableNamecoupled_0(char *ident, char* coupledident);
Index: /vendors/AGRIF/r_00/LIB/dependfile.c
===================================================================
--- /vendors/AGRIF/r_00/LIB/dependfile.c	(revision 1902)
+++ /vendors/AGRIF/r_00/LIB/dependfile.c	(revision 1902)
@@ -0,0 +1,1116 @@
+/******************************************************************************/
+/*                                                                            */
+/*     CONV (converter) for Agrif (Adaptive Grid Refinement In Fortran)       */
+/*                                                                            */
+/* Copyright or   or Copr. Laurent Debreu (Laurent.Debreu@imag.fr)            */
+/*                        Cyril Mazauric (Cyril_Mazauric@yahoo.fr)            */
+/* This software is governed by the CeCILL-C license under French law and     */
+/* abiding by the rules of distribution of free software.  You can  use,      */
+/* modify and/ or redistribute the software under the terms of the CeCILL-C   */
+/* license as circulated by CEA, CNRS and INRIA at the following URL          */
+/* "http://www.cecill.info".                                                  */
+/*                                                                            */
+/* As a counterpart to the access to the source code and  rights to copy,     */
+/* modify and redistribute granted by the license, users are provided only    */
+/* with a limited warranty  and the software's author,  the holder of the     */
+/* economic rights,  and the successive licensors  have only  limited         */
+/* liability.                                                                 */
+/*                                                                            */
+/* In this respect, the user's attention is drawn to the risks associated     */
+/* with loading,  using,  modifying and/or developing or reproducing the      */
+/* software by the user in light of its specific status of free software,     */
+/* that may mean  that it is complicated to manipulate,  and  that  also      */
+/* therefore means  that it is reserved for developers  and  experienced      */
+/* professionals having in-depth computer knowledge. Users are therefore      */
+/* encouraged to load and test the software's suitability as regards their    */
+/* requirements in conditions enabling the security of their systems and/or   */
+/* data to be ensured and,  more generally, to use and operate it in the      */
+/* same conditions as regards security.                                       */
+/*                                                                            */
+/* The fact that you are presently reading this means that you have had       */
+/* knowledge of the CeCILL-C license and that you accept its terms.           */
+/******************************************************************************/
+/* version 1.7                                                                */
+/******************************************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "decl.h"
+
+
+/******************************************************************************/
+/*            Creation and modification of .dependfile                        */
+/******************************************************************************/
+/*  .dependnbxnby            : this file contains tabvars indices of variables*/
+/*                                given in agrif.in as number of cells        */
+/*  .dependuse<module>       : this file contains all modules used in the     */
+/*                                current file                                */
+/*  .dependparameter<module> : this file contains all parmeters defined in    */
+/*                                the current file                            */
+/*  .depend<module name>     : this file contains all globals variables       */
+/*                                informations (name, dim, etc ...)           */
+/*  .dependavailable         : this file contains all tabvars indices which   */
+/*                                are not used.                               */
+/******************************************************************************/
+
+
+/******************************************************************************/
+/*                 Writethedependnbxnbyfile                                   */
+/******************************************************************************/
+/* This subroutine is used to create the .dependnbxnby                        */
+/******************************************************************************/
+/*                                                                            */
+/*                     .dependnbxnby                                          */
+/*                                                                            */
+/*                     nbmaillesX                                             */
+/*                     nbmaillesY                                             */
+/*                     nbmaillesZ                                             */
+/*                                                                            */
+/******************************************************************************/
+void Writethedependnbxnbyfile()
+{
+  FILE *dependfileoutput;
+  listvar *parcours;
+  int out;
+
+  /* We are looking for all the variable of the current filetoparse file      */
+  /*    in the List_Global_Var                                                */
+  parcours =List_Global_Var;
+  out = 0;
+  while (parcours && out == 0 )
+  {
+     if ( !strcasecmp(parcours->var->v_nomvar,nbmaillesX) ) out = 1;
+     else parcours = parcours->suiv;
+  }
+  if ( out == 0 )
+  {
+     parcours =List_Common_Var;
+     while (parcours && out == 0 )
+     {
+        if ( !strcasecmp(parcours->var->v_nomvar,nbmaillesX) ) out = 1;
+        else parcours = parcours->suiv;
+     }
+  }
+  NbMailleXDefined = 0;
+  if ( out == 1 )
+  {
+     NbMailleXDefined = 1;
+     dependfileoutput = fopen(".dependnbxnby","w");
+     fprintf(dependfileoutput,"%d\n",parcours->var->v_indicetabvars);
+     IndicenbmaillesX = parcours->var->v_indicetabvars;
+
+     if ( dimprob > 1 )
+     {
+        parcours =List_Global_Var;
+        out = 0;
+        while (parcours && out == 0 )
+        {
+           if ( !strcasecmp(parcours->var->v_nomvar,nbmaillesY) ) out = 1;
+           else parcours = parcours->suiv;
+        }
+        if ( out == 0 )
+        {
+           parcours =List_Common_Var;
+           while (parcours && out == 0 )
+           {
+              if ( !strcasecmp(parcours->var->v_nomvar,nbmaillesY) ) out = 1;
+              else parcours = parcours->suiv;
+           }
+        }
+        if ( out == 1 )
+        {
+           fprintf(dependfileoutput,"%d\n",parcours->var->v_indicetabvars);
+           IndicenbmaillesY = parcours->var->v_indicetabvars;
+        }
+     }
+
+     if ( dimprob > 2 )
+     {
+        parcours =List_Global_Var;
+        out = 0;
+        while (parcours && out == 0 )
+        {
+           if ( !strcasecmp(parcours->var->v_nomvar,nbmaillesZ) ) out = 1;
+           else parcours = parcours->suiv;
+        }
+        if ( out == 0 )
+        {
+           parcours =List_Common_Var;
+           while (parcours && out == 0 )
+           {
+              if ( !strcasecmp(parcours->var->v_nomvar,nbmaillesZ) ) out = 1;
+              else parcours = parcours->suiv;
+           }
+        }
+        if ( out == 1 )
+        {
+           fprintf(dependfileoutput,"%d\n",parcours->var->v_indicetabvars);
+           IndicenbmaillesZ = parcours->var->v_indicetabvars;
+        }
+     }
+
+     if ( out == 1 ) fclose(dependfileoutput);
+   }
+}
+
+/******************************************************************************/
+/*                 Readthedependnbxnbyfile                                    */
+/******************************************************************************/
+/* This subroutine is used to create the .dependnbxnby                        */
+/******************************************************************************/
+/*                                                                            */
+/*                     .dependnbxnby                                          */
+/*                                                                            */
+/*                     nbmaillesX                                             */
+/*                     nbmaillesY                                             */
+/*                     nbmaillesZ                                             */
+/*                                                                            */
+/******************************************************************************/
+void Readthedependnbxnbyfile()
+{
+  FILE *dependfileoutput;
+
+  if ((dependfileoutput = fopen(".dependnbxnby","r"))!=NULL)
+  {
+     fscanf(dependfileoutput,"%d\n",&IndicenbmaillesX);
+     if ( dimprob > 1 ) fscanf(dependfileoutput,"%d\n",&IndicenbmaillesY);
+     if ( dimprob > 2 ) fscanf(dependfileoutput,"%d\n",&IndicenbmaillesZ);
+     fclose(dependfileoutput);
+  }
+}
+
+/******************************************************************************/
+/*                     Writethedependlistofmoduleused                         */
+/******************************************************************************/
+/* This subroutine is used to create the .dependuse<module>                   */
+/******************************************************************************/
+/*                                                                            */
+/*               .dependuse<name>                                             */
+/*                                                                            */
+/*               mod1                                                         */
+/*               mod2                                                         */
+/*                                                                            */
+/******************************************************************************/
+void Writethedependlistofmoduleused(char *NameTampon )
+{
+  FILE *dependfileoutput;
+  listusemodule *parcours;
+  char ligne[LONG_C];
+
+
+  if ( List_NameOfModuleUsed )
+  {
+     convert2lower(NameTampon);
+     sprintf(ligne,".dependuse%s",NameTampon);
+     dependfileoutput = fopen(ligne,"w");
+     /*                                                                       */
+     parcours = List_NameOfModuleUsed;
+     while (parcours)
+     {
+        if ( !strcasecmp(NameTampon,parcours->u_modulename) &&
+             !strcasecmp(parcours->u_cursubroutine,"")
+           )
+        {
+           /* We are looking for all the variable of the current              */
+           /*    filetoparse file in the List_Global_Var                      */
+           fprintf(dependfileoutput,"%s\n",parcours->u_usemodule);
+        }
+        parcours = parcours->suiv;
+     }
+     fclose(dependfileoutput);
+  }
+}
+
+/******************************************************************************/
+/*                    Readthedependlistofmoduleused                           */
+/******************************************************************************/
+/* This subroutine is used to create the .dependuse<module>                   */
+/******************************************************************************/
+/*                                                                            */
+/*               .dependuse<name>                                             */
+/*                                                                            */
+/*               mod1                                                         */
+/*               mod2                                                         */
+/*                                                                            */
+/******************************************************************************/
+void Readthedependlistofmoduleused(char *NameTampon)
+{
+  FILE *dependfileoutput;
+  listusemodule *parcours;
+  char ligne[LONG_C];
+
+  convert2lower(NameTampon);
+  sprintf(ligne,".dependuse%s",NameTampon);
+
+  tmpuselocallist = (listusemodule *)NULL;
+  if ((dependfileoutput = fopen(ligne,"r"))==NULL)
+  {
+  }
+  else
+  {
+    /* if the file exist we should verify that this file has changed          */
+      while (!feof(dependfileoutput))
+      {
+         parcours=(listusemodule *)malloc(sizeof(listusemodule));
+         fscanf(dependfileoutput,"%s\n",parcours->u_usemodule);
+
+         parcours->suiv = tmpuselocallist;
+         tmpuselocallist = parcours;
+
+         parcours = NULL;
+      }
+      fclose(dependfileoutput);
+  }
+}
+
+
+/******************************************************************************/
+/*                        WritedependParameterList                            */
+/******************************************************************************/
+/* This subroutine is used to create the .dependparameter<name>               */
+/******************************************************************************/
+/*                                                                            */
+/*               .dependparameter<name>                                       */
+/*                                                                            */
+/*               mod1                                                         */
+/*               mod2                                                         */
+/*                                                                            */
+/******************************************************************************/
+void WritedependParameterList(char *NameTampon )
+{
+  FILE *dependfileoutput;
+  listvar *parcours;
+  char ligne[LONG_C];
+
+  if ( List_GlobalParameter_Var )
+  {
+     convert2lower(NameTampon);
+     sprintf(ligne,".dependparameter%s",NameTampon);
+     dependfileoutput = fopen(ligne,"w");
+     /*                                                                       */
+     parcours = List_GlobalParameter_Var;
+     while (parcours)
+     {
+        if ( !strcasecmp(NameTampon,parcours->var->v_modulename) )
+        {
+           fprintf(dependfileoutput,"%s\n",parcours->var->v_nomvar);
+           fprintf(dependfileoutput,"%s\n",parcours->var->v_modulename);
+        }
+        parcours = parcours->suiv;
+     }
+     fclose(dependfileoutput);
+  }
+}
+
+
+/******************************************************************************/
+/*                         ReaddependParameterList                            */
+/******************************************************************************/
+/* This subroutine is used to create the .dependparameter<name>               */
+/******************************************************************************/
+/*                                                                            */
+/*               .dependparameter<name>                                       */
+/*                                                                            */
+/*               mod1                                                         */
+/*               mod2                                                         */
+/*                                                                            */
+/******************************************************************************/
+listparameter *ReaddependParameterList(char *NameTampon,listparameter *listout)
+{
+  FILE *dependfileoutput;
+  listparameter *parcours;
+  char ligne[LONG_C];
+
+  convert2lower(NameTampon);
+  sprintf(ligne,".dependparameter%s",NameTampon);
+
+  if ((dependfileoutput = fopen(ligne,"r"))==NULL)
+  {
+  }
+  else
+  {
+    /* if the file exist we should verify that this file has changed          */
+      while (!feof(dependfileoutput))
+      {
+         parcours=(listparameter *)malloc(sizeof(listparameter));
+         fscanf(dependfileoutput,"%s\n",parcours->p_name);
+         fscanf(dependfileoutput,"%s\n",parcours->p_modulename);
+
+         parcours->suiv = listout;
+         listout = parcours;
+
+         parcours = NULL;
+      }
+      fclose(dependfileoutput);
+  }
+  return listout;
+}
+
+/******************************************************************************/
+/*                   Writethedependfile                                       */
+/******************************************************************************/
+/* This subroutine is used to create the .depend<name>                        */
+/******************************************************************************/
+/*                                                                            */
+/*                     .depend<name>                                          */
+/*                                                                            */
+/*                      REAL                                                  */
+/*                      Variable                                              */
+/*                      char dimension or T                                   */
+/*                      table dimension                                       */
+/*                      is type given                                         */
+/*                      precision or T                                        */
+/*                      initial value or T                                    */
+/*                      indice in the tabvars                                 */
+/*                      listdimension or T                                    */
+/*                      -------------------------                             */
+/*                                                                            */
+/******************************************************************************/
+void Writethedependfile(char *NameTampon, listvar *input )
+{
+  FILE *dependfileoutput;
+  listvar *parcours;
+  listdim *dims;
+  char ligne[LONG_C];
+  char listdimension[LONG_C];
+  char curname[LONG_C];
+  int out;
+
+  if ( input )
+  {
+  convert2lower(NameTampon);
+
+  sprintf(ligne,".depend%s",NameTampon);
+  dependfileoutput = fopen(ligne,"w");
+  /* We are looking for all the variable of the current filetoparse file      */
+  /*    in the input                                                          */
+  parcours =input;
+  out = 0;
+  strcpy(curname,"");
+  while (parcours && out == 0 )
+  {
+     if ( !strcasecmp(parcours->var->v_modulename,NameTampon) ||
+          !strcasecmp(parcours->var->v_commonname,NameTampon) )
+     {
+        /*                                                                    */
+        if (  strcasecmp(curname,"") &&
+             !strcasecmp(curname,parcours->var->v_nomvar) ) out = 1 ;
+        if ( !strcasecmp(curname,"") ) strcpy(curname,parcours->var->v_nomvar);
+        /*                                                                    */
+        if ( out == 0 )
+        {
+           /********** TYPEVAR ************************************************/
+           fprintf(dependfileoutput,"%s\n",parcours->var->v_typevar);
+           /********** NOMVAR *************************************************/
+           fprintf(dependfileoutput,"%s\n",parcours->var->v_nomvar);
+           /********** DIMCHAR ************************************************/
+           if ( strcasecmp(parcours->var->v_dimchar,"") )
+           {
+              fprintf(dependfileoutput,"%s\n",parcours->var->v_dimchar);
+           }
+           else
+           {
+              fprintf(dependfileoutput,"T\n");
+           }
+           /********** COMMONINFILE *******************************************/
+           if ( strcasecmp(parcours->var->v_commoninfile,"") )
+           {
+              fprintf(dependfileoutput,"%s\n",parcours->var->v_commoninfile);
+           }
+           else
+           {
+              fprintf(dependfileoutput,"T\n");
+           }
+           /********** COMMONNAME *********************************************/
+           if ( strcasecmp(parcours->var->v_commonname,"") )
+           {
+              fprintf(dependfileoutput,"%s\n",parcours->var->v_commonname);
+           }
+           else
+           {
+              fprintf(dependfileoutput,"T\n");
+           }
+           /********** NBDIM **************************************************/
+/*           fprintf(dependfileoutput,"%d\n",parcours->var->v_nbdim);*/
+           /********** DIMENSIONGIVEN *****************************************/
+/*           fprintf(dependfileoutput,"%d\n",parcours->var->v_dimensiongiven);*/
+           /********** ALLOCATABLE ********************************************/
+           fprintf(dependfileoutput,"%d\n",parcours->var->v_allocatable);
+           /********** POINTERDECLARE *****************************************/
+           fprintf(dependfileoutput,"%d\n",parcours->var->v_pointerdeclare);
+           /********** PRECISION **********************************************/
+           if ( strcasecmp(parcours->var->v_precision,"") )
+           {
+              fprintf(dependfileoutput,"%s\n",parcours->var->v_precision);
+           }
+           else
+           {
+              fprintf(dependfileoutput,"T\n");
+           }
+           /********** INITIALVALUE *******************************************/
+/*           if ( strcasecmp(parcours->var->v_initialvalue,"") )
+           {
+              fprintf(dependfileoutput,"%s\n",parcours->var->v_initialvalue);
+           }
+           else
+           {
+              fprintf(dependfileoutput,"T\n");
+           }*/
+           /********** NAMEINTYPENAME *****************************************/
+           if ( strcasecmp(parcours->var->v_nameinttypename,"") )
+           {
+              fprintf(dependfileoutput,"%s\n",parcours->var->v_nameinttypename);
+           }
+           else
+           {
+              fprintf(dependfileoutput,"T\n");
+           }
+           /********** INDICETABVARS ******************************************/
+           fprintf(dependfileoutput,"%d\n",parcours->var->v_indicetabvars);
+           /********** READEDLISTDIMENSION ************************************/
+           if ( parcours->var->v_dimensiongiven == 1 )
+           {
+              dims = parcours->var->v_dimension;
+              strcpy(listdimension,"");
+              while (dims)
+              {
+                 sprintf(ligne,"%s:%s",dims->dim.first,dims->dim.last);
+                 strcat(listdimension,ligne);
+                 if ( dims->suiv )
+                 {
+                    strcat(listdimension,",");
+                 }
+                 dims = dims->suiv;
+              }
+              fprintf(dependfileoutput,"%s\n",listdimension);
+           }
+           else
+           {
+              fprintf(dependfileoutput,"T\n");
+           }
+           /*******************************************************************/
+           fprintf(dependfileoutput,"------------------------\n");
+        }
+     }
+     parcours = parcours->suiv;
+  }
+  fclose(dependfileoutput);
+  }
+}
+
+/******************************************************************************/
+/*                         Readthedependfile                                  */
+/******************************************************************************/
+/* This subroutine is used to read the .dependfile<name> and to insert new    */
+/*    information in the listout list.                                        */
+/******************************************************************************/
+/*                                                                            */
+/*           .dependmodule -------->                      = list of var       */
+/*                                                                            */
+/*        not.dependmodule -------->                                          */
+/*                                                                            */
+/******************************************************************************/
+listvar *Readthedependfile( char *NameTampon , listvar *listout)
+{
+  char ligne[LONG_C];
+  FILE *dependfileoutput;
+  listvar *parcours0;
+  listvar *parcours;
+  listvar *parcoursprec;
+  char nothing[LONG_C];
+  int i;
+
+  parcoursprec = (listvar *)NULL;
+
+  convert2lower(NameTampon);
+  sprintf(ligne,".depend%s",NameTampon);
+  if ((dependfileoutput = fopen(ligne,"r"))==NULL)
+  {
+    /* if the file doesn't exist it means that it is the first time           */
+    /*    we tried to parse this file                                         */
+  }
+  else
+  {
+    /* if the file exist we should verify that this file has changed          */
+      while (!feof(dependfileoutput))
+      {
+         parcours=(listvar *)malloc(sizeof(listvar));
+         parcours->var=(variable *)malloc(sizeof(variable));
+         /*                                                                   */
+         Init_Variable(parcours->var);
+         /*                                                                   */
+           /********** TYPEVAR ************************************************/
+         fscanf(dependfileoutput,"%s\n",parcours->var->v_typevar);
+           /********** NOMVAR *************************************************/
+         fscanf(dependfileoutput,"%s\n",parcours->var->v_nomvar);
+           /********** DIMCHAR ************************************************/
+         fscanf(dependfileoutput,"%s\n",parcours->var->v_dimchar);
+         if ( !strcasecmp(parcours->var->v_dimchar,"T") )
+         {
+            strcpy(parcours->var->v_dimchar,"");
+         }
+           /********** COMMONINFILE *******************************************/
+         fscanf(dependfileoutput,"%s\n",parcours->var->v_commoninfile);
+         if ( !strcasecmp(parcours->var->v_commoninfile,"T") )
+         {
+            strcpy(parcours->var->v_commoninfile,"");
+         }
+           /********** COMMONNAME *********************************************/
+         fscanf(dependfileoutput,"%s\n",parcours->var->v_commonname);
+         if ( !strcasecmp(parcours->var->v_commonname,"T") )
+         {
+            strcpy(parcours->var->v_commonname,"");
+         }
+           /********** NBDIM **************************************************/
+/*         fscanf(dependfileoutput,"%d\n",&parcours->var->v_nbdim);*/
+           /********** DIMENSIONGIVEN *****************************************/
+/*         fscanf(dependfileoutput,"%d\n",&parcours->var->v_dimensiongiven);*/
+           /********** ALLOCATABLE ********************************************/
+         fscanf(dependfileoutput,"%d\n",&parcours->var->v_allocatable);
+         if ( parcours->var->v_allocatable == 1 )
+         {
+            Add_Allocate_Var_1(parcours->var->v_nomvar,
+                               parcours->var->v_commonname);
+         }
+           /********** POINTERDECLARE *****************************************/
+         fscanf(dependfileoutput,"%d\n",&parcours->var->v_pointerdeclare);
+         if ( parcours->var->v_pointerdeclare == 1 )
+         {
+            Add_Pointer_Var_1(parcours->var->v_nomvar);
+         }
+           /********** PRECISION **********************************************/
+         fscanf(dependfileoutput,"%[^\n] \n",parcours->var->v_precision);
+         if ( !strcasecmp(parcours->var->v_precision,"T") )
+         {
+            strcpy(parcours->var->v_precision,"");
+         }
+           /********** INITIALVALUE *******************************************/
+/*         fscanf(dependfileoutput,"%[^\n] \n",parcours->var->v_initialvalue);
+         if ( !strcasecmp(parcours->var->v_initialvalue,"T") )
+         {
+            strcpy(parcours->var->v_initialvalue,"");
+         }*/
+           /********** NAMEINTYPENAME *****************************************/
+         fscanf(dependfileoutput,"%[^\n] \n",parcours->var->v_nameinttypename);
+         if ( !strcasecmp(parcours->var->v_nameinttypename,"T") )
+         {
+            strcpy(parcours->var->v_nameinttypename,"");
+         }
+           /********** INDICETABVARS ******************************************/
+         fscanf(dependfileoutput,"%d\n",&parcours->var->v_indicetabvars);
+           /********** READEDLISTDIMENSION ************************************/
+         fscanf(dependfileoutput,"%s\n",parcours->var->v_readedlistdimension);
+         if ( !strcasecmp(parcours->var->v_readedlistdimension,"T") )
+         {
+            strcpy(parcours->var->v_readedlistdimension,"");
+         }
+         else
+         {
+            parcours->var->v_dimensiongiven = 1;
+            parcours->var->v_nbdim = 1;
+            i = 1;
+            /*                                                                */
+            while ( i < strlen(parcours->var->v_readedlistdimension) )
+            {
+               if ( parcours->var->v_readedlistdimension[i] == ',' )
+               {
+                  parcours->var->v_nbdim = parcours->var->v_nbdim + 1 ;
+               }
+               /*                                                             */
+               i=i+1;
+            }
+         }
+           /*******************************************************************/
+         fscanf(dependfileoutput,"%s\n",nothing);
+         parcours->suiv = NULL;
+         if ( !listout )
+         {
+            listout = parcours;
+            parcoursprec = parcours;
+         }
+         else
+         {
+            if ( parcoursprec )
+            {
+               parcoursprec->suiv = parcours;
+               parcoursprec = parcours;
+            }
+            else
+            {
+               parcours0 = listout;
+               while ( parcours0->suiv ) parcours0=parcours0->suiv;
+               parcours0->suiv = parcours;
+               parcoursprec = parcours0->suiv;
+            }
+         }
+         parcours = NULL;
+      }
+      fclose(dependfileoutput);
+  }
+  return listout;
+}
+
+void Write_Subroutine_For_Alloc()
+{
+   FILE *dependfileoutput;
+   listnom *parcours;
+
+   if ( List_Subroutine_For_Alloc )
+   {
+      if ((dependfileoutput=fopen(".dependAllocAgrif","w"))!=NULL)
+      {
+         parcours = List_Subroutine_For_Alloc;
+         while (parcours)
+         {
+            fprintf(dependfileoutput,"%s\n",parcours->o_nom);
+            parcours = parcours->suiv;
+         }
+         fclose(dependfileoutput);
+      }
+   }
+}
+
+void Read_Subroutine_For_Alloc()
+{
+  FILE *dependfileoutput;
+  listnom *parcours;
+  listnom *ref;
+
+  ref = (listnom *)NULL;
+  if ((dependfileoutput=fopen(".dependAllocAgrif","r"))!=NULL)
+  {
+     List_Subroutine_For_Alloc = (listnom *)NULL;
+     while (!feof(dependfileoutput))
+     {
+        parcours=(listnom *)malloc(sizeof(listnom));
+        strcpy(parcours->o_nom,"");
+
+        fscanf(dependfileoutput,"%s\n",&parcours->o_nom);
+        parcours->suiv = NULL;
+
+        if ( !List_Subroutine_For_Alloc )
+        {
+           List_Subroutine_For_Alloc = parcours;
+           ref = parcours;
+        }
+        else
+        {
+            ref->suiv = parcours;
+            ref = parcours;
+        }
+     }
+     fclose(dependfileoutput);
+  }
+}
+
+/******************************************************************************/
+/*                        Writethedependavailablefile                         */
+/******************************************************************************/
+/* This subroutine is used to write the .dependfileavailable file             */
+/******************************************************************************/
+/*                                                                            */
+/*                                  .dependavailable                          */
+/*     tabvars(1) = var1                                                      */
+/*     tabvars(3) = var1                  2                                   */
+/*     tabvars(4) = var1         =====>   5                                   */
+/*     tabvars(6) = var1                                                      */
+/*     tabvars(7) = var1                                                      */
+/*                                                                            */
+/*                                                                            */
+/*                                                                            */
+/******************************************************************************/
+void Writethedependavailablefile()
+{
+  FILE *dependfileoutput;
+  listindice *parcours;
+
+  if ((dependfileoutput=fopen(".dependavailable","w"))!=NULL)
+  {
+     /* We are looking for all the indices of the Listofavailableindices      */
+     parcours = Listofavailableindices;
+     while (parcours)
+     {
+        if ( parcours->i_indice != 0 )
+        {
+           fprintf(dependfileoutput,"%d\n",parcours->i_indice);
+        }
+        parcours = parcours->suiv;
+     }
+     fclose(dependfileoutput);
+  }
+}
+
+/******************************************************************************/
+/*                        Readthedependavailablefile                          */
+/******************************************************************************/
+/* This subroutine is used to read the .dependfileavailable file              */
+/******************************************************************************/
+/*                                                                            */
+/*                                  .dependavailable                          */
+/*     tabvars(1) = var1                                                      */
+/*     tabvars(3) = var1                  2                                   */
+/*     tabvars(4) = var1         =====>   5  ==> Listofavailableindices       */
+/*     tabvars(6) = var1                                                      */
+/*     tabvars(7) = var1                                                      */
+/*                                                                            */
+/*                                                                            */
+/*                                                                            */
+/******************************************************************************/
+void Readthedependavailablefile()
+{
+  FILE *dependfileoutput;
+  listindice *parcours;
+
+  if ((dependfileoutput=fopen(".dependavailable","r"))!=NULL)
+  {
+     /* We are looking for all the indices of the Listofavailableindices      */
+     Listofavailableindices = (listindice *)NULL;
+     while (!feof(dependfileoutput))
+     {
+        parcours=(listindice *)malloc(sizeof(listindice));
+        fscanf(dependfileoutput,"%d\n",&parcours->i_indice);
+        if ( parcours->i_indice != 0 && parcours->i_indice < 10000000 )
+        {
+           parcours -> suiv = Listofavailableindices;
+           Listofavailableindices = parcours;
+        }
+        else
+        {
+           free(parcours);
+        }
+     }
+     fclose(dependfileoutput);
+  }
+}
+
+
+/******************************************************************************/
+/*                      Did_filetoparse_readed                                */
+/******************************************************************************/
+/* This subroutine is used to know if the .depend<NameTampon> exist           */
+/*    it means if the file has been ever parsed                               */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+int Did_filetoparse_readed(char *NameTampon)
+{
+  FILE *dependfileoutput;
+  char ligne[LONG_C];
+  int out;
+
+  convert2lower(NameTampon);
+  sprintf(ligne,".depend%s",NameTampon);
+  if ((dependfileoutput = fopen(ligne,"r"))==NULL)
+  {
+      out = 0;
+  }
+  else
+  {
+      out = 1;
+      fclose(dependfileoutput);
+  }
+  return out;
+}
+
+
+/******************************************************************************/
+/*                      Did_module_common_treaded                             */
+/******************************************************************************/
+/* This subroutine is used to know if the .depend<NameTampon> exist           */
+/*    it means if the file has been ever parsed                               */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+int Did_module_common_treaded(char *NameTampon)
+{
+  FILE *dependfileoutput;
+  char ligne[LONG_C];
+  int out;
+
+  convert2lower(NameTampon);
+  sprintf(ligne,".depend%s",NameTampon);
+  if ((dependfileoutput = fopen(ligne,"r"))==NULL)
+  {
+      out = 0;
+  }
+  else
+  {
+      out = 1;
+      fclose(dependfileoutput);
+  }
+  return out;
+}
+
+
+
+void Write_val_max()
+{
+  FILE *dependfileoutput;
+
+  if ((dependfileoutput=fopen(".dependvalmax","w"))!=NULL)
+  {
+     fprintf(dependfileoutput,"length_last\n");
+     fprintf(dependfileoutput,"%d\n",length_last);
+     fprintf(dependfileoutput,"length_first\n");
+     fprintf(dependfileoutput,"%d\n",length_first);
+     fprintf(dependfileoutput,"length_v_typevar\n");
+     fprintf(dependfileoutput,"%d\n",length_v_typevar);
+     fprintf(dependfileoutput,"length_v_nomvar\n");
+     fprintf(dependfileoutput,"%d\n",length_v_nomvar);
+     fprintf(dependfileoutput,"length_v_dimchar\n");
+     fprintf(dependfileoutput,"%d\n",length_v_dimchar);
+     fprintf(dependfileoutput,"length_v_modulename\n");
+     fprintf(dependfileoutput,"%d\n",length_v_modulename);
+     fprintf(dependfileoutput,"length_v_commonname\n");
+     fprintf(dependfileoutput,"%d\n",length_v_commonname);
+     fprintf(dependfileoutput,"length_v_vallengspec\n");
+     fprintf(dependfileoutput,"%d\n",length_v_vallengspec);
+     fprintf(dependfileoutput,"length_v_nameinttypename\n");
+     fprintf(dependfileoutput,"%d\n",length_v_nameinttypename);
+     fprintf(dependfileoutput,"length_v_commoninfile\n");
+     fprintf(dependfileoutput,"%d\n",length_v_commoninfile);
+     fprintf(dependfileoutput,"length_v_subroutinename\n");
+     fprintf(dependfileoutput,"%d\n",length_v_subroutinename);
+     fprintf(dependfileoutput,"length_v_precision\n");
+     fprintf(dependfileoutput,"%d\n",length_v_precision);
+     fprintf(dependfileoutput,"length_v_IntentSpec\n");
+     fprintf(dependfileoutput,"%d\n",length_v_IntentSpec);
+     fprintf(dependfileoutput,"length_v_initialvalue\n");
+     fprintf(dependfileoutput,"%d\n",length_v_initialvalue);
+     fprintf(dependfileoutput,"length_v_readedlistdimension\n");
+     fprintf(dependfileoutput,"%d\n",length_v_readedlistdimension);
+     fprintf(dependfileoutput,"length_u_usemodule\n");
+     fprintf(dependfileoutput,"%d\n",length_u_usemodule);
+     fprintf(dependfileoutput,"length_u_charusemodule\n");
+     fprintf(dependfileoutput,"%d\n",length_u_charusemodule);
+     fprintf(dependfileoutput,"length_u_cursubroutine\n");
+     fprintf(dependfileoutput,"%d\n",length_u_cursubroutine);
+     fprintf(dependfileoutput,"length_u_modulename\n");
+     fprintf(dependfileoutput,"%d\n",length_u_modulename);
+     fprintf(dependfileoutput,"length_n_name\n");
+     fprintf(dependfileoutput,"%d\n",length_n_name);
+     fprintf(dependfileoutput,"length_c_namevar\n");
+     fprintf(dependfileoutput,"%d\n",length_c_namevar);
+     fprintf(dependfileoutput,"length_c_namepointedvar\n");
+     fprintf(dependfileoutput,"%d\n",length_c_namepointedvar);
+     fprintf(dependfileoutput,"length_o_nom\n");
+     fprintf(dependfileoutput,"%d\n",length_o_nom);
+     fprintf(dependfileoutput,"length_o_module\n");
+     fprintf(dependfileoutput,"%d\n",length_o_module);
+     fprintf(dependfileoutput,"length_a_nomvar\n");
+     fprintf(dependfileoutput,"%d\n",length_a_nomvar);
+     fprintf(dependfileoutput,"length_a_subroutine\n");
+     fprintf(dependfileoutput,"%d\n",length_a_subroutine);
+     fprintf(dependfileoutput,"length_a_module\n");
+     fprintf(dependfileoutput,"%d\n",length_a_module);
+     fprintf(dependfileoutput,"length_usemodule\n");
+     fprintf(dependfileoutput,"%d\n",length_t_usemodule);
+     fprintf(dependfileoutput,"length_cursubroutine\n");
+     fprintf(dependfileoutput,"%d\n",length_t_cursubroutine);
+     fprintf(dependfileoutput,"length_curfilename\n");
+     fprintf(dependfileoutput,"%d\n",length_curfilename);
+     fprintf(dependfileoutput,"length_nomfileoutput\n");
+     fprintf(dependfileoutput,"%d\n",length_nomfileoutput);
+     fprintf(dependfileoutput,"length_motparse\n");
+     fprintf(dependfileoutput,"%d\n",length_motparse);
+     fprintf(dependfileoutput,"length_mainfile\n");
+     fprintf(dependfileoutput,"%d\n",length_mainfile);
+     fprintf(dependfileoutput,"length_nomdir\n");
+     fprintf(dependfileoutput,"%d\n",length_nomdir);
+     fprintf(dependfileoutput,"length_commondirout\n");
+     fprintf(dependfileoutput,"%d\n",length_commondirout);
+     fprintf(dependfileoutput,"length_commondirin\n");
+     fprintf(dependfileoutput,"%d\n",length_commondirin);
+     fprintf(dependfileoutput,"length_filetoparse\n");
+     fprintf(dependfileoutput,"%d\n",length_filetoparse);
+     fprintf(dependfileoutput,"length_curbuf\n");
+     fprintf(dependfileoutput,"%d\n",length_curbuf);
+     fprintf(dependfileoutput,"length_toprintglob\n");
+     fprintf(dependfileoutput,"%d\n",length_toprintglob);
+     fprintf(dependfileoutput,"Size_char0d\n");
+     fprintf(dependfileoutput,"%d\n",value_char_size);
+     fprintf(dependfileoutput,"Size_char1d\n");
+     fprintf(dependfileoutput,"%d\n",value_char_size1);
+     fprintf(dependfileoutput,"Size_char2d\n");
+     fprintf(dependfileoutput,"%d\n",value_char_size2);
+     fprintf(dependfileoutput,"Size_char3d\n");
+     fprintf(dependfileoutput,"%d\n",value_char_size3);
+     fprintf(dependfileoutput,"length_tmpvargridname\n");
+     fprintf(dependfileoutput,"%d\n",length_tmpvargridname);
+     fprintf(dependfileoutput,"length_ligne_Subloop\n");
+     fprintf(dependfileoutput,"%d\n",length_ligne_Subloop);
+     fprintf(dependfileoutput,"length_lvargridname_toamr\n");
+     fprintf(dependfileoutput,"%d\n",length_lvargridname_toamr);
+     fprintf(dependfileoutput,"length_toprint_toamr\n");
+     fprintf(dependfileoutput,"%d\n",length_toprint_utilagrif);
+     fprintf(dependfileoutput,"length_toprinttmp_utilchar\n");
+     fprintf(dependfileoutput,"%d\n",length_toprinttmp_utilchar);
+     fprintf(dependfileoutput,"length_ligne_writedecl\n");
+     fprintf(dependfileoutput,"%d\n",length_ligne_writedecl);
+     fprintf(dependfileoutput,"length_newname_toamr\n");
+     fprintf(dependfileoutput,"%d\n",length_newname_toamr);
+     fprintf(dependfileoutput,"length_newname_writedecl\n");
+     fprintf(dependfileoutput,"%d\n",length_newname_writedecl);
+     fprintf(dependfileoutput,"length_ligne_toamr\n");
+     fprintf(dependfileoutput,"%d\n",length_ligne_toamr);
+     fprintf(dependfileoutput,"length_tmpligne_writedecl\n");
+     fprintf(dependfileoutput,"%d\n",length_tmpligne_writedecl);
+/*     fprintf(dependfileoutput,"\n");
+     fprintf(dependfileoutput,"%d\n",);
+     fprintf(dependfileoutput,"\n");
+     fprintf(dependfileoutput,"%d\n",);
+     fprintf(dependfileoutput,"\n");
+     fprintf(dependfileoutput,"%d\n",);
+     fprintf(dependfileoutput,"\n");
+     fprintf(dependfileoutput,"%d\n",);
+     fprintf(dependfileoutput,"\n");
+     fprintf(dependfileoutput,"%d\n",);
+     fprintf(dependfileoutput,"\n");
+     fprintf(dependfileoutput,"%d\n",);
+     fprintf(dependfileoutput,"\n");
+     fprintf(dependfileoutput,"%d\n",);
+     fprintf(dependfileoutput,"\n");
+     fprintf(dependfileoutput,"%d\n",);
+     fprintf(dependfileoutput,"\n");
+     fprintf(dependfileoutput,"%d\n",);*/
+
+     fclose(dependfileoutput);
+  }
+}
+
+
+void Read_val_max()
+{
+  char nothing[LONG_C];
+  FILE *dependfileoutput;
+
+  if ((dependfileoutput=fopen(".dependvalmax","r"))!=NULL)
+  {
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_last);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_first);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_v_typevar);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_v_nomvar);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_v_dimchar);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_v_modulename);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_v_commonname);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_v_vallengspec);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_v_nameinttypename);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_v_commoninfile);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_v_subroutinename);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_v_precision);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_v_IntentSpec);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_v_initialvalue);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_v_readedlistdimension);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_u_usemodule);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_u_charusemodule);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_u_cursubroutine);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_u_modulename);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_n_name);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_c_namevar);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_c_namepointedvar);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_o_nom);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_o_module);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_a_nomvar);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_a_subroutine);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_a_module);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_t_usemodule);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_t_cursubroutine);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_curfilename);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_nomfileoutput);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_motparse);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_mainfile);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_nomdir);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_commondirout);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_commondirin);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_filetoparse);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_curbuf);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_toprintglob);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&value_char_size);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&value_char_size1);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&value_char_size2);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&value_char_size3);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_tmpvargridname);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_ligne_Subloop);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_lvargridname_toamr);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_toprint_utilagrif);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_toprinttmp_utilchar);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_ligne_writedecl);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_newname_toamr);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_newname_writedecl);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_ligne_toamr);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&length_tmpligne_writedecl);
+/*     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&);
+     fscanf(dependfileoutput,"%s\n",nothing);
+     fscanf(dependfileoutput,"%d\n",&);*/
+
+     fclose(dependfileoutput);
+  }
+}
Index: /vendors/AGRIF/r_00/LIB/fortran.c
===================================================================
--- /vendors/AGRIF/r_00/LIB/fortran.c	(revision 1902)
+++ /vendors/AGRIF/r_00/LIB/fortran.c	(revision 1902)
@@ -0,0 +1,13456 @@
+#ifndef lint
+static char yysccsid[] = "@(#)yaccpar	1.9 (Berkeley) 02/21/93";
+#endif
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define yyclearin (yychar=(-1))
+#define yyerrok (yyerrflag=0)
+#define YYRECOVERING (yyerrflag!=0)
+#define yyparse fortranparse
+#define yylex fortranlex
+#define yyerror fortranerror
+#define yychar fortranchar
+#define yyval fortranval
+#define yylval fortranlval
+#define yydebug fortrandebug
+#define yynerrs fortrannerrs
+#define yyerrflag fortranerrflag
+#define yyss fortranss
+#define yyssp fortranssp
+#define yyvs fortranvs
+#define yyvsp fortranvsp
+#define yylhs fortranlhs
+#define yylen fortranlen
+#define yydefred fortrandefred
+#define yydgoto fortrandgoto
+#define yysindex fortransindex
+#define yyrindex fortranrindex
+#define yygindex fortrangindex
+#define yytable fortrantable
+#define yycheck fortrancheck
+#define yyname fortranname
+#define yyrule fortranrule
+#define YYPREFIX "fortran"
+#line 36 "fortran.y"
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include "decl.h"
+extern int line_num_fortran;
+extern int line_num_fortran_common;
+char *tmp;
+char c_selectorname[LONG_C];
+char ligne[LONG_C];
+char truename[LONGNOM];
+char identcopy[LONG_C];
+int c_selectorgiven=0;
+int incom;
+listvar *curlistvar;
+typedim c_selectordim;
+listcouple *coupletmp;
+listdim *parcoursdim;
+int removeline=0;
+listvar *test;
+#line 57 "fortran.y"
+typedef union {
+       char      nac[LONG_C];
+       char      na[LONGNOM];
+       listdim  *d;
+       listvar  *l;
+       listnom  *ln;
+       listcouple  *lc;
+       listname *lnn;
+       typedim   dim1;
+       variable *v;
+       } YYSTYPE;
+#line 68 "y.tab.c"
+#define TOK_BINARY_OP 257
+#define TOK_EQV 258
+#define TOK_NEQV 259
+#define TOK_OR 260
+#define TOK_XOR 261
+#define TOK_AND 262
+#define TOK_NOT 263
+#define TOK_LT 264
+#define TOK_GT 265
+#define TOK_LE 266
+#define TOK_GE 267
+#define TOK_EQ 268
+#define TOK_NE 269
+#define TOK_UNARY_OP 270
+#define TOK_DSLASH 271
+#define TOK_SLASH 272
+#define TOK_DASTER 273
+#define TOK_SEP 274
+#define TOK_SEMICOLON 275
+#define TOK_NEXTLINE 276
+#define TOK_PARAMETER 277
+#define TOK_RESULT 278
+#define TOK_ONLY 279
+#define TOK_INCLUDE 280
+#define TOK_SUBROUTINE 281
+#define TOK_PROGRAM 282
+#define TOK_FUNCTION 283
+#define TOK_OMP 284
+#define TOK_DOLLAR 285
+#define TOK_FORMAT 286
+#define TOK_MAX 287
+#define TOK_TANH 288
+#define TOK_WHERE 289
+#define TOK_ELSEWHERE 290
+#define TOK_ENDWHERE 291
+#define TOK_MAXVAL 292
+#define TOK_TRIM 293
+#define TOK_SUM 294
+#define TOK_SQRT 295
+#define TOK_CASE 296
+#define TOK_SELECTCASE 297
+#define TOK_FILE 298
+#define TOK_END 299
+#define TOK_ERR 300
+#define TOK_DONOTTREAT 301
+#define TOK_ENDDONOTTREAT 302
+#define TOK_EXIST 303
+#define TOK_MIN 304
+#define TOK_FLOAT 305
+#define TOK_EXP 306
+#define TOK_COS 307
+#define TOK_COSH 308
+#define TOK_ACOS 309
+#define TOK_NINT 310
+#define TOK_CYCLE 311
+#define TOK_SIN 312
+#define TOK_SINH 313
+#define TOK_ASIN 314
+#define TOK_EQUIVALENCE 315
+#define TOK_BACKSPACE 316
+#define TOK_LOG 317
+#define TOK_TAN 318
+#define TOK_ATAN 319
+#define TOK_RECURSIVE 320
+#define TOK_ABS 321
+#define TOK_MOD 322
+#define TOK_SIGN 323
+#define TOK_MINLOC 324
+#define TOK_MAXLOC 325
+#define TOK_EXIT 326
+#define TOK_MINVAL 327
+#define TOK_PUBLIC 328
+#define TOK_PRIVATE 329
+#define TOK_ALLOCATABLE 330
+#define TOK_RETURN 331
+#define TOK_THEN 332
+#define TOK_ELSEIF 333
+#define TOK_ELSE 334
+#define TOK_ENDIF 335
+#define TOK_PRINT 336
+#define TOK_PLAINGOTO 337
+#define TOK_CONSTRUCTID 338
+#define TOK_LOGICALIF 339
+#define TOK_PLAINDO 340
+#define TOK_CONTAINS 341
+#define TOK_ENDDO 342
+#define TOK_MODULE 343
+#define TOK_ENDMODULE 344
+#define TOK_DOWHILE 345
+#define TOK_ALLOCATE 346
+#define TOK_OPEN 347
+#define TOK_CLOSE 348
+#define TOK_INQUIRE 349
+#define TOK_WRITE 350
+#define TOK_READ 351
+#define TOK_REWIND 352
+#define TOK_DEALLOCATE 353
+#define TOK_NULLIFY 354
+#define TOK_FIN 355
+#define TOK_DEBUT 356
+#define TOK_DIMENSION 357
+#define TOK_ENDSELECT 358
+#define TOK_EXTERNAL 359
+#define TOK_INTENT 360
+#define TOK_INTRINSIC 361
+#define TOK_NAMELIST 362
+#define TOK_CASEDEFAULT 363
+#define TOK_OPTIONAL 364
+#define TOK_POINTER 365
+#define TOK_CONTINUE 366
+#define TOK_SAVE 367
+#define TOK_TARGET 368
+#define TOK_QUOTE 369
+#define TOK_IMPLICIT 370
+#define TOK_NONE 371
+#define TOK_CALL 372
+#define TOK_STAT 373
+#define TOK_POINT_TO 374
+#define TOK_COMMON 375
+#define TOK_GLOBAL 376
+#define TOK_INTERFACE 377
+#define TOK_ENDINTERFACE 378
+#define TOK_LEFTAB 379
+#define TOK_RIGHTAB 380
+#define TOK_PAUSE 381
+#define TOK_PROCEDURE 382
+#define TOK_STOP 383
+#define TOK_NAMEEQ 384
+#define TOK_REAL8 385
+#define TOK_OUT 386
+#define TOK_INOUT 387
+#define TOK_IN 388
+#define TOK_USE 389
+#define TOK_TRUE 390
+#define TOK_FALSE 391
+#define TOK_LABEL 392
+#define TOK_TYPE 393
+#define TOK_TYPEPAR 394
+#define TOK_ENDTYPE 395
+#define TOK_REAL 396
+#define TOK_INTEGER 397
+#define TOK_LOGICAL 398
+#define TOK_DOUBLEPRECISION 399
+#define TOK_DOUBLEREAL 400
+#define TOK_ENDSUBROUTINE 401
+#define TOK_ENDFUNCTION 402
+#define TOK_ENDPROGRAM 403
+#define TOK_ENDUNIT 404
+#define TOK_CHARACTER 405
+#define TOK_CHAR_CONSTANT 406
+#define TOK_CHAR_CUT 407
+#define TOK_DATA 408
+#define TOK_CHAR_INT 409
+#define TOK_CHAR_MESSAGE 410
+#define TOK_CSTREAL 411
+#define TOK_CSTREALDP 412
+#define TOK_CSTREALQP 413
+#define TOK_SFREAL 414
+#define TOK_COMPLEX 415
+#define TOK_DOUBLECOMPLEX 416
+#define TOK_NAME 417
+#define TOK_NAME_CHAR 418
+#define TOK_PROBTYPE 419
+#define TOK_INTERPTYPE 420
+#define TOK_VARTYPE 421
+#define TOK_BC 422
+#define TOK_OP 423
+#define TOK_CSTINT 424
+#define TOK_COMMENT 425
+#define TOK_FILENAME 426
+#define YYERRCODE 256
+short fortranlhs[] = {                                        -1,
+    0,    0,   68,   68,   68,   68,   68,   71,   71,   76,
+   76,   76,   76,   76,   82,   78,   72,   72,   72,   72,
+   69,   70,   70,   73,   73,   83,   75,   84,   84,   77,
+   77,   77,   77,   77,   77,   16,   74,   80,   33,    6,
+    6,    6,   85,   85,   85,    5,    5,   38,   38,   79,
+   79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
+   79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
+   86,   86,  103,  103,  103,  103,  103,  103,  103,  103,
+  103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
+  103,  103,  103,  103,  103,  103,   98,   98,   88,   88,
+   99,   99,  105,  106,  106,  104,  104,   87,   87,    2,
+    2,  108,   89,  100,  101,  101,  101,   58,   58,   91,
+   91,   91,   91,  111,  112,  112,  110,  110,  110,   47,
+   47,   47,   47,   47,   32,   32,   97,  113,  113,  113,
+  113,  114,   96,   96,  115,    3,    3,   93,   93,   67,
+   67,   66,   66,   90,   90,   90,  117,  117,  118,  118,
+  119,   15,   15,  109,  109,    4,    4,   14,   95,  120,
+  120,   92,   92,  121,    1,    1,  107,   19,   19,   19,
+   19,  127,  126,  126,  126,  126,  128,  128,  128,  125,
+   25,   24,   24,   24,   24,   24,   24,  116,  116,   65,
+   65,  124,  124,  124,  130,  130,   34,   34,   34,   34,
+   37,   37,  129,  129,  122,  122,  122,  131,  131,  132,
+  132,  132,  132,  132,  132,  132,  132,  132,  132,  132,
+   30,   30,   30,  102,  102,   11,   11,   12,   12,   13,
+   13,   13,   13,   13,   63,   63,   62,   62,   62,   62,
+   61,   61,   61,   61,   61,   61,   61,   61,   61,   61,
+   61,   61,   61,   61,   61,   61,   61,   61,   61,   61,
+   61,   61,   61,   61,   61,   61,   40,   40,   39,   39,
+   39,   39,   39,   39,   31,   31,   64,   64,   64,   64,
+   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,
+   64,   64,   64,   64,   64,   64,   64,   59,   59,   59,
+   59,   60,   60,   41,   41,   41,  133,   49,   49,   49,
+   49,   36,   48,   42,   50,   50,   52,   52,   51,   51,
+   53,   53,   53,   53,   53,   53,   53,   28,   27,   27,
+   27,   27,   27,   27,   27,   27,   26,   26,   26,   26,
+   55,   55,   54,   57,   57,   56,   56,  123,  123,  134,
+   35,   94,   94,   94,   94,  135,   17,    9,    9,   10,
+    7,    7,    8,    8,   81,   81,   81,   81,   81,   81,
+   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,
+   81,   81,   81,   81,   81,   81,   81,   20,   23,   22,
+   21,  143,  143,  143,  141,  141,  141,  146,  146,  146,
+  145,  145,   18,   18,  148,  148,  144,  147,  149,  149,
+  136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
+  136,  136,  157,  150,  150,  156,  156,  151,  151,  154,
+  159,  159,  160,  160,  158,  162,  161,  161,  163,  163,
+  155,  155,  153,  153,  153,  153,  153,  153,  171,  171,
+  172,  172,  172,  173,  173,  174,  174,  168,  168,  178,
+  178,  177,  177,  166,  166,  170,  170,  170,  170,  170,
+  179,  179,  181,  181,  181,  181,  181,  181,  181,  181,
+  165,  165,  176,  176,  167,  167,  167,  169,  180,  180,
+  182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+  182,  182,  182,  183,  183,  175,  175,  185,  185,  184,
+  184,  184,  184,  184,  186,  186,  186,   43,   43,   43,
+   44,   44,   44,   44,   44,   44,   44,   44,   45,   45,
+   45,   45,   45,   46,   46,  187,  187,  164,  152,  152,
+  137,  137,  137,  188,  188,  188,  189,  190,  190,  139,
+  139,  138,  138,  140,  140,  191,  191,  192,  192,  142,
+   29,
+};
+short fortranlen[] = {                                         2,
+    0,    2,    2,    2,    1,    3,    3,    1,    3,    2,
+    2,    3,    3,    2,    2,    2,    1,    1,    1,    1,
+    0,    0,    2,    0,    1,    0,    0,    0,    1,    0,
+    4,    2,    5,    3,    2,    1,    0,    1,    1,    0,
+    2,    3,    0,    2,    3,    1,    3,    1,    1,    2,
+    4,    2,    2,    4,    2,    1,    1,    1,    1,    1,
+    1,    1,    1,    1,    1,    4,    3,    3,    2,    3,
+    0,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+    1,    1,    1,    1,    1,    1,    1,    3,    3,    5,
+    1,    3,    3,    2,    4,    1,    3,    0,    2,    2,
+    3,    1,    1,    1,    4,    6,    4,    1,    3,    2,
+    3,    5,    3,    1,    0,    2,    1,    4,    3,    2,
+    3,    3,    3,    3,    0,    1,    2,    2,    3,    5,
+    3,    0,    2,    2,    1,    5,    5,    2,    3,    2,
+    3,    1,    3,    2,    3,    5,    1,    2,    1,    3,
+    2,    1,    3,    0,    1,    1,    3,    3,    2,    1,
+    3,    2,    2,    0,    6,    7,    0,    2,    2,    3,
+    3,    1,    0,    2,    4,    3,    3,    4,    2,    1,
+    1,    1,    1,    1,    1,    1,    1,    0,    2,    1,
+    3,    0,    2,    3,    1,    3,    2,    3,    1,    1,
+    1,    1,    0,    3,    0,    2,    4,    1,    3,    1,
+    1,    1,    2,    1,    4,    1,    1,    1,    1,    1,
+    1,    1,    1,    1,    1,    0,    3,    1,    3,    1,
+    1,    2,    2,    3,    1,    1,    1,    3,    1,    1,
+    3,    3,    4,    4,    3,    4,    4,    3,    4,    4,
+    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
+    4,    3,    4,    4,    4,    4,    1,    3,    1,    1,
+    1,    2,    2,    2,    1,    1,    2,    2,    2,    2,
+    2,    2,    2,    2,    2,    2,    2,    3,    2,    3,
+    2,    2,    2,    2,    2,    2,    2,    0,    1,    2,
+    2,    2,    1,    1,    1,    1,    0,    1,    2,    4,
+    5,    4,    3,    3,    1,    2,    1,    3,    1,    1,
+    3,    5,    4,    3,    2,    2,    1,    1,    1,    1,
+    1,    1,    1,    1,    2,    2,    1,    2,    1,    1,
+    0,    1,    5,    0,    1,    1,    1,    0,    3,    0,
+    5,    2,    4,    6,    6,    1,    1,    1,    3,    3,
+    1,    3,    3,    1,    1,    5,    5,    4,    1,    2,
+    2,    2,    2,    1,    2,    5,    1,    1,    2,    5,
+    1,    2,    3,    4,    1,    1,    1,    1,    1,    1,
+    1,    1,    3,    3,    3,    2,    2,    0,    5,    7,
+    0,    2,    1,    1,    0,    1,    1,    1,    0,    1,
+    1,    2,    1,    1,    1,    5,    5,    2,    2,    2,
+    2,    1,    0,    4,    6,    1,    3,    2,    2,    2,
+    0,    3,    0,    1,    2,    1,    1,    3,    1,    2,
+    1,    1,    2,    2,    2,    3,    2,    1,    0,    2,
+    1,    1,    1,    0,    2,    0,    1,    2,    2,    0,
+    1,    0,    2,    3,    3,    3,    3,    1,    3,    1,
+    1,    3,    1,    1,    1,    2,    4,    4,    2,    2,
+    1,    1,    1,    1,    1,    1,    1,    1,    1,    3,
+    1,    1,    3,    3,    3,    3,    2,    3,    2,    2,
+    2,    2,    3,    1,    1,    1,    3,    0,    1,    2,
+    4,    2,    2,    5,    0,    1,    2,    1,    1,    1,
+    3,    3,    3,    3,    3,    3,    1,    1,    1,    3,
+    5,    5,    5,    5,    7,    1,    3,    1,    8,    2,
+    1,    1,    3,    1,    1,    1,    4,    1,    3,    1,
+    3,    0,    4,    1,    3,    0,    1,    0,    2,    3,
+    1,
+};
+short fortrandefred[] = {                                      1,
+    0,   37,   19,   20,   17,   18,   27,    5,   21,    2,
+    0,    0,   27,   23,    3,  113,   38,    0,    0,  458,
+    0,  387,  388,    0,    0,    0,    0,    0,   29,    0,
+    0,    0,    0,    0,  391,    0,  497,    0,    0,  417,
+  397,    0,    0,    0,  418,    0,  491,  492,  496,  498,
+  495,    0,    0,    0,  145,  396,    0,    0,    0,  395,
+    0,  421,  124,    0,  446,  157,    0,    0,    0,  451,
+    0,  452,  366,    0,  182,    0,  193,  192,  197,  195,
+  398,  401,  400,  399,  190,  114,  194,  196,  338,  436,
+    0,    0,    0,    0,    0,  379,    0,    0,    0,   60,
+    0,    8,   21,   21,    0,    0,   21,    0,    0,    0,
+    0,   58,   61,   62,   63,   64,   65,    0,    0,    0,
+    0,    0,    0,    0,    0,  375,  384,    0,    0,    0,
+    0,  423,  424,  425,    0,    0,    0,    0,    0,    0,
+    0,   25,   37,    7,   36,   32,    0,    0,    0,  285,
+  286,    0,    0,    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,  340,    0,
+  347,  350,  349,  342,  343,  344,  341,    0,    0,    0,
+    0,    0,  249,    0,  247,    0,  281,    0,  316,  250,
+    0,    0,    0,  356,  430,    0,    0,    0,  101,    0,
+  428,    0,    0,  150,    0,  148,    0,  429,    0,  414,
+  413,  392,  548,    0,  550,    0,  416,  407,   35,  383,
+    0,  480,  478,    0,  457,    0,    0,    0,    0,  162,
+    0,    0,  138,    0,    0,  172,  173,  158,  143,  144,
+  170,    0,  234,  235,    0,   72,   52,    0,    0,    0,
+  112,    0,   50,    0,  174,  381,  382,  380,    0,    0,
+    0,  178,   15,    0,    0,    0,   10,   11,   39,   21,
+   37,   14,    0,    0,    0,    0,  166,  165,    0,    0,
+    0,    0,    0,    0,    0,    0,  120,    0,    0,  137,
+    0,    0,    0,    0,  159,    0,    0,  179,    0,  210,
+    0,  367,    0,  389,    0,    0,  433,  385,    0,    0,
+    0,    0,    0,    0,  422,  431,    0,    0,  440,  445,
+    0,  453,  514,  515,  494,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,  454,    0,    0,    0,    0,    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,    0,    0,    0,    0,    0,
+    0,    0,  249,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  348,    0,  352,  346,  345,  317,    0,  319,
+    0,  317,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  282,    0,    0,  393,    0,    0,    0,    0,    0,
+  109,  152,    0,    0,    0,    0,  570,    0,    0,    0,
+    0,    0,  551,  556,    0,    0,    0,    0,    0,  560,
+  564,    0,    0,   74,   75,   78,   73,   79,   76,   81,
+   82,   83,   84,   85,   80,   86,   87,   88,   89,   90,
+   91,   92,   93,   94,   95,   77,   96,    0,   97,    0,
+  139,    0,    0,    0,    0,    0,    0,  220,  222,    0,
+  224,    0,  226,  227,  228,  229,  230,  221,    0,  218,
+  216,  174,  110,    0,    0,  180,    0,    0,  203,    0,
+    0,    0,    9,   16,   12,   13,    0,    0,    0,    0,
+    0,  123,    0,    0,    0,   70,    0,    0,    0,  126,
+  121,  141,    0,    0,  161,    0,    0,  184,    0,  212,
+    0,    0,    0,    0,    0,  207,  181,    0,    0,    0,
+  412,  571,    0,  405,    0,    0,  433,  437,    0,    0,
+    0,    0,  447,  484,  485,    0,    0,    0,    0,  481,
+  499,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  468,    0,  516,    0,    0,  469,    0,    0,    0,
+    0,    0,    0,  456,   49,   48,   41,    0,   46,    0,
+    0,    0,  252,    0,    0,    0,  251,  258,  255,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  272,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  324,    0,    0,    0,    0,  248,    0,    0,
+    0,    0,    0,    0,  307,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  306,    0,    0,    0,    0,    0,    0,    0,
+    0,  394,  104,    0,  103,  102,   66,    0,    0,    0,
+    0,    0,    0,  477,  476,  479,    0,    0,    0,  378,
+    0,  163,    0,   99,    0,  171,   51,    0,  223,    0,
+    0,    0,    0,  111,    0,    0,  204,    0,  245,    0,
+  238,    0,  240,  434,   31,    0,   54,  167,    0,    0,
+  136,    0,    0,    0,    0,    0,    0,  129,    0,    0,
+    0,  160,    0,    0,    0,    0,  189,  186,  208,    0,
+    0,    0,  368,    0,    0,    0,    0,  450,  442,    0,
+  489,  490,    0,    0,    0,    0,  474,  475,    0,    0,
+    0,  526,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,   42,    0,   33,  386,    0,  253,  254,
+  257,  261,  262,  263,  264,  265,  260,  266,  267,  268,
+  269,  270,  271,  273,  274,  275,  276,  256,    0,    0,
+    0,  248,  532,    0,  536,    0,  534,    0,  259,    0,
+    0,  322,    0,  327,    0,  330,    0,    0,    0,    0,
+    0,    0,    0,    0,  153,  390,    0,    0,    0,  553,
+  376,  561,  377,  565,   98,    0,    0,    0,  147,  232,
+  233,  231,    0,  219,  217,    0,    0,  206,    0,    0,
+  237,    0,    0,  122,    0,    0,    0,    0,    0,    0,
+  115,  128,    0,  117,  140,  146,  185,    0,  187,    0,
+    0,    0,    0,    0,    0,    0,    0,  448,    0,    0,
+    0,  500,    0,  482,    0,    0,  527,  517,   47,   44,
+    0,    0,    0,    0,    0,  361,    0,    0,    0,    0,
+    0,  321,  105,    0,  557,    0,  100,    0,    0,  199,
+  225,    0,    0,  239,    0,  244,  119,    0,    0,    0,
+    0,    0,  188,  214,    0,  364,    0,  371,  370,  369,
+  426,  427,    0,  435,  488,    0,    0,    0,   45,    0,
+  541,  543,  542,  353,    0,    0,  328,    0,    0,  563,
+    0,    0,  175,    0,  116,    0,    0,    0,  524,    0,
+    0,    0,    0,  201,  176,    0,  373,  372,    0,    0,
+    0,    0,    0,    0,    0,    0,
+};
+short fortrandgoto[] = {                                       1,
+  262,  263,   91,  286,  598,  353,  927,  928,  742,  743,
+  512,  710,  711,  287,  242,  146,  313,  222,   92,   93,
+   94,   95,   96,   97,   98,  189,  190,  191,  553,  843,
+  192,  722,  280,  311,  193,  194,  542,  599,  195,  356,
+  196,  197,  385,  386,  387,  893,  723,  198,  199,  640,
+  814,  815,  816,  395,  396,  205,  211,  724,  663,  645,
+  200,  357,  713,  422,  910,  433,  100,   10,  276,   11,
+  101,   12,  143,   13,   14,  102,  103,  277,  104,  105,
+  106,  107,    0,  108,  776,  255,  215,  245,  109,  110,
+  111,  112,  113,  114,  115,  116,  117,  478,  208,  118,
+  293,  498,  479,  483,  209,  428,  503,  264,  289,  294,
+  119,  297,  120,  300,  121,  839,  122,  304,  305,  252,
+  505,  265,  953,  272,  123,  308,  124,  544,  737,  509,
+  499,  500,  641,  954,  125,  126,  441,  683,  449,  452,
+  127,  128,  202,  129,  320,  554,  130,  228,    0,  131,
+  325,  132,  133,  134,  135,  136,  274,  137,  329,  561,
+  562,  138,  563,  225,  139,  332,  140,  345,  141,  235,
+    0,    0,    0,  582,  583,  346,  587,    0,  568,  347,
+  570,  571,  349,  584,  585,  763,    0,  443,  444,    0,
+    0,    0,
+};
+short fortransindex[] = {                                      0,
+  121,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+27287, -307,    0,    0,    0,    0,    0, -289, -289,    0,
+  111,    0,    0,25188,  118, 1476,  147,  153,    0,25188,
+   91,  107, 1476,  163,    0,   27,    0,  -13,25188,    0,
+    0, -250, -178,   27,    0,  208,    0,    0,    0,    0,
+    0,  -14,  215,  229,    0,    0,  201,  201, -151,    0,
+  244,    0,    0, -237,    0,    0,  -89,   27,   27,    0,
+ -100,    0,    0, -101,    0,   27,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  284,   35,   27,   27,   27,    0,  290,  134,  280,    0,
+   79,    0,    0,    0,   -5, -307,    0,  138,   -9,  387,
+  388,    0,    0,    0,    0,    0,    0,   42, -117,  404,
+  387, -110,  225, -312,   43,    0,    0, 3999,   54,25188,
+   41,    0,    0,    0, 1476,  420,  425,   59,  437,25721,
+  437,    0,    0,    0,    0,    0,  444,25188,25188,    0,
+    0,25188,  446,  448,  450,25188,25188,25188,  455,  456,
+  466,  478,  480,  486,  487,  497,  503,  504,  509,  513,
+25188,  515,  524,  528,  532,  533,25241,    0,    0,  539,
+    0,    0,    0,    0,    0,    0,    0,25188,   18,  149,
+  542,25188,    0,  548,    0,  553,    0,  563,    0,    0,
+ 8597,  115,25188,    0,    0, 8597,  190,  570,    0,25188,
+    0, 8597,  558,    0,  222,    0,  222,    0,25188,    0,
+    0,    0,    0,25188,    0,25903,    0,    0,    0,    0,
+  190,    0,    0,25380,    0,  190,  190,  222, 3040,    0,
+  224,  190,    0,25188,  609,    0,    0,    0,    0,    0,
+    0,  610,    0,    0,  201,    0,    0,  255, 1930,  603,
+    0,  651,    0, -289,    0,    0,    0,    0,  283,25428,
+ -312,    0,    0,  665,27287, -307,    0,    0,    0,    0,
+    0,    0, -289,  648,  296,  675,    0,    0,   19,  308,
+   19,  -12,   86,  -11,  665,  308,    0,  190,   19,    0,
+  313,  665,  318,  692,    0,  -10, 3093,    0,24098,    0,
+  703,    0,  711,    0,  717,  732,    0,    0,  387,  190,
+ 8597,25188,25188,  190,    0,    0,  360, 4498,    0,    0,
+25685,    0,    0,    0,    0,25188,25188,25188,25188,  740,
+25685,  149,  553, 1423,    0,  764,  209,    0, 9398,25241,
+    0,    8,  535,25936, 3157,  236, 8597,25188,25188,25188,
+  281,26019,  461,25188,25188,25188,25188,25188,25188,25188,
+25188,25188,25188,25188,25188,26043,25188,25188,25188,25188,
+25188,25241,    0,  781,  451,  786,  789,    0, 8597,25188,
+  790,26094,    0,25188,    0,    0,    0,    0,   48,    0,
+  190,    0,24299,25188,25188,25188,25188,25188,25188,25188,
+25188,25188,25188,25188,25188,25188,25188, 2012,25188,24438,
+24486,    0,25188,25188,    0,26169,  665,  475,  147,26191,
+    0,    0,  791,  791,26213,27040,    0,  796,  553,  563,
+  793,  801,    0,    0,  798,  256,  799,  796,  797,    0,
+    0,  568,  791,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  800,    0,  571,
+    0, 8597,  577,  802,  428,   27,  665,    0,    0,  665,
+    0,  807,    0,    0,    0,    0,    0,    0,  119,    0,
+    0,    0,    0,  444,  436,    0,24627, 8597,    0,  819,
+ 2554,  665,    0,    0,    0,    0,  444,25188,  599,  296,
+  387,    0,  387,  233,25188,    0,  447,  449,  233,    0,
+    0,    0,  387,  665,    0,  692,  318,    0, 3093,    0,
+24251,  817, 8597,  824,24675,    0,    0, -225,  190,  190,
+    0,    0,  806,    0, 8597, 8597,    0,    0,  445, 8597,
+  827,  826,    0,    0,    0, 9456, 9398,  605,  100,    0,
+    0, 8597, 8597, 8597, 8597,25188,  333, 1423,  538,  553,
+ 8597,    0,  828,    0, 8597, 1423,    0, 9398, 9398, 9398,
+ 9398, 9398,  598,    0,    0,    0,    0,  614,    0,  833,
+ 1476,25188,    0,  618,  619,26276,    0,    0,    0,26327,
+26349,26446,26468,26509,26582,26604,26626,26701,26742,26764,
+26859,    0,  626,  634,  636,  638,  642,  831,  834,  835,
+26881,25241,    0,25241,25241,  644,25188,    0,  822,  840,
+24813,  553,  841,25188,    0, 8597, 2081, 2081, 2226, 2226,
+ 3157,   84,   84,   84,   84,   84,   84,   90,   90,   48,
+25188,25188,    0, 8597,   48,25188,   84,25188,   84, 8597,
+ 8597,    0,    0,  190,    0,    0,    0,  468,  551,25188,
+24813, -278,  845,    0,    0,    0, -278,  846,  190,    0,
+ 3040,    0,25188,    0,25188,    0,    0,  852,    0, -170,
+ 1930,  843,  485,    0,  665,  864,    0,25188,    0,  646,
+    0, 6917,    0,    0,    0, 8597,    0,    0,  318,  308,
+    0,  321,  550,  635,26934,  643,  870,    0,  645,  190,
+  852,    0,  878,24675,  817,  506,    0,    0,    0,  862,
+  547,  880,    0,  793,  797,25188,  665,    0,    0, 4498,
+    0,    0,24813,  631,  544,25685,    0,    0, 8597,    0,
+  656,    0, 8597, 8597, 1423, 8597,  828,  250,  598,  598,
+  598,   38,   -1,    0,   10,    0,    0, 8597,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,25563,25563,
+25563,    0,    0, 8597,    0, 8597,    0, 8597,    0,  885,
+25188,    0,24866,    0,  883,    0, 7337,  548,   84,   84,
+   48,   84,   84,  665,    0,    0,26997,  658,  867,    0,
+    0,    0,    0,    0,    0, 8597,  660,25616,    0,    0,
+    0,    0,  891,    0,    0,  665,  852,    0, 8597, 2554,
+    0,25005,  692,    0,  149,  233,  233,  233,  233,  233,
+    0,    0,  233,    0,    0,    0,    0,  817,    0,24675,
+   28,  516,  517,  894,  895,27113,  665,    0,  896,24169,
+  190,    0,  209,    0, 2501, 8597,    0,    0,    0,    0,
+  662,  879,  898,  900,  902,    0,  903,25188, 7757,24813,
+25188,    0,    0,  904,    0,  190,    0,25053, 8597,    0,
+    0,  852,    0,    0, 8597,    0,    0,  184,  184,  906,
+  491,  677,    0,    0,  573,    0,  917,    0,    0,    0,
+    0,    0,25188,    0,    0,  801,  909, 8597,    0,25188,
+    0,    0,    0,    0, 8597,25188,    0, 8177,25188,    0,
+  927,    0,    0,  911,    0,  557,  559,27166,    0,27187,
+ 8597,25188, 8597,    0,    0,25188,    0,    0,25188,25188,
+ 8597, 8597, 8597,27272,25188, 8597,
+};
+short fortranrindex[] = {                                      0,
+ 5433,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  223,23906,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,23602,
+  560,  560,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,22995,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  560, 3577,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,   25,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+18370,  579,    0,    0,    0,    0,    4,  -15,   52,    0,
+23145,    0,    0,    0,    0,23906,    0,    0,    0, 5953,
+13515,    0,    0,    0,    0,    0,    0,    0,18586,13666,
+  580,    0,   11,    0,    0,    0,    0,    0,23298,    0,
+    0,    0,    0,    0,    0,18739,18890,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,16959,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0, 1107, 2724,
+ 1277,    0,    0, 1646,    0, 2894,    0, 1816,    0,    0,
+  125,    0,    0,    0,    0,19043,    0,19194,    0,    0,
+    0,13884,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,19347,    0,    0,    0,    0,    0,
+    0,19498,    0,    0,   29,    0,    0,    0,    0,    0,
+    0,19651,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,   24,  223,23906,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,19802,    0,    0,    0,14035,
+    0,  954,  580,    0,  908,14035,    0,   30,    0,    0,
+    0,  908,    0,14191,    0,    0,    0,    0,  960,    0,
+    0,    0,19955,    0,    0,    0,    0,    0,20106,23449,
+20259,    0,    0,    0,    0,    0,    0,  987,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0, 9631,
+    0,10472,10208, 5640,    0,20410,    0,10627,    0,23753,
+    0,    0,20563,    0, 6171,    0,  673,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0, 4668,    0,17110,17263, 3263,    0,    0,
+25786,    0,    0,  972,    0,    0,    0,    0, 3433,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0, 5271,    0,    0,
+    0,    0,    0,    0,    0,    0,  674,    0,    0,    0,
+    0,    0,20714,20867,    0,    0,    0,  165,    0,  510,
+  995,  679,    0,    0, 6497,  869, 9017,  526,  995,    0,
+    0,    0,21018,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,21171,    0,    0,
+    0,  680,    0,    0,    0,    0,14404,    0,    0,  127,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,21322,    0,    0,    0,   40,    0,    0,
+    0,   24,    0,    0,    0,    0,21322,    0,    0,    0,
+  580,    0,14555,  356,    0,    0,    0,    0,  356,    0,
+    0,    0,  580,14404,    0,14711,    0,    0,    0,    0,
+ 5618, 1012,  708,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,21475,21626,    0,    0,    0,  709,
+    0, 1013,    0,    0,    0,   63,    0,    0, 1014,    0,
+    0,12251,12465,12620,12834,    0, 1014,25857,17479, 4299,
+14924,    0,21779,    0,14924, 5802,    0,    0,    0,    0,
+    0,    0,10891,    0,    0,    0,    0,    0,    0,21930,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,27019,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+ 1021, 2185,    0,    0,    0,11727, 9782,10051, 9111, 9262,
+ 6322, 6591, 6742, 7011, 7162, 7431, 7582, 4838, 5101, 3696,
+    0,    0,    0,11882, 3866,    0, 7851,    0, 8002,  164,
+  212,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+ 1025,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,17632,    0,    0,
+    0,    0,    0,    0,12989,    0,    0,  710,    0,    0,
+    0,  720,    0,    0,    0,15080,    0,    0,    0,14035,
+    0,    0,  795,    0,    0,    0,   16,    0,    0,    0,
+17632,    0,    0,    0, 1012,    0,    0,    0,    0,    0,
+    0,22083,    0,  995,  995,    0,   24,    0,    0,    0,
+    0,    0,    0,  729,    0,    0,    0,    0,13203,  698,
+    0,    0,15293,15449, 5802,15662,22234,13358,11046,11309,
+11464,12096,    0,    0,    0,    0,    0,  730,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,15818,    0,15974,    0,16130,    0,27293,
+ 1028,    0,  737,    0, 1030,    0,  738, 2355, 8271, 8422,
+ 4129, 8691, 8842,  674,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  742,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,12989,16286,    0,  744,    0,
+    0,  749,16437,    0,  467,  356,  356,  356,  356,  356,
+    0,    0,  356,    0,    0,    0,    0, 1012,    0,    0,
+    0,    0,    0,    0,    0,    0,   24,    0,    0,    0,
+    0,    0,  750,    0,25857,14924,    0,    0,    0,    0,
+    0,  590,    0,    0,    0,    0,    0,    0,  751,    0,
+  768,    0,    0,    0,    0,    0,    0,    0,17848,    0,
+    0,16286,16655,    0,  720,    0,    0,   93,  146,   31,
+   44,    0,    0,    0,18001,    0,22387,    0,    0,    0,
+    0,    0,    0,    0,    0,  777,    0,16806,    0,    0,
+    0,    0,    0,    0,  778,    0,    0,  779,    0,    0,
+    0,16655,    0,    0,    0,    0,    0,22538,    0,    0,
+  783,    0,22691,    0,    0,    0,    0,    0,    0,    0,
+  788,18217,22842, 1031,    0, 1036,
+};
+short fortrangindex[] = {                                      0,
+    0,    0,    0,  813,  303, -401,    0,  126,    0,  211,
+ -255,    0,  232,  565,  285,   -2,    0,  -23,    0,    0,
+    0,    0,    0,    0,    0,    0, -120,    7,    0,    0,
+ -328,    0,    0,  815, -135,    0, -305,  339, -152,  181,
+ -137,    0,  766,  736, -326, -686, -234, -220,    0,  718,
+  221,  438,  371, -189,    0,  -26, -371, -495,    0,    0,
+ -169,  -24,  273, -397,    0,  -98,    0,    0, 1117,    0,
+    0,    0,  -39,  -56, 1119,  865,    0,   53,    0,    0,
+    0,    0,    0,    0,    0,    0,   65,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0, 1065,  452,  458,  716,    0,    0,    0,  -30,  627,
+    0, -277,    0,    0,    0, -667,    0, -281,  620,    0,
+  654,    0,  194,    0,    0,    0,    0,  608, -649,    0,
+    0,  457,    0,    0,    0, 1032,  612, -392,  613,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0, -230,
+    0,    0,    0,    0,    0,    0,  602,    0,    0,    0,
+    0,    0,  412,  607,    0,  219,    0,    0,    0,    0,
+    0,    0,    0,    0, -408,    0,    0,    0,    0, -317,
+  414, 1033, -335, -688,    0, -522,    0, -226,    0,    0,
+    0,    0,
+};
+#define YYTABLESIZE 27711
+short fortrantable[] = {                                     201,
+  442,  206,  343,  546,  400,  212,  218,  388,  206,  450,
+  440,  592,  522,  569,  226,  440,  147,   99,  531,  342,
+  230,  536,  639,  577,  384,  234,  224,  525,  202,  539,
+  285,  593,  528,  729,   71,  391,  221,  926,  108,  530,
+  595,  383,  202,  191,  249,  250,  535,  191,  597,  595,
+  890,  595,  257,  740,  183,  630,  688,  394,  764,  127,
+  236,  191,  766,  866,  236,  243,  281,  236,  183,  266,
+  267,  268,  133,  133,  133,  133,  888,  324,  259,  589,
+  291,  447,   71,  205,  236,  869,  351,  134,  433,  299,
+  301,  433,  260,  439,  829,  526,  217,  205,  439,  338,
+  214,  322,  704,  338,  309,  321,  338,  420,  326,  421,
+  206,  310,  433,  894,  895,  715,  216,  142,  434,  240,
+  241,  238,  239,  354,  355,  417,  415,  145,  416,  288,
+    9,  417,  362,  246,  317,  131,  131,  131,   89,  453,
+  758,  589,  333,  420,  334,  421,  376,  247,  213,  420,
+  148,  421,  389,  240,  241,  425,  278,  203,  423,  282,
+  240,  241,  701,  392,  213,  402,  227,  399,  402,  761,
+  236,  673,  424,  271,  581,  270,  702,  767,  426,  913,
+  388,  762,  402,  762,  236,  430,  207,  762,  132,  132,
+  132,  741,  210,  343,  435,  721,  888,  384,  937,  436,
+  721,  314,  219,  343,  403,  433,  580,  403,  433,  389,
+  342,  343,  388,  427,  383,  840,  841,  842,  923,  482,
+  342,  403,   30,  579,  516,  859,  253,  254,  342,  628,
+  860,  698,   30,  592,  699,  735,  514,  438,  229,  739,
+  446,  592,  448,  451,  952,  508,  383,  231,  481,  755,
+  589,  333,  404,  334,  236,  404,  714,  592,  213,  524,
+  529,  504,  527,  642,  307,   89,  306,  202,  237,  404,
+  768,  769,  770,  771,  772,  150,  603,  151,  731,  602,
+  517,   99,  543,  244,  543,  248,  191,  127,  551,  240,
+  241,  589,  333,  183,  334,  398,  685,  555,  556,  295,
+  165,  165,  133,  560,  532,  803,  302,  805,  807,  590,
+  591,  572,  573,  574,  575,  134,  251,  261,  442,  486,
+  419,  607,  205,  450,  602,  389,  552,  258,  440,  440,
+  557,  269,  515,  338,  338,  606,  361,  273,  363,  610,
+  611,  612,  613,  614,  615,  616,  617,  618,  619,  620,
+  621,  874,  875,  275,  391,  418,  419,  631,  344,  350,
+  917,  418,  419,  938,  131,  887,  887,  922,  887,  212,
+  588,  590,  591,  760,  589,  333,    2,  334,  646,  647,
+  648,  649,  650,  651,  652,  653,  654,  655,  656,  657,
+  658,  659,  660,  664,  665,  667,  669,  236,  670,  671,
+  279,  202,  232,  296,    3,    4,  303,  284,  581,  233,
+  223,  439,  439,  538,  323,  596,  581,  132,  283,  592,
+  191,    5,    6,  393,  596,  433,  596,  183,  868,  343,
+  288,  290,  592,  592,  592,  592,  592,  853,  883,  897,
+  580,   71,  854,  220,  925,  108,  342,  298,  580,  847,
+  343,  343,  343,  343,  343,  830,  205,  579,  292,  312,
+  832,  440,  697,  327,  328,  579,  440,  342,  342,  342,
+  342,  342,  803,  805,  807,  330,  331,  319,   30,  588,
+  590,  591,  392,  352,  810,  358,  712,  359,  762,  360,
+  719,  877,  720,  716,  364,  365,  383,   30,  383,  383,
+  725,  609,  730,   28,  602,  366,   30,   30,  130,  130,
+  130,  130,    7,  130,  543,  675,  543,  367,  674,  368,
+  543,  590,  591,   30,   30,  369,  370,  721,  721,  721,
+  721,  721,  859,  857,  721,  858,  371,  860,  604,  605,
+  887,  754,  372,  373,  439,    8,  315,  592,  374,  439,
+  555,  759,  375,  555,  377,  438,  448,  623,  624,  625,
+  626,  627,  314,  378,  924,  397,  554,  379,  903,  554,
+  636,  380,  381,  521,  777,  523,  206,  778,  390,  417,
+  415,  398,  416,  533,  882,  589,  333,  394,  334,  401,
+  912,  859,  857,  856,  858,  581,  860,  420,  403,  421,
+  391,  855,  402,  588,  590,  591,   89,  804,  690,  806,
+  808,  689,  389,  429,   30,  431,  817,  694,  343,  819,
+  693,  934,  918,  919,  920,  921,  338,  580,  902,  338,
+  338,  338,  338,  338,  338,  342,  820,  821,  432,  717,
+  480,  822,  520,  823,  579,  757,  810,   30,  756,  338,
+  936,  338,  484,  485,  774,  827,  817,  773,  779,  780,
+  501,  602,  602,  383,  383,  383,  794,  881,  836,  602,
+  482,  487,  417,  415,  795,  416,  796,  602,  797,  602,
+  824,  602,  798,  849,  809,  602,  851,  602,  448,  850,
+  420,  403,  421,  448,  502,  834,  886,  475,  905,  885,
+  907,  900,  939,  693,  511,  773,  506,  475,  518,  543,
+  178,  179,  284,  277,  236,  581,  277,  236,  520,  552,
+  106,  876,  552,  106,  295,  560,  181,  182,  880,  534,
+  183,  184,  185,  186,  302,  537,  865,  475,  130,  475,
+  475,  475,  475,  547,  187,  135,  135,  580,  211,  449,
+  241,  211,  449,  241,  548,  391,  549,  475,  475,  475,
+  246,  135,  135,  246,  579,  135,  135,  135,  135,  486,
+  278,  550,  486,  278,  804,  806,  808,  337,  329,  135,
+  337,  329,  107,  558,  243,  107,  212,  243,  899,  242,
+  483,  335,  242,  483,  335,  404,  405,  406,  407,  408,
+  576,  409,  410,  411,  412,  413,  414,  586,  336,  418,
+  419,  336,  600,  909,  588,  590,  591,  487,  334,  331,
+  487,  334,  331,  333,  632,  712,  333,  915,  332,  634,
+  633,  332,  635,  637,  678,  681,  682,  324,  684,  686,
+  687,  695,  692,  691,  696,  543,  700,  338,  338,  338,
+  338,  338,  705,  338,  338,  338,  338,  338,  338,  707,
+  736,  338,  338,  726,  738,  727,  746,  749,  223,  750,
+  591,  765,  775,  945,  799,  817,  948,  800,  801,  811,
+  812,  818,  826,  392,  825,  831,  833,  317,  404,  405,
+  406,  407,  408,  838,  409,  410,  411,  412,  413,  414,
+  845,  846,  418,  419,  848,  314,  861,  236,  958,  525,
+  314,  314,  950,  314,  863,  960,  864,  236,  867,  871,
+  872,  961,  870,  873,  963,  896,  900,  906,  314,  314,
+  314,  911,  929,  741,  931,  932,  935,  971,  941,  940,
+  942,  972,  943,  944,  973,  974,  956,  949,  955,  959,
+  976,  236,  860,  475,  397,  475,  475,  475,  475,  475,
+  957,  475,  475,  475,  475,  475,  475,  964,  500,  475,
+  475,  966,  475,  967,  475,  925,  108,  475,  475,  475,
+  475,  475,  475,  475,  475,  475,  475,  475,  475,  475,
+  475,  475,  475,  475,  475,  215,  164,  127,  475,  475,
+  209,  475,  475,  475,  475,  475,  475,  475,  475,  475,
+  475,  475,  475,  475,  475,  475,  475,  475,  475,  475,
+  475,  475,  475,  475,  475,  475,  475,  443,  475,  354,
+  475,  475,  475,  475,  475,  562,  475,  475,  475,  475,
+  475,  475,  475,  475,  475,  475,  475,  475,  475,  475,
+  475,  475,  213,  444,  475,  475,  475,  483,  475,  475,
+  475,  325,  475,  475,  475,  317,  118,  475,  354,  475,
+  326,  544,  475,  475,  475,  475,  545,  891,  475,  475,
+  475,  914,  968,  930,  718,  510,  475,  475,  475,  475,
+  475,  475,  475,  475,  475,  475,  475,  519,  475,  475,
+  475,  475,  475,  475,  475,  475,  351,  475,  475,  475,
+  475,  889,  475,  475,  475,  594,  351,  629,  828,  643,
+  947,  475,  475,  879,  916,   15,  314,  314,  314,  314,
+  314,  144,  314,  314,  314,  314,  314,  314,  256,  513,
+  314,  314,  835,  351,  676,  965,  733,  351,  351,  351,
+  351,  351,  837,  351,  728,  703,  732,  844,  747,  318,
+  744,  878,  745,  236,  351,  748,  351,  351,  351,  884,
+    0,    0,  348,    0,    0,    0,    0,    0,  236,  236,
+    0,    0,  236,    0,  236,    0,    0,  236,  236,  236,
+  236,  236,  236,  236,    0,    0,  236,  236,  236,    0,
+    0,    0,    0,  236,  236,    0,    0,    0,  236,  236,
+    0,    0,    0,    0,    0,    0,    0,    0,  236,    0,
+    0,    0,  236,  236,    0,    0,    0,  236,    0,    0,
+    0,    0,    0,  236,    0,  236,  236,    0,  236,    0,
+  236,  236,  236,  236,  236,    0,  236,  236,  236,  236,
+  236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+  236,  236,    0,    0,  236,  236,  236,    0,  236,  236,
+  236,    0,  236,  236,  236,    0,  314,  236,    0,  236,
+    0,    0,  236,  236,  236,  236,  314,    0,  236,  236,
+  236,    0,    0,    0,    0,    0,  236,    0,    0,  236,
+  236,  236,  236,  236,  236,  236,  236,    0,  236,  236,
+  236,  236,  236,  314,    0,  236,    0,  314,  314,  314,
+  314,  314,  236,  236,  236,    0,    0,    0,    0,    0,
+    0,  236,  236,    0,  314,    0,  314,  314,  314,    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,  351,  351,  351,  351,  351,    0,
+  351,  351,  351,  351,  351,  351,    0,  351,  351,  351,
+    0,  351,    0,  351,    0,    0,  351,  351,  351,  351,
+  351,  351,  351,    0,    0,  351,  351,  351,    0,    0,
+    0,    0,  351,  351,    0,    0,    0,  351,  351,    0,
+    0,    0,    0,    0,    0,    0,    0,  351,    0,    0,
+    0,  351,  351,    0,    0,    0,  351,    0,    0,    0,
+    0,    0,  351,    0,  351,  351,    0,  351,    0,  351,
+  351,  351,  351,  351,    0,  351,  351,  351,  351,  351,
+  351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+  351,    0,  578,  351,  351,  351,    0,  351,  351,  351,
+    0,  351,  351,  351,    0,    0,  351,    0,  351,    0,
+    0,  351,  351,  351,  351,  204,  351,  351,  351,  351,
+    0,    0,    0,    0,    0,  351,    0,    0,  351,  351,
+  351,  351,  351,  351,  351,  351,    0,  351,  351,  351,
+  351,  351,    0,    0,  351,  188,    0,    0,  150,    0,
+  151,  351,  351,  351,    0,    0,    0,    0,    0,    0,
+  351,  351,  314,    0,  314,  314,  314,  314,  314,    0,
+  314,  314,  314,  314,  314,  314,    0,  314,  314,  314,
+    0,  314,    0,  314,    0,    0,  314,  314,  314,  314,
+  314,  314,  314,    0,    0,  314,  314,  314,    0,    0,
+    0,    0,  314,  314,    0,    0,    0,  314,  314,    0,
+    0,    0,    0,    0,    0,    0,    0,  314,    0,    0,
+    0,  314,  314,    0,    0,    0,  314,    0,    0,    0,
+    0,    0,  314,    0,  314,  314,    0,  314,    0,  314,
+  314,  314,  314,  314,    0,  314,  314,  314,  314,  314,
+  314,  314,  314,  314,  314,  314,  314,  314,  314,  314,
+  314,    0,    0,  314,  314,  314,    0,  314,  314,  314,
+    0,  314,  314,  314,    0,  318,  314,    0,  314,    0,
+    0,  314,  314,  314,  314,  318,  314,  314,  314,  314,
+    0,    0,    0,    0,    0,  314,    0,    0,  314,  314,
+  314,  314,  314,  314,  314,  314,    0,  314,  314,  314,
+  314,  314,  318,    0,  314,    0,  318,  318,  318,  318,
+  318,  314,  314,  314,    0,    0,    0,    0,    0,    0,
+  314,  314,    0,  318,    0,  318,  318,  318,    0,  152,
+  153,    0,    0,    0,  154,  155,  156,  157,    0,    0,
+    0,    0,    0,    0,    0,    0,  158,  159,  160,  161,
+  162,  163,  164,    0,  165,  166,  167,    0,  149,  168,
+  169,  170,    0,  171,  172,  173,  174,  175,    0,  176,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  152,  153,    0,    0,    0,  154,  155,  156,
+  157,    0,    0,    0,    0,    0,    0,    0,    0,  158,
+  159,  160,  161,  162,  163,  164,    0,  165,  166,  167,
+    0,    0,  168,  169,  170,    0,  171,  172,  173,  174,
+  175,    0,  176,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  178,  179,    0,  315,    0,    0,  180,    0,
+    0,    0,    0,    0,    0,  315,    0,    0,  181,  182,
+    0,    0,  183,  184,  185,  186,    0,    0,    0,   89,
+    0,    0,    0,    0,    0,    0,  187,    0,    0,    0,
+    0,    0,  315,    0,  177,    0,  315,  315,  315,  315,
+  315,    0,    0,    0,    0,  178,  179,    0,    0,    0,
+    0,  180,    0,  315,    0,  315,  315,  315,    0,    0,
+    0,  181,  182,    0,    0,  183,  184,  185,  186,    0,
+    0,    0,   89,    0,    0,    0,    0,    0,    0,  187,
+    0,  318,    0,  318,  318,  318,  318,  318,    0,  318,
+  318,  318,  318,  318,  318,    0,  318,  318,  318,    0,
+  318,    0,  318,    0,    0,  318,  318,  318,  318,  318,
+  318,  318,    0,    0,  318,  318,  318,    0,    0,    0,
+    0,  318,  318,    0,    0,    0,  318,  318,    0,    0,
+    0,    0,    0,    0,    0,    0,  318,    0,    0,    0,
+  318,  318,    0,    0,    0,  318,    0,    0,    0,    0,
+    0,  318,    0,  318,  318,    0,  318,    0,  318,  318,
+  318,  318,  318,    0,  318,  318,  318,  318,  318,  318,
+  318,  318,  318,  318,  318,  318,  318,  318,  318,  318,
+    0,    0,  318,  318,  318,    0,  318,  318,  318,    0,
+  318,  318,  318,    0,    0,  318,    0,  318,    0,    0,
+  318,  318,  318,  318,    0,  318,  318,  318,  318,    0,
+    0,    0,    0,    0,  318,    0,    0,  318,  318,  318,
+  318,  318,  318,  318,  318,    0,  318,  318,  318,  318,
+  318,  188,    0,  318,  150,    0,  151,    0,    0,    0,
+  318,  318,  318,    0,    0,    0,    0,    0,    0,  318,
+  318,  315,  661,  315,  315,  315,  315,  315,    0,  315,
+  315,  315,  315,  315,  315,    0,  315,  315,  315,    0,
+  315,    0,  315,    0,    0,  315,  315,  315,  315,  315,
+  315,  315,    0,    0,  315,  315,  315,    0,    0,    0,
+    0,  315,  315,    0,    0,    0,  315,  315,    0,    0,
+    0,    0,  417,  415,    0,  416,  315,    0,    0,    0,
+  315,  315,    0,    0,    0,  315,    0,    0,    0,    0,
+  420,  315,  421,  315,  315,    0,  315,    0,  315,  315,
+  315,  315,  315,    0,  315,  315,  315,  315,  315,  315,
+  315,  315,  315,  315,  315,  315,  315,  315,  315,  315,
+    0,    0,  315,  315,  315,    0,  315,  315,  315,    0,
+  315,  315,  315,    0,  323,  315,    0,  315,    0,    0,
+  315,  315,  315,  315,  323,  315,  315,  315,  315,    0,
+    0,    0,    0,    0,  315,    0,  488,  315,  315,  315,
+  315,  315,  315,  315,  315,    0,  315,  315,  315,  315,
+  315,    0,    0,  315,  323,  323,  323,  323,  323,  323,
+  315,  315,  315,    0,    0,    0,    0,    0,    0,  315,
+  315,    0,  323,    0,  323,  323,  323,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  253,  254,  489,
+    0,    0,    0,    0,    0,    0,    0,  417,  415,    0,
+  416,    0,    0,    0,  149,    0,    0,    0,    0,    0,
+    0,    0,    0,  662,    0,  420,  490,  421,  491,  492,
+  493,    0,    0,  494,  495,    0,  496,  497,  152,  153,
+    0,    0,    0,  154,  155,  156,  157,    0,    0,    0,
+    0,    0,    0,    0,    0,  158,  159,  160,  161,  162,
+  163,  164,    0,  165,  166,  167,    0,    0,  168,  169,
+  170,    0,  171,  172,  173,  174,  175,    0,  176,    0,
+  406,  407,  408,    0,  409,  410,  411,  412,  413,  414,
+    0,    0,  418,  419,  320,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,  320,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  177,  320,    0,    0,    0,  320,  320,  320,  320,  320,
+    0,  178,  179,    0,    0,    0,    0,  180,    0,    0,
+    0,    0,  320,    0,  320,  320,  320,  181,  182,    0,
+    0,  183,  184,  185,  186,    0,    0,    0,   89,    0,
+    0,    0,    0,    0,    0,  187,    0,    0,    0,    0,
+  323,    0,  323,  323,  323,  323,  323,    0,  323,  323,
+  323,  323,  323,  323,    0,  323,  323,  323,    0,  323,
+    0,  323,    0,    0,  323,  323,  323,  323,  323,  323,
+  323,    0,    0,  323,  323,  323,    0,    0,    0,    0,
+  323,  323,    0,    0,    0,  323,  323,  408,    0,  409,
+  410,  411,  412,  413,  414,  323,    0,  418,  419,  323,
+  323,    0,    0,    0,  323,    0,    0,    0,    0,    0,
+  323,    0,  323,  323,    0,  323,    0,  323,  323,  323,
+  323,  323,    0,  323,  323,  323,  323,  323,  323,  323,
+  323,  323,  323,  323,  323,  323,  323,  323,  323,    0,
+  578,  323,  323,  323,    0,  323,  323,  323,    0,  323,
+  323,  323,    0,    0,  323,    0,  323,    0,    0,  323,
+  323,  323,  323,    0,  323,  323,  323,  323,    0,    0,
+    0,    0,    0,  323,    0,    0,  323,  323,  323,  323,
+  323,  323,  323,  323,    0,  323,  323,  323,  323,  323,
+    0,    0,  323,  188,    0,  709,  150,    0,  151,  323,
+  323,  323,    0,    0,    0,    0,    0,    0,  323,  323,
+  320,  708,  320,  320,  320,  320,  320,    0,  320,  320,
+  320,  320,  320,  320,    0,  320,  320,  320,    0,  320,
+    0,  320,    0,    0,  320,  320,  320,  320,  320,  320,
+  320,    0,    0,  320,  320,  320,    0,    0,    0,    0,
+  320,  320,    0,    0,    0,  320,  320,    0,    0,    0,
+    0,    0,    0,    0,    0,  320,    0,    0,    0,  320,
+  320,    0,    0,    0,  320,    0,    0,    0,    0,    0,
+  320,    0,  320,  320,    0,  320,    0,  320,  320,  320,
+  320,  320,    0,  320,  320,  320,  320,  320,  320,  320,
+  320,  320,  320,  320,  320,  320,  320,  320,  320,    0,
+    0,  320,  320,  320,    0,  320,  320,  320,    0,  320,
+  320,  320,    0,  280,  320,    0,  320,    0,    0,  320,
+  320,  320,  320,  280,  320,  320,  320,  320,    0,    0,
+    0,    0,    0,  320,    0,    0,  320,  320,  320,  320,
+  320,  320,  320,  320,    0,  320,  320,  320,  320,  320,
+  280,    0,  320,    0,  280,  280,  280,  280,  280,  320,
+  320,  320,    0,    0,    0,    0,    0,    0,  320,  320,
+    0,  280,    0,  280,  280,  280,    0,  152,  153,    0,
+    0,    0,  154,  155,  156,  157,    0,    0,    0,    0,
+    0,    0,    0,    0,  158,  159,  160,  161,  162,  163,
+  164,    0,  165,  166,  167,    0,  149,  168,  169,  170,
+    0,  171,  172,  173,  174,  175,    0,  176,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  152,  153,    0,    0,    0,  154,  155,  156,  157,    0,
+    0,    0,    0,    0,    0,    0,    0,  158,  159,  160,
+  161,  162,  163,  164,    0,  165,  166,  167,    0,    0,
+  168,  169,  170,    0,  171,  172,  173,  174,  175,    0,
+  176,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  178,  179,    0,  279,    0,    0,  180,    0,    0,    0,
+    0,    0,    0,  279,    0,    0,  181,  182,    0,    0,
+  183,  184,  185,  186,    0,    0,    0,  892,    0,    0,
+    0,    0,    0,    0,  187,    0,    0,    0,    0,    0,
+    0,    0,  177,    0,  279,  279,  279,  279,  279,    0,
+    0,    0,    0,  178,  179,    0,    0,    0,    0,  180,
+    0,  279,    0,  279,  279,  279,    0,    0,    0,  181,
+  182,    0,    0,  183,  184,  185,  186,    0,    0,    0,
+   89,    0,    0,    0,    0,    0,    0,  187,    0,  280,
+    0,  280,  280,  280,  280,  280,    0,  280,  280,  280,
+  280,  280,  280,    0,  280,  280,  280,    0,  280,    0,
+  280,    0,    0,  280,  280,  280,  280,  280,  280,  280,
+    0,    0,  280,  280,  280,    0,    0,    0,    0,  280,
+  280,    0,    0,    0,  280,  280,    0,    0,    0,    0,
+    0,    0,    0,    0,  280,    0,    0,    0,  280,  280,
+    0,    0,    0,  280,    0,    0,    0,    0,    0,  280,
+    0,  280,  280,    0,  280,    0,  280,  280,  280,  280,
+  280,    0,  280,  280,  280,  280,  280,  280,  280,  280,
+  280,  280,  280,  280,  280,  280,  280,  280,    0,    0,
+  280,  280,  280,    0,  280,  280,  280,    0,  280,  280,
+  280,    0,    0,  280,    0,  280,    0,    0,  280,  280,
+  280,  280,    0,  280,  280,  280,  280,    0,    0,    0,
+    0,    0,  280,    0,    0,  280,  280,  280,  280,  280,
+  280,  280,  280,    0,  280,  280,  280,  280,  280,    0,
+    0,  280,  188,    0,  540,  150,    0,  151,  280,  280,
+    0,    0,    0,    0,    0,    0,    0,  280,  280,  279,
+    0,  279,  279,  279,  279,  279,    0,  279,  279,  279,
+  279,  279,  279,    0,  279,  279,  279,    0,  279,    0,
+  279,    0,    0,  279,  279,  279,  279,  279,  279,  279,
+    0,    0,  279,  279,  279,    0,    0,    0,    0,  279,
+  279,    0,    0,    0,  279,  279,    0,    0,  417,  415,
+    0,  416,    0,    0,  279,    0,    0,    0,  279,  279,
+    0,    0,    0,  279,    0,    0,  420,    0,  421,  279,
+    0,  279,  279,    0,  279,    0,  279,  279,  279,  279,
+  279,    0,  279,  279,  279,  279,  279,  279,  279,  279,
+  279,  279,  279,  279,  279,  279,  279,  279,    0,    0,
+  279,  279,  279,    0,  279,  279,  279,    0,  279,  279,
+  279,    0,  538,  279,    0,  279,    0,    0,  279,  279,
+  279,  279,  538,  279,  279,  279,  279,    0,    0,    0,
+    0,    0,  279,    0,    0,  279,  279,  279,  279,  279,
+  279,  279,  279,    0,  279,  279,  279,  279,  279,    0,
+    0,  279,    0,  250,  250,  250,  538,  250,  279,  279,
+  279,    0,    0,    0,    0,    0,    0,  279,  279,    0,
+    0,    0,  250,  250,  250,    0,    0,  454,    0,    0,
+    0,  455,  456,  457,  458,    0,    0,    0,    0,    0,
+    0,    0,    0,  459,  460,  461,  462,  463,  464,  465,
+    0,  466,  467,  468,    0,  149,  469,  470,  471,    0,
+    0,  472,  473,  474,  475,    0,  476,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  152,
+  153,    0,    0,    0,  154,  155,  156,  157,    0,    0,
+    0,    0,    0,    0,    0,    0,  158,  159,  160,  161,
+  162,  163,  164,    0,  165,  166,  167,    0,    0,  168,
+  169,  170,    0,  171,  172,  173,  174,  175,    0,  176,
+  409,  410,  411,  412,  413,  414,    0,    0,  418,  419,
+    0,    0,  283,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  283,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  477,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  283,
+    0,  177,    0,  283,  283,  283,  283,  283,    0,    0,
+    0,    0,  178,  179,    0,    0,    0,    0,  180,    0,
+  283,    0,    0,  283,    0,    0,    0,    0,  181,  182,
+    0,    0,  183,  184,  185,  186,    0,    0,    0,  541,
+    0,    0,    0,    0,    0,    0,  187,    0,  538,    0,
+  250,  250,  250,  250,  250,    0,  250,  250,  250,  250,
+  250,  250,    0,    0,  250,  250,    0,  538,    0,  538,
+    0,    0,  538,  538,  538,  538,  538,  538,  538,    0,
+    0,  538,  538,  538,    0,    0,    0,    0,  538,  538,
+    0,    0,    0,  538,  538,    0,    0,    0,    0,    0,
+    0,    0,    0,  538,    0,    0,    0,  538,  538,    0,
+    0,    0,  538,    0,    0,    0,    0,    0,  538,    0,
+  538,  538,    0,  538,    0,  538,  538,  538,  538,  538,
+    0,  538,  538,  538,  538,  538,  538,  538,  538,  538,
+  538,  538,  538,  538,  538,  538,  538,    0,    0,  538,
+  538,  538,    0,  538,  538,  538,    0,  538,  538,  538,
+    0,    0,  538,    0,  538,    0,    0,  538,  538,  538,
+  538,    0,  538,  538,  538,  538,    0,    0,    0,    0,
+    0,  538,    0,    0,  538,  538,  538,  538,  538,  538,
+  538,  538,    0,  538,  538,  538,  538,  538,    0,    0,
+  538,    0,    0,    0,    0,    0,    0,  538,  538,  538,
+    0,    0,    0,    0,    0,    0,  538,  538,  283,    0,
+  283,  283,  283,  283,  283,  289,  283,  283,  283,  283,
+  283,  283,    0,  283,  283,  289,    0,  283,    0,  283,
+    0,    0,  283,  283,  283,  283,  283,  283,  283,    0,
+    0,  283,  283,  283,    0,    0,    0,    0,  283,  283,
+    0,    0,  289,  283,  283,    0,  289,  289,  289,  289,
+  289,    0,    0,  283,    0,    0,    0,  283,  283,    0,
+    0,    0,  283,  289,    0,    0,  289,    0,  283,    0,
+  283,  283,    0,  283,    0,  283,  283,  283,  283,  283,
+    0,  283,  283,  283,  283,  283,  283,  283,  283,  283,
+  283,  283,  283,  283,  283,  283,  283,    0,    0,  283,
+  283,  283,    0,  283,  283,  283,    0,  283,  283,  283,
+    0,    0,  283,    0,  283,    0,    0,  283,  283,  283,
+  283,    0,  283,  283,  283,  283,    0,    0,    0,    0,
+    0,  283,    0,    0,  283,  283,  283,  283,  283,  283,
+  283,  283,    0,  283,  283,  283,  283,  283,    0,    0,
+  283,    0,    0,    0,    0,    0,    0,  283,  283,  283,
+    0,    0,    0,    0,    0,    0,  283,  283,    0,    0,
+    0,    0,    0,    0,  108,  290,    0,    0,  108,  108,
+  108,  108,    0,    0,    0,  290,    0,    0,    0,    0,
+  108,  108,  108,  108,  108,  108,  108,    0,  108,  108,
+  108,    0,    0,  108,  108,  108,    0,    0,  108,  108,
+  108,  108,  290,  108,    0,    0,  290,  290,  290,  290,
+  290,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  290,    0,    0,  290,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  289,    0,  289,  289,  289,  289,  289,    0,  289,
+  289,  289,  289,  289,  289,    0,  289,  289,    0,    0,
+  289,    0,  289,    0,    0,  289,  289,  289,  289,  289,
+  289,  289,    0,    0,  289,  289,  289,    0,    0,    0,
+    0,  289,  289,  108,    0,    0,  289,  289,    0,    0,
+    0,    0,    0,    0,    0,    0,  289,    0,    0,    0,
+  289,  289,    0,    0,    0,  289,    0,    0,    0,    0,
+    0,  289,    0,  289,  289,    0,  289,    0,  289,  289,
+  289,  289,  289,    0,  289,  289,  289,  289,  289,  289,
+  289,  289,  289,  289,  289,  289,  289,  289,  289,  289,
+    0,    0,  289,  289,  289,    0,  289,  289,  289,    0,
+  289,  289,  289,    0,    0,  289,    0,  289,    0,    0,
+  289,  289,  289,  289,    0,  289,  289,  289,  289,    0,
+    0,    0,    0,    0,  289,    0,    0,  289,  289,  289,
+  289,  289,  289,  289,  289,    0,  289,  289,  289,  289,
+  289,    0,    0,  289,    0,    0,    0,    0,    0,    0,
+  289,  289,  289,    0,    0,    0,    0,    0,    0,  289,
+  289,  290,    0,  290,  290,  290,  290,  290,  311,  290,
+  290,  290,  290,  290,  290,    0,  290,  290,  311,    0,
+  290,    0,  290,    0,    0,  290,  290,  290,  290,  290,
+  290,  290,    0,    0,  290,  290,  290,    0,    0,    0,
+    0,  290,  290,    0,    0,  311,  290,  290,    0,  311,
+  311,  311,  311,  311,    0,    0,  290,    0,    0,    0,
+  290,  290,    0,    0,    0,  290,  311,    0,    0,  311,
+    0,  290,    0,  290,  290,    0,  290,    0,  290,  290,
+  290,  290,  290,    0,  290,  290,  290,  290,  290,  290,
+  290,  290,  290,  290,  290,  290,  290,  290,  290,  290,
+    0,    0,  290,  290,  290,    0,  290,  290,  290,    0,
+  290,  290,  290,    0,    0,  290,    0,  290,    0,    0,
+  290,  290,  290,  290,    0,  290,  290,  290,  290,    0,
+    0,    0,    0,    0,  290,    0,    0,  290,  290,  290,
+  290,  290,  290,  290,  290,    0,  290,  290,  290,  290,
+  290,    0,    0,  290,    0,    0,    0,    0,    0,    0,
+  290,  290,  290,    0,   20,    0,    0,    0,    0,  290,
+  290,    0,    0,    0,    0,    0,    0,    0,  519,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  519,   26,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,   30,    0,    0,    0,    0,   33,
+  314,    0,    0,    0,   37,   38,    0,    0,    0,  519,
+  519,  519,  519,  519,  315,   47,   48,   49,   50,   51,
+   52,  316,    0,    0,    0,    0,    0,    0,  519,  519,
+  519,    0,    0,    0,   62,    0,    0,    0,    0,    0,
+   65,    0,    0,    0,    0,    0,    0,    0,    0,   70,
+    0,   72,    0,    0,  311,    0,  311,  311,  311,  311,
+  311,    0,  311,  311,  311,  311,  311,  311,    0,  311,
+  311,    0,    0,  311,    0,  311,    0,    0,  311,  311,
+  311,  311,  311,  311,  311,   89,    0,  311,  311,  311,
+    0,    0,   90,    0,  311,  311,    0,    0,    0,  311,
+  311,    0,    0,    0,    0,    0,    0,    0,    0,  311,
+    0,    0,    0,  311,  311,    0,    0,    0,  311,    0,
+    0,    0,    0,    0,  311,    0,  311,  311,    0,  311,
+    0,  311,  311,  311,  311,  311,    0,  311,  311,  311,
+  311,  311,  311,  311,  311,  311,  311,  311,  311,  311,
+  311,  311,  311,    0,    0,  311,  311,  311,    0,  311,
+  311,  311,    0,  311,  311,  311,    0,    0,  311,    0,
+  311,    0,    0,  311,  311,  311,  311,    0,  311,  311,
+  311,  311,    0,    0,    0,    0,    0,  311,    0,    0,
+  311,  311,  311,  311,  311,  311,  311,  311,    0,  311,
+  311,  311,  311,  311,    0,    0,  311,  188,    0,  559,
+  150,    0,  151,  311,  311,  311,    0,    0,    0,    0,
+    0,    0,  311,  311,  519,    0,  519,  519,  519,  519,
+  519,    0,  519,  519,  519,  519,  519,  519,    0,    0,
+  519,  519,    0,  519,    0,  519,    0,    0,  519,  519,
+  519,  519,  519,  519,  519,    0,    0,  519,  519,  519,
+    0,    0,    0,    0,  519,  519,    0,    0,    0,  519,
+  519,    0,    0,    0,    0,    0,    0,    0,    0,  519,
+    0,    0,    0,  519,  519,    0,    0,    0,  519,    0,
+    0,    0,    0,    0,  519,    0,  519,  519,    0,  519,
+    0,  519,  519,  519,  519,  519,    0,  519,  519,  519,
+  519,  519,  519,  519,  519,  519,  519,  519,  519,  519,
+  519,  519,  519,    0,    0,  519,  519,  519,    0,  519,
+  519,  519,    0,  519,  519,  519,    0,  528,  519,    0,
+  519,    0,    0,  519,  519,  519,  519,  528,    0,  519,
+  519,  519,    0,    0,    0,    0,    0,  519,    0,    0,
+  519,  519,  519,  519,  519,  519,  519,  519,    0,  519,
+  519,  519,  519,  519,    0,    0,  519,    0,    0,  247,
+  247,    0,  247,  519,  519,  519,    0,    0,    0,    0,
+    0,    0,  519,  519,    0,    0,    0,  247,  247,  247,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  149,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,  152,  153,    0,    0,    0,  154,
+  155,  156,  157,    0,    0,    0,    0,    0,    0,    0,
+    0,  158,  159,  160,  161,  162,  163,  164,    0,  165,
+  166,  167,    0,    0,  168,  169,  170,    0,  171,  172,
+  173,  174,  175,    0,  176,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  287,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  287,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,  287,    0,  177,    0,  287,    0,
+  287,  287,  287,    0,    0,    0,    0,  178,  179,    0,
+    0,    0,    0,  180,    0,  287,    0,    0,  287,    0,
+    0,    0,    0,  181,  182,    0,    0,  183,  184,  185,
+  186,    0,    0,    0,   89,    0,    0,    0,    0,    0,
+    0,  187,    0,  528,    0,  247,  247,  247,  247,  247,
+    0,  247,  247,  247,  247,  247,  247,    0,    0,  247,
+  247,    0,  528,    0,  528,    0,    0,  528,  528,  528,
+  528,  528,  528,  528,    0,    0,  528,  528,  528,    0,
+    0,    0,    0,  528,  528,    0,    0,    0,  528,  528,
+    0,    0,    0,    0,    0,    0,    0,    0,  528,    0,
+    0,    0,  528,  528,    0,    0,    0,  528,    0,    0,
+    0,    0,    0,  528,    0,  528,  528,    0,  528,    0,
+  528,  528,  528,  528,  528,    0,  528,  528,  528,  528,
+  528,  528,  528,  528,  528,  528,  528,  528,  528,  528,
+  528,  528,    0,    0,  528,  528,  528,    0,  528,  528,
+  528,    0,  528,  528,  528,    0,    0,  528,    0,  528,
+    0,    0,  528,  528,  528,  528,    0,  528,  528,  528,
+  528,    0,    0,    0,    0,    0,  528,    0,    0,  528,
+  528,  528,  528,  528,  528,  528,  528,    0,  528,  528,
+  528,  528,  528,    0,    0,  528,    0,    0,    0,    0,
+    0,    0,  528,  528,  528,    0,    0,    0,    0,    0,
+    0,  528,  528,  287,    0,  287,  287,  287,  287,  287,
+  288,  287,  287,  287,  287,  287,  287,    0,  287,    0,
+  288,    0,  287,    0,  287,    0,    0,  287,  287,  287,
+  287,  287,  287,  287,    0,    0,  287,  287,  287,    0,
+    0,    0,    0,  287,  287,    0,    0,  288,  287,  287,
+    0,  288,    0,  288,  288,  288,    0,    0,  287,    0,
+    0,    0,  287,  287,    0,    0,    0,  287,  288,    0,
+    0,  288,    0,  287,    0,  287,  287,    0,  287,    0,
+  287,  287,  287,  287,  287,    0,  287,  287,  287,  287,
+  287,  287,  287,  287,  287,  287,  287,  287,  287,  287,
+  287,  287,    0,    0,  287,  287,  287,    0,  287,  287,
+  287,    0,  287,  287,  287,    0,    0,  287,    0,  287,
+    0,    0,  287,  287,  287,  287,    0,  287,  287,  287,
+  287,    0,    0,    0,    0,    0,  287,    0,    0,  287,
+  287,  287,  287,  287,  287,  287,  287,    0,  287,  287,
+  287,  287,  287,    0,    0,  287,    0,    0,    0,    0,
+    0,    0,  287,  287,  287,    0,    0,    0,    0,    0,
+    0,  287,  287,    0,    0,    0,    0,    0,    0,    0,
+  308,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  308,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  308,    0,    0,
+    0,  308,  308,    0,  308,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  308,    0,
+  308,    0,  308,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  288,    0,  288,  288,
+  288,  288,  288,    0,  288,  288,  288,  288,  288,  288,
+    0,  288,    0,    0,    0,  288,    0,  288,    0,    0,
+  288,  288,  288,  288,  288,  288,  288,    0,    0,  288,
+  288,  288,    0,    0,    0,    0,  288,  288,    0,    0,
+    0,  288,  288,    0,    0,    0,    0,    0,    0,    0,
+    0,  288,    0,    0,    0,  288,  288,    0,    0,    0,
+  288,    0,    0,    0,    0,    0,  288,    0,  288,  288,
+    0,  288,   22,  288,  288,  288,  288,  288,    0,  288,
+  288,  288,  288,  288,  288,  288,  288,  288,  288,  288,
+  288,  288,  288,  288,  288,    0,    0,  288,  288,  288,
+    0,  288,  288,  288,    0,  288,  288,  288,    0,    0,
+  288,    0,  288,    0,    0,  288,  288,  288,  288,    0,
+  288,  288,  288,  288,    0,    0,    0,    0,    0,  288,
+    0,    0,  288,  288,  288,  288,  288,  288,  288,  288,
+    0,  288,  288,  288,  288,  288,    0,    0,  288,    0,
+    0,    0,    0,    0,    0,  288,  288,  288,    0,    0,
+    0,    0,    0,    0,  288,  288,  308,    0,  308,  308,
+  308,  308,  308,    0,  308,  308,  308,  308,  308,  308,
+    0,  308,    0,  308,    0,  308,    0,  308,    0,    0,
+  308,  308,  308,  308,  308,  308,  308,    0,    0,  308,
+  308,  308,    0,    0,    0,    0,  308,  308,    0,    0,
+    0,  308,  308,    0,    0,    0,    0,    0,    0,    0,
+    0,  308,    0,    0,    0,  308,  308,    0,    0,    0,
+  308,    0,    0,    0,    0,    0,  308,    0,  308,  308,
+    0,  308,    0,  308,  308,  308,  308,  308,    0,  308,
+  308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+  308,  308,  308,  308,  308,    0,    0,  308,  308,  308,
+    0,  308,  308,  308,    0,  308,  308,  308,    0,  466,
+  308,    0,  308,    0,    0,  308,  308,  308,  308,  466,
+  308,  308,  308,  308,  338,    0,    0,    0,  338,  308,
+    0,  338,  308,  308,  308,  308,    0,  308,  308,  308,
+    0,  308,  308,  308,  308,  308,    0,  338,  308,  338,
+    0,  518,  518,  518,  518,  308,  308,    0,    0,    0,
+    0,    0,    0,    0,    0,  308,    0,    0,    0,  518,
+  518,  518,    0,    0,    0,    0,    0,   22,    0,   22,
+    0,    0,   22,   22,   22,   22,    0,    0,   22,    0,
+    0,   22,   22,   22,    0,    0,    0,    0,   22,   22,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,   22,    0,    0,    0,   22,   22,    0,
+    0,    0,   22,    0,    0,    0,    0,    0,   22,    0,
+   22,   22,    0,   22,    0,   22,   22,   22,   22,   22,
+    0,   22,   22,   22,   22,   22,   22,   22,   22,   22,
+   22,   22,   22,   22,   22,   22,   22,    0,    0,   22,
+   22,   22,    0,   22,   22,   22,    0,   22,   22,   22,
+    0,  518,   22,    0,   22,    0,    0,   22,   22,   22,
+   22,  518,    0,   22,   22,   22,    0,    0,    0,    0,
+    0,   22,    0,    0,    0,   22,   22,   22,   22,   22,
+   22,   22,    0,   22,   22,   22,   22,   22,    0,    0,
+   22,    0,    0,  518,  518,  518,  518,   22,   22,   22,
+    0,    0,    0,    0,    0,    0,   22,    0,    0,    0,
+    0,  518,  518,  518,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  338,  338,  338,  338,  338,
+    0,  338,  338,  338,  338,  338,  338,    0,    0,  338,
+  338,    0,    0,    0,    0,  466,    0,  518,  518,  518,
+  518,  518,    0,  518,  518,  518,  518,  518,  518,    0,
+    0,  518,  518,    0,  466,    0,  466,    0,    0,  466,
+  466,  466,  466,  466,  466,  466,    0,    0,  466,  466,
+  466,    0,    0,    0,    0,  466,  466,    0,    0,    0,
+  466,  466,    0,    0,    0,    0,    0,    0,    0,    0,
+  466,    0,   56,    0,  466,  466,    0,    0,    0,  466,
+    0,    0,   56,    0,    0,  466,    0,  466,  466,    0,
+  466,    0,  466,  466,  466,  466,  466,    0,  466,  466,
+  466,  466,  466,  466,  466,  466,  466,  466,  466,  466,
+  466,  466,  466,  466,    0,    0,  466,  466,  466,    0,
+  466,  466,  466,    0,  466,  466,  466,    0,    0,  466,
+    0,  466,    0,    0,  466,  466,  466,  466,    0,    0,
+  466,  466,  466,    0,    0,    0,    0,    0,  466,    0,
+    0,  466,  466,  466,  466,    0,  466,  466,  466,    0,
+  466,  466,  466,  466,  466,    0,    0,  466,    0,    0,
+    0,    0,    0,    0,  466,  466,    0,  518,    0,  518,
+  518,  518,  518,  518,  466,  518,  518,  518,  518,  518,
+  518,    0,    0,  518,  518,    0,  518,    0,  518,    0,
+    0,  518,  518,  518,  518,  518,  518,  518,    0,    0,
+  518,  518,  518,    0,    0,    0,    0,  518,  518,    0,
+    0,    0,  518,  518,    0,    0,    0,    0,    0,    0,
+    0,    0,  518,    0,    0,    0,  518,  518,    0,    0,
+    0,  518,    0,    0,    0,    0,    0,  518,    0,  518,
+  518,    0,  518,    0,  518,  518,  518,  518,  518,    0,
+  518,  518,  518,  518,  518,  518,  518,  518,  518,  518,
+  518,  518,  518,  518,  518,  518,    0,    0,  518,  518,
+  518,    0,  518,  518,  518,    0,  518,  518,  518,    0,
+  284,  518,    0,  518,    0,    0,  518,  518,  518,  518,
+  284,    0,  518,  518,  518,    0,    0,    0,    0,    0,
+  518,    0,    0,  518,  518,  518,  518,    0,  518,  518,
+  518,    0,  518,  518,  518,  518,  518,  284,   56,  518,
+    0,  284,    0,    0,  284,    0,  518,  518,    0,    0,
+    0,    0,    0,  164,  164,    0,  518,   56,  284,   56,
+    0,  284,   56,   56,   56,   56,   56,   56,   56,    0,
+    0,   56,   56,   56,    0,    0,    0,    0,   56,   56,
+    0,    0,    0,   56,   56,    0,    0,    0,    0,    0,
+    0,    0,    0,   56,    0,    0,    0,   56,   56,    0,
+    0,    0,   56,    0,    0,    0,    0,    0,   56,    0,
+   56,   56,    0,   56,    0,   56,   56,   56,   56,   56,
+    0,   56,   56,   56,   56,   56,   56,   56,   56,   56,
+   56,   56,   56,   56,   56,   56,   56,    0,    0,   56,
+   56,   56,    0,   56,   56,   56,    0,   56,   56,   56,
+    0,  305,   56,    0,   56,    0,    0,   56,   56,   56,
+   56,  305,    0,   56,   56,   56,    0,    0,    0,    0,
+    0,   56,    0,    0,   56,   56,   56,   56,   56,   56,
+   56,   56,    0,   56,   56,   56,   56,   56,  305,    0,
+   56,    0,  305,    0,    0,  305,    0,   56,   56,   56,
+    0,    0,    0,    0,    0,    0,   56,   56,    0,  305,
+    0,    0,  305,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  284,    0,  284,  284,
+  284,  284,  284,    0,    0,    0,    0,    0,    0,    0,
+    0,  284,    0,    0,    0,  284,    0,  284,    0,    0,
+  284,  284,  284,  284,  284,  284,  284,    0,    0,  284,
+  284,  284,    0,    0,    0,    0,  284,  284,    0,    0,
+    0,  284,  284,    0,    0,    0,    0,    0,    0,    0,
+    0,  284,    0,    0,    0,  284,  284,    0,    0,    0,
+  284,    0,    0,    0,    0,    0,  284,    0,  284,  284,
+    0,  284,    0,  284,  284,  284,  284,  284,    0,  284,
+  284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
+  284,  284,  284,  284,  284,    0,    0,  284,  284,  284,
+    0,  284,  284,  284,    0,  284,  284,  284,  341,  341,
+  284,  341,  284,    0,    0,  284,  284,  284,  284,    0,
+  284,  284,  284,  284,    0,    0,  341,  341,  341,  284,
+    0,    0,  284,  284,  284,  284,  284,  284,  284,  284,
+    0,  284,  284,  284,  284,  284,    0,  305,  284,  305,
+  305,  305,  305,  305,    0,  284,  284,  284,    0,    0,
+  295,    0,  305,    0,  284,  284,  305,    0,  305,    0,
+  295,  305,  305,  305,  305,  305,  305,  305,    0,    0,
+  305,  305,  305,    0,    0,    0,    0,  305,  305,    0,
+    0,    0,  305,  305,    0,    0,    0,  295,    0,    0,
+    0,  295,  305,    0,  295,    0,  305,  305,    0,    0,
+    0,  305,    0,    0,    0,    0,    0,  305,  295,  305,
+  305,  295,  305,    0,  305,  305,  305,  305,  305,    0,
+  305,  305,  305,  305,  305,  305,  305,  305,  305,  305,
+  305,  305,  305,  305,  305,  305,    0,    0,  305,  305,
+  305,    0,  305,  305,  305,    0,  305,  305,  305,    0,
+    0,  305,    0,  305,    0,    0,  305,  305,  305,  305,
+    0,  305,  305,  305,  305,    0,    0,    0,    0,    0,
+  305,    0,    0,  305,  305,  305,  305,  305,  305,  305,
+  305,    0,  305,  305,  305,  305,  305,    0,    0,  305,
+    0,    0,    0,    0,    0,    0,  305,  305,  305,    0,
+    0,  293,    0,    0,    0,  305,  305,    0,    0,    0,
+    0,  293,    0,    0,  341,  341,  341,  341,  341,    0,
+  341,  341,  341,  341,  341,  341,    0,    0,  341,  341,
+    0,    0,    0,    0,    0,    0,    0,    0,  293,    0,
+    0,    0,  293,    0,    0,  293,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  293,
+    0,    0,  293,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  295,    0,  295,  295,
+  295,  295,  295,    0,    0,    0,    0,    0,    0,    0,
+    0,  295,    0,    0,    0,  295,    0,  295,    0,    0,
+  295,  295,  295,  295,  295,  295,  295,    0,    0,  295,
+  295,  295,    0,    0,    0,    0,  295,  295,    0,    0,
+    0,  295,  295,    0,    0,    0,    0,    0,    0,    0,
+    0,  295,    0,    0,    0,  295,  295,    0,    0,    0,
+  295,    0,    0,  341,    0,    0,  295,    0,  295,  295,
+    0,  295,    0,  295,  295,  295,  295,  295,    0,  295,
+  295,  295,  295,  295,  295,  295,  295,  295,  295,  295,
+  295,  295,  295,  295,  295,    0,    0,  295,  295,  295,
+    0,  295,  295,  295,    0,  295,  295,  295,  417,  415,
+  295,  416,  295,    0,    0,  295,  295,  295,  295,    0,
+  295,  295,  295,  295,  852,    0,  420,  403,  421,  295,
+    0,    0,  295,  295,  295,  295,  295,  295,  295,  295,
+    0,  295,  295,  295,  295,  295,    0,  293,  295,  293,
+  293,  293,  293,  293,    0,  295,  295,  295,    0,    0,
+  299,    0,  293,    0,  295,  295,  293,    0,  293,    0,
+  299,  293,  293,  293,  293,  293,  293,  293,    0,    0,
+  293,  293,  293,    0,    0,    0,    0,  293,  293,    0,
+    0,    0,  293,  293,    0,    0,    0,  299,    0,    0,
+    0,  299,  293,    0,  299,    0,  293,  293,    0,    0,
+    0,  293,    0,    0,    0,    0,    0,  293,  299,  293,
+  293,  299,  293,    0,  293,  293,  293,  293,  293,    0,
+  293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+  293,  293,  293,  293,  293,  293,    0,    0,  293,  293,
+  293,    0,  293,  293,  293,    0,  293,  293,  293,    0,
+    0,  293,    0,  293,    0,    0,  293,  293,  293,  293,
+    0,  293,  293,  293,  293,    0,    0,    0,    0,    0,
+  293,    0,    0,  293,  293,  293,  293,  293,  293,  293,
+  293,    0,  293,  293,  293,  293,  293,    0,    0,  293,
+    0,    0,    0,    0,    0,    0,  293,  293,  293,    0,
+    0,  297,    0,    0,    0,  293,  293,    0,    0,    0,
+    0,  297,    0,    0,  404,  405,  406,  407,  408,    0,
+  409,  410,  411,  412,  413,  414,    0,    0,  418,  419,
+    0,    0,    0,    0,    0,    0,    0,    0,  297,    0,
+    0,    0,  297,    0,    0,  297,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  297,
+    0,    0,  297,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  299,    0,  299,  299,
+  299,  299,  299,    0,    0,    0,    0,    0,    0,    0,
+    0,  299,    0,    0,    0,  299,    0,  299,    0,    0,
+  299,  299,  299,  299,  299,  299,  299,    0,    0,  299,
+  299,  299,    0,    0,    0,    0,  299,  299,    0,    0,
+    0,  299,  299,    0,    0,    0,    0,    0,    0,    0,
+    0,  299,    0,    0,    0,  299,  299,    0,    0,    0,
+  299,    0,    0,    0,    0,    0,  299,    0,  299,  299,
+    0,  299,    0,  299,  299,  299,  299,  299,    0,  299,
+  299,  299,  299,  299,  299,  299,  299,  299,  299,  299,
+  299,  299,  299,  299,  299,    0,    0,  299,  299,  299,
+    0,  299,  299,  299,    0,  299,  299,  299,  417,  415,
+  299,  416,  299,    0,    0,  299,  299,  299,  299,    0,
+  299,  299,  299,  299,  901,    0,  420,  403,  421,  299,
+    0,    0,  299,  299,  299,  299,  299,  299,  299,  299,
+    0,  299,  299,  299,  299,  299,    0,  297,  299,  297,
+  297,  297,  297,  297,    0,  299,  299,  299,    0,    0,
+  291,    0,  297,    0,  299,  299,  297,    0,  297,    0,
+  291,  297,  297,  297,  297,  297,  297,  297,    0,    0,
+  297,  297,  297,    0,    0,    0,    0,  297,  297,    0,
+    0,    0,  297,  297,    0,    0,    0,  291,    0,    0,
+    0,  291,  297,    0,  291,    0,  297,  297,    0,    0,
+    0,  297,    0,    0,    0,    0,    0,  297,  291,  297,
+  297,  291,  297,    0,  297,  297,  297,  297,  297,    0,
+  297,  297,  297,  297,  297,  297,  297,  297,  297,  297,
+  297,  297,  297,  297,  297,  297,    0,    0,  297,  297,
+  297,    0,  297,  297,  297,    0,  297,  297,  297,    0,
+    0,  297,    0,  297,    0,    0,  297,  297,  297,  297,
+    0,  297,  297,  297,  297,    0,    0,    0,    0,    0,
+  297,    0,    0,  297,  297,  297,  297,  297,  297,  297,
+  297,    0,  297,  297,  297,  297,  297,    0,    0,  297,
+    0,    0,    0,    0,    0,    0,  297,  297,  297,    0,
+    0,  301,    0,    0,    0,  297,  297,    0,    0,    0,
+    0,  301,    0,    0,  404,  405,  406,  407,  408,    0,
+  409,  410,  411,  412,  413,  414,    0,    0,  418,  419,
+    0,    0,    0,    0,    0,    0,    0,    0,  301,    0,
+    0,    0,  301,    0,    0,  301,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  301,
+    0,    0,  301,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  291,    0,  291,  291,
+  291,  291,  291,    0,    0,    0,    0,    0,    0,    0,
+    0,  291,    0,    0,    0,  291,    0,  291,    0,    0,
+  291,  291,  291,  291,  291,  291,  291,    0,    0,  291,
+  291,  291,    0,    0,    0,    0,  291,  291,    0,    0,
+    0,  291,  291,    0,    0,    0,    0,    0,    0,    0,
+    0,  291,    0,    0,    0,  291,  291,    0,    0,    0,
+  291,    0,    0,    0,    0,    0,  291,    0,  291,  291,
+    0,  291,    0,  291,  291,  291,  291,  291,    0,  291,
+  291,  291,  291,  291,  291,  291,  291,  291,  291,  291,
+  291,  291,  291,  291,  291,    0,    0,  291,  291,  291,
+    0,  291,  291,  291,    0,  291,  291,  291,  417,  415,
+  291,  416,  291,    0,    0,  291,  291,  291,  291,    0,
+  291,  291,  291,  291,  946,    0,  420,  403,  421,  291,
+    0,    0,  291,  291,  291,  291,  291,  291,  291,  291,
+    0,  291,  291,  291,  291,  291,    0,  301,  291,  301,
+  301,  301,  301,  301,    0,  291,  291,  291,    0,    0,
+  296,    0,  301,    0,  291,  291,  301,    0,  301,    0,
+  296,  301,  301,  301,  301,  301,  301,  301,    0,    0,
+  301,  301,  301,    0,    0,    0,    0,  301,  301,    0,
+    0,    0,  301,  301,    0,    0,    0,  296,    0,    0,
+    0,  296,  301,    0,  296,    0,  301,  301,    0,    0,
+    0,  301,    0,    0,    0,    0,    0,  301,  296,  301,
+  301,  296,  301,    0,  301,  301,  301,  301,  301,    0,
+  301,  301,  301,  301,  301,  301,  301,  301,  301,  301,
+  301,  301,  301,  301,  301,  301,    0,    0,  301,  301,
+  301,    0,  301,  301,  301,    0,  301,  301,  301,    0,
+    0,  301,    0,  301,    0,    0,  301,  301,  301,  301,
+    0,  301,  301,  301,  301,    0,    0,    0,    0,    0,
+  301,    0,    0,  301,  301,  301,  301,  301,  301,  301,
+  301,    0,  301,  301,  301,  301,  301,    0,    0,  301,
+    0,    0,    0,    0,    0,    0,  301,  301,  301,    0,
+    0,  294,    0,    0,    0,  301,  301,    0,    0,    0,
+    0,  294,    0,    0,  404,  405,  406,  407,  408,    0,
+  409,  410,  411,  412,  413,  414,    0,    0,  418,  419,
+    0,    0,    0,    0,    0,    0,    0,    0,  294,    0,
+    0,    0,  294,    0,    0,  294,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  294,
+    0,    0,  294,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  296,    0,  296,  296,
+  296,  296,  296,    0,    0,    0,    0,    0,    0,    0,
+    0,  296,    0,    0,    0,  296,    0,  296,    0,    0,
+  296,  296,  296,  296,  296,  296,  296,    0,    0,  296,
+  296,  296,    0,    0,    0,    0,  296,  296,    0,    0,
+    0,  296,  296,    0,    0,    0,    0,    0,    0,    0,
+    0,  296,    0,    0,    0,  296,  296,    0,    0,    0,
+  296,    0,    0,    0,    0,    0,  296,    0,  296,  296,
+    0,  296,    0,  296,  296,  296,  296,  296,    0,  296,
+  296,  296,  296,  296,  296,  296,  296,  296,  296,  296,
+  296,  296,  296,  296,  296,    0,    0,  296,  296,  296,
+    0,  296,  296,  296,    0,  296,  296,  296,  417,  415,
+  296,  416,  296,    0,    0,  296,  296,  296,  296,    0,
+  296,  296,  296,  296,  962,    0,  420,  403,  421,  296,
+    0,    0,  296,  296,  296,  296,  296,  296,  296,  296,
+    0,  296,  296,  296,  296,  296,    0,  294,  296,  294,
+  294,  294,  294,  294,    0,  296,  296,  296,    0,    0,
+  312,    0,  294,    0,  296,  296,  294,    0,  294,    0,
+  312,  294,  294,  294,  294,  294,  294,  294,    0,    0,
+  294,  294,  294,    0,    0,    0,    0,  294,  294,    0,
+    0,    0,  294,  294,    0,    0,    0,  312,    0,    0,
+    0,  312,  294,    0,  312,    0,  294,  294,    0,    0,
+    0,  294,    0,    0,    0,    0,    0,  294,  312,  294,
+  294,  312,  294,    0,  294,  294,  294,  294,  294,    0,
+  294,  294,  294,  294,  294,  294,  294,  294,  294,  294,
+  294,  294,  294,  294,  294,  294,    0,    0,  294,  294,
+  294,    0,  294,  294,  294,    0,  294,  294,  294,    0,
+    0,  294,    0,  294,    0,    0,  294,  294,  294,  294,
+    0,  294,  294,  294,  294,    0,    0,    0,    0,    0,
+  294,    0,    0,  294,  294,  294,  294,  294,  294,  294,
+  294,    0,  294,  294,  294,  294,  294,    0,    0,  294,
+    0,    0,    0,    0,    0,    0,  294,  294,  294,    0,
+    0,  310,    0,    0,    0,  294,  294,    0,    0,    0,
+    0,  310,    0,    0,  404,  405,  406,  407,  408,    0,
+  409,  410,  411,  412,  413,  414,    0,    0,  418,  419,
+    0,    0,    0,    0,    0,    0,    0,    0,  310,    0,
+    0,    0,  310,    0,    0,  310,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  310,
+    0,    0,  310,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  312,    0,  312,  312,
+  312,  312,  312,    0,    0,    0,    0,    0,    0,    0,
+    0,  312,    0,    0,    0,  312,    0,  312,    0,    0,
+  312,  312,  312,  312,  312,  312,  312,    0,    0,  312,
+  312,  312,    0,    0,    0,    0,  312,  312,    0,    0,
+    0,  312,  312,    0,    0,    0,    0,    0,    0,    0,
+    0,  312,    0,    0,    0,  312,  312,    0,    0,    0,
+  312,    0,    0,    0,    0,    0,  312,    0,  312,  312,
+    0,  312,    0,  312,  312,  312,  312,  312,    0,  312,
+  312,  312,  312,  312,  312,  312,  312,  312,  312,  312,
+  312,  312,  312,  312,  312,    0,    0,  312,  312,  312,
+    0,  312,  312,  312,    0,  312,  312,  312,  417,  415,
+  312,  416,  312,    0,    0,  312,  312,  312,  312,    0,
+  312,  312,  312,  312,    0,    0,  420,  403,  421,  312,
+    0,    0,  312,  312,  312,  312,  312,  312,  312,  312,
+    0,  312,  312,  312,  312,  312,    0,  310,  312,  310,
+  310,  310,  310,  310,    0,  312,  312,  312,    0,    0,
+  300,    0,  310,    0,  312,  312,  310,    0,  310,    0,
+  300,  310,  310,  310,  310,  310,  310,  310,    0,    0,
+  310,  310,  310,    0,    0,    0,    0,  310,  310,    0,
+    0,    0,  310,  310,    0,    0,    0,  300,    0,    0,
+    0,  300,  310,    0,  300,    0,  310,  310,    0,    0,
+    0,  310,    0,    0,    0,    0,    0,  310,  300,  310,
+  310,  300,  310,    0,  310,  310,  310,  310,  310,    0,
+  310,  310,  310,  310,  310,  310,  310,  310,  310,  310,
+  310,  310,  310,  310,  310,  310,    0,    0,  310,  310,
+  310,    0,  310,  310,  310,    0,  310,  310,  310,    0,
+    0,  310,    0,  310,    0,    0,  310,  310,  310,  310,
+    0,  310,  310,  310,  310,    0,    0,    0,    0,    0,
+  310,    0,    0,  310,  310,  310,  310,  310,  310,  310,
+  310,    0,  310,  310,  310,  310,  310,    0,    0,  310,
+    0,    0,    0,    0,    0,    0,  310,  310,  310,    0,
+    0,  298,    0,    0,    0,  310,  310,    0,    0,    0,
+    0,  298,    0,    0,  404,  405,  406,  407,  408,    0,
+  409,  410,  411,  412,  413,  414,    0,    0,  418,  419,
+    0,    0,    0,    0,    0,    0,    0,    0,  298,    0,
+    0,    0,  298,    0,    0,  298,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  298,
+    0,    0,  298,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  300,    0,  300,  300,
+  300,  300,  300,    0,    0,    0,    0,    0,    0,    0,
+    0,  300,    0,    0,    0,  300,    0,  300,    0,    0,
+  300,  300,  300,  300,  300,  300,  300,    0,    0,  300,
+  300,  300,    0,    0,    0,    0,  300,  300,    0,    0,
+    0,  300,  300,    0,    0,    0,    0,    0,    0,    0,
+    0,  300,    0,    0,    0,  300,  300,    0,    0,    0,
+  300,    0,    0,    0,    0,    0,  300,    0,  300,  300,
+    0,  300,    0,  300,  300,  300,  300,  300,    0,  300,
+  300,  300,  300,  300,  300,  300,  300,  300,  300,  300,
+  300,  300,  300,  300,  300,    0,    0,  300,  300,  300,
+    0,  300,  300,  300,    0,  300,  300,  300,  247,  247,
+  300,  247,  300,    0,    0,  300,  300,  300,  300,    0,
+  300,  300,  300,  300,    0,    0,  247,  247,  247,  300,
+    0,    0,  300,  300,  300,  300,  300,  300,  300,  300,
+    0,  300,  300,  300,  300,  300,    0,  298,  300,  298,
+  298,  298,  298,  298,    0,  300,  300,  300,    0,    0,
+  304,    0,  298,    0,  300,  300,  298,    0,  298,    0,
+  304,  298,  298,  298,  298,  298,  298,  298,    0,    0,
+  298,  298,  298,    0,    0,    0,    0,  298,  298,    0,
+    0,    0,  298,  298,    0,    0,    0,  304,    0,    0,
+    0,  304,  298,    0,  304,    0,  298,  298,    0,    0,
+    0,  298,    0,    0,    0,    0,    0,  298,  304,  298,
+  298,  304,  298,    0,  298,  298,  298,  298,  298,    0,
+  298,  298,  298,  298,  298,  298,  298,  298,  298,  298,
+  298,  298,  298,  298,  298,  298,    0,    0,  298,  298,
+  298,    0,  298,  298,  298,    0,  298,  298,  298,    0,
+    0,  298,    0,  298,    0,    0,  298,  298,  298,  298,
+    0,  298,  298,  298,  298,    0,    0,    0,    0,    0,
+  298,    0,    0,  298,  298,  298,  298,  298,  298,  298,
+  298,    0,  298,  298,  298,  298,  298,    0,    0,  298,
+    0,    0,    0,    0,    0,    0,  298,  298,  298,    0,
+    0,  303,    0,    0,    0,  298,  298,    0,    0,    0,
+    0,  303,    0,    0,  247,  247,  247,  247,  247,    0,
+  247,  247,  247,  247,  247,  247,    0,    0,  247,  247,
+    0,    0,    0,    0,    0,    0,    0,    0,  303,    0,
+    0,    0,  303,    0,    0,  303,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  303,
+    0,    0,  303,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  304,    0,  304,  304,
+  304,  304,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  304,    0,    0,    0,  304,    0,  304,    0,    0,
+  304,  304,  304,  304,  304,  304,  304,    0,    0,  304,
+  304,  304,    0,    0,    0,    0,  304,  304,    0,    0,
+    0,  304,  304,    0,    0,    0,    0,    0,    0,    0,
+    0,  304,    0,    0,    0,  304,  304,    0,    0,    0,
+  304,    0,    0,    0,    0,    0,  304,  567,  304,  304,
+  333,  304,  334,  304,  304,  304,  304,  304,    0,  304,
+  304,  304,  304,  304,  304,  304,  304,  304,  304,  304,
+  304,  304,  304,  304,  304,    0,    0,  304,  304,  304,
+    0,  304,  304,  304,    0,  304,  304,  304,    0,    0,
+  304,    0,  304,    0,    0,  304,  304,  304,  304,    0,
+  304,  304,  304,  304,    0,  753,    0,  751,  150,  304,
+  151,    0,  304,  304,  304,  304,  304,  304,  304,  304,
+    0,  304,  304,  304,  304,  304,  576,  303,  304,  303,
+  303,  303,  303,    0,    0,  304,  304,  304,    0,    0,
+    0,    0,  303,    0,  304,  304,  303,    0,  303,    0,
+    0,  303,  303,  303,  303,  303,  303,  303,    0,    0,
+  303,  303,  303,    0,    0,    0,    0,  303,  303,    0,
+    0,    0,  303,  303,    0,    0,    0,    0,    0,    0,
+    0,    0,  303,    0,    0,    0,  303,  303,    0,    0,
+    0,  303,    0,    0,    0,    0,    0,  303,    0,  303,
+  303,    0,  303,    0,  303,  303,  303,  303,  303,    0,
+  303,  303,  303,  303,  303,  303,  303,  303,  303,  303,
+  303,  303,  303,  303,  303,  303,    0,    0,  303,  303,
+  303,    0,  303,  303,  303,    0,  303,  303,  303,    0,
+  338,  303,    0,  303,    0,    0,  303,  303,  303,  303,
+  338,  303,  303,  303,  303,    0,    0,    0,    0,    0,
+  303,    0,    0,  303,  303,  303,  303,  303,  303,  303,
+  303,    0,  303,  303,  303,  303,  303,  338,    0,  303,
+  338,  338,  338,  338,  338,  338,  303,  303,  303,    0,
+    0,    0,    0,    0,    0,  303,  303,    0,    0,    0,
+    0,    0,    0,    0,    0,  336,  337,  338,    0,    0,
+  339,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  149,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  752,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  152,  153,    0,    0,    0,  154,  155,  156,
+  157,    0,    0,    0,    0,    0,    0,    0,    0,  158,
+  159,  160,  161,  162,  163,  164,    0,  165,  166,  167,
+    0,    0,  168,  169,  170,    0,  171,  172,  173,  174,
+  175,  292,  176,    0,    0,    0,    0,  178,  179,    0,
+    0,  292,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  181,  182,    0,    0,  183,  184,  185,
+  186,    0,    0,    0,  340,    0,    0,    0,  292,    0,
+    0,  187,  292,    0,    0,  292,    0,    0,    0,    0,
+    0,    0,    0,    0,  177,    0,    0,    0,    0,  292,
+    0,    0,  292,    0,    0,  178,  179,    0,    0,    0,
+    0,  180,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  181,  182,    0,    0,  183,  184,  185,  186,    0,
+    0,    0,   89,    0,    0,    0,    0,    0,    0,  187,
+    0,    0,    0,    0,    0,    0,  338,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  338,  338,  338,    0,  338,    0,  338,    0,    0,
+  338,  338,  338,  338,  338,  338,  338,    0,    0,  338,
+  338,  338,    0,    0,    0,    0,  338,  338,    0,    0,
+    0,  338,  338,    0,    0,    0,    0,    0,    0,    0,
+    0,  338,    0,    0,    0,  338,  338,    0,    0,    0,
+  338,    0,    0,    0,    0,    0,  338,    0,  338,  338,
+    0,  338,    0,  338,  338,  338,  338,  338,    0,  338,
+  338,  338,  338,  338,  338,  338,  338,  338,  338,  338,
+  338,  338,  338,  338,  338,    0,    0,  338,  338,  338,
+    0,  338,  338,  338,    0,  338,  338,  338,    0,    0,
+  338,    0,  338,    0,    0,  338,  338,  338,  338,    0,
+    0,  338,  338,  338,    0,    0,    0,    0,    0,  338,
+    0,    0,  338,  338,  338,  338,  338,  338,  338,  338,
+    0,  338,  338,  338,  338,  338,    0,  292,  338,  292,
+  292,    0,    0,    0,    0,  338,  338,  338,    0,    0,
+  302,    0,  292,    0,  338,  338,  292,    0,  292,    0,
+  302,  292,  292,  292,  292,  292,  292,  292,    0,    0,
+  292,  292,  292,    0,    0,    0,    0,  292,  292,    0,
+    0,    0,  292,  292,    0,    0,    0,  302,    0,    0,
+    0,  302,  292,    0,  302,    0,  292,  292,    0,    0,
+    0,  292,    0,    0,    0,    0,    0,  292,  302,  292,
+  292,  302,  292,    0,  292,  292,  292,  292,  292,    0,
+  292,  292,  292,  292,  292,  292,  292,  292,  292,  292,
+  292,  292,  292,  292,  292,  292,    0,    0,  292,  292,
+  292,    0,  292,  292,  292,    0,  292,  292,  292,    0,
+    0,  292,    0,  292,    0,    0,  292,  292,  292,  292,
+    0,  292,  292,  292,  292,    0,    0,    0,    0,    0,
+  292,    0,    0,  292,  292,  292,  292,  292,  292,  292,
+  292,    0,  292,  292,  292,  292,  292,    0,    0,  292,
+    0,    0,    0,    0,    0,    0,  292,  292,  292,    0,
+    0,    0,    0,    0,    0,  292,  292,  501,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  501,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  501,  501,
+  501,  501,  501,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  302,    0,  302,  302,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  302,    0,    0,    0,  302,    0,  302,    0,    0,
+  302,  302,  302,  302,  302,  302,  302,    0,    0,  302,
+  302,  302,    0,    0,    0,    0,  302,  302,    0,    0,
+    0,  302,  302,    0,    0,    0,    0,    0,    0,    0,
+    0,  302,    0,    0,    0,  302,  302,    0,    0,    0,
+  302,    0,    0,    0,    0,    0,  302,    0,  302,  302,
+    0,  302,    0,  302,  302,  302,  302,  302,    0,  302,
+  302,  302,  302,  302,  302,  302,  302,  302,  302,  302,
+  302,  302,  302,  302,  302,    0,    0,  302,  302,  302,
+    0,  302,  302,  302,    0,  302,  302,  302,    0,    0,
+  302,    0,  302,    0,    0,  302,  302,  302,  302,    0,
+  302,  302,  302,  302,    0,    0,    0,    0,    0,  302,
+    0,    0,  302,  302,  302,  302,  302,  302,  302,  302,
+    0,  302,  302,  302,  302,  302,    0,    0,  302,    0,
+    0,    0,    0,  501,    0,  302,  302,  302,    0,    0,
+    0,  502,    0,    0,  302,  302,    0,    0,  501,  501,
+  501,  502,  501,    0,  501,    0,    0,  501,  501,  501,
+  501,  501,  501,  501,    0,    0,  501,  501,  501,    0,
+    0,    0,    0,  501,  501,    0,    0,    0,  501,  501,
+    0,    0,  502,  502,  502,  502,  502,    0,  501,    0,
+    0,    0,  501,  501,    0,    0,    0,  501,    0,    0,
+    0,    0,    0,  501,    0,  501,  501,    0,  501,    0,
+  501,  501,  501,  501,  501,    0,  501,  501,  501,  501,
+  501,  501,  501,  501,  501,  501,  501,  501,  501,  501,
+  501,  501,    0,    0,  501,  501,  501,    0,  501,  501,
+  501,    0,  501,  501,  501,    0,    0,  501,    0,  501,
+    0,    0,  501,  501,  501,  501,    0,    0,  501,  501,
+  501,    0,    0,    0,    0,    0,  501,    0,    0,  501,
+  501,  501,  501,  501,  501,  501,  501,    0,  501,  501,
+  501,  501,  501,    0,    0,  501,    0,    0,    0,    0,
+    0,    0,  501,  501,  501,    0,  493,    0,    0,    0,
+    0,  501,  501,    0,    0,    0,  493,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  499,  499,
+  493,  499,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  502,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  502,  502,  502,    0,  502,    0,  502,    0,
+    0,  502,  502,  502,  502,  502,  502,  502,    0,    0,
+  502,  502,  502,    0,    0,    0,    0,  502,  502,    0,
+    0,    0,  502,  502,    0,    0,    0,    0,    0,    0,
+    0,    0,  502,    0,    0,    0,  502,  502,    0,    0,
+    0,  502,    0,    0,    0,    0,    0,  502,    0,  502,
+  502,    0,  502,    0,  502,  502,  502,  502,  502,    0,
+  502,  502,  502,  502,  502,  502,  502,  502,  502,  502,
+  502,  502,  502,  502,  502,  502,    0,    0,  502,  502,
+  502,    0,  502,  502,  502,    0,  502,  502,  502,    0,
+    0,  502,    0,  502,    0,    0,  502,  502,  502,  502,
+    0,    0,  502,  502,  502,    0,    0,    0,    0,    0,
+  502,    0,    0,  502,  502,  502,  502,  502,  502,  502,
+  502,    0,  502,  502,  502,  502,  502,    0,    0,  502,
+    0,    0,  493,    0,    0,    0,  502,  502,    0,    0,
+  507,    0,    0,    0,    0,  502,  502,  499,  499,  499,
+  507,  493,    0,  493,    0,    0,  493,  493,  493,  493,
+  493,  493,  493,    0,    0,  493,  493,  493,    0,    0,
+    0,    0,  493,  493,    0,    0,    0,  493,  493,    0,
+    0,  507,  507,  507,  507,  507,    0,  493,    0,    0,
+    0,  493,  493,    0,    0,    0,  493,    0,    0,    0,
+    0,    0,  493,    0,  493,  493,    0,  493,    0,  493,
+  493,  493,  493,  493,    0,  493,  493,  493,  493,  493,
+  493,  493,  493,  493,  493,  493,  493,  493,  493,  493,
+  493,    0,    0,  493,  493,  493,    0,  493,  493,  493,
+    0,  493,  493,  493,    0,    0,  493,    0,  493,    0,
+    0,  493,  493,  493,  493,    0,    0,  493,  493,  493,
+    0,    0,    0,    0,    0,  493,    0,    0,  493,  493,
+  493,  493,  493,  493,  493,  493,    0,  493,  493,  493,
+  493,  493,    0,    0,  493,    0,    0,    0,    0,    0,
+    0,  493,  493,  493,    0,  504,    0,    0,    0,    0,
+  493,  493,    0,    0,    0,  504,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  504,  504,  504,  504,
+  504,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  507,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  507,  507,    0,    0,  507,    0,  507,    0,    0,
+  507,  507,  507,  507,  507,  507,  507,    0,    0,  507,
+  507,  507,    0,    0,    0,    0,  507,  507,    0,    0,
+    0,  507,  507,    0,    0,    0,    0,    0,    0,    0,
+    0,  507,    0,    0,    0,  507,  507,    0,    0,    0,
+  507,    0,    0,    0,    0,    0,  507,    0,  507,  507,
+    0,  507,    0,  507,  507,  507,  507,  507,    0,  507,
+  507,  507,  507,  507,  507,  507,  507,  507,  507,  507,
+  507,  507,  507,  507,  507,    0,    0,  507,  507,  507,
+    0,  507,  507,  507,    0,  507,  507,  507,    0,    0,
+  507,    0,  507,    0,    0,  507,  507,  507,  507,    0,
+    0,  507,  507,  507,    0,    0,    0,    0,    0,  507,
+    0,    0,  507,  507,  507,  507,  507,  507,  507,  507,
+    0,  507,  507,  507,  507,  507,    0,    0,  507,    0,
+    0,  504,    0,    0,    0,  507,  507,  507,  505,    0,
+    0,    0,    0,    0,  507,  507,  504,  504,  505,    0,
+  504,    0,  504,    0,    0,  504,  504,  504,  504,  504,
+  504,  504,    0,    0,  504,  504,  504,    0,    0,    0,
+    0,  504,  504,    0,    0,    0,  504,  504,    0,  505,
+  505,  505,  505,  505,    0,    0,  504,    0,    0,    0,
+  504,  504,    0,    0,    0,  504,    0,    0,    0,    0,
+    0,  504,    0,  504,  504,    0,  504,    0,  504,  504,
+  504,  504,  504,    0,  504,  504,  504,  504,  504,  504,
+  504,  504,  504,  504,  504,  504,  504,  504,  504,  504,
+    0,    0,  504,  504,  504,    0,  504,  504,  504,    0,
+  504,  504,  504,    0,    0,  504,    0,  504,    0,    0,
+  504,  504,  504,  504,    0,    0,  504,  504,  504,    0,
+    0,    0,    0,    0,  504,    0,    0,  504,  504,  504,
+  504,  504,  504,  504,  504,    0,  504,  504,  504,  504,
+  504,    0,    0,  504,    0,    0,    0,    0,    0,    0,
+  504,  504,  504,  506,    0,    0,    0,    0,    0,  504,
+  504,    0,    0,  506,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,  506,  506,  506,  506,  506,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,  505,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  505,
+  505,    0,    0,  505,    0,  505,    0,    0,  505,  505,
+  505,  505,  505,  505,  505,    0,    0,  505,  505,  505,
+    0,    0,    0,    0,  505,  505,    0,    0,    0,  505,
+  505,    0,    0,    0,    0,    0,    0,    0,    0,  505,
+    0,    0,    0,  505,  505,    0,    0,    0,  505,    0,
+    0,    0,    0,    0,  505,    0,  505,  505,    0,  505,
+    0,  505,  505,  505,  505,  505,    0,  505,  505,  505,
+  505,  505,  505,  505,  505,  505,  505,  505,  505,  505,
+  505,  505,  505,    0,    0,  505,  505,  505,    0,  505,
+  505,  505,    0,  505,  505,  505,    0,    0,  505,    0,
+  505,    0,    0,  505,  505,  505,  505,    0,    0,  505,
+  505,  505,    0,    0,    0,    0,    0,  505,    0,    0,
+  505,  505,  505,  505,  505,  505,  505,  505,    0,  505,
+  505,  505,  505,  505,    0,    0,  505,    0,    0,  506,
+    0,    0,    0,  505,  505,  505,  313,    0,    0,    0,
+    0,    0,  505,  505,  506,  506,  313,    0,  506,    0,
+  506,    0,    0,  506,  506,  506,  506,  506,  506,  506,
+    0,    0,  506,  506,  506,    0,    0,    0,    0,  506,
+  506,    0,    0,  313,  506,  506,    0,  313,    0,    0,
+  313,    0,    0,    0,  506,    0,    0,    0,  506,  506,
+    0,    0,    0,  506,  313,    0,    0,    0,    0,  506,
+    0,  506,  506,    0,  506,    0,  506,  506,  506,  506,
+  506,    0,  506,  506,  506,  506,  506,  506,  506,  506,
+  506,  506,  506,  506,  506,  506,  506,  506,    0,    0,
+  506,  506,  506,    0,  506,  506,  506,    0,  506,  506,
+  506,    0,    0,  506,    0,  506,    0,    0,  506,  506,
+  506,  506,    0,    0,  506,  506,  506,    0,    0,    0,
+    0,    0,  506,    0,    0,  506,  506,  506,  506,  506,
+  506,  506,  506,    0,  506,  506,  506,  506,  506,    0,
+    0,  506,    0,    0,    0,    0,    0,    0,  506,  506,
+  506,  309,    0,    0,    0,    0,    0,  506,  506,    0,
+    0,  309,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  309,    0,
+    0,    0,  309,    0,    0,  309,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  309,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  313,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  313,    0,    0,
+    0,  313,    0,  313,    0,    0,  313,  313,  313,  313,
+  313,  313,  313,    0,    0,  313,  313,  313,    0,    0,
+    0,    0,  313,  313,    0,    0,    0,  313,  313,    0,
+    0,    0,    0,    0,    0,    0,    0,  313,    0,    0,
+    0,  313,  313,    0,    0,    0,  313,    0,    0,    0,
+    0,    0,  313,    0,  313,  313,    0,  313,    0,  313,
+  313,  313,  313,  313,    0,  313,  313,  313,  313,  313,
+  313,  313,  313,  313,  313,  313,  313,  313,  313,  313,
+  313,    0,    0,  313,  313,  313,    0,  313,  313,  313,
+    0,  313,  313,  313,    0,  503,  313,    0,  313,    0,
+    0,  313,  313,  313,  313,  503,  313,  313,  313,  313,
+    0,    0,    0,    0,    0,  313,    0,    0,  313,  313,
+  313,  313,  313,  313,  313,  313,    0,  313,  313,  313,
+  313,  313,    0,    0,  313,    0,  503,  309,  503,  503,
+  503,  313,  313,  313,    0,    0,    0,    0,    0,    0,
+  313,  313,  309,    0,    0,    0,  309,    0,  309,    0,
+    0,  309,  309,  309,  309,  309,  309,  309,    0,    0,
+  309,  309,  309,    0,    0,    0,    0,  309,  309,    0,
+    0,    0,  309,  309,    0,    0,    0,    0,    0,    0,
+    0,    0,  309,    0,    0,    0,  309,  309,    0,    0,
+    0,  309,    0,    0,    0,    0,    0,  309,    0,  309,
+  309,    0,  309,    0,  309,  309,  309,  309,  309,    0,
+  309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
+  309,  309,  309,  309,  309,  309,    0,    0,  309,  309,
+  309,    0,  309,  309,  309,    0,  309,  309,  309,    0,
+  509,  309,    0,  309,    0,    0,  309,  309,  309,  309,
+  509,  309,  309,  309,  309,    0,    0,    0,    0,    0,
+  309,    0,    0,  309,  309,  309,  309,  309,  309,  309,
+  309,    0,  309,  309,  309,  309,  309,    0,    0,  309,
+    0,  509,    0,    0,  509,    0,  309,  309,  309,    0,
+    0,    0,    0,    0,    0,  309,  309,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  503,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  503,    0,    0,    0,
+  503,    0,  503,    0,    0,  503,  503,  503,  503,  503,
+  503,  503,    0,    0,  503,  503,  503,    0,    0,    0,
+    0,  503,  503,    0,    0,    0,  503,  503,    0,    0,
+    0,    0,    0,    0,    0,    0,  503,    0,    0,    0,
+  503,  503,    0,    0,    0,  503,    0,    0,    0,    0,
+    0,  503,    0,  503,  503,    0,  503,    0,  503,  503,
+  503,  503,  503,    0,  503,  503,  503,  503,  503,  503,
+  503,  503,  503,  503,  503,  503,  503,  503,  503,  503,
+    0,    0,  503,  503,  503,    0,  503,  503,  503,    0,
+  503,  503,  503,    0,  512,  503,    0,  503,    0,    0,
+  503,  503,  503,  503,  512,    0,  503,  503,  503,    0,
+    0,    0,    0,    0,  503,    0,    0,  503,  503,  503,
+  503,  503,  503,  503,  503,    0,  503,  503,  503,  503,
+  503,    0,    0,  503,    0,  512,  509,    0,  512,    0,
+  503,  503,  503,    0,    0,    0,    0,    0,    0,  503,
+  503,  509,    0,    0,    0,  509,    0,  509,    0,    0,
+  509,  509,  509,  509,  509,  509,  509,    0,    0,  509,
+  509,  509,    0,    0,    0,    0,  509,  509,    0,    0,
+    0,  509,  509,    0,    0,    0,    0,    0,    0,    0,
+    0,  509,    0,    0,    0,  509,  509,    0,    0,    0,
+  509,    0,    0,    0,    0,    0,  509,    0,  509,  509,
+    0,  509,    0,  509,  509,  509,  509,  509,    0,  509,
+  509,  509,  509,  509,  509,  509,  509,  509,  509,  509,
+  509,  509,  509,  509,  509,    0,    0,  509,  509,  509,
+    0,  509,  509,  509,    0,  509,  509,  509,    0,  511,
+  509,    0,  509,    0,    0,  509,  509,  509,  509,  511,
+    0,  509,  509,  509,    0,    0,    0,    0,    0,  509,
+    0,    0,  509,  509,  509,  509,  509,  509,  509,  509,
+    0,  509,  509,  509,  509,  509,    0,    0,  509,    0,
+  511,    0,    0,  511,    0,  509,  509,  509,    0,    0,
+    0,    0,    0,    0,  509,  509,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  512,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  512,    0,    0,    0,  512,
+    0,  512,    0,    0,  512,  512,  512,  512,  512,  512,
+  512,    0,    0,  512,  512,  512,    0,    0,    0,    0,
+  512,  512,    0,    0,    0,  512,  512,    0,    0,    0,
+    0,    0,    0,    0,    0,  512,    0,    0,    0,  512,
+  512,    0,    0,    0,  512,    0,    0,    0,    0,    0,
+  512,    0,  512,  512,    0,  512,    0,  512,  512,  512,
+  512,  512,    0,  512,  512,  512,  512,  512,  512,  512,
+  512,  512,  512,  512,  512,  512,  512,  512,  512,    0,
+    0,  512,  512,  512,    0,  512,  512,  512,    0,  512,
+  512,  512,    0,  510,  512,    0,  512,    0,    0,  512,
+  512,  512,  512,  510,    0,  512,  512,  512,    0,    0,
+    0,    0,    0,  512,    0,    0,  512,  512,  512,  512,
+  512,  512,  512,  512,    0,  512,  512,  512,  512,  512,
+    0,    0,  512,    0,  510,  511,    0,  510,    0,  512,
+  512,  512,    0,    0,    0,    0,    0,    0,  512,  512,
+  511,    0,    0,    0,  511,    0,  511,    0,    0,  511,
+  511,  511,  511,  511,  511,  511,    0,    0,  511,  511,
+  511,    0,    0,    0,    0,  511,  511,    0,    0,    0,
+  511,  511,    0,    0,    0,    0,    0,    0,    0,    0,
+  511,    0,    0,    0,  511,  511,    0,    0,    0,  511,
+    0,    0,    0,    0,    0,  511,    0,  511,  511,    0,
+  511,    0,  511,  511,  511,  511,  511,    0,  511,  511,
+  511,  511,  511,  511,  511,  511,  511,  511,  511,  511,
+  511,  511,  511,  511,    0,    0,  511,  511,  511,    0,
+  511,  511,  511,    0,  511,  511,  511,    0,  236,  511,
+    0,  511,    0,    0,  511,  511,  511,  511,  236,    0,
+  511,  511,  511,    0,    0,    0,    0,    0,  511,    0,
+    0,  511,  511,  511,  511,  511,  511,  511,  511,    0,
+  511,  511,  511,  511,  511,    0,    0,  511,    0,    0,
+  236,    0,  236,    0,  511,  511,  511,    0,    0,    0,
+    0,    0,    0,  511,  511,    0,    0,    0,    0,  236,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  510,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,  510,    0,    0,    0,  510,    0,
+  510,    0,    0,  510,  510,  510,  510,  510,  510,  510,
+    0,    0,  510,  510,  510,    0,    0,    0,    0,  510,
+  510,    0,    0,    0,  510,  510,    0,    0,    0,    0,
+    0,    0,    0,    0,  510,    0,    0,    0,  510,  510,
+    0,    0,    0,  510,    0,    0,    0,    0,    0,  510,
+    0,  510,  510,    0,  510,    0,  510,  510,  510,  510,
+  510,    0,  510,  510,  510,  510,  510,  510,  510,  510,
+  510,  510,  510,  510,  510,  510,  510,  510,    0,    0,
+  510,  510,  510,    0,  510,  510,  510,    0,  510,  510,
+  510,    0,  513,  510,    0,  510,    0,    0,  510,  510,
+  510,  510,  513,    0,  510,  510,  510,    0,    0,    0,
+    0,    0,  510,    0,    0,  510,  510,  510,  510,  510,
+  510,  510,  510,    0,  510,  510,  510,  510,  510,    0,
+    0,  510,    0,  513,  236,    0,  513,    0,  510,  510,
+  510,    0,    0,    0,    0,    0,    0,  510,  510,    0,
+    0,    0,    0,  236,    0,  236,    0,    0,  236,  236,
+  236,  236,  236,  236,  236,    0,    0,  236,  236,  236,
+    0,    0,    0,    0,  236,  236,    0,    0,    0,  236,
+  236,    0,    0,    0,    0,    0,    0,    0,    0,  236,
+    0,    0,    0,  236,  236,    0,    0,    0,  236,    0,
+    0,    0,    0,    0,  236,    0,  236,  236,    0,  236,
+    0,  236,  236,  236,  236,  236,    0,  236,  236,  236,
+  236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+  236,  236,  236,    0,    0,  236,  236,  236,    0,  236,
+  236,  236,    0,  236,  236,  236,    0,  508,  236,    0,
+  236,    0,    0,  236,  236,  236,  236,  508,    0,  236,
+  236,  236,    0,    0,    0,    0,    0,  236,    0,    0,
+  236,  236,  236,  236,  236,  236,  236,  236,    0,  236,
+  236,  236,  236,  236,    0,    0,  236,    0,  508,    0,
+    0,  508,    0,  236,  236,  236,    0,    0,    0,    0,
+    0,    0,  236,  236,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  513,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  513,    0,    0,    0,  513,    0,  513,
+    0,    0,  513,  513,  513,  513,  513,  513,  513,    0,
+    0,  513,  513,  513,    0,    0,    0,    0,  513,  513,
+    0,    0,    0,  513,  513,    0,    0,    0,    0,    0,
+    0,    0,    0,  513,   57,    0,    0,  513,  513,    0,
+    0,    0,  513,    0,   57,    0,    0,    0,  513,    0,
+  513,  513,    0,  513,    0,  513,  513,  513,  513,  513,
+    0,  513,  513,  513,  513,  513,  513,  513,  513,  513,
+  513,  513,  513,  513,  513,  513,  513,    0,    0,  513,
+  513,  513,    0,  513,  513,  513,    0,  513,  513,  513,
+    0,    0,  513,    0,  513,    0,    0,  513,  513,  513,
+  513,    0,    0,  513,  513,  513,    0,    0,    0,    0,
+    0,  513,    0,    0,  513,  513,  513,  513,  513,  513,
+  513,  513,    0,  513,  513,  513,  513,  513,    0,    0,
+  513,    0,    0,  508,    0,    0,    0,  513,  513,  513,
+    0,    0,    0,    0,    0,    0,  513,  513,  508,    0,
+    0,    0,  508,    0,  508,    0,    0,  508,  508,  508,
+  508,  508,  508,  508,    0,    0,  508,  508,  508,    0,
+    0,    0,    0,  508,  508,    0,    0,    0,  508,  508,
+    0,    0,    0,    0,    0,  142,    0,    0,  508,    0,
+    0,    0,  508,  508,    0,  142,    0,  508,    0,    0,
+    0,    0,    0,  508,    0,  508,  508,    0,  508,    0,
+  508,  508,  508,  508,  508,    0,  508,  508,  508,  508,
+  508,  508,  508,  508,  508,  508,  508,  508,  508,  508,
+  508,  508,    0,    0,  508,  508,  508,    0,  508,  508,
+  508,    0,  508,  508,  508,    0,    0,  508,    0,  508,
+    0,    0,  508,  508,  508,  508,    0,    0,  508,  508,
+  508,    0,    0,    0,    0,    0,  508,    0,    0,  508,
+  508,  508,  508,  508,  508,  508,  508,    0,  508,  508,
+  508,  508,  508,    0,    0,  508,    0,    0,    0,    0,
+   57,    0,  508,  508,  508,    0,    0,    0,    0,    0,
+    0,  508,  508,    0,    0,  164,  164,    0,    0,   57,
+    0,   57,    0,    0,   57,   57,   57,   57,   57,   57,
+   57,    0,    0,   57,   57,   57,    0,    0,    0,    0,
+   57,   57,    0,    0,    0,   57,   57,    0,    0,    0,
+    0,    0,    0,    0,    0,   57,    0,    0,    0,   57,
+   57,    0,    0,    0,   57,    0,    0,    0,    0,    0,
+   57,    0,   57,   57,    0,   57,    0,   57,   57,   57,
+   57,   57,    0,   57,   57,   57,   57,   57,   57,   57,
+   57,   57,   57,   57,   57,   57,   57,   57,   57,    0,
+    0,   57,   57,   57,    0,   57,   57,   57,    0,   57,
+   57,   57,    0,  355,   57,    0,   57,    0,    0,   57,
+   57,   57,   57,  355,    0,   57,   57,   57,    0,    0,
+    0,    0,    0,   57,    0,    0,   57,   57,   57,   57,
+   57,   57,   57,   57,    0,   57,   57,   57,   57,   57,
+    0,  142,   57,    0,  355,    0,    0,    0,    0,   57,
+   57,   57,    0,    0,    0,    0,  164,  164,   57,   57,
+  142,  355,  142,    0,    0,  142,  142,  142,  142,  142,
+  142,  142,    0,    0,  142,  142,  142,    0,    0,    0,
+    0,  142,  142,    0,    0,    0,  142,  142,    0,    0,
+    0,    0,    0,    0,    0,    0,  142,    0,    0,    0,
+  142,  142,    0,    0,    0,  142,    0,    0,    0,    0,
+    0,  142,    0,  142,  142,    0,  142,    0,  142,  142,
+  142,  142,  142,    0,  142,  142,  142,  142,  142,  142,
+  142,  142,  142,  142,  142,  142,  142,  142,  142,  142,
+    0,    0,  142,  142,  142,    0,  142,  142,  142,    0,
+  142,  142,  142,    0,  125,  142,    0,  142,    0,    0,
+  142,  142,  142,  142,  125,    0,  142,  142,  142,    0,
+    0,    0,    0,    0,  142,    0,    0,  142,  142,  142,
+  142,  142,  142,  142,  142,    0,  142,  142,  142,  142,
+  142,    0,    0,  142,    0,    0,    0,    0,  125,    0,
+  142,  142,  142,    0,    0,    0,    0,    0,    0,  142,
+  142,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  355,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  355,    0,
+  355,    0,    0,  355,  355,  355,  355,  355,  355,  355,
+    0,    0,  355,  355,  355,    0,    0,    0,    0,  355,
+  355,    0,    0,    0,  355,  355,    0,    0,    0,    0,
+  154,    0,    0,    0,  355,    0,    0,    0,  355,  355,
+  154,    0,    0,  355,    0,    0,    0,    0,    0,  355,
+    0,  355,  355,    0,  355,    0,  355,  355,  355,  355,
+  355,    0,  355,  355,  355,  355,  355,  355,  355,  355,
+  355,  355,  355,  355,  355,  355,  355,  355,    0,    0,
+  355,  355,  355,    0,  355,  355,  355,    0,  355,  355,
+  355,    0,    0,  355,    0,  355,    0,    0,  355,  355,
+  355,  355,    0,    0,  355,  355,  355,    0,    0,    0,
+    0,    0,  355,    0,    0,  355,  355,  355,  355,  355,
+  355,  355,  355,    0,  355,  355,  355,  355,  355,    0,
+  125,  355,    0,    0,    0,    0,    0,    0,  355,  355,
+  355,    0,    0,    0,    0,  125,  125,  355,  355,  125,
+    0,  125,    0,    0,  125,  125,  125,  125,  125,  125,
+  125,    0,    0,  125,  125,  125,    0,    0,    0,    0,
+  125,  125,    0,    0,    0,  125,  125,    0,    0,    0,
+    0,    0,    0,    0,    0,  125,    0,    0,    0,  125,
+  125,    0,    0,    0,  125,    0,    0,    0,    0,    0,
+  125,    0,  125,  125,    0,  125,    0,  125,  125,  125,
+  125,  125,    0,  125,  125,  125,  125,  125,  125,  125,
+  125,  125,  125,  125,  125,  125,  125,  125,  125,    0,
+    0,  125,  125,  125,    0,  125,  125,  125,    0,  125,
+  125,  125,    0,  236,  125,    0,  125,    0,    0,  125,
+  125,  125,  125,  236,    0,  125,  125,  125,    0,    0,
+    0,    0,    0,  125,    0,    0,  125,  125,  125,  125,
+  125,  125,  125,  125,    0,  125,  125,  125,  125,  125,
+    0,    0,  125,    0,    0,  236,  154,  236,    0,  125,
+  125,    0,    0,    0,    0,    0,    0,    0,  125,  125,
+    0,  154,  154,    0,    0,  154,    0,  154,    0,    0,
+  154,  154,  154,  154,  154,  154,  154,    0,    0,  154,
+  154,  154,    0,    0,    0,    0,  154,  154,    0,    0,
+    0,  154,  154,    0,    0,    0,    0,    0,    0,    0,
+    0,  154,    0,    0,    0,  154,  154,    0,    0,    0,
+  154,    0,    0,    0,    0,    0,  154,    0,  154,  154,
+    0,  154,    0,  154,  154,  154,  154,  154,    0,  154,
+  154,  154,  154,  154,  154,  154,  154,  154,  154,  154,
+  154,  154,  154,  154,  154,    0,    0,  154,  154,  154,
+    0,  154,  154,  154,  164,  154,  154,  154,    0,    0,
+  154,    0,  154,    0,  164,  154,  154,  154,  154,    0,
+    0,  154,  154,  154,    0,    0,    0,    0,    0,  154,
+    0,    0,  154,  154,  154,  154,  154,  154,  154,  154,
+    0,  154,  154,  154,  154,  154,    0,    0,  154,    0,
+    0,    0,    0,    0,    0,  154,  154,  154,    0,    0,
+    0,    0,    0,    0,  154,  154,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  236,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  236,    0,
+  236,    0,    0,  236,  236,  236,  236,  236,  236,  236,
+    0,    0,  236,  236,  236,    0,    0,    0,    0,  236,
+  236,    0,    0,    0,  236,  236,    0,    0,    0,    0,
+  155,    0,    0,    0,  236,    0,    0,    0,  236,  236,
+  155,    0,    0,  236,    0,    0,    0,    0,    0,  236,
+    0,  236,  236,    0,  236,    0,  236,  236,  236,  236,
+  236,    0,  236,  236,  236,  236,  236,  236,  236,  236,
+  236,  236,  236,  236,  236,  236,  236,  236,    0,    0,
+  236,  236,  236,    0,  236,  236,  236,    0,  236,  236,
+  236,    0,    0,  236,    0,  236,    0,    0,  236,  236,
+  236,  236,    0,    0,  236,  236,  236,    0,    0,    0,
+    0,    0,  236,    0,    0,  236,  236,  236,  236,  236,
+  236,  236,  236,    0,  236,  236,  236,  236,  236,    0,
+  164,  236,    0,    0,    0,    0,    0,    0,  236,  236,
+  236,    0,    0,    0,    0,  164,  164,  236,  236,  164,
+    0,  164,    0,    0,  164,  164,  164,  164,  164,  164,
+  164,    0,    0,  164,  164,  164,    0,    0,    0,    0,
+  164,  164,    0,    0,    0,  164,  164,    0,    0,    0,
+    0,    0,    0,    0,    0,  164,    0,    0,    0,  164,
+  164,    0,    0,    0,  164,    0,    0,    0,    0,    0,
+  164,    0,  164,  164,    0,  164,    0,  164,  164,  164,
+  164,  164,    0,  164,  164,  164,  164,  164,  164,  164,
+  164,  164,  164,  164,  164,  164,  164,  164,  164,    0,
+    0,  164,  164,  164,    0,  164,  164,  164,    0,  164,
+  164,  164,    0,  525,  164,    0,  164,    0,    0,  164,
+  164,  164,  164,  525,    0,  164,  164,  164,    0,    0,
+    0,    0,    0,  164,    0,    0,  164,  164,  164,  164,
+  164,  164,  164,  164,    0,  164,  164,  164,  164,  164,
+    0,    0,  164,    0,  525,    0,  155,  525,    0,  164,
+  164,  164,    0,    0,    0,    0,    0,    0,  164,  164,
+    0,  155,  155,    0,    0,  155,    0,  155,    0,    0,
+  155,  155,  155,  155,  155,  155,  155,    0,    0,  155,
+  155,  155,    0,    0,    0,    0,  155,  155,    0,    0,
+    0,  155,  155,    0,    0,    0,    0,    0,    0,    0,
+    0,  155,    0,    0,    0,  155,  155,    0,    0,    0,
+  155,    0,    0,    0,    0,    0,  155,    0,  155,  155,
+    0,  155,    0,  155,  155,  155,  155,  155,    0,  155,
+  155,  155,  155,  155,  155,  155,  155,  155,  155,  155,
+  155,  155,  155,  155,  155,    0,    0,  155,  155,  155,
+    0,  155,  155,  155,    0,  155,  155,  155,    0,  168,
+  155,    0,  155,    0,    0,  155,  155,  155,  155,  168,
+    0,  155,  155,  155,    0,    0,    0,    0,    0,  155,
+    0,    0,  155,  155,  155,  155,  155,  155,  155,  155,
+    0,  155,  155,  155,  155,  155,    0,    0,  155,    0,
+  168,    0,    0,  168,    0,  155,  155,  155,    0,    0,
+    0,    0,    0,    0,  155,  155,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  525,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  525,    0,
+  525,    0,    0,  525,  525,  525,  525,  525,  525,  525,
+    0,    0,  525,  525,  525,    0,    0,    0,    0,  525,
+  525,    0,    0,    0,  525,  525,    0,    0,    0,    0,
+    0,    0,    0,    0,  525,    0,    0,    0,  525,  525,
+    0,    0,    0,  525,    0,    0,    0,    0,    0,  525,
+    0,  525,  525,    0,  525,    0,  525,  525,  525,  525,
+  525,    0,  525,  525,  525,  525,  525,  525,  525,  525,
+  525,  525,  525,  525,  525,  525,  525,  525,    0,    0,
+  525,  525,  525,    0,  525,  525,  525,    0,  525,  525,
+  525,    0,  523,  525,    0,  525,    0,    0,  525,  525,
+  525,  525,  523,    0,  525,  525,  525,    0,    0,    0,
+    0,    0,  525,    0,    0,  525,  525,  525,  525,  525,
+  525,  525,  525,    0,  525,  525,  525,  525,  525,    0,
+    0,  525,    0,  523,    0,  168,  523,    0,  525,  525,
+  525,    0,    0,    0,    0,    0,    0,  525,  525,    0,
+    0,    0,    0,    0,  168,    0,  168,    0,    0,  168,
+  168,  168,  168,  168,  168,  168,    0,    0,  168,  168,
+  168,    0,    0,    0,    0,  168,  168,    0,    0,    0,
+  168,  168,    0,    0,    0,    0,    0,    0,    0,    0,
+  168,    0,    0,    0,  168,  168,    0,    0,    0,  168,
+    0,    0,    0,    0,    0,  168,    0,  168,  168,    0,
+  168,    0,  168,  168,  168,  168,  168,    0,  168,  168,
+  168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
+  168,  168,  168,  168,    0,    0,  168,  168,  168,    0,
+  168,  168,  168,    0,  168,  168,  168,    0,  522,  168,
+    0,  168,    0,    0,  168,  168,  168,  168,  522,    0,
+  168,  168,  168,    0,    0,    0,    0,    0,  168,    0,
+    0,  168,  168,  168,  168,  168,  168,  168,  168,    0,
+  168,  168,  168,  168,  168,    0,    0,  168,    0,  522,
+    0,    0,  522,    0,  168,  168,  168,    0,    0,    0,
+    0,    0,    0,  168,  168,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  523,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  523,    0,  523,
+    0,    0,  523,  523,  523,  523,  523,  523,  523,    0,
+    0,  523,  523,  523,    0,    0,    0,    0,  523,  523,
+    0,    0,    0,  523,  523,    0,    0,    0,    0,    0,
+    0,    0,    0,  523,    0,    0,    0,  523,  523,    0,
+    0,    0,  523,    0,    0,    0,    0,    0,  523,    0,
+  523,  523,    0,  523,    0,  523,  523,  523,  523,  523,
+    0,  523,  523,  523,  523,  523,  523,  523,  523,  523,
+  523,  523,  523,  523,  523,  523,  523,    0,    0,  523,
+  523,  523,    0,  523,  523,  523,    0,  523,  523,  523,
+    0,  520,  523,    0,  523,    0,    0,  523,  523,  523,
+  523,  520,    0,  523,  523,  523,    0,    0,    0,    0,
+    0,  523,    0,    0,  523,  523,  523,  523,  523,  523,
+  523,  523,    0,  523,  523,  523,  523,  523,    0,    0,
+  523,    0,  520,    0,  522,  520,    0,  523,  523,  523,
+    0,    0,    0,    0,    0,    0,  523,  523,    0,    0,
+    0,    0,    0,  522,    0,  522,    0,    0,  522,  522,
+  522,  522,  522,  522,  522,    0,    0,  522,  522,  522,
+    0,    0,    0,    0,  522,  522,    0,    0,    0,  522,
+  522,    0,    0,    0,    0,    0,    0,    0,    0,  522,
+    0,    0,    0,  522,  522,    0,    0,    0,  522,    0,
+    0,    0,    0,    0,  522,    0,  522,  522,    0,  522,
+    0,  522,  522,  522,  522,  522,    0,  522,  522,  522,
+  522,  522,  522,  522,  522,  522,  522,  522,  522,  522,
+  522,  522,  522,    0,    0,  522,  522,  522,    0,  522,
+  522,  522,    0,  522,  522,  522,    0,  531,  522,    0,
+  522,    0,    0,  522,  522,  522,  522,  531,    0,  522,
+  522,  522,    0,    0,    0,    0,    0,  522,    0,    0,
+  522,  522,  522,  522,  522,  522,  522,  522,    0,  522,
+  522,  522,  522,  522,    0,    0,  522,    0,    0,    0,
+    0,  531,    0,  522,  522,  522,    0,    0,    0,    0,
+    0,    0,  522,  522,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  520,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  520,    0,  520,    0,
+    0,  520,  520,  520,  520,  520,  520,  520,    0,    0,
+  520,  520,  520,    0,    0,    0,    0,  520,  520,    0,
+    0,    0,  520,  520,    0,    0,    0,    0,    0,    0,
+    0,    0,  520,  535,    0,    0,  520,  520,    0,    0,
+    0,  520,    0,  535,    0,    0,    0,  520,    0,  520,
+  520,    0,  520,    0,  520,  520,  520,  520,  520,    0,
+  520,  520,  520,  520,  520,  520,  520,  520,  520,  520,
+  520,  520,  520,  520,  520,  520,    0,  535,  520,  520,
+  520,    0,  520,  520,  520,    0,  520,  520,  520,    0,
+    0,  520,    0,  520,    0,    0,  520,  520,  520,  520,
+    0,    0,  520,  520,  520,    0,    0,    0,    0,    0,
+  520,    0,    0,  520,  520,  520,  520,  520,  520,  520,
+  520,    0,  520,  520,  520,  520,  520,    0,    0,  520,
+    0,    0,    0,  531,    0,    0,  520,  520,  520,    0,
+    0,    0,    0,    0,    0,  520,  520,    0,    0,    0,
+    0,    0,  531,    0,  531,    0,    0,  531,  531,  531,
+  531,  531,  531,  531,    0,    0,  531,  531,  531,    0,
+    0,    0,    0,  531,  531,    0,    0,    0,  531,  531,
+    0,    0,    0,    0,    0,    0,    0,    0,  531,  533,
+    0,    0,  531,  531,    0,    0,    0,  531,    0,  533,
+    0,    0,    0,  531,    0,  531,  531,    0,  531,    0,
+  531,  531,  531,  531,  531,    0,  531,  531,  531,  531,
+  531,  531,  531,  531,  531,  531,  531,  531,  531,  531,
+  531,  531,    0,  533,  531,  531,  531,    0,  531,  531,
+  531,    0,  531,  531,  531,    0,    0,  531,    0,  531,
+    0,    0,  531,  531,  531,  531,    0,  531,  531,  531,
+  531,    0,    0,    0,    0,    0,  531,    0,    0,  531,
+  531,  531,  531,  531,  531,  531,  531,    0,  531,  531,
+  531,  531,  531,    0,    0,  531,    0,    0,    0,  535,
+    0,    0,  531,  531,  531,    0,    0,    0,    0,    0,
+    0,  531,  531,    0,    0,    0,    0,    0,  535,    0,
+  535,    0,    0,  535,  535,  535,  535,  535,  535,  535,
+    0,    0,  535,  535,  535,    0,    0,    0,    0,  535,
+  535,    0,    0,    0,  535,  535,    0,    0,    0,    0,
+    0,    0,    0,    0,  535,  198,    0,    0,  535,  535,
+    0,    0,    0,  535,    0,  198,    0,    0,    0,  535,
+    0,  535,  535,    0,  535,    0,  535,  535,  535,  535,
+  535,    0,  535,  535,  535,  535,  535,  535,  535,  535,
+  535,  535,  535,  535,  535,  535,  535,  535,    0,  198,
+  535,  535,  535,    0,  535,  535,  535,    0,  535,  535,
+  535,    0,    0,  535,    0,  535,  198,    0,  535,  535,
+  535,  535,    0,  535,  535,  535,  535,    0,    0,    0,
+    0,    0,  535,    0,    0,  535,  535,  535,  535,  535,
+  535,  535,  535,    0,  535,  535,  535,  535,  535,    0,
+    0,  535,    0,    0,    0,  533,    0,    0,  535,  535,
+  535,    0,    0,    0,    0,    0,    0,  535,  535,    0,
+    0,    0,    0,    0,  533,    0,  533,    0,    0,  533,
+  533,  533,  533,  533,  533,  533,    0,    0,  533,  533,
+  533,    0,    0,    0,    0,  533,  533,    0,    0,    0,
+  533,  533,    0,    0,    0,    0,  156,    0,    0,    0,
+  533,    0,    0,    0,  533,  533,  156,    0,    0,  533,
+    0,    0,    0,    0,    0,  533,    0,  533,  533,    0,
+  533,    0,  533,  533,  533,  533,  533,    0,  533,  533,
+  533,  533,  533,  533,  533,  533,  533,  533,  533,  533,
+  533,  533,  533,  533,    0,    0,  533,  533,  533,    0,
+  533,  533,  533,    0,  533,  533,  533,    0,    0,  533,
+    0,  533,    0,    0,  533,  533,  533,  533,    0,  533,
+  533,  533,  533,    0,    0,    0,    0,    0,  533,    0,
+    0,  533,  533,  533,  533,  533,  533,  533,  533,    0,
+  533,  533,  533,  533,  533,    0,    0,  533,    0,    0,
+    0,  198,    0,    0,  533,  533,  533,    0,    0,    0,
+    0,    0,    0,  533,  533,    0,    0,    0,    0,    0,
+  198,    0,  198,    0,    0,  198,  198,  198,  198,  198,
+  198,  198,    0,    0,  198,  198,  198,    0,    0,    0,
+    0,  198,  198,    0,    0,    0,  198,  198,    0,    0,
+    0,    0,    0,    0,    0,    0,  198,    0,    0,    0,
+  198,  198,    0,    0,    0,  198,    0,    0,    0,    0,
+    0,  198,    0,  198,  198,    0,  198,    0,  198,  198,
+  198,  198,  198,    0,  198,  198,  198,  198,  198,  198,
+  198,  198,  198,  198,  198,  198,  198,  198,  198,  198,
+    0,    0,  198,  198,  198,    0,  198,  198,  198,    0,
+  198,  198,  198,    0,  358,  198,    0,  198,    0,    0,
+  198,  198,  198,  198,  358,    0,  198,  198,  198,    0,
+    0,    0,    0,    0,  198,    0,    0,  198,  198,  198,
+  198,  198,  198,  198,  198,    0,  198,  198,  198,  198,
+  198,    0,  156,  198,    0,    0,    0,    0,  358,    0,
+  198,  198,  198,    0,    0,    0,    0,  156,  156,  198,
+  198,  156,    0,  156,    0,  360,  156,  156,  156,  156,
+  156,  156,  156,    0,    0,  156,  156,  156,    0,    0,
+    0,    0,  156,  156,    0,    0,    0,  156,  156,    0,
+    0,    0,    0,    0,    0,    0,    0,  156,    0,    0,
+    0,  156,  156,    0,    0,    0,  156,    0,    0,    0,
+    0,    0,  156,    0,  156,  156,    0,  156,    0,  156,
+  156,  156,  156,  156,    0,  156,  156,  156,  156,  156,
+  156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
+  156,    0,    0,  156,  156,  156,    0,  156,  156,  156,
+    0,  156,  156,  156,    0,  521,  156,    0,  156,    0,
+    0,  156,  156,  156,  156,  521,    0,  156,  156,  156,
+    0,    0,    0,    0,    0,  156,    0,    0,  156,  156,
+  156,  156,  156,  156,  156,  156,    0,  156,  156,  156,
+  156,  156,    0,    0,  156,    0,  521,    0,    0,  521,
+    0,  156,  156,  156,    0,    0,    0,    0,    0,    0,
+  156,  156,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  358,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  358,
+    0,  358,    0,    0,  358,  358,  358,  358,  358,  358,
+  358,    0,    0,  358,  358,  358,    0,    0,    0,    0,
+  358,  358,    0,    0,    0,  358,  358,    0,   40,    0,
+    0,    0,    0,    0,    0,  358,    0,    0,   40,  358,
+  358,    0,    0,    0,  358,    0,    0,    0,    0,    0,
+  358,    0,  358,  358,    0,  358,    0,  358,  358,  358,
+  358,  358,    0,  358,  358,  358,  358,  358,  358,  358,
+  358,  358,  358,  358,  358,  358,  358,  358,  358,    0,
+    0,  358,  358,  358,    0,  358,  358,  358,    0,  358,
+  358,  358,    0,    0,  358,    0,  358,    0,    0,  358,
+  358,  358,  358,    0,    0,  358,  358,  358,    0,    0,
+    0,    0,    0,  358,    0,    0,  358,  358,  358,  358,
+  358,  358,  358,  358,    0,  358,  358,  358,  358,  358,
+    0,  521,  358,    0,    0,    0,    0,    0,    0,  358,
+  358,  358,    0,    0,    0,    0,    0,    0,  358,  358,
+  521,    0,  521,    0,    0,  521,  521,  521,  521,  521,
+  521,  521,    0,    0,  521,  521,  521,    0,    0,    0,
+    0,  521,  521,    0,    0,    0,  521,  521,    0,  530,
+    0,    0,    0,    0,    0,    0,  521,    0,    0,  530,
+  521,  521,    0,    0,    0,  521,    0,    0,    0,    0,
+    0,  521,    0,  521,  521,    0,  521,    0,  521,  521,
+  521,  521,  521,    0,  521,  521,  521,  521,  521,  521,
+  521,  521,  521,  521,  521,  521,  521,  521,  521,  521,
+    0,    0,  521,  521,  521,    0,  521,  521,  521,    0,
+  521,  521,  521,    0,    0,  521,    0,  521,    0,    0,
+  521,  521,  521,  521,    0,    0,  521,  521,  521,    0,
+    0,    0,    0,    0,  521,    0,    0,  521,  521,  521,
+  521,  521,  521,  521,  521,    0,  521,  521,  521,  521,
+  521,    0,    0,  521,   40,    0,    0,    0,    0,    0,
+  521,  521,  521,    0,    0,    0,    0,    0,    0,  521,
+  521,    0,    0,   40,    0,   40,   40,    0,   40,   40,
+   40,   40,   40,   40,   40,    0,    0,   40,   40,   40,
+    0,    0,    0,    0,   40,   40,    0,    0,    0,   40,
+   40,    0,  529,    0,    0,    0,    0,    0,    0,   40,
+    0,    0,  529,   40,   40,    0,    0,    0,   40,    0,
+    0,    0,    0,    0,   40,    0,   40,   40,    0,   40,
+    0,   40,   40,   40,   40,   40,    0,   40,   40,   40,
+   40,   40,   40,   40,   40,   40,   40,   40,   40,   40,
+   40,   40,   40,    0,    0,   40,   40,   40,    0,   40,
+   40,   40,    0,   40,   40,   40,    0,    0,   40,    0,
+   40,    0,    0,   40,   40,   40,   40,    0,    0,   40,
+   40,   40,    0,    0,    0,    0,    0,   40,    0,    0,
+   40,   40,   40,   40,   40,   40,   40,   40,    0,   40,
+   40,   40,   40,   40,    0,  530,   40,    0,    0,    0,
+    0,    0,    0,   40,   40,   40,    0,    0,    0,    0,
+    0,    0,   40,   40,  530,    0,  530,    0,    0,  530,
+  530,  530,  530,  530,  530,  530,    0,    0,  530,  530,
+  530,    0,    0,    0,    0,  530,  530,    0,    0,    0,
+  530,  530,    0,    0,    0,    0,    0,    0,    0,    0,
+  530,    0,    0,    0,  530,  530,    0,    0,    0,  530,
+    0,    0,    0,    0,    0,  530,    0,  530,  530,    0,
+  530,    0,  530,  530,  530,  530,  530,    0,  530,  530,
+  530,  530,  530,  530,  530,  530,  530,  530,  530,  530,
+  530,  530,  530,  530,    0,    0,  530,  530,  530,    0,
+  530,  530,  530,    0,  530,  530,  530,    0,  525,  530,
+    0,  530,    0,    0,  530,  530,  530,  530,  525,  530,
+  530,  530,  530,    0,    0,    0,    0,    0,  530,    0,
+    0,  530,  530,  530,  530,  530,  530,  530,  530,    0,
+  530,  530,  530,  530,  530,    0,    0,  530,  529,  525,
+    0,    0,  525,    0,  530,  530,  530,    0,    0,    0,
+    0,    0,    0,  530,  530,    0,    0,  529,    0,  529,
+    0,    0,  529,  529,  529,  529,  529,  529,  529,    0,
+    0,  529,  529,  529,    0,    0,    0,    0,  529,  529,
+    0,    0,    0,  529,  529,    0,    0,    0,    0,    0,
+    0,    0,    0,  529,    0,    0,    0,  529,  529,    0,
+    0,    0,  529,    0,    0,    0,    0,    0,  529,    0,
+  529,  529,    0,  529,    0,  529,  529,  529,  529,  529,
+    0,  529,  529,  529,  529,  529,  529,  529,  529,  529,
+  529,  529,  529,  529,  529,  529,  529,    0,    0,  529,
+  529,  529,    0,  529,  529,  529,    0,  529,  529,  529,
+    0,  198,  529,    0,  529,    0,    0,  529,  529,  529,
+  529,  198,  529,  529,  529,  529,    0,    0,    0,    0,
+    0,  529,    0,    0,  529,  529,  529,  529,  529,  529,
+  529,  529,    0,  529,  529,  529,  529,  529,    0,    0,
+  529,    0,    0,    0,    0,  198,    0,  529,  529,  529,
+    0,    0,    0,    0,    0,    0,  529,  529,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,  525,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  525,    0,  525,    0,    0,  525,  525,
+  525,  525,  525,  525,  525,    0,    0,  525,  525,  525,
+    0,    0,    0,    0,  525,  525,    0,    0,    0,  525,
+  525,    0,    0,    0,    0,    0,    0,    0,    0,  525,
+    0,    0,    0,  525,  525,    0,    0,    0,  525,    0,
+    0,    0,    0,    0,  525,    0,  525,  525,    0,  525,
+    0,  525,  525,  525,  525,  525,    0,  525,  525,  525,
+  525,  525,  525,  525,  525,  525,  525,  525,  525,  525,
+  525,  525,  525,    0,    0,  525,  525,  525,    0,  525,
+  525,  525,    0,  525,  525,  525,    0,  200,  525,    0,
+  525,    0,    0,  525,  525,  525,  525,  200,    0,  525,
+  525,  525,    0,    0,    0,    0,    0,  525,    0,    0,
+  525,  525,  525,  525,  525,  525,  525,  525,    0,  525,
+  525,  525,  525,  525,    0,    0,  525,  198,    0,    0,
+    0,  200,    0,  525,  525,    0,    0,    0,    0,    0,
+    0,    0,  525,  525,    0,    0,  198,    0,  198,    0,
+    0,  198,  198,  198,  198,  198,  198,  198,    0,    0,
+  198,  198,  198,    0,    0,    0,    0,  198,  198,    0,
+    0,    0,  198,  198,    0,    0,    0,    0,    0,    0,
+    0,    0,  198,    0,    0,    0,  198,  198,    0,    0,
+    0,  198,    0,    0,    0,    0,    0,  198,    0,  198,
+  198,    0,  198,    0,  198,  198,  198,  198,  198,    0,
+  198,  198,  198,  198,  198,  198,  198,  198,  198,  198,
+  198,  198,  198,  198,  198,  198,    0,    0,  198,  198,
+  198,    0,  198,  198,  198,    0,  198,  198,  198,    0,
+  374,  198,    0,  198,    0,    0,  198,  198,  198,  198,
+  374,    0,  198,  198,  198,    0,    0,    0,    0,    0,
+  198,    0,    0,  198,  198,  198,  198,  198,  198,  198,
+  198,    0,  198,  198,  198,  198,  198,    0,    0,  198,
+    0,    0,    0,    0,  374,    0,  198,  198,  198,    0,
+    0,    0,    0,    0,    0,  198,  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,  200,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  200,    0,  200,    0,    0,  200,  200,  200,
+  200,  200,  200,  200,    0,    0,  200,  200,  200,    0,
+    0,    0,    0,  200,  200,    0,    0,    0,  200,  200,
+    0,    0,    0,    0,    0,    0,    0,    0,  200,    0,
+    0,    0,  200,  200,    0,    0,    0,  200,    0,    0,
+    0,    0,    0,  200,    0,  200,  200,    0,  200,    0,
+  200,  200,  200,  200,  200,    0,  200,  200,  200,  200,
+  200,  200,  200,  200,  200,  200,  200,  200,  200,  200,
+  200,  200,    0,    0,  200,  200,  200,    0,  200,  200,
+  200,    0,  200,  200,  200,    0,  359,  200,    0,  200,
+    0,    0,  200,  200,  200,  200,  359,    0,  200,  200,
+  200,    0,    0,    0,    0,    0,  200,    0,    0,  200,
+  200,  200,  200,  200,  200,  200,  200,    0,  200,  200,
+  200,  200,  200,    0,    0,  200,  374,    0,    0,    0,
+  359,    0,  200,  200,  200,    0,    0,    0,    0,    0,
+    0,  200,  200,    0,    0,  374,    0,  374,    0,    0,
+  374,  374,  374,  374,  374,  374,  374,    0,    0,  374,
+  374,  374,    0,    0,    0,    0,  374,  374,    0,    0,
+    0,  374,  374,    0,    0,    0,    0,    0,    0,    0,
+    0,  374,    0,    0,    0,  374,  374,    0,    0,    0,
+  374,    0,    0,    0,    0,    0,  374,    0,  374,  374,
+    0,  374,    0,  374,  374,  374,  374,  374,    0,  374,
+  374,  374,  374,  374,  374,  374,  374,  374,  374,  374,
+  374,  374,  374,  374,  374,    0,    0,  374,  374,  374,
+    0,  374,  374,  374,    0,  374,  374,  374,    0,   59,
+  374,    0,  374,    0,    0,  374,  374,  374,  374,   59,
+    0,  374,  374,  374,    0,    0,    0,    0,    0,  374,
+    0,    0,  374,  374,  374,  374,  374,  374,  374,  374,
+    0,  374,  374,  374,  374,  374,    0,    0,  374,    0,
+    0,    0,    0,    0,    0,  374,  374,  374,    0,    0,
+    0,    0,    0,    0,  374,  374,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  359,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  359,    0,  359,    0,    0,  359,  359,  359,  359,
+  359,  359,  359,    0,    0,  359,  359,  359,    0,    0,
+    0,    0,  359,  359,    0,    0,    0,  359,  359,    0,
+    0,    0,    0,    0,    0,    0,    0,  359,    0,    0,
+    0,  359,  359,    0,    0,    0,  359,    0,    0,    0,
+    0,    0,  359,    0,  359,  359,    0,  359,    0,  359,
+  359,  359,  359,  359,    0,  359,  359,  359,  359,  359,
+  359,  359,  359,  359,  359,  359,  359,  359,  359,  359,
+  359,    0,    0,  359,  359,  359,    0,  359,  359,  359,
+    0,  359,  359,  359,    0,  125,  359,    0,  359,    0,
+    0,  359,  359,  359,  359,  125,    0,  359,  359,  359,
+    0,    0,    0,    0,    0,  359,    0,    0,  359,  359,
+  359,  359,  359,  359,  359,  359,    0,  359,  359,  359,
+  359,  359,    0,    0,  359,   59,    0,    0,    0,  125,
+    0,  359,  359,  359,    0,    0,    0,    0,    0,    0,
+  359,  359,    0,    0,   59,    0,   59,    0,    0,   59,
+   59,   59,   59,   59,   59,   59,    0,    0,   59,   59,
+   59,    0,    0,    0,    0,   59,   59,    0,    0,    0,
+   59,   59,    0,    0,    0,    0,    0,    0,    0,    0,
+   59,    0,    0,    0,   59,   59,    0,    0,    0,   59,
+    0,    0,    0,    0,    0,   59,    0,   59,   59,    0,
+   59,    0,   59,   59,   59,   59,   59,    0,   59,   59,
+   59,   59,   59,   59,   59,   59,   59,   59,   59,   59,
+   59,   59,   59,   59,    0,    0,   59,   59,   59,    0,
+   59,   59,   59,    0,   59,   59,   59,    0,  432,   59,
+    0,   59,    0,    0,   59,   59,   59,   59,  432,    0,
+   59,   59,   59,    0,    0,    0,    0,    0,   59,    0,
+    0,   59,   59,   59,   59,   59,   59,   59,   59,    0,
+   59,   59,   59,   59,   59,    0,    0,   59,    0,    0,
+    0,    0,    0,    0,   59,   59,   59,    0,    0,    0,
+    0,    0,    0,   59,   59,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  125,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  125,    0,  125,    0,    0,  125,  125,  125,  125,  125,
+  125,  125,    0,    0,  125,  125,  125,    0,    0,    0,
+    0,  125,  125,    0,    0,    0,  125,  125,    0,  441,
+    0,    0,    0,    0,    0,    0,  125,    0,    0,  441,
+  125,  125,    0,    0,    0,  125,    0,    0,    0,    0,
+    0,  125,    0,  125,  125,    0,  125,    0,  125,  125,
+  125,  125,  125,    0,  125,  125,  125,  125,  125,  125,
+  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,
+    0,    0,  125,  125,  125,    0,  125,  125,  125,    0,
+  125,  125,  125,    0,    0,  125,    0,  125,    0,    0,
+  125,  125,  125,  125,    0,    0,  125,  125,  125,    0,
+    0,    0,    0,    0,  125,    0,    0,  125,  125,  125,
+  125,  125,  125,  125,  125,    0,  125,  125,  125,  125,
+  125,    0,    0,  125,  432,    0,    0,    0,    0,    0,
+  125,  125,    0,    0,    0,    0,    0,    0,    0,  125,
+  125,    0,    0,  432,    0,  432,    0,    0,  432,  432,
+  432,  432,  432,  432,  432,    0,    0,  432,  432,  432,
+    0,    0,    0,    0,  432,  432,    0,    0,    0,  432,
+  432,    0,  357,    0,    0,    0,    0,    0,    0,  432,
+    0,    0,  357,  432,  432,    0,    0,    0,  432,    0,
+    0,    0,    0,    0,  432,    0,  432,  432,    0,  432,
+    0,  432,  432,  432,  432,  432,    0,  432,  432,  432,
+  432,  432,  432,  432,  432,  432,  432,  432,  432,  432,
+  432,  432,  432,    0,    0,  432,  432,  432,    0,  432,
+  432,  432,    0,  432,  432,  432,    0,    0,  432,    0,
+  432,    0,    0,  432,  432,  432,  432,    0,    0,  432,
+  432,  432,    0,    0,    0,    0,    0,  432,    0,    0,
+  432,  432,  432,  432,  432,  432,  432,  432,    0,  432,
+  432,  432,  432,  432,    0,  441,  432,    0,    0,    0,
+    0,    0,    0,  432,  432,  432,    0,    0,    0,    0,
+    0,    0,  432,  432,  441,    0,  441,    0,    0,  441,
+  441,  441,  441,  441,  441,  441,    0,    0,  441,  441,
+  441,    0,    0,    0,    0,  441,  441,    0,    0,    0,
+  441,  441,    0,   69,    0,    0,    0,    0,    0,    0,
+  441,    0,    0,   69,  441,  441,    0,    0,    0,  441,
+    0,    0,    0,    0,    0,  441,    0,  441,  441,    0,
+  441,    0,  441,  441,  441,  441,  441,    0,  441,  441,
+  441,  441,  441,  441,  441,  441,  441,  441,  441,  441,
+  441,  441,  441,  441,    0,    0,  441,  441,  441,    0,
+  441,  441,  441,    0,  441,  441,  441,    0,    0,  441,
+    0,  441,    0,    0,  441,  441,  441,  441,    0,    0,
+  441,  441,  441,    0,    0,    0,    0,    0,  441,    0,
+    0,  441,  441,  441,  441,  441,  441,  441,  441,    0,
+  441,  441,  441,  441,  441,    0,    0,  441,  357,    0,
+    0,    0,    0,    0,  441,  441,  441,    0,    0,    0,
+    0,    0,    0,  441,  441,    0,    0,  357,    0,  357,
+    0,    0,  357,  357,  357,  357,  357,  357,  357,    0,
+    0,  357,  357,  357,    0,    0,    0,    0,  357,  357,
+    0,    0,    0,  357,  357,    0,   53,    0,    0,    0,
+    0,    0,    0,  357,    0,    0,   53,  357,  357,    0,
+    0,    0,  357,    0,    0,    0,    0,    0,  357,    0,
+  357,  357,    0,  357,    0,  357,  357,  357,  357,  357,
+    0,  357,  357,  357,  357,  357,  357,  357,  357,  357,
+  357,  357,  357,  357,  357,  357,  357,    0,    0,  357,
+  357,  357,    0,  357,  357,  357,    0,  357,  357,  357,
+    0,    0,  357,    0,  357,    0,    0,  357,  357,  357,
+  357,    0,    0,  357,  357,  357,    0,    0,    0,    0,
+    0,  357,    0,    0,  357,  357,  357,  357,  357,  357,
+  357,  357,    0,  357,  357,  357,  357,  357,    0,   69,
+  357,    0,    0,    0,    0,    0,    0,  357,  357,  357,
+    0,    0,    0,    0,    0,    0,  357,  357,   69,    0,
+   69,    0,    0,   69,   69,   69,   69,   69,   69,   69,
+    0,    0,   69,   69,   69,    0,    0,    0,    0,   69,
+   69,    0,    0,    0,   69,   69,    0,  169,    0,    0,
+    0,    0,    0,    0,   69,    0,    0,  169,   69,   69,
+    0,    0,    0,   69,    0,    0,    0,    0,    0,   69,
+    0,   69,   69,    0,   69,    0,   69,   69,   69,   69,
+   69,    0,   69,   69,   69,   69,   69,   69,   69,   69,
+   69,   69,   69,   69,   69,   69,   69,   69,    0,    0,
+   69,   69,   69,    0,   69,   69,   69,    0,   69,   69,
+   69,    0,    0,   69,    0,   69,    0,    0,   69,   69,
+   69,   69,    0,    0,   69,   69,   69,    0,    0,    0,
+    0,    0,   69,    0,    0,   69,   69,   69,   69,   69,
+   69,   69,   69,    0,   69,   69,   69,   69,   69,    0,
+    0,   69,   53,    0,    0,    0,    0,    0,   69,   69,
+   69,    0,    0,    0,    0,    0,    0,   69,   69,    0,
+    0,   53,    0,   53,    0,    0,   53,   53,   53,   53,
+   53,   53,   53,    0,    0,   53,   53,   53,    0,    0,
+    0,    0,   53,   53,    0,    0,    0,   53,   53,    0,
+  177,    0,    0,    0,    0,    0,    0,   53,    0,    0,
+  177,   53,   53,    0,    0,    0,   53,    0,    0,    0,
+    0,    0,   53,    0,   53,   53,    0,   53,    0,   53,
+   53,   53,   53,   53,    0,   53,   53,   53,   53,   53,
+   53,   53,   53,   53,   53,   53,   53,   53,   53,   53,
+   53,    0,    0,   53,   53,   53,    0,   53,   53,   53,
+    0,   53,   53,   53,    0,    0,   53,    0,   53,    0,
+    0,   53,   53,   53,   53,    0,    0,   53,   53,   53,
+    0,    0,    0,    0,    0,   53,    0,    0,   53,   53,
+   53,   53,   53,   53,   53,   53,    0,   53,   53,   53,
+   53,   53,    0,  169,   53,    0,    0,    0,    0,    0,
+    0,   53,   53,   53,    0,    0,    0,    0,    0,    0,
+   53,   53,  169,    0,  169,    0,    0,  169,  169,  169,
+  169,  169,  169,  169,    0,    0,  169,  169,  169,    0,
+    0,    0,    0,  169,  169,    0,    0,    0,  169,  169,
+    0,   55,    0,    0,    0,    0,    0,    0,  169,    0,
+    0,   55,  169,  169,    0,    0,    0,  169,    0,    0,
+    0,    0,    0,  169,    0,  169,  169,    0,  169,    0,
+  169,  169,  169,  169,  169,    0,  169,  169,  169,  169,
+  169,  169,  169,  169,  169,  169,  169,  169,  169,  169,
+  169,  169,    0,    0,  169,  169,  169,    0,  169,  169,
+  169,    0,  169,  169,  169,    0,    0,  169,    0,  169,
+    0,    0,  169,  169,  169,  169,    0,    0,  169,  169,
+  169,    0,    0,    0,    0,    0,  169,    0,    0,  169,
+  169,  169,  169,  169,  169,  169,  169,    0,  169,  169,
+  169,  169,  169,    0,    0,  169,  177,    0,    0,    0,
+    0,    0,  169,  169,  169,    0,    0,    0,    0,    0,
+    0,  169,  169,    0,    0,  177,    0,  177,    0,    0,
+  177,  177,  177,  177,  177,  177,  177,    0,    0,  177,
+  177,  177,    0,    0,    0,    0,  177,  177,    0,    0,
+    0,  177,  177,    0,  362,    0,    0,    0,    0,    0,
+    0,  177,    0,    0,  362,  177,  177,    0,    0,    0,
+  177,    0,    0,    0,    0,    0,  177,    0,  177,  177,
+    0,  177,    0,  177,  177,  177,  177,  177,    0,  177,
+  177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+  177,  177,  177,  177,  177,    0,    0,  177,  177,  177,
+    0,  177,  177,  177,    0,  177,  177,  177,    0,    0,
+  177,    0,  177,    0,    0,  177,  177,  177,  177,    0,
+    0,  177,  177,  177,    0,    0,    0,    0,    0,  177,
+    0,    0,  177,  177,  177,  177,  177,  177,  177,  177,
+    0,  177,  177,  177,  177,  177,    0,   55,  177,    0,
+    0,    0,    0,    0,    0,  177,  177,  177,    0,    0,
+    0,    0,    0,    0,  177,  177,   55,    0,   55,    0,
+    0,   55,   55,   55,   55,   55,   55,   55,    0,    0,
+   55,   55,   55,    0,    0,    0,    0,   55,   55,    0,
+    0,    0,   55,   55,    0,  164,    0,    0,    0,    0,
+    0,    0,   55,    0,    0,  164,   55,   55,    0,    0,
+    0,   55,    0,    0,    0,    0,    0,   55,    0,   55,
+   55,    0,   55,    0,   55,   55,   55,   55,   55,    0,
+   55,   55,   55,   55,   55,   55,   55,   55,   55,   55,
+   55,   55,   55,   55,   55,   55,    0,    0,   55,   55,
+   55,    0,   55,   55,   55,    0,   55,   55,   55,    0,
+    0,   55,    0,   55,    0,    0,   55,   55,   55,   55,
+    0,    0,   55,   55,   55,    0,    0,    0,    0,    0,
+   55,    0,    0,   55,   55,   55,   55,   55,   55,   55,
+   55,    0,   55,   55,   55,   55,   55,    0,    0,   55,
+  362,    0,    0,    0,    0,    0,   55,   55,   55,    0,
+    0,    0,    0,    0,    0,   55,   55,    0,    0,  362,
+    0,  362,    0,    0,  362,  362,  362,  362,  362,  362,
+  362,    0,    0,  362,  362,  362,    0,    0,    0,    0,
+  362,  362,    0,    0,    0,  362,  362,    0,  406,    0,
+    0,    0,    0,    0,    0,  362,    0,    0,  406,  362,
+  362,    0,    0,    0,  362,    0,    0,    0,    0,    0,
+  362,    0,  362,  362,    0,  362,    0,  362,  362,  362,
+  362,  362,    0,  362,  362,  362,  362,  362,  362,  362,
+  362,  362,  362,  362,  362,  362,  362,  362,  362,    0,
+    0,  362,  362,  362,    0,  362,  362,  362,    0,  362,
+  362,  362,    0,    0,  362,    0,  362,    0,    0,  362,
+  362,  362,  362,    0,    0,  362,  362,  362,    0,    0,
+    0,    0,    0,  362,    0,    0,  362,  362,  362,  362,
+  362,  362,  362,  362,    0,  362,  362,  362,  362,  362,
+    0,  164,  362,    0,    0,    0,    0,    0,    0,  362,
+  362,  362,    0,    0,    0,    0,    0,    0,  362,  362,
+  164,    0,  164,    0,    0,  164,  164,  164,  164,  164,
+  164,  164,    0,    0,  164,  164,  164,    0,    0,    0,
+    0,  164,  164,    0,    0,    0,  164,  164,    0,  472,
+    0,    0,    0,    0,    0,    0,  164,    0,    0,  472,
+  164,  164,    0,    0,    0,  164,    0,    0,    0,    0,
+    0,  164,    0,  164,  164,    0,  164,    0,  164,  164,
+  164,  164,  164,    0,  164,  164,  164,  164,  164,  164,
+  164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
+    0,    0,  164,  164,  164,    0,  164,  164,  164,    0,
+  164,  164,  164,    0,    0,  164,    0,  164,    0,    0,
+  164,  164,  164,  164,    0,    0,  164,  164,  164,    0,
+    0,    0,    0,    0,  164,    0,    0,  164,  164,  164,
+  164,  164,  164,  164,  164,    0,  164,  164,  164,  164,
+  164,    0,    0,  164,  406,    0,    0,    0,    0,    0,
+  164,  164,  164,    0,    0,    0,    0,    0,    0,  164,
+  164,    0,    0,  406,    0,  406,    0,    0,  406,  406,
+  406,  406,  406,  406,  406,    0,    0,  406,  406,  406,
+    0,    0,    0,    0,  406,  406,    0,    0,    0,  406,
+  406,    0,   34,    0,    0,    0,    0,    0,    0,  406,
+    0,    0,   34,  406,  406,    0,    0,    0,  406,    0,
+    0,    0,    0,    0,  406,    0,  406,  406,    0,  406,
+    0,  406,  406,  406,  406,  406,    0,  406,  406,  406,
+  406,  406,  406,  406,  406,  406,  406,  406,  406,  406,
+  406,  406,  406,    0,    0,  406,  406,  406,    0,  406,
+  406,  406,    0,  406,  406,  406,    0,    0,  406,    0,
+  406,    0,    0,  406,  406,  406,  406,    0,    0,  406,
+  406,  406,    0,    0,    0,    0,    0,  406,    0,    0,
+  406,  406,  406,  406,  406,  406,  406,  406,    0,  406,
+  406,  406,  406,  406,    0,  472,  406,    0,    0,    0,
+    0,    0,    0,  406,  406,  406,    0,    0,    0,    0,
+    0,    0,  406,  406,  472,    0,  472,    0,    0,  472,
+  472,  472,  472,  472,  472,  472,    0,    0,  472,  472,
+  472,    0,    0,    0,    0,  472,  472,    0,    0,    0,
+  472,  472,    0,  151,    0,    0,    0,    0,    0,    0,
+  472,    0,    0,  151,  472,  472,    0,    0,    0,  472,
+    0,    0,    0,    0,    0,  472,    0,  472,  472,    0,
+  472,    0,  472,  472,  472,  472,  472,    0,  472,  472,
+  472,  472,  472,  472,  472,  472,  472,  472,  472,  472,
+  472,  472,  472,  472,    0,    0,  472,  472,  472,    0,
+  472,  472,  472,    0,  472,  472,  472,    0,    0,  472,
+    0,  472,    0,    0,  472,  472,  472,  472,    0,    0,
+  472,  472,  472,    0,    0,    0,    0,    0,  472,    0,
+    0,  472,  472,  472,  472,  472,  472,  472,  472,    0,
+  472,  472,  472,  472,  472,    0,    0,  472,   34,    0,
+    0,    0,    0,    0,  472,  472,  472,    0,    0,    0,
+    0,    0,    0,  472,  472,    0,    0,   34,    0,   34,
+    0,    0,   34,   34,   34,   34,   34,   34,   34,    0,
+    0,   34,   34,   34,    0,    0,    0,    0,   34,   34,
+    0,    0,    0,   34,   34,    0,  149,    0,    0,    0,
+    0,    0,    0,   34,    0,    0,  149,   34,   34,    0,
+    0,    0,   34,    0,    0,    0,    0,    0,   34,    0,
+   34,   34,    0,   34,    0,   34,   34,   34,   34,   34,
+    0,   34,   34,   34,   34,   34,   34,   34,   34,   34,
+   34,   34,   34,   34,   34,   34,   34,    0,    0,   34,
+   34,   34,    0,   34,   34,   34,    0,   34,   34,   34,
+    0,    0,   34,    0,   34,    0,    0,   34,   34,   34,
+   34,    0,    0,   34,   34,   34,    0,    0,    0,    0,
+    0,   34,    0,    0,   34,   34,   34,   34,   34,   34,
+   34,   34,    0,   34,   34,   34,   34,   34,    0,  151,
+   34,    0,    0,    0,    0,    0,    0,   34,   34,   34,
+    0,    0,    0,    0,    0,    0,   34,   34,  151,    0,
+  151,    0,    0,  151,  151,  151,  151,  151,  151,  151,
+    0,    0,  151,  151,  151,    0,    0,    0,    0,  151,
+  151,    0,    0,    0,  151,  151,    0,   67,    0,    0,
+    0,    0,    0,    0,  151,    0,    0,   67,  151,  151,
+    0,    0,    0,  151,    0,    0,    0,    0,    0,  151,
+    0,  151,  151,    0,  151,    0,  151,  151,  151,  151,
+  151,    0,  151,  151,  151,  151,  151,  151,  151,  151,
+  151,  151,  151,  151,  151,  151,  151,  151,    0,    0,
+  151,  151,  151,    0,  151,  151,  151,    0,  151,  151,
+  151,    0,    0,  151,    0,  151,    0,    0,  151,  151,
+  151,  151,    0,    0,  151,  151,  151,    0,    0,    0,
+    0,    0,  151,    0,    0,  151,  151,  151,  151,  151,
+  151,  151,  151,    0,  151,  151,  151,  151,  151,    0,
+    0,  151,  149,    0,    0,    0,    0,    0,  151,  151,
+  151,    0,    0,    0,    0,    0,    0,  151,  151,    0,
+    0,  149,    0,  149,    0,    0,  149,  149,  149,  149,
+  149,  149,  149,    0,    0,  149,  149,  149,    0,    0,
+    0,    0,  149,  149,    0,    0,    0,  149,  149,    0,
+   68,    0,    0,    0,    0,    0,    0,  149,    0,    0,
+   68,  149,  149,    0,    0,    0,  149,    0,    0,    0,
+    0,    0,  149,    0,  149,  149,    0,  149,    0,  149,
+  149,  149,  149,  149,    0,  149,  149,  149,  149,  149,
+  149,  149,  149,  149,  149,  149,  149,  149,  149,  149,
+  149,    0,    0,  149,  149,  149,    0,  149,  149,  149,
+    0,  149,  149,  149,    0,    0,  149,    0,  149,    0,
+    0,  149,  149,  149,  149,    0,    0,  149,  149,  149,
+    0,    0,    0,    0,    0,  149,    0,    0,  149,  149,
+  149,  149,  149,  149,  149,  149,    0,  149,  149,  149,
+  149,  149,    0,   67,  149,    0,    0,    0,    0,    0,
+    0,  149,  149,  149,    0,    0,    0,    0,    0,    0,
+  149,  149,   67,    0,   67,    0,    0,   67,   67,   67,
+   67,   67,   67,   67,    0,    0,   67,   67,   67,    0,
+    0,    0,    0,   67,   67,    0,    0,    0,   67,   67,
+    0,   40,    0,    0,    0,    0,    0,    0,   67,    0,
+    0,   40,   67,   67,    0,    0,    0,   67,    0,    0,
+    0,    0,    0,   67,    0,   67,   67,    0,   67,    0,
+   67,   67,   67,   67,   67,    0,   67,   67,   67,   67,
+   67,   67,   67,   67,   67,   67,   67,   67,   67,   67,
+   67,   67,    0,    0,   67,   67,   67,    0,   67,   67,
+   67,    0,   67,   67,   67,    0,    0,   67,    0,   67,
+    0,    0,   67,   67,   67,   67,    0,    0,   67,   67,
+   67,    0,    0,    0,    0,    0,   67,    0,    0,   67,
+   67,   67,   67,   67,   67,   67,   67,    0,   67,   67,
+   67,   67,   67,    0,    0,   67,   68,    0,    0,    0,
+    0,    0,   67,   67,   67,    0,    0,    0,    0,    0,
+    0,   67,   67,    0,    0,   68,    0,   68,    0,    0,
+   68,   68,   68,   68,   68,   68,   68,    0,    0,   68,
+   68,   68,    0,    0,    0,    0,   68,   68,    0,    0,
+    0,   68,   68,    0,  438,    0,    0,    0,    0,    0,
+    0,   68,    0,    0,  438,   68,   68,    0,    0,    0,
+   68,    0,    0,    0,    0,    0,   68,    0,   68,   68,
+    0,   68,    0,   68,   68,   68,   68,   68,    0,   68,
+   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,
+   68,   68,   68,   68,   68,    0,    0,   68,   68,   68,
+    0,   68,   68,   68,    0,   68,   68,   68,    0,    0,
+   68,    0,   68,    0,    0,   68,   68,   68,   68,    0,
+    0,   68,   68,   68,    0,    0,    0,    0,    0,   68,
+    0,    0,   68,   68,   68,   68,   68,   68,   68,   68,
+    0,   68,   68,   68,   68,   68,    0,   40,   68,    0,
+    0,    0,    0,    0,    0,   68,   68,   68,    0,    0,
+    0,    0,    0,    0,   68,   68,   40,    0,   40,    0,
+    0,   40,   40,   40,   40,   40,   40,   40,    0,    0,
+   40,   40,   40,    0,    0,    0,    0,   40,   40,    0,
+    0,    0,   40,   40,    0,  439,    0,    0,    0,    0,
+    0,    0,   40,    0,    0,  439,   40,   40,    0,    0,
+    0,   40,    0,    0,    0,    0,    0,   40,    0,   40,
+   40,    0,   40,    0,   40,   40,   40,   40,   40,    0,
+   40,   40,   40,   40,   40,   40,   40,   40,   40,   40,
+   40,   40,   40,   40,   40,   40,    0,    0,   40,   40,
+   40,    0,   40,   40,   40,    0,   40,   40,   40,    0,
+    0,   40,    0,   40,    0,    0,   40,   40,   40,   40,
+    0,    0,   40,   40,   40,    0,    0,    0,    0,    0,
+   40,    0,    0,   40,   40,   40,   40,   40,   40,   40,
+   40,    0,   40,   40,   40,   40,   40,    0,    0,   40,
+  438,    0,    0,    0,    0,    0,   40,   40,   40,    0,
+    0,    0,    0,    0,    0,   40,   40,    0,    0,  438,
+    0,  438,    0,    0,  438,  438,  438,  438,  438,  438,
+  438,    0,    0,  438,  438,  438,    0,    0,    0,    0,
+  438,  438,    0,    0,    0,  438,  438,    0,  467,    0,
+    0,    0,    0,    0,    0,  438,    0,    0,  467,  438,
+  438,    0,    0,    0,  438,    0,    0,    0,    0,    0,
+  438,    0,  438,  438,    0,  438,    0,  438,  438,  438,
+  438,  438,    0,  438,  438,  438,  438,  438,  438,  438,
+  438,  438,  438,  438,  438,  438,  438,  438,  438,    0,
+    0,  438,  438,  438,    0,  438,  438,  438,    0,  438,
+  438,  438,    0,    0,  438,    0,  438,    0,    0,  438,
+  438,  438,  438,    0,    0,  438,  438,  438,    0,    0,
+    0,    0,    0,  438,    0,    0,  438,  438,  438,  438,
+  438,  438,  438,  438,    0,  438,  438,  438,  438,  438,
+    0,  439,  438,    0,    0,    0,    0,    0,    0,  438,
+  438,  438,    0,    0,    0,    0,    0,    0,  438,  438,
+  439,    0,  439,    0,    0,  439,  439,  439,  439,  439,
+  439,  439,    0,    0,  439,  439,  439,    0,    0,    0,
+    0,  439,  439,    0,    0,    0,  439,  439,    0,   43,
+    0,    0,    0,    0,    0,    0,  439,    0,    0,   43,
+  439,  439,    0,    0,    0,  439,    0,    0,    0,    0,
+    0,  439,    0,  439,  439,    0,  439,    0,  439,  439,
+  439,  439,  439,    0,  439,  439,  439,  439,  439,  439,
+  439,  439,  439,  439,  439,  439,  439,  439,  439,  439,
+    0,    0,  439,  439,  439,    0,  439,  439,  439,    0,
+  439,  439,  439,    0,    0,  439,    0,  439,    0,    0,
+  439,  439,  439,  439,    0,    0,  439,  439,  439,    0,
+    0,    0,    0,    0,  439,    0,    0,  439,  439,  439,
+  439,  439,  439,  439,  439,    0,  439,  439,  439,  439,
+  439,    0,    0,  439,  467,    0,    0,    0,    0,    0,
+  439,  439,  439,    0,    0,    0,    0,    0,    0,  439,
+  439,    0,    0,  467,    0,  467,    0,    0,  467,  467,
+  467,  467,  467,  467,  467,    0,    0,  467,  467,  467,
+    0,    0,    0,    0,  467,  467,    0,    0,    0,  467,
+  467,    0,  363,    0,    0,    0,    0,    0,    0,  467,
+    0,    0,  363,  467,  467,    0,    0,    0,  467,    0,
+    0,    0,    0,    0,  467,    0,  467,  467,    0,  467,
+    0,  467,  467,  467,  467,  467,    0,  467,  467,  467,
+  467,  467,  467,  467,  467,  467,  467,  467,  467,  467,
+  467,  467,  467,    0,    0,  467,  467,  467,    0,  467,
+  467,  467,    0,  467,  467,  467,    0,    0,  467,    0,
+  467,    0,    0,  467,  467,  467,  467,    0,    0,  467,
+  467,  467,    0,    0,    0,    0,    0,  467,    0,    0,
+  467,  467,  467,  467,  467,  467,  467,  467,    0,  467,
+  467,  467,  467,  467,    0,   43,  467,    0,    0,    0,
+    0,    0,    0,  467,  467,  467,    0,    0,    0,    0,
+    0,    0,  467,  467,   43,    0,   43,    0,    0,   43,
+   43,   43,   43,   43,   43,   43,    0,    0,   43,   43,
+   43,    0,    0,    0,    0,   43,   43,    0,    0,    0,
+   43,   43,    0,  473,    0,    0,    0,    0,    0,    0,
+   43,    0,    0,  473,   43,   43,    0,    0,    0,   43,
+    0,    0,    0,    0,    0,   43,    0,   43,   43,    0,
+   43,    0,   43,   43,   43,   43,   43,    0,   43,   43,
+   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
+   43,   43,   43,   43,    0,    0,   43,   43,   43,    0,
+   43,   43,   43,    0,   43,   43,   43,    0,    0,   43,
+    0,   43,    0,    0,   43,   43,   43,   43,    0,    0,
+   43,   43,   43,    0,    0,    0,    0,    0,   43,    0,
+    0,   43,   43,   43,   43,   43,   43,   43,   43,    0,
+   43,   43,   43,   43,   43,    0,    0,   43,  363,    0,
+    0,    0,    0,    0,   43,   43,   43,    0,    0,    0,
+    0,    0,    0,   43,   43,    0,    0,  363,    0,  363,
+    0,    0,  363,  363,  363,  363,  363,  363,  363,    0,
+    0,  363,  363,  363,    0,    0,    0,    0,  363,  363,
+    0,    0,    0,  363,  363,    0,  365,    0,    0,    0,
+    0,    0,    0,  363,    0,    0,  365,  363,  363,    0,
+    0,    0,  363,    0,    0,    0,    0,    0,  363,    0,
+  363,  363,    0,  363,    0,  363,  363,  363,  363,  363,
+    0,  363,  363,  363,  363,  363,  363,  363,  363,  363,
+  363,  363,  363,  363,  363,  363,  363,    0,    0,  363,
+  363,  363,    0,  363,  363,  363,    0,  363,  363,  363,
+    0,    0,  363,    0,  363,    0,    0,  363,  363,  363,
+  363,    0,    0,  363,  363,  363,    0,    0,    0,    0,
+    0,  363,    0,    0,  363,  363,  363,  363,  363,  363,
+  363,  363,    0,  363,  363,  363,  363,  363,    0,  473,
+  363,    0,    0,    0,    0,    0,    0,  363,  363,  363,
+    0,    0,    0,    0,    0,    0,  363,  363,  473,    0,
+  473,    0,    0,  473,  473,  473,  473,  473,  473,  473,
+    0,    0,  473,  473,  473,    0,    0,    0,    0,  473,
+  473,    0,    0,    0,  473,  473,    0,  409,    0,    0,
+    0,    0,    0,    0,  473,    0,    0,  409,  473,  473,
+    0,    0,    0,  473,    0,    0,    0,    0,    0,  473,
+    0,  473,  473,    0,  473,    0,  473,  473,  473,  473,
+  473,    0,  473,  473,  473,  473,  473,  473,  473,  473,
+  473,  473,  473,  473,  473,  473,  473,  473,    0,    0,
+  473,  473,  473,    0,  473,  473,  473,    0,  473,  473,
+  473,    0,    0,  473,    0,  473,    0,    0,  473,  473,
+  473,  473,    0,    0,  473,  473,  473,    0,    0,    0,
+    0,    0,  473,    0,    0,  473,  473,  473,  473,  473,
+  473,  473,  473,    0,  473,  473,  473,  473,  473,    0,
+    0,  473,  365,    0,    0,    0,    0,    0,  473,  473,
+  473,    0,    0,    0,    0,    0,    0,  473,  473,    0,
+    0,  365,    0,  365,    0,    0,  365,  365,  365,  365,
+  365,  365,  365,    0,    0,  365,  365,  365,    0,    0,
+    0,    0,  365,  365,    0,    0,    0,  365,  365,    0,
+  549,    0,    0,    0,    0,    0,    0,  365,    0,    0,
+  549,  365,  365,    0,    0,    0,  365,    0,    0,    0,
+    0,    0,  365,    0,  365,  365,    0,  365,    0,  365,
+  365,  365,  365,  365,    0,  365,  365,  365,  365,  365,
+  365,  365,  365,  365,  365,  365,  365,  365,  365,  365,
+  365,    0,    0,  365,  365,  365,    0,  365,  365,  365,
+    0,  365,  365,  365,    0,    0,  365,    0,  365,    0,
+    0,  365,  365,  365,  365,    0,    0,  365,  365,  365,
+    0,    0,    0,    0,    0,  365,    0,    0,  365,  365,
+  365,  365,  365,  365,  365,  365,    0,  365,  365,  365,
+  365,  365,    0,  409,  365,    0,    0,    0,    0,    0,
+    0,  365,  365,  365,    0,    0,    0,    0,    0,    0,
+  365,  365,  409,    0,  409,    0,    0,  409,  409,  409,
+  409,  409,  409,  409,    0,    0,  409,  409,  409,    0,
+    0,    0,    0,  409,  409,    0,    0,    0,  409,  409,
+    0,  410,    0,    0,    0,    0,    0,    0,  409,    0,
+    0,  410,  409,  409,    0,    0,    0,  409,    0,    0,
+    0,    0,    0,  409,    0,  409,  409,    0,  409,    0,
+  409,  409,  409,  409,  409,    0,  409,  409,  409,  409,
+  409,  409,  409,  409,  409,  409,  409,  409,  409,  409,
+  409,  409,    0,    0,  409,  409,  409,    0,  409,  409,
+  409,    0,  409,  409,  409,    0,    0,  409,    0,  409,
+    0,    0,  409,  409,  409,  409,    0,    0,  409,  409,
+  409,    0,    0,    0,    0,    0,  409,    0,    0,  409,
+  409,  409,  409,  409,  409,  409,  409,    0,  409,  409,
+  409,  409,  409,    0,    0,  409,  549,    0,    0,    0,
+    0,    0,  409,  409,  409,    0,    0,    0,    0,    0,
+    0,  409,  409,    0,    0,  549,    0,  549,    0,    0,
+  549,  549,  549,  549,  549,  549,  549,    0,    0,  549,
+  549,  549,    0,    0,    0,    0,  549,  549,    0,    0,
+    0,  549,  549,    0,  415,    0,    0,    0,    0,    0,
+    0,  549,    0,    0,  415,  549,  549,    0,    0,    0,
+  549,    0,    0,    0,    0,    0,  549,    0,  549,  549,
+    0,  549,    0,  549,  549,  549,  549,  549,    0,  549,
+  549,  549,  549,  549,  549,  549,  549,  549,  549,  549,
+  549,  549,  549,  549,  549,    0,    0,  549,  549,  549,
+    0,  549,  549,  549,    0,  549,  549,  549,    0,    0,
+  549,    0,  549,    0,    0,  549,  549,  549,  549,    0,
+    0,  549,  549,  549,    0,    0,    0,    0,    0,  549,
+    0,    0,  549,  549,  549,  549,  549,  549,  549,  549,
+    0,  549,  549,  549,  549,  549,    0,  410,  549,    0,
+    0,    0,    0,    0,    0,  549,  549,  549,    0,    0,
+    0,    0,    0,    0,  549,  549,  410,    0,  410,    0,
+    0,  410,  410,  410,  410,  410,  410,  410,    0,    0,
+  410,  410,  410,    0,    0,    0,    0,  410,  410,    0,
+    0,    0,  410,  410,    4,    0,    0,    0,    0,    0,
+    0,    0,  410,    0,    4,    0,  410,  410,    0,    0,
+    0,  410,    0,    0,    0,    0,    0,  410,    0,  410,
+  410,    0,  410,    0,  410,  410,  410,  410,  410,    0,
+  410,  410,  410,  410,  410,  410,  410,  410,  410,  410,
+  410,  410,  410,  410,  410,  410,    0,    0,  410,  410,
+  410,    0,  410,  410,  410,    0,  410,  410,  410,    0,
+    0,  410,    0,  410,    0,    0,  410,  410,  410,  410,
+    0,    0,  410,  410,  410,    0,    0,    0,    0,    0,
+  410,    0,    0,  410,  410,  410,  410,  410,  410,  410,
+  410,    0,  410,  410,  410,  410,  410,    0,    0,  410,
+  415,    0,    0,    0,    0,    0,  410,  410,  410,    0,
+    0,    0,    0,    0,    0,  410,  410,    0,    0,  415,
+    0,  415,    0,    0,  415,  415,  415,  415,  415,  415,
+  415,    0,    0,  415,  415,  415,    0,    0,    0,    0,
+  415,  415,    0,    0,    0,  415,  415,  411,    0,    0,
+    0,    0,    0,    0,    0,  415,    0,  411,    0,  415,
+  415,    0,    0,    0,  415,    0,    0,    0,    0,    0,
+  415,    0,  415,  415,    0,  415,    0,  415,  415,  415,
+  415,  415,    0,  415,  415,  415,  415,  415,  415,  415,
+  415,  415,  415,  415,  415,  415,  415,  415,  415,    0,
+    0,  415,  415,  415,    0,  415,  415,  415,    0,  415,
+  415,  415,    0,    0,  415,    0,  415,    0,    0,  415,
+  415,  415,  415,    0,    0,  415,  415,  415,    0,    0,
+    0,    0,    0,  415,    0,    0,  415,  415,  415,  415,
+  415,  415,  415,  415,    0,  415,  415,  415,  415,  415,
+    4,    0,  415,    0,    0,    0,    0,    0,    0,  415,
+  415,    0,    0,    0,    0,    0,    0,    0,  415,  415,
+    0,    4,    0,    0,    4,    4,    4,    4,    4,    4,
+    4,    0,    0,    4,    4,    4,    0,    0,    0,    0,
+    4,    4,    0,    0,    0,    4,    4,    0,  408,    0,
+    0,    0,    0,    0,    0,    4,    0,    0,  408,    4,
+    4,    0,    0,    0,    4,    0,    0,    0,    0,    0,
+    4,    0,    4,    4,    0,    4,    0,    4,    4,    4,
+    4,    4,    0,    4,    4,    4,    4,    4,    4,    4,
+    4,    4,    4,    4,    4,    4,    4,    4,    4,    0,
+    0,    4,    4,    4,    0,    4,    4,    4,    0,    4,
+    4,    4,    0,    0,    4,    0,    4,    0,    0,    4,
+    4,    4,    4,    0,    0,    4,    4,    4,    0,    0,
+    0,    0,    0,    4,    0,    0,    4,    4,    4,    4,
+    4,    4,    4,    4,    0,    4,    4,    4,    4,    4,
+    0,    0,    4,  411,    0,    0,    0,    0,    0,    4,
+    4,    4,    0,    0,    0,    0,    0,    0,    4,    4,
+    0,    0,  411,    0,  411,    0,    0,  411,  411,  411,
+  411,  411,  411,  411,    0,    0,  411,  411,  411,    0,
+    0,    0,    0,  411,  411,    0,    0,    0,  411,  411,
+    0,  354,    0,    0,    0,    0,    0,    0,  411,    0,
+    0,  354,  411,  411,    0,    0,    0,  411,    0,    0,
+    0,    0,    0,  411,    0,  411,  411,    0,  411,    0,
+  411,  411,  411,  411,  411,    0,  411,  411,  411,  411,
+  411,  411,  411,  411,  411,  411,  411,  411,  411,  411,
+  411,  411,    0,    0,  411,  411,  411,    0,  411,  411,
+  411,    0,  411,  411,  411,    0,    0,  411,    0,  411,
+    0,    0,  411,  411,  411,  411,    0,    0,  411,  411,
+  411,    0,    0,    0,    0,    0,  411,    0,    0,  411,
+  411,  411,  411,  411,  411,  411,  411,    0,  411,  411,
+  411,  411,  411,    0,  408,  411,    0,    0,    0,    0,
+    0,    0,  411,  411,  411,    0,    0,    0,    0,    0,
+    0,    0,  411,  408,    0,  408,    0,    0,  408,  408,
+  408,  408,  408,  408,  408,    0,    0,  408,  408,  408,
+    0,    0,    0,    0,  408,  408,    0,    0,    0,  408,
+  408,    0,  455,    0,    0,    0,    0,    0,    0,  408,
+    0,    0,  455,  408,  408,    0,    0,    0,  408,    0,
+    0,    0,    0,    0,  408,    0,  408,  408,    0,  408,
+    0,  408,  408,  408,  408,  408,    0,  408,  408,  408,
+  408,  408,  408,  408,  408,  408,  408,  408,  408,  408,
+  408,  408,  408,    0,    0,  408,  408,  408,    0,  408,
+  408,  408,    0,  408,  408,  408,    0,    0,  408,    0,
+  408,    0,    0,  408,  408,  408,  408,    0,    0,  408,
+  408,  408,    0,    0,    0,    0,    0,  408,    0,    0,
+  408,  408,  408,  408,  408,  408,  408,  408,    0,  408,
+  408,  408,  408,  408,    0,    0,  408,  354,    0,    0,
+    0,    0,    0,  408,  408,    0,    0,    0,    0,    0,
+    0,    0,  408,  408,    0,    0,  354,    0,  354,    0,
+    0,  354,  354,  354,  354,  354,  354,  354,    0,    0,
+  354,  354,  354,    0,    0,    0,    0,  354,  354,    0,
+    0,    0,  354,  354,    0,   24,    0,    0,    0,    0,
+    0,    0,  354,    0,    0,   24,  354,  354,    0,    0,
+    0,  354,    0,    0,    0,    0,    0,  354,    0,  354,
+  354,    0,  354,    0,  354,  354,  354,  354,  354,    0,
+  354,  354,  354,  354,  354,  354,  354,  354,  354,  354,
+  354,  354,  354,  354,  354,  354,    0,    0,  354,  354,
+  354,    0,  354,  354,  354,    0,  354,  354,  354,    0,
+    0,  354,    0,  354,    0,    0,  354,  354,  354,  354,
+    0,    0,  354,  354,  354,    0,    0,    0,    0,    0,
+  354,    0,    0,  354,  354,  354,  354,    0,  354,  354,
+  354,    0,  354,  354,  354,  354,  354,    0,  455,  354,
+    0,    0,    0,    0,    0,    0,  354,  354,    0,    0,
+    0,    0,    0,    0,    0,    0,  354,  455,    0,  455,
+    0,    0,  455,  455,  455,  455,  455,  455,  455,    0,
+    0,  455,  455,  455,    0,    0,    0,    0,  455,  455,
+    0,    0,    0,  455,  455,    0,    0,    0,    0,    0,
+    0,    0,    0,  455,    0,    0,    0,  455,  455,    0,
+    0,    0,  455,    0,    0,    0,    0,    0,  455,    0,
+  455,  455,    0,  455,    0,  455,  455,  455,  455,  455,
+    0,  455,  455,  455,  455,  455,  455,  455,  455,  455,
+  455,  455,  455,  455,  455,  455,  455,    0,    0,  455,
+  455,  455,    0,  455,  455,  455,    0,  455,  455,  455,
+    0,    0,  455,    0,  455,    0,    0,  455,  455,  455,
+  455,    0,    0,  455,  455,  455,    0,  188,    0,  540,
+  150,  455,  151,    0,  455,  455,  455,  455,    0,  455,
+  455,  455,    0,  455,  455,  455,  455,  455,  545,    0,
+  455,   24,    0,    0,    0,    0,    0,  455,  455,    0,
+    0,    0,    0,    0,    0,    0,    0,  455,    0,    0,
+   24,    0,   24,    0,    0,   24,   24,   24,   24,   24,
+   24,   24,    0,    0,   24,   24,   24,    0,    0,    0,
+    0,   24,   24,    0,    0,    0,   24,   24,    0,  638,
+  417,  415,    0,  416,    0,    0,   24,    0,    0,    0,
+   24,   24,    0,    0,    0,   24,  901,    0,  420,  403,
+  421,   24,    0,   24,   24,    0,   24,    0,   24,   24,
+   24,   24,   24,    0,   24,   24,   24,   24,   24,   24,
+   24,   24,   24,   24,   24,   24,   24,   24,   24,   24,
+    0,    0,   24,   24,   24,    0,   24,   24,   24,    0,
+   24,   24,   24,    0,    0,   24,    0,   24,    0,    0,
+   24,   24,   24,   24,    0,    0,   24,   24,   24,    0,
+  188,    0,  540,  150,   24,  151,    0,   24,   24,   24,
+   24,   24,   24,   24,   24,    0,   24,   24,   24,   24,
+   24,  734,    0,   24,    0,    0,    0,    0,    0,    0,
+   24,   24,   24,    0,    0,    0,    0,    0,    0,   24,
+    0,    0,    0,    0,    0,    0,    0,    0,  188,    0,
+    0,  150,    0,  151,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  644,
+  149,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,  152,  153,    0,    0,    0,  154,
+  155,  156,  157,    0,    0,    0,    0,    0,    0,    0,
+    0,  158,  159,  160,  161,  162,  163,  164,    0,  165,
+  166,  167,    0,    0,  168,  169,  170,    0,  171,  172,
+  173,  174,  175,    0,  176,    0,  404,  405,  406,  407,
+  408,    0,  409,  410,  411,  412,  413,  414,    0,    0,
+  418,  419,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  177,  188,    0,    0,
+  150,    0,  151,    0,    0,    0,    0,  178,  179,    0,
+    0,    0,    0,  180,    0,    0,    0,    0,  666,    0,
+    0,    0,    0,  181,  182,    0,    0,  183,  184,  185,
+  186,    0,    0,  149,   89,    0,    0,    0,    0,    0,
+    0,  187,    0,    0,    0,  188,    0,    0,  150,    0,
+  151,    0,    0,    0,    0,    0,    0,  152,  153,    0,
+    0,    0,  154,  155,  156,  157,  668,    0,    0,    0,
+    0,    0,    0,    0,  158,  159,  160,  161,  162,  163,
+  164,  149,  165,  166,  167,    0,    0,  168,  169,  170,
+    0,  171,  172,  173,  174,  175,    0,  176,    0,    0,
+    0,    0,    0,    0,    0,  152,  153,    0,    0,    0,
+  154,  155,  156,  157,    0,    0,    0,    0,    0,    0,
+    0,    0,  158,  159,  160,  161,  162,  163,  164,    0,
+  165,  166,  167,    0,    0,  168,  169,  170,    0,  171,
+  172,  173,  174,  175,    0,  176,    0,    0,    0,  177,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  178,  179,    0,    0,    0,    0,  180,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  181,  182,    0,    0,
+  183,  184,  185,  186,    0,    0,  188,   89,  706,  150,
+    0,  151,    0,    0,  187,    0,    0,  177,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  178,  179,
+    0,    0,    0,    0,  180,    0,    0,    0,    0,    0,
+  149,    0,    0,    0,  181,  182,    0,    0,  183,  184,
+  185,  186,    0,    0,  188,   89,  540,  150,    0,  151,
+    0,    0,  187,    0,  152,  153,    0,    0,    0,  154,
+  155,  156,  157,    0,    0,    0,    0,    0,    0,    0,
+    0,  158,  159,  160,  161,  162,  163,  164,  149,  165,
+  166,  167,    0,    0,  168,  169,  170,    0,  171,  172,
+  173,  174,  175,    0,  176,    0,    0,    0,    0,    0,
+    0,    0,  152,  153,    0,    0,    0,  154,  155,  156,
+  157,    0,    0,    0,    0,    0,    0,    0,    0,  158,
+  159,  160,  161,  162,  163,  164,    0,  165,  166,  167,
+    0,    0,  168,  169,  170,    0,  171,  172,  173,  174,
+  175,    0,  176,    0,    0,    0,  177,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  178,  179,    0,
+    0,    0,    0,  180,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  181,  182,    0,    0,  183,  184,  185,
+  186,    0,  188,    0,   89,  150,    0,  151,    0,    0,
+    0,  187,    0,    0,  177,    0,    0,    0,    0,    0,
+  813,    0,    0,    0,    0,  178,  179,    0,    0,    0,
+    0,  180,    0,    0,    0,    0,    0,    0,    0,  149,
+    0,  181,  182,    0,    0,  183,  184,  185,  186,    0,
+    0,    0,   89,    0,    0,  188,    0,    0,  150,  187,
+  151,    0,    0,  152,  153,    0,    0,    0,  154,  155,
+  156,  157,    0,  898,    0,    0,    0,    0,    0,    0,
+  158,  159,  160,  161,  162,  163,  164,  149,  165,  166,
+  167,    0,    0,  168,  169,  170,    0,  171,  172,  173,
+  174,  175,    0,  176,    0,    0,    0,    0,    0,    0,
+    0,  152,  153,    0,    0,    0,  154,  155,  156,  157,
+    0,    0,    0,    0,    0,    0,    0,    0,  158,  159,
+  160,  161,  162,  163,  164,    0,  165,  166,  167,    0,
+    0,  168,  169,  170,    0,  171,  172,  173,  174,  175,
+    0,  176,    0,    0,    0,  177,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  178,  179,    0,    0,
+    0,    0,  180,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  181,  182,    0,    0,  183,  184,  185,  186,
+    0,    0,    0,   89,  188,    0,  709,  150,    0,  151,
+  187,    0,    0,  177,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,  178,  179,    0,    0,    0,    0,
+  180,    0,    0,    0,    0,  149,    0,    0,    0,    0,
+  181,  182,    0,    0,  183,  184,  185,  186,    0,    0,
+    0,   89,  188,    0,  951,  150,    0,  151,  187,  152,
+  153,    0,    0,    0,  154,  155,  156,  157,    0,    0,
+    0,    0,    0,    0,    0,    0,  158,  159,  160,  161,
+  162,  163,  164,    0,  165,  166,  167,    0,  149,  168,
+  169,  170,    0,  171,  172,  173,  174,  175,    0,  176,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  152,  153,    0,    0,    0,  154,  155,  156,
+  157,    0,    0,    0,    0,    0,    0,    0,    0,  158,
+  159,  160,  161,  162,  163,  164,    0,  165,  166,  167,
+    0,    0,  168,  169,  170,    0,  171,  172,  173,  174,
+  175,  177,  176,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  178,  179,    0,    0,    0,    0,  180,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  181,  182,
+    0,    0,  183,  184,  185,  186,    0,  188,    0,   89,
+  150,    0,  151,    0,    0,    0,  187,    0,    0,    0,
+    0,    0,    0,    0,  177,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  178,  179,    0,    0,    0,
+    0,  180,    0,    0,    0,    0,    0,  149,    0,    0,
+    0,  181,  182,    0,    0,  183,  184,  185,  186,    0,
+  382,    0,   89,  150,    0,  151,    0,    0,    0,  187,
+    0,  152,  153,    0,    0,    0,  154,  155,  156,  157,
+    0,    0,    0,    0,    0,    0,    0,    0,  158,  159,
+  160,  161,  162,  163,  164,  149,  165,  166,  167,    0,
+    0,  168,  169,  170,    0,  171,  172,  173,  174,  175,
+    0,  176,    0,    0,    0,    0,    0,    0,    0,  152,
+  153,    0,    0,    0,  154,  155,  156,  157,    0,    0,
+    0,    0,    0,    0,    0,    0,  158,  159,  160,  161,
+  162,  163,  164,    0,  165,  166,  167,    0,    0,  168,
+  169,  170,    0,  171,  172,  173,  174,  175,    0,  176,
+    0,    0,    0,  177,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,  178,  179,    0,    0,    0,    0,
+  180,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  181,  182,    0,    0,  183,  184,  185,  186,    0,  188,
+    0,   89,  150,    0,  151,    0,    0,    0,  187,    0,
+    0,  177,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  178,  179,    0,    0,    0,    0,  180,    0,
+  149,    0,    0,    0,    0,    0,    0,    0,  181,  182,
+    0,    0,  183,  184,  185,  186,    0,  507,    0,   89,
+  150,    0,  151,    0,  152,  153,  187,    0,    0,  154,
+  155,  156,  157,    0,    0,    0,    0,    0,    0,    0,
+    0,  158,  159,  160,  161,  162,  163,  164,    0,  165,
+  166,  167,    0,  149,  168,  169,  170,    0,  171,  172,
+  173,  174,  175,    0,  176,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  152,  153,    0,
+    0,    0,  154,  155,  156,  157,    0,    0,    0,    0,
+    0,    0,    0,    0,  158,  159,  160,  161,  162,  163,
+  164,    0,  165,  166,  167,    0,    0,  168,  169,  170,
+    0,  171,  172,  173,  174,  175,  177,  176,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  178,  179,    0,
+    0,    0,    0,  180,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  181,  182,    0,    0,  183,  184,  185,
+  186,    0,  382,    0,   89,  150,    0,  151,    0,    0,
+    0,  187,    0,    0,    0,    0,    0,    0,    0,  177,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  178,  179,    0,    0,    0,    0,  180,    0,    0,    0,
+    0,    0,  149,    0,    0,    0,  181,  182,    0,    0,
+  183,  184,  185,  186,    0,  908,    0,   89,  150,    0,
+  151,    0,    0,    0,  187,    0,  152,  153,    0,    0,
+    0,  154,  155,  156,  157,    0,    0,    0,    0,    0,
+    0,    0,    0,  158,  159,  160,  161,  162,  163,  164,
+  149,  165,  166,  167,    0,    0,  168,  169,  170,    0,
+  171,  172,  173,  174,  175,    0,  176,    0,    0,    0,
+    0,    0,    0,    0,  152,  153,    0,    0,    0,  154,
+  155,  156,  157,    0,  567,    0,  564,  333,    0,  334,
+    0,  158,  159,  160,  161,  162,  163,  164,    0,  165,
+  166,  167,    0,    0,  168,  169,  170,    0,  171,  172,
+  173,  174,  175,    0,  176,    0,    0,    0,  177,    0,
+  341,    0,  335,  333,    0,  334,    0,    0,    0,  178,
+  179,    0,    0,    0,    0,  180,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  181,  182,    0,    0,  183,
+  184,  185,  186,    0,    0,    0,   89,    0,    0,    0,
+    0,    0,    0,  445,    0,    0,  177,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  178,  179,    0,
+    0,    0,    0,  180,    0,  149,  247,  247,  247,    0,
+  247,    0,    0,  181,  182,    0,    0,  183,  184,  185,
+  186,    0,    0,  247,   89,  247,  247,  247,    0,  152,
+  153,  187,    0,    0,  154,  155,  156,  157,    0,    0,
+    0,    0,    0,    0,    0,    0,  158,  159,  160,  161,
+  162,  163,  164,    0,  165,  166,  167,    0,  149,  168,
+  169,  170,    0,  171,  172,  173,  174,  175,    0,  176,
+    0,    0,    0,    0,    0,    0,    0,  518,  518,  518,
+  518,  518,  152,  153,    0,    0,    0,  154,  155,  156,
+  157,    0,    0,    0,    0,    0,  518,  518,  518,  158,
+  159,  160,  161,  162,  163,  164,    0,  165,  166,  167,
+    0,    0,  168,  169,  170,    0,  171,  172,  173,  174,
+  175,  177,  176,  437,  417,  415,    0,  416,    0,    0,
+    0,    0,  178,  179,    0,    0,    0,  565,  180,    0,
+    0,    0,  420,  403,  421,    0,    0,    0,  181,  182,
+    0,    0,  183,  184,  185,  186,  601,  417,  415,  892,
+  416,    0,  336,  337,  338,    0,  187,  339,    0,    0,
+    0,    0,    0,    0,  177,  420,  403,  421,    0,    0,
+    0,    0,    0,    0,    0,  178,  179,    0,    0,    0,
+    0,  180,    0,    0,    0,    0,    0,    0,  336,  337,
+  338,  181,  182,  339,    0,  183,  184,  185,  186,    0,
+    0,    0,   89,    0,    0,    0,    0,    0,    0,  187,
+    0,    0,    0,  247,  247,  247,  247,  247,    0,  247,
+  247,  247,  247,  247,  247,    0,    0,  247,  247,  608,
+  417,  415,    0,  416,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,  178,  179,    0,    0,  420,  403,
+  421,    0,    0,  622,  417,  415,    0,  416,    0,    0,
+  181,  182,    0,    0,  183,  184,  185,  186,    0,    0,
+    0,  566,  420,  403,  421,    0,    0,    0,  187,    0,
+  178,  179,    0,    0,  518,  518,  518,  518,  518,    0,
+  518,  518,  518,  518,  518,  518,  181,  182,  518,  518,
+  183,  184,  185,  186,  638,  417,  415,  340,  416,    0,
+    0,    0,    0,    0,  187,    0,    0,    0,    0,    0,
+    0,    0,    0,  420,  403,  421,    0,    0,    0,    0,
+  404,  405,  406,  407,  408,    0,  409,  410,  411,  412,
+  413,  414,    0,    0,  418,  419,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  404,  405,  406,  407,  408,    0,  409,
+  410,  411,  412,  413,  414,    0,    0,  418,  419,  672,
+  417,  415,    0,  416,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  420,  403,
+  421,  677,  417,  415,    0,  416,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  420,  403,  421,  679,  417,  415,    0,  416,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  420,  403,  421,    0,  404,  405,  406,  407,
+  408,    0,  409,  410,  411,  412,  413,  414,    0,    0,
+  418,  419,    0,    0,    0,    0,    0,    0,    0,    0,
+  404,  405,  406,  407,  408,    0,  409,  410,  411,  412,
+  413,  414,    0,    0,  418,  419,  781,  417,  415,    0,
+  416,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  420,  403,  421,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  404,  405,  406,  407,  408,    0,  409,  410,  411,
+  412,  413,  414,    0,    0,  418,  419,  782,  417,  415,
+    0,  416,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  420,  403,  421,  783,
+  417,  415,    0,  416,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  420,  403,
+  421,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  404,  405,  406,  407,
+  408,    0,  409,  410,  411,  412,  413,  414,    0,    0,
+  418,  419,    0,    0,    0,    0,    0,    0,  404,  405,
+  406,  407,  408,    0,  409,  410,  411,  412,  413,  414,
+    0,    0,  418,  419,    0,    0,    0,    0,    0,    0,
+  404,  405,  406,  407,  408,    0,  409,  410,  411,  412,
+  413,  414,    0,    0,  418,  419,  784,  417,  415,    0,
+  416,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  420,  403,  421,  785,  417,
+  415,    0,  416,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  420,  403,  421,
+    0,    0,    0,  404,  405,  406,  407,  408,    0,  409,
+  410,  411,  412,  413,  414,    0,    0,  418,  419,  786,
+  417,  415,    0,  416,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  420,  403,
+  421,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,  404,  405,  406,  407,  408,    0,
+  409,  410,  411,  412,  413,  414,    0,    0,  418,  419,
+    0,    0,    0,    0,    0,    0,  404,  405,  406,  407,
+  408,    0,  409,  410,  411,  412,  413,  414,    0,    0,
+  418,  419,  787,  417,  415,    0,  416,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  420,  403,  421,  788,  417,  415,    0,  416,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  420,  403,  421,  789,  417,  415,    0,
+  416,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  420,  403,  421,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  404,  405,  406,  407,  408,    0,  409,
+  410,  411,  412,  413,  414,    0,    0,  418,  419,    0,
+    0,    0,    0,    0,    0,  404,  405,  406,  407,  408,
+    0,  409,  410,  411,  412,  413,  414,    0,    0,  418,
+  419,  790,  417,  415,    0,  416,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  420,  403,  421,    0,    0,    0,  404,  405,  406,  407,
+  408,    0,  409,  410,  411,  412,  413,  414,    0,    0,
+  418,  419,  791,  417,  415,    0,  416,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  420,  403,  421,  792,  417,  415,    0,  416,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  420,  403,  421,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  404,
+  405,  406,  407,  408,    0,  409,  410,  411,  412,  413,
+  414,    0,    0,  418,  419,    0,    0,    0,    0,    0,
+    0,  404,  405,  406,  407,  408,    0,  409,  410,  411,
+  412,  413,  414,    0,    0,  418,  419,    0,    0,    0,
+    0,    0,    0,  404,  405,  406,  407,  408,    0,  409,
+  410,  411,  412,  413,  414,    0,    0,  418,  419,  793,
+  417,  415,    0,  416,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  420,  403,
+  421,  802,  417,  415,    0,  416,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  420,  403,  421,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  404,  405,
+  406,  407,  408,    0,  409,  410,  411,  412,  413,  414,
+    0,    0,  418,  419,  862,  417,  415,    0,  416,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  420,  403,  421,    0,    0,    0,  404,
+  405,  406,  407,  408,    0,  409,  410,  411,  412,  413,
+  414,    0,    0,  418,  419,    0,    0,    0,    0,    0,
+    0,  404,  405,  406,  407,  408,    0,  409,  410,  411,
+  412,  413,  414,    0,    0,  418,  419,  904,  417,  415,
+    0,  416,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  420,  403,  421,  247,
+  247,  247,    0,  247,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  247,  247,
+  247,  417,  415,  680,  416,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  420,
+  403,  421,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  404,  405,  406,  407,
+  408,    0,  409,  410,  411,  412,  413,  414,    0,    0,
+  418,  419,    0,    0,    0,    0,    0,    0,  404,  405,
+  406,  407,  408,    0,  409,  410,  411,  412,  413,  414,
+    0,    0,  418,  419,  417,  415,  933,  416,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  420,  403,  421,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  404,  405,  406,  407,  408,    0,  409,  410,  411,
+  412,  413,  414,    0,    0,  418,  419,  417,  415,  969,
+  416,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  420,  403,  421,  417,  415,
+  970,  416,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  420,  403,  421,    0,
+    0,    0,    0,    0,  404,  405,  406,  407,  408,    0,
+  409,  410,  411,  412,  413,  414,    0,    0,  418,  419,
+    0,    0,    0,    0,    0,    0,  247,  247,  247,  247,
+  247,    0,  247,  247,  247,  247,  247,  247,    0,    0,
+  247,  247,    0,    0,    0,    0,    0,  404,  405,  406,
+  407,  408,    0,  409,  410,  411,  412,  413,  414,    0,
+    0,  418,  419,  417,  415,  975,  416,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  420,  403,  421,  247,  247,  247,  247,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  247,  247,  247,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  404,  405,  406,  407,  408,    0,  409,  410,  411,  412,
+  413,  414,    0,    0,  418,  419,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  404,  405,  406,  407,  408,    0,  409,
+  410,  411,  412,  413,  414,    0,    0,  418,  419,    0,
+    0,    0,    0,    0,  404,  405,  406,  407,  408,    0,
+  409,  410,  411,  412,  413,  414,    0,    0,  418,  419,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  404,
+  405,  406,  407,  408,    0,  409,  410,  411,  412,  413,
+  414,    0,    0,  418,  419,    0,    0,    0,    0,    0,
+  247,  247,  247,  247,  247,    0,  247,  247,  247,  247,
+  247,  247,    0,   16,  247,  247,   17,    0,   18,   19,
+    0,    0,   20,    0,    0,   21,   22,   23,    0,    0,
+    0,    0,   24,   25,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,   26,    0,    0,
+    0,   27,   28,    0,    0,    0,   29,    0,    0,    0,
+    0,    0,   30,    0,   31,   32,    0,   33,    0,   34,
+   35,   36,   37,   38,    0,   39,   40,   41,   42,   43,
+   44,   45,   46,   47,   48,   49,   50,   51,   52,   53,
+   54,    0,    0,   55,   56,   57,    0,   58,   59,   60,
+    0,   61,   62,   63,    0,    0,   64,    0,   65,    0,
+    0,   66,   67,   68,   69,    0,    0,   70,   71,   72,
+    0,    0,    0,    0,    0,   73,    0,    0,    0,   74,
+   75,   76,   77,   78,   79,   80,    0,   81,   82,   83,
+   84,   85,    0,    0,   86,    0,    0,    0,    0,    0,
+    0,   87,   88,   89,    0,    0,    0,    0,    0,    0,
+   90,
+};
+short fortrancheck[] = {                                      24,
+  231,   26,  140,  309,  194,   30,   33,  177,   33,  236,
+  231,  347,  290,  331,   39,  236,   19,   11,  296,  140,
+   44,  303,  394,  341,  177,   40,   40,   40,   44,   40,
+   40,  349,   44,  529,   10,  188,   10,   10,   10,  295,
+   42,  177,   58,   40,   68,   69,  302,   44,   41,   42,
+   41,   42,   76,  279,   44,  382,  449,   40,  581,   44,
+   37,   58,  585,  731,   41,   59,  106,   44,   58,   93,
+   94,   95,   42,   43,   44,   45,  765,   37,   44,   42,
+  111,  234,   58,   44,   61,  735,  143,   44,   37,  120,
+  121,   40,   58,  231,  373,   10,   32,   58,  236,   37,
+   10,   61,  504,   41,  417,  130,   44,   60,  135,   62,
+  135,  424,   61,  800,  801,  517,   10,  425,  217,  271,
+  272,   57,   58,  148,  149,   42,   43,  417,   45,   44,
+   10,   42,  157,  371,  128,   43,   44,   45,  417,  238,
+   41,   42,   43,   60,   45,   62,  171,  385,   58,   60,
+   40,   62,  177,  271,  272,   41,  104,   40,   44,  107,
+  271,  272,   44,  188,   58,   41,  417,  192,   44,  578,
+   44,  427,   58,   40,  344,   42,   58,  586,  203,  847,
+  350,  579,   58,  581,   58,  210,   40,  585,   43,   44,
+   45,  417,   40,  331,  219,  524,  885,  350,  885,  224,
+  529,   37,   40,  341,   41,   41,  344,   44,   44,  234,
+  331,  349,  382,  207,  350,  386,  387,  388,  868,  244,
+  341,   58,    0,  344,  281,   42,  328,  329,  349,  382,
+   47,  487,   10,  569,  490,  541,  276,  231,  417,  545,
+  234,  577,  236,  237,  912,  270,  382,   40,  242,  567,
+   42,   43,   41,   45,   40,   44,  512,  593,   58,  272,
+  272,  264,  293,  401,   40,  417,   42,  283,   40,   58,
+  588,  589,  590,  591,  592,   43,   41,   45,  534,   44,
+  283,  275,  307,   40,  309,  375,  283,  272,  319,  271,
+  272,   42,   43,  283,   45,   40,   41,  322,  323,  417,
+  271,  272,  272,  328,  298,  632,  417,  634,  635,  272,
+  273,  336,  337,  338,  339,  272,  417,  283,  549,  255,
+  273,   41,  283,  550,   44,  350,  320,   44,  549,  550,
+  324,   42,  280,  271,  272,  360,  156,   58,  158,  364,
+  365,  366,  367,  368,  369,  370,  371,  372,  373,  374,
+  375,  744,  745,  275,  507,  272,  273,  382,  140,  141,
+  856,  272,  273,  886,  272,  763,  764,  863,  766,  394,
+  271,  272,  273,   41,   42,   43,  256,   45,  403,  404,
+  405,  406,  407,  408,  409,  410,  411,  412,  413,  414,
+  415,  416,  417,  418,  419,  420,  421,  374,  423,  424,
+  406,  417,  417,  119,  284,  285,  122,  417,  578,  424,
+  424,  549,  550,  424,  374,  417,  586,  272,  281,  755,
+  417,  301,  302,  406,  417,  374,  417,  417,  734,  567,
+   44,   44,  768,  769,  770,  771,  772,  719,  756,  811,
+  578,  417,  720,  417,  417,  417,  567,   44,  586,  705,
+  588,  589,  590,  591,  592,  682,  417,  578,  417,  417,
+  687,  682,  486,   44,   40,  586,  687,  588,  589,  590,
+  591,  592,  799,  800,  801,  417,   40,  424,  256,  271,
+  272,  273,  507,   40,  637,   40,  511,   40,  886,   40,
+  521,  747,  523,  518,   40,   40,  632,  275,  634,  635,
+  525,   41,  533,  281,   44,   40,  284,  285,   42,   43,
+   44,   45,  392,   47,  539,   41,  541,   40,   44,   40,
+  545,  272,  273,  301,  302,   40,   40,  856,  857,  858,
+  859,  860,   42,   43,  863,   45,   40,   47,  358,  359,
+  938,  566,   40,   40,  682,  425,   37,  883,   40,  687,
+   41,  576,   40,   44,   40,  549,  550,  377,  378,  379,
+  380,  381,   37,   40,  870,  417,   41,   40,  824,   44,
+  390,   40,   40,  289,  601,  291,  601,  602,   40,   42,
+   43,   40,   45,  299,   41,   42,   43,   40,   45,   37,
+  846,   42,   43,   44,   45,  765,   47,   60,   61,   62,
+  753,  722,   40,  271,  272,  273,  417,  632,   41,  634,
+  635,   44,  637,   44,  392,   58,  641,   41,  756,  644,
+   44,  877,  857,  858,  859,  860,   37,  765,  818,   40,
+   41,   42,   43,   44,   45,  756,  661,  662,  417,   41,
+  417,  666,   44,  668,  765,   41,  799,  425,   44,   60,
+  881,   62,   44,   44,   41,  680,  681,   44,   41,   41,
+   58,   44,   44,  799,  800,  801,   41,   37,  693,   44,
+  695,  417,   42,   43,   41,   45,   41,   44,   41,   44,
+  674,   44,   41,  708,   41,   44,   41,   44,  682,   44,
+   60,   61,   62,  687,   44,  689,   41,    0,   41,   44,
+   41,   44,   41,   44,   40,   44,  424,   10,   61,  734,
+  390,  391,  417,   41,   41,  885,   44,   44,   44,   41,
+   41,  746,   44,   44,  417,  750,  406,  407,  753,  417,
+  410,  411,  412,  413,  417,   44,  730,   40,  272,   42,
+   43,   44,   45,   41,  424,  390,  391,  885,   41,   41,
+   41,   44,   44,   44,   44,  908,   40,   60,   61,   62,
+   41,  406,  407,   44,  885,  410,  411,  412,  413,   41,
+   41,   40,   44,   44,  799,  800,  801,   41,   41,  424,
+   44,   44,   41,  424,   41,   44,  811,   44,  813,   41,
+   41,   41,   44,   44,   44,  258,  259,  260,  261,  262,
+   61,  264,  265,  266,  267,  268,  269,   44,   41,  272,
+  273,   44,  278,  838,  271,  272,  273,   41,   41,   41,
+   44,   44,   44,   41,   44,  850,   44,  852,   41,   44,
+  380,   44,   44,   44,   44,   40,   44,   37,   41,   41,
+   44,   40,  272,   44,  417,  870,   40,  258,  259,  260,
+  261,  262,  417,  264,  265,  266,  267,  268,  269,   41,
+   44,  272,  273,  417,   41,  417,   61,   41,  424,   44,
+  273,   44,   40,  898,   44,  900,  901,   44,   44,   58,
+   41,   41,  332,  908,  417,   41,   41,  881,  258,  259,
+  260,  261,  262,   42,  264,  265,  266,  267,  268,  269,
+   58,  417,  272,  273,   41,   37,  272,    0,  933,   40,
+   42,   43,  906,   45,  272,  940,  272,   10,   41,   58,
+  374,  946,  417,   44,  949,   41,   44,   61,   60,   61,
+   62,   41,  417,  417,   41,   41,   41,  962,   41,   61,
+   41,  966,   41,   41,  969,  970,  374,   44,  272,   41,
+  975,   44,   47,  256,  417,  258,  259,  260,  261,  262,
+   44,  264,  265,  266,  267,  268,  269,   41,  271,  272,
+  273,   61,  275,  417,  277,  417,  417,  280,  281,  282,
+  283,  284,  285,  286,  287,  288,  289,  290,  291,  292,
+  293,  294,  295,  296,  297,  417,  417,   44,  301,  302,
+   41,  304,  305,  306,  307,  308,  309,  310,  311,  312,
+  313,  314,  315,  316,  317,  318,  319,  320,  321,  322,
+  323,  324,  325,  326,  327,  328,  329,   41,  331,   58,
+  333,  334,  335,  336,  337,   41,  339,  340,  341,  342,
+  343,  344,  345,  346,  347,  348,  349,  350,  351,  352,
+  353,  354,   41,   41,  357,  358,  359,   44,  361,  362,
+  363,   41,  365,  366,  367,   41,  272,  370,   41,  372,
+   41,   41,  375,  376,  377,  378,   41,  775,  381,  382,
+  383,  850,  957,  873,  520,  271,  389,  390,  391,  392,
+  393,  394,  395,  396,  397,  398,  399,  285,  401,  402,
+  403,  404,  405,  406,  407,  408,    0,  410,  411,  412,
+  413,  773,  415,  416,  417,  350,   10,  382,  681,  402,
+  900,  424,  425,  753,  852,    9,  258,  259,  260,  261,
+  262,   13,  264,  265,  266,  267,  268,  269,   74,  275,
+  272,  273,  691,   37,  429,  952,  539,   41,   42,   43,
+   44,   45,  695,   47,  528,  502,  537,  701,  557,  128,
+  549,  750,  550,  256,   58,  559,   60,   61,   62,  756,
+   -1,   -1,  140,   -1,   -1,   -1,   -1,   -1,  271,  272,
+   -1,   -1,  275,   -1,  277,   -1,   -1,  280,  281,  282,
+  283,  284,  285,  286,   -1,   -1,  289,  290,  291,   -1,
+   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,  301,  302,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,
+   -1,   -1,  315,  316,   -1,   -1,   -1,  320,   -1,   -1,
+   -1,   -1,   -1,  326,   -1,  328,  329,   -1,  331,   -1,
+  333,  334,  335,  336,  337,   -1,  339,  340,  341,  342,
+  343,  344,  345,  346,  347,  348,  349,  350,  351,  352,
+  353,  354,   -1,   -1,  357,  358,  359,   -1,  361,  362,
+  363,   -1,  365,  366,  367,   -1,    0,  370,   -1,  372,
+   -1,   -1,  375,  376,  377,  378,   10,   -1,  381,  382,
+  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,
+  393,  394,  395,  396,  397,  398,  399,   -1,  401,  402,
+  403,  404,  405,   37,   -1,  408,   -1,   41,   42,   43,
+   44,   45,  415,  416,  417,   -1,   -1,   -1,   -1,   -1,
+   -1,  424,  425,   -1,   58,   -1,   60,   61,   62,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  256,   -1,  258,  259,  260,  261,  262,   -1,
+  264,  265,  266,  267,  268,  269,   -1,  271,  272,  273,
+   -1,  275,   -1,  277,   -1,   -1,  280,  281,  282,  283,
+  284,  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,
+   -1,   -1,  296,  297,   -1,   -1,   -1,  301,  302,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,
+   -1,  315,  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,
+   -1,   -1,  326,   -1,  328,  329,   -1,  331,   -1,  333,
+  334,  335,  336,  337,   -1,  339,  340,  341,  342,  343,
+  344,  345,  346,  347,  348,  349,  350,  351,  352,  353,
+  354,   -1,   40,  357,  358,  359,   -1,  361,  362,  363,
+   -1,  365,  366,  367,   -1,   -1,  370,   -1,  372,   -1,
+   -1,  375,  376,  377,  378,   10,  380,  381,  382,  383,
+   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,  393,
+  394,  395,  396,  397,  398,  399,   -1,  401,  402,  403,
+  404,  405,   -1,   -1,  408,   40,   -1,   -1,   43,   -1,
+   45,  415,  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,
+  424,  425,  256,   -1,  258,  259,  260,  261,  262,   -1,
+  264,  265,  266,  267,  268,  269,   -1,  271,  272,  273,
+   -1,  275,   -1,  277,   -1,   -1,  280,  281,  282,  283,
+  284,  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,
+   -1,   -1,  296,  297,   -1,   -1,   -1,  301,  302,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,
+   -1,  315,  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,
+   -1,   -1,  326,   -1,  328,  329,   -1,  331,   -1,  333,
+  334,  335,  336,  337,   -1,  339,  340,  341,  342,  343,
+  344,  345,  346,  347,  348,  349,  350,  351,  352,  353,
+  354,   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,
+   -1,  365,  366,  367,   -1,    0,  370,   -1,  372,   -1,
+   -1,  375,  376,  377,  378,   10,  380,  381,  382,  383,
+   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,  393,
+  394,  395,  396,  397,  398,  399,   -1,  401,  402,  403,
+  404,  405,   37,   -1,  408,   -1,   41,   42,   43,   44,
+   45,  415,  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,
+  424,  425,   -1,   58,   -1,   60,   61,   62,   -1,  287,
+  288,   -1,   -1,   -1,  292,  293,  294,  295,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  304,  305,  306,  307,
+  308,  309,  310,   -1,  312,  313,  314,   -1,  263,  317,
+  318,  319,   -1,  321,  322,  323,  324,  325,   -1,  327,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  287,  288,   -1,   -1,   -1,  292,  293,  294,
+  295,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  304,
+  305,  306,  307,  308,  309,  310,   -1,  312,  313,  314,
+   -1,   -1,  317,  318,  319,   -1,  321,  322,  323,  324,
+  325,   -1,  327,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  390,  391,   -1,    0,   -1,   -1,  396,   -1,
+   -1,   -1,   -1,   -1,   -1,   10,   -1,   -1,  406,  407,
+   -1,   -1,  410,  411,  412,  413,   -1,   -1,   -1,  417,
+   -1,   -1,   -1,   -1,   -1,   -1,  424,   -1,   -1,   -1,
+   -1,   -1,   37,   -1,  379,   -1,   41,   42,   43,   44,
+   45,   -1,   -1,   -1,   -1,  390,  391,   -1,   -1,   -1,
+   -1,  396,   -1,   58,   -1,   60,   61,   62,   -1,   -1,
+   -1,  406,  407,   -1,   -1,  410,  411,  412,  413,   -1,
+   -1,   -1,  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,
+   -1,  256,   -1,  258,  259,  260,  261,  262,   -1,  264,
+  265,  266,  267,  268,  269,   -1,  271,  272,  273,   -1,
+  275,   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,
+  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,
+   -1,  296,  297,   -1,   -1,   -1,  301,  302,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,   -1,
+  315,  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,
+   -1,  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,
+  335,  336,  337,   -1,  339,  340,  341,  342,  343,  344,
+  345,  346,  347,  348,  349,  350,  351,  352,  353,  354,
+   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,
+  365,  366,  367,   -1,   -1,  370,   -1,  372,   -1,   -1,
+  375,  376,  377,  378,   -1,  380,  381,  382,  383,   -1,
+   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,
+  395,  396,  397,  398,  399,   -1,  401,  402,  403,  404,
+  405,   40,   -1,  408,   43,   -1,   45,   -1,   -1,   -1,
+  415,  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,
+  425,  256,   61,  258,  259,  260,  261,  262,   -1,  264,
+  265,  266,  267,  268,  269,   -1,  271,  272,  273,   -1,
+  275,   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,
+  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,
+   -1,  296,  297,   -1,   -1,   -1,  301,  302,   -1,   -1,
+   -1,   -1,   42,   43,   -1,   45,  311,   -1,   -1,   -1,
+  315,  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,
+   60,  326,   62,  328,  329,   -1,  331,   -1,  333,  334,
+  335,  336,  337,   -1,  339,  340,  341,  342,  343,  344,
+  345,  346,  347,  348,  349,  350,  351,  352,  353,  354,
+   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,
+  365,  366,  367,   -1,    0,  370,   -1,  372,   -1,   -1,
+  375,  376,  377,  378,   10,  380,  381,  382,  383,   -1,
+   -1,   -1,   -1,   -1,  389,   -1,  277,  392,  393,  394,
+  395,  396,  397,  398,  399,   -1,  401,  402,  403,  404,
+  405,   -1,   -1,  408,   40,   41,   42,   43,   44,   45,
+  415,  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,
+  425,   -1,   58,   -1,   60,   61,   62,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  328,  329,  330,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   42,   43,   -1,
+   45,   -1,   -1,   -1,  263,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  272,   -1,   60,  357,   62,  359,  360,
+  361,   -1,   -1,  364,  365,   -1,  367,  368,  287,  288,
+   -1,   -1,   -1,  292,  293,  294,  295,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  304,  305,  306,  307,  308,
+  309,  310,   -1,  312,  313,  314,   -1,   -1,  317,  318,
+  319,   -1,  321,  322,  323,  324,  325,   -1,  327,   -1,
+  260,  261,  262,   -1,  264,  265,  266,  267,  268,  269,
+   -1,   -1,  272,  273,    0,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   10,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  379,   37,   -1,   -1,   -1,   41,   42,   43,   44,   45,
+   -1,  390,  391,   -1,   -1,   -1,   -1,  396,   -1,   -1,
+   -1,   -1,   58,   -1,   60,   61,   62,  406,  407,   -1,
+   -1,  410,  411,  412,  413,   -1,   -1,   -1,  417,   -1,
+   -1,   -1,   -1,   -1,   -1,  424,   -1,   -1,   -1,   -1,
+  256,   -1,  258,  259,  260,  261,  262,   -1,  264,  265,
+  266,  267,  268,  269,   -1,  271,  272,  273,   -1,  275,
+   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,  285,
+  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,
+  296,  297,   -1,   -1,   -1,  301,  302,  262,   -1,  264,
+  265,  266,  267,  268,  269,  311,   -1,  272,  273,  315,
+  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,
+  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,
+  336,  337,   -1,  339,  340,  341,  342,  343,  344,  345,
+  346,  347,  348,  349,  350,  351,  352,  353,  354,   -1,
+   40,  357,  358,  359,   -1,  361,  362,  363,   -1,  365,
+  366,  367,   -1,   -1,  370,   -1,  372,   -1,   -1,  375,
+  376,  377,  378,   -1,  380,  381,  382,  383,   -1,   -1,
+   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,
+  396,  397,  398,  399,   -1,  401,  402,  403,  404,  405,
+   -1,   -1,  408,   40,   -1,   42,   43,   -1,   45,  415,
+  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,
+  256,   58,  258,  259,  260,  261,  262,   -1,  264,  265,
+  266,  267,  268,  269,   -1,  271,  272,  273,   -1,  275,
+   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,  285,
+  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,
+  296,  297,   -1,   -1,   -1,  301,  302,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,   -1,  315,
+  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,
+  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,
+  336,  337,   -1,  339,  340,  341,  342,  343,  344,  345,
+  346,  347,  348,  349,  350,  351,  352,  353,  354,   -1,
+   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,  365,
+  366,  367,   -1,    0,  370,   -1,  372,   -1,   -1,  375,
+  376,  377,  378,   10,  380,  381,  382,  383,   -1,   -1,
+   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,
+  396,  397,  398,  399,   -1,  401,  402,  403,  404,  405,
+   37,   -1,  408,   -1,   41,   42,   43,   44,   45,  415,
+  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,
+   -1,   58,   -1,   60,   61,   62,   -1,  287,  288,   -1,
+   -1,   -1,  292,  293,  294,  295,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  304,  305,  306,  307,  308,  309,
+  310,   -1,  312,  313,  314,   -1,  263,  317,  318,  319,
+   -1,  321,  322,  323,  324,  325,   -1,  327,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  287,  288,   -1,   -1,   -1,  292,  293,  294,  295,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  304,  305,  306,
+  307,  308,  309,  310,   -1,  312,  313,  314,   -1,   -1,
+  317,  318,  319,   -1,  321,  322,  323,  324,  325,   -1,
+  327,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  390,  391,   -1,    0,   -1,   -1,  396,   -1,   -1,   -1,
+   -1,   -1,   -1,   10,   -1,   -1,  406,  407,   -1,   -1,
+  410,  411,  412,  413,   -1,   -1,   -1,  417,   -1,   -1,
+   -1,   -1,   -1,   -1,  424,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  379,   -1,   41,   42,   43,   44,   45,   -1,
+   -1,   -1,   -1,  390,  391,   -1,   -1,   -1,   -1,  396,
+   -1,   58,   -1,   60,   61,   62,   -1,   -1,   -1,  406,
+  407,   -1,   -1,  410,  411,  412,  413,   -1,   -1,   -1,
+  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,   -1,  256,
+   -1,  258,  259,  260,  261,  262,   -1,  264,  265,  266,
+  267,  268,  269,   -1,  271,  272,  273,   -1,  275,   -1,
+  277,   -1,   -1,  280,  281,  282,  283,  284,  285,  286,
+   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,
+  297,   -1,   -1,   -1,  301,  302,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  311,   -1,   -1,   -1,  315,  316,
+   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,
+   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,  336,
+  337,   -1,  339,  340,  341,  342,  343,  344,  345,  346,
+  347,  348,  349,  350,  351,  352,  353,  354,   -1,   -1,
+  357,  358,  359,   -1,  361,  362,  363,   -1,  365,  366,
+  367,   -1,   -1,  370,   -1,  372,   -1,   -1,  375,  376,
+  377,  378,   -1,  380,  381,  382,  383,   -1,   -1,   -1,
+   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,  396,
+  397,  398,  399,   -1,  401,  402,  403,  404,  405,   -1,
+   -1,  408,   40,   -1,   42,   43,   -1,   45,  415,  416,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,  256,
+   -1,  258,  259,  260,  261,  262,   -1,  264,  265,  266,
+  267,  268,  269,   -1,  271,  272,  273,   -1,  275,   -1,
+  277,   -1,   -1,  280,  281,  282,  283,  284,  285,  286,
+   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,
+  297,   -1,   -1,   -1,  301,  302,   -1,   -1,   42,   43,
+   -1,   45,   -1,   -1,  311,   -1,   -1,   -1,  315,  316,
+   -1,   -1,   -1,  320,   -1,   -1,   60,   -1,   62,  326,
+   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,  336,
+  337,   -1,  339,  340,  341,  342,  343,  344,  345,  346,
+  347,  348,  349,  350,  351,  352,  353,  354,   -1,   -1,
+  357,  358,  359,   -1,  361,  362,  363,   -1,  365,  366,
+  367,   -1,    0,  370,   -1,  372,   -1,   -1,  375,  376,
+  377,  378,   10,  380,  381,  382,  383,   -1,   -1,   -1,
+   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,  396,
+  397,  398,  399,   -1,  401,  402,  403,  404,  405,   -1,
+   -1,  408,   -1,   41,   42,   43,   44,   45,  415,  416,
+  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,   -1,
+   -1,   -1,   60,   61,   62,   -1,   -1,  288,   -1,   -1,
+   -1,  292,  293,  294,  295,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  304,  305,  306,  307,  308,  309,  310,
+   -1,  312,  313,  314,   -1,  263,  317,  318,  319,   -1,
+   -1,  322,  323,  324,  325,   -1,  327,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  287,
+  288,   -1,   -1,   -1,  292,  293,  294,  295,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  304,  305,  306,  307,
+  308,  309,  310,   -1,  312,  313,  314,   -1,   -1,  317,
+  318,  319,   -1,  321,  322,  323,  324,  325,   -1,  327,
+  264,  265,  266,  267,  268,  269,   -1,   -1,  272,  273,
+   -1,   -1,    0,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   10,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  417,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   37,
+   -1,  379,   -1,   41,   42,   43,   44,   45,   -1,   -1,
+   -1,   -1,  390,  391,   -1,   -1,   -1,   -1,  396,   -1,
+   58,   -1,   -1,   61,   -1,   -1,   -1,   -1,  406,  407,
+   -1,   -1,  410,  411,  412,  413,   -1,   -1,   -1,  417,
+   -1,   -1,   -1,   -1,   -1,   -1,  424,   -1,  256,   -1,
+  258,  259,  260,  261,  262,   -1,  264,  265,  266,  267,
+  268,  269,   -1,   -1,  272,  273,   -1,  275,   -1,  277,
+   -1,   -1,  280,  281,  282,  283,  284,  285,  286,   -1,
+   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,
+   -1,   -1,   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  311,   -1,   -1,   -1,  315,  316,   -1,
+   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,
+  328,  329,   -1,  331,   -1,  333,  334,  335,  336,  337,
+   -1,  339,  340,  341,  342,  343,  344,  345,  346,  347,
+  348,  349,  350,  351,  352,  353,  354,   -1,   -1,  357,
+  358,  359,   -1,  361,  362,  363,   -1,  365,  366,  367,
+   -1,   -1,  370,   -1,  372,   -1,   -1,  375,  376,  377,
+  378,   -1,  380,  381,  382,  383,   -1,   -1,   -1,   -1,
+   -1,  389,   -1,   -1,  392,  393,  394,  395,  396,  397,
+  398,  399,   -1,  401,  402,  403,  404,  405,   -1,   -1,
+  408,   -1,   -1,   -1,   -1,   -1,   -1,  415,  416,  417,
+   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,  256,   -1,
+  258,  259,  260,  261,  262,    0,  264,  265,  266,  267,
+  268,  269,   -1,  271,  272,   10,   -1,  275,   -1,  277,
+   -1,   -1,  280,  281,  282,  283,  284,  285,  286,   -1,
+   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,
+   -1,   -1,   37,  301,  302,   -1,   41,   42,   43,   44,
+   45,   -1,   -1,  311,   -1,   -1,   -1,  315,  316,   -1,
+   -1,   -1,  320,   58,   -1,   -1,   61,   -1,  326,   -1,
+  328,  329,   -1,  331,   -1,  333,  334,  335,  336,  337,
+   -1,  339,  340,  341,  342,  343,  344,  345,  346,  347,
+  348,  349,  350,  351,  352,  353,  354,   -1,   -1,  357,
+  358,  359,   -1,  361,  362,  363,   -1,  365,  366,  367,
+   -1,   -1,  370,   -1,  372,   -1,   -1,  375,  376,  377,
+  378,   -1,  380,  381,  382,  383,   -1,   -1,   -1,   -1,
+   -1,  389,   -1,   -1,  392,  393,  394,  395,  396,  397,
+  398,  399,   -1,  401,  402,  403,  404,  405,   -1,   -1,
+  408,   -1,   -1,   -1,   -1,   -1,   -1,  415,  416,  417,
+   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,   -1,   -1,
+   -1,   -1,   -1,   -1,  288,    0,   -1,   -1,  292,  293,
+  294,  295,   -1,   -1,   -1,   10,   -1,   -1,   -1,   -1,
+  304,  305,  306,  307,  308,  309,  310,   -1,  312,  313,
+  314,   -1,   -1,  317,  318,  319,   -1,   -1,  322,  323,
+  324,  325,   37,  327,   -1,   -1,   41,   42,   43,   44,
+   45,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   58,   -1,   -1,   61,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  256,   -1,  258,  259,  260,  261,  262,   -1,  264,
+  265,  266,  267,  268,  269,   -1,  271,  272,   -1,   -1,
+  275,   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,
+  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,
+   -1,  296,  297,  417,   -1,   -1,  301,  302,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,   -1,
+  315,  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,
+   -1,  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,
+  335,  336,  337,   -1,  339,  340,  341,  342,  343,  344,
+  345,  346,  347,  348,  349,  350,  351,  352,  353,  354,
+   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,
+  365,  366,  367,   -1,   -1,  370,   -1,  372,   -1,   -1,
+  375,  376,  377,  378,   -1,  380,  381,  382,  383,   -1,
+   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,
+  395,  396,  397,  398,  399,   -1,  401,  402,  403,  404,
+  405,   -1,   -1,  408,   -1,   -1,   -1,   -1,   -1,   -1,
+  415,  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,
+  425,  256,   -1,  258,  259,  260,  261,  262,    0,  264,
+  265,  266,  267,  268,  269,   -1,  271,  272,   10,   -1,
+  275,   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,
+  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,
+   -1,  296,  297,   -1,   -1,   37,  301,  302,   -1,   41,
+   42,   43,   44,   45,   -1,   -1,  311,   -1,   -1,   -1,
+  315,  316,   -1,   -1,   -1,  320,   58,   -1,   -1,   61,
+   -1,  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,
+  335,  336,  337,   -1,  339,  340,  341,  342,  343,  344,
+  345,  346,  347,  348,  349,  350,  351,  352,  353,  354,
+   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,
+  365,  366,  367,   -1,   -1,  370,   -1,  372,   -1,   -1,
+  375,  376,  377,  378,   -1,  380,  381,  382,  383,   -1,
+   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,
+  395,  396,  397,  398,  399,   -1,  401,  402,  403,  404,
+  405,   -1,   -1,  408,   -1,   -1,   -1,   -1,   -1,   -1,
+  415,  416,  417,   -1,  286,   -1,   -1,   -1,   -1,  424,
+  425,   -1,   -1,   -1,   -1,   -1,   -1,   -1,    0,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   10,  311,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  326,   -1,   -1,   -1,   -1,  331,
+  332,   -1,   -1,   -1,  336,  337,   -1,   -1,   -1,   41,
+   42,   43,   44,   45,  346,  347,  348,  349,  350,  351,
+  352,  353,   -1,   -1,   -1,   -1,   -1,   -1,   60,   61,
+   62,   -1,   -1,   -1,  366,   -1,   -1,   -1,   -1,   -1,
+  372,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  381,
+   -1,  383,   -1,   -1,  256,   -1,  258,  259,  260,  261,
+  262,   -1,  264,  265,  266,  267,  268,  269,   -1,  271,
+  272,   -1,   -1,  275,   -1,  277,   -1,   -1,  280,  281,
+  282,  283,  284,  285,  286,  417,   -1,  289,  290,  291,
+   -1,   -1,  424,   -1,  296,  297,   -1,   -1,   -1,  301,
+  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  311,
+   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,  320,   -1,
+   -1,   -1,   -1,   -1,  326,   -1,  328,  329,   -1,  331,
+   -1,  333,  334,  335,  336,  337,   -1,  339,  340,  341,
+  342,  343,  344,  345,  346,  347,  348,  349,  350,  351,
+  352,  353,  354,   -1,   -1,  357,  358,  359,   -1,  361,
+  362,  363,   -1,  365,  366,  367,   -1,   -1,  370,   -1,
+  372,   -1,   -1,  375,  376,  377,  378,   -1,  380,  381,
+  382,  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,
+  392,  393,  394,  395,  396,  397,  398,  399,   -1,  401,
+  402,  403,  404,  405,   -1,   -1,  408,   40,   -1,   42,
+   43,   -1,   45,  415,  416,  417,   -1,   -1,   -1,   -1,
+   -1,   -1,  424,  425,  256,   -1,  258,  259,  260,  261,
+  262,   -1,  264,  265,  266,  267,  268,  269,   -1,   -1,
+  272,  273,   -1,  275,   -1,  277,   -1,   -1,  280,  281,
+  282,  283,  284,  285,  286,   -1,   -1,  289,  290,  291,
+   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,  301,
+  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  311,
+   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,  320,   -1,
+   -1,   -1,   -1,   -1,  326,   -1,  328,  329,   -1,  331,
+   -1,  333,  334,  335,  336,  337,   -1,  339,  340,  341,
+  342,  343,  344,  345,  346,  347,  348,  349,  350,  351,
+  352,  353,  354,   -1,   -1,  357,  358,  359,   -1,  361,
+  362,  363,   -1,  365,  366,  367,   -1,    0,  370,   -1,
+  372,   -1,   -1,  375,  376,  377,  378,   10,   -1,  381,
+  382,  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,
+  392,  393,  394,  395,  396,  397,  398,  399,   -1,  401,
+  402,  403,  404,  405,   -1,   -1,  408,   -1,   -1,   42,
+   43,   -1,   45,  415,  416,  417,   -1,   -1,   -1,   -1,
+   -1,   -1,  424,  425,   -1,   -1,   -1,   60,   61,   62,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  263,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  287,  288,   -1,   -1,   -1,  292,
+  293,  294,  295,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  304,  305,  306,  307,  308,  309,  310,   -1,  312,
+  313,  314,   -1,   -1,  317,  318,  319,   -1,  321,  322,
+  323,  324,  325,   -1,  327,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,    0,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   10,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   37,   -1,  379,   -1,   41,   -1,
+   43,   44,   45,   -1,   -1,   -1,   -1,  390,  391,   -1,
+   -1,   -1,   -1,  396,   -1,   58,   -1,   -1,   61,   -1,
+   -1,   -1,   -1,  406,  407,   -1,   -1,  410,  411,  412,
+  413,   -1,   -1,   -1,  417,   -1,   -1,   -1,   -1,   -1,
+   -1,  424,   -1,  256,   -1,  258,  259,  260,  261,  262,
+   -1,  264,  265,  266,  267,  268,  269,   -1,   -1,  272,
+  273,   -1,  275,   -1,  277,   -1,   -1,  280,  281,  282,
+  283,  284,  285,  286,   -1,   -1,  289,  290,  291,   -1,
+   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,  301,  302,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,
+   -1,   -1,  315,  316,   -1,   -1,   -1,  320,   -1,   -1,
+   -1,   -1,   -1,  326,   -1,  328,  329,   -1,  331,   -1,
+  333,  334,  335,  336,  337,   -1,  339,  340,  341,  342,
+  343,  344,  345,  346,  347,  348,  349,  350,  351,  352,
+  353,  354,   -1,   -1,  357,  358,  359,   -1,  361,  362,
+  363,   -1,  365,  366,  367,   -1,   -1,  370,   -1,  372,
+   -1,   -1,  375,  376,  377,  378,   -1,  380,  381,  382,
+  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,
+  393,  394,  395,  396,  397,  398,  399,   -1,  401,  402,
+  403,  404,  405,   -1,   -1,  408,   -1,   -1,   -1,   -1,
+   -1,   -1,  415,  416,  417,   -1,   -1,   -1,   -1,   -1,
+   -1,  424,  425,  256,   -1,  258,  259,  260,  261,  262,
+    0,  264,  265,  266,  267,  268,  269,   -1,  271,   -1,
+   10,   -1,  275,   -1,  277,   -1,   -1,  280,  281,  282,
+  283,  284,  285,  286,   -1,   -1,  289,  290,  291,   -1,
+   -1,   -1,   -1,  296,  297,   -1,   -1,   37,  301,  302,
+   -1,   41,   -1,   43,   44,   45,   -1,   -1,  311,   -1,
+   -1,   -1,  315,  316,   -1,   -1,   -1,  320,   58,   -1,
+   -1,   61,   -1,  326,   -1,  328,  329,   -1,  331,   -1,
+  333,  334,  335,  336,  337,   -1,  339,  340,  341,  342,
+  343,  344,  345,  346,  347,  348,  349,  350,  351,  352,
+  353,  354,   -1,   -1,  357,  358,  359,   -1,  361,  362,
+  363,   -1,  365,  366,  367,   -1,   -1,  370,   -1,  372,
+   -1,   -1,  375,  376,  377,  378,   -1,  380,  381,  382,
+  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,
+  393,  394,  395,  396,  397,  398,  399,   -1,  401,  402,
+  403,  404,  405,   -1,   -1,  408,   -1,   -1,   -1,   -1,
+   -1,   -1,  415,  416,  417,   -1,   -1,   -1,   -1,   -1,
+   -1,  424,  425,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+    0,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   10,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   37,   -1,   -1,
+   -1,   41,   42,   -1,   44,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   58,   -1,
+   60,   -1,   62,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  256,   -1,  258,  259,
+  260,  261,  262,   -1,  264,  265,  266,  267,  268,  269,
+   -1,  271,   -1,   -1,   -1,  275,   -1,  277,   -1,   -1,
+  280,  281,  282,  283,  284,  285,  286,   -1,   -1,  289,
+  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,
+   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,
+  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,
+   -1,  331,    0,  333,  334,  335,  336,  337,   -1,  339,
+  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
+  350,  351,  352,  353,  354,   -1,   -1,  357,  358,  359,
+   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,   -1,
+  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,   -1,
+  380,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,  389,
+   -1,   -1,  392,  393,  394,  395,  396,  397,  398,  399,
+   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,   -1,
+   -1,   -1,   -1,   -1,   -1,  415,  416,  417,   -1,   -1,
+   -1,   -1,   -1,   -1,  424,  425,  256,   -1,  258,  259,
+  260,  261,  262,   -1,  264,  265,  266,  267,  268,  269,
+   -1,  271,   -1,  273,   -1,  275,   -1,  277,   -1,   -1,
+  280,  281,  282,  283,  284,  285,  286,   -1,   -1,  289,
+  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,
+   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,
+  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,
+   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,  339,
+  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
+  350,  351,  352,  353,  354,   -1,   -1,  357,  358,  359,
+   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,    0,
+  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,   10,
+  380,  381,  382,  383,   37,   -1,   -1,   -1,   41,  389,
+   -1,   44,  392,  393,  394,  395,   -1,  397,  398,  399,
+   -1,  401,  402,  403,  404,  405,   -1,   60,  408,   62,
+   -1,   42,   43,   44,   45,  415,  416,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  425,   -1,   -1,   -1,   60,
+   61,   62,   -1,   -1,   -1,   -1,   -1,  275,   -1,  277,
+   -1,   -1,  280,  281,  282,  283,   -1,   -1,  286,   -1,
+   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  311,   -1,   -1,   -1,  315,  316,   -1,
+   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,
+  328,  329,   -1,  331,   -1,  333,  334,  335,  336,  337,
+   -1,  339,  340,  341,  342,  343,  344,  345,  346,  347,
+  348,  349,  350,  351,  352,  353,  354,   -1,   -1,  357,
+  358,  359,   -1,  361,  362,  363,   -1,  365,  366,  367,
+   -1,    0,  370,   -1,  372,   -1,   -1,  375,  376,  377,
+  378,   10,   -1,  381,  382,  383,   -1,   -1,   -1,   -1,
+   -1,  389,   -1,   -1,   -1,  393,  394,  395,  396,  397,
+  398,  399,   -1,  401,  402,  403,  404,  405,   -1,   -1,
+  408,   -1,   -1,   42,   43,   44,   45,  415,  416,  417,
+   -1,   -1,   -1,   -1,   -1,   -1,  424,   -1,   -1,   -1,
+   -1,   60,   61,   62,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  258,  259,  260,  261,  262,
+   -1,  264,  265,  266,  267,  268,  269,   -1,   -1,  272,
+  273,   -1,   -1,   -1,   -1,  256,   -1,  258,  259,  260,
+  261,  262,   -1,  264,  265,  266,  267,  268,  269,   -1,
+   -1,  272,  273,   -1,  275,   -1,  277,   -1,   -1,  280,
+  281,  282,  283,  284,  285,  286,   -1,   -1,  289,  290,
+  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,
+  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  311,   -1,    0,   -1,  315,  316,   -1,   -1,   -1,  320,
+   -1,   -1,   10,   -1,   -1,  326,   -1,  328,  329,   -1,
+  331,   -1,  333,  334,  335,  336,  337,   -1,  339,  340,
+  341,  342,  343,  344,  345,  346,  347,  348,  349,  350,
+  351,  352,  353,  354,   -1,   -1,  357,  358,  359,   -1,
+  361,  362,  363,   -1,  365,  366,  367,   -1,   -1,  370,
+   -1,  372,   -1,   -1,  375,  376,  377,  378,   -1,   -1,
+  381,  382,  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,
+   -1,  392,  393,  394,  395,   -1,  397,  398,  399,   -1,
+  401,  402,  403,  404,  405,   -1,   -1,  408,   -1,   -1,
+   -1,   -1,   -1,   -1,  415,  416,   -1,  256,   -1,  258,
+  259,  260,  261,  262,  425,  264,  265,  266,  267,  268,
+  269,   -1,   -1,  272,  273,   -1,  275,   -1,  277,   -1,
+   -1,  280,  281,  282,  283,  284,  285,  286,   -1,   -1,
+  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,
+   -1,   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,
+   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,
+  329,   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,
+  339,  340,  341,  342,  343,  344,  345,  346,  347,  348,
+  349,  350,  351,  352,  353,  354,   -1,   -1,  357,  358,
+  359,   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,
+    0,  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,
+   10,   -1,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,
+  389,   -1,   -1,  392,  393,  394,  395,   -1,  397,  398,
+  399,   -1,  401,  402,  403,  404,  405,   37,  256,  408,
+   -1,   41,   -1,   -1,   44,   -1,  415,  416,   -1,   -1,
+   -1,   -1,   -1,  271,  272,   -1,  425,  275,   58,  277,
+   -1,   61,  280,  281,  282,  283,  284,  285,  286,   -1,
+   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,
+   -1,   -1,   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  311,   -1,   -1,   -1,  315,  316,   -1,
+   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,
+  328,  329,   -1,  331,   -1,  333,  334,  335,  336,  337,
+   -1,  339,  340,  341,  342,  343,  344,  345,  346,  347,
+  348,  349,  350,  351,  352,  353,  354,   -1,   -1,  357,
+  358,  359,   -1,  361,  362,  363,   -1,  365,  366,  367,
+   -1,    0,  370,   -1,  372,   -1,   -1,  375,  376,  377,
+  378,   10,   -1,  381,  382,  383,   -1,   -1,   -1,   -1,
+   -1,  389,   -1,   -1,  392,  393,  394,  395,  396,  397,
+  398,  399,   -1,  401,  402,  403,  404,  405,   37,   -1,
+  408,   -1,   41,   -1,   -1,   44,   -1,  415,  416,  417,
+   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,   -1,   58,
+   -1,   -1,   61,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  256,   -1,  258,  259,
+  260,  261,  262,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  271,   -1,   -1,   -1,  275,   -1,  277,   -1,   -1,
+  280,  281,  282,  283,  284,  285,  286,   -1,   -1,  289,
+  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,
+   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,
+  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,
+   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,  339,
+  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
+  350,  351,  352,  353,  354,   -1,   -1,  357,  358,  359,
+   -1,  361,  362,  363,   -1,  365,  366,  367,   42,   43,
+  370,   45,  372,   -1,   -1,  375,  376,  377,  378,   -1,
+  380,  381,  382,  383,   -1,   -1,   60,   61,   62,  389,
+   -1,   -1,  392,  393,  394,  395,  396,  397,  398,  399,
+   -1,  401,  402,  403,  404,  405,   -1,  256,  408,  258,
+  259,  260,  261,  262,   -1,  415,  416,  417,   -1,   -1,
+    0,   -1,  271,   -1,  424,  425,  275,   -1,  277,   -1,
+   10,  280,  281,  282,  283,  284,  285,  286,   -1,   -1,
+  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,
+   -1,   -1,  301,  302,   -1,   -1,   -1,   37,   -1,   -1,
+   -1,   41,  311,   -1,   44,   -1,  315,  316,   -1,   -1,
+   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   58,  328,
+  329,   61,  331,   -1,  333,  334,  335,  336,  337,   -1,
+  339,  340,  341,  342,  343,  344,  345,  346,  347,  348,
+  349,  350,  351,  352,  353,  354,   -1,   -1,  357,  358,
+  359,   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,
+   -1,  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,
+   -1,  380,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,
+  389,   -1,   -1,  392,  393,  394,  395,  396,  397,  398,
+  399,   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,
+   -1,   -1,   -1,   -1,   -1,   -1,  415,  416,  417,   -1,
+   -1,    0,   -1,   -1,   -1,  424,  425,   -1,   -1,   -1,
+   -1,   10,   -1,   -1,  258,  259,  260,  261,  262,   -1,
+  264,  265,  266,  267,  268,  269,   -1,   -1,  272,  273,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   37,   -1,
+   -1,   -1,   41,   -1,   -1,   44,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   58,
+   -1,   -1,   61,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  256,   -1,  258,  259,
+  260,  261,  262,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  271,   -1,   -1,   -1,  275,   -1,  277,   -1,   -1,
+  280,  281,  282,  283,  284,  285,  286,   -1,   -1,  289,
+  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,
+   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,
+  320,   -1,   -1,  417,   -1,   -1,  326,   -1,  328,  329,
+   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,  339,
+  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
+  350,  351,  352,  353,  354,   -1,   -1,  357,  358,  359,
+   -1,  361,  362,  363,   -1,  365,  366,  367,   42,   43,
+  370,   45,  372,   -1,   -1,  375,  376,  377,  378,   -1,
+  380,  381,  382,  383,   58,   -1,   60,   61,   62,  389,
+   -1,   -1,  392,  393,  394,  395,  396,  397,  398,  399,
+   -1,  401,  402,  403,  404,  405,   -1,  256,  408,  258,
+  259,  260,  261,  262,   -1,  415,  416,  417,   -1,   -1,
+    0,   -1,  271,   -1,  424,  425,  275,   -1,  277,   -1,
+   10,  280,  281,  282,  283,  284,  285,  286,   -1,   -1,
+  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,
+   -1,   -1,  301,  302,   -1,   -1,   -1,   37,   -1,   -1,
+   -1,   41,  311,   -1,   44,   -1,  315,  316,   -1,   -1,
+   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   58,  328,
+  329,   61,  331,   -1,  333,  334,  335,  336,  337,   -1,
+  339,  340,  341,  342,  343,  344,  345,  346,  347,  348,
+  349,  350,  351,  352,  353,  354,   -1,   -1,  357,  358,
+  359,   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,
+   -1,  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,
+   -1,  380,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,
+  389,   -1,   -1,  392,  393,  394,  395,  396,  397,  398,
+  399,   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,
+   -1,   -1,   -1,   -1,   -1,   -1,  415,  416,  417,   -1,
+   -1,    0,   -1,   -1,   -1,  424,  425,   -1,   -1,   -1,
+   -1,   10,   -1,   -1,  258,  259,  260,  261,  262,   -1,
+  264,  265,  266,  267,  268,  269,   -1,   -1,  272,  273,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   37,   -1,
+   -1,   -1,   41,   -1,   -1,   44,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   58,
+   -1,   -1,   61,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  256,   -1,  258,  259,
+  260,  261,  262,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  271,   -1,   -1,   -1,  275,   -1,  277,   -1,   -1,
+  280,  281,  282,  283,  284,  285,  286,   -1,   -1,  289,
+  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,
+   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,
+  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,
+   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,  339,
+  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
+  350,  351,  352,  353,  354,   -1,   -1,  357,  358,  359,
+   -1,  361,  362,  363,   -1,  365,  366,  367,   42,   43,
+  370,   45,  372,   -1,   -1,  375,  376,  377,  378,   -1,
+  380,  381,  382,  383,   58,   -1,   60,   61,   62,  389,
+   -1,   -1,  392,  393,  394,  395,  396,  397,  398,  399,
+   -1,  401,  402,  403,  404,  405,   -1,  256,  408,  258,
+  259,  260,  261,  262,   -1,  415,  416,  417,   -1,   -1,
+    0,   -1,  271,   -1,  424,  425,  275,   -1,  277,   -1,
+   10,  280,  281,  282,  283,  284,  285,  286,   -1,   -1,
+  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,
+   -1,   -1,  301,  302,   -1,   -1,   -1,   37,   -1,   -1,
+   -1,   41,  311,   -1,   44,   -1,  315,  316,   -1,   -1,
+   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   58,  328,
+  329,   61,  331,   -1,  333,  334,  335,  336,  337,   -1,
+  339,  340,  341,  342,  343,  344,  345,  346,  347,  348,
+  349,  350,  351,  352,  353,  354,   -1,   -1,  357,  358,
+  359,   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,
+   -1,  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,
+   -1,  380,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,
+  389,   -1,   -1,  392,  393,  394,  395,  396,  397,  398,
+  399,   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,
+   -1,   -1,   -1,   -1,   -1,   -1,  415,  416,  417,   -1,
+   -1,    0,   -1,   -1,   -1,  424,  425,   -1,   -1,   -1,
+   -1,   10,   -1,   -1,  258,  259,  260,  261,  262,   -1,
+  264,  265,  266,  267,  268,  269,   -1,   -1,  272,  273,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   37,   -1,
+   -1,   -1,   41,   -1,   -1,   44,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   58,
+   -1,   -1,   61,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  256,   -1,  258,  259,
+  260,  261,  262,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  271,   -1,   -1,   -1,  275,   -1,  277,   -1,   -1,
+  280,  281,  282,  283,  284,  285,  286,   -1,   -1,  289,
+  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,
+   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,
+  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,
+   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,  339,
+  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
+  350,  351,  352,  353,  354,   -1,   -1,  357,  358,  359,
+   -1,  361,  362,  363,   -1,  365,  366,  367,   42,   43,
+  370,   45,  372,   -1,   -1,  375,  376,  377,  378,   -1,
+  380,  381,  382,  383,   58,   -1,   60,   61,   62,  389,
+   -1,   -1,  392,  393,  394,  395,  396,  397,  398,  399,
+   -1,  401,  402,  403,  404,  405,   -1,  256,  408,  258,
+  259,  260,  261,  262,   -1,  415,  416,  417,   -1,   -1,
+    0,   -1,  271,   -1,  424,  425,  275,   -1,  277,   -1,
+   10,  280,  281,  282,  283,  284,  285,  286,   -1,   -1,
+  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,
+   -1,   -1,  301,  302,   -1,   -1,   -1,   37,   -1,   -1,
+   -1,   41,  311,   -1,   44,   -1,  315,  316,   -1,   -1,
+   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   58,  328,
+  329,   61,  331,   -1,  333,  334,  335,  336,  337,   -1,
+  339,  340,  341,  342,  343,  344,  345,  346,  347,  348,
+  349,  350,  351,  352,  353,  354,   -1,   -1,  357,  358,
+  359,   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,
+   -1,  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,
+   -1,  380,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,
+  389,   -1,   -1,  392,  393,  394,  395,  396,  397,  398,
+  399,   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,
+   -1,   -1,   -1,   -1,   -1,   -1,  415,  416,  417,   -1,
+   -1,    0,   -1,   -1,   -1,  424,  425,   -1,   -1,   -1,
+   -1,   10,   -1,   -1,  258,  259,  260,  261,  262,   -1,
+  264,  265,  266,  267,  268,  269,   -1,   -1,  272,  273,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   37,   -1,
+   -1,   -1,   41,   -1,   -1,   44,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   58,
+   -1,   -1,   61,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  256,   -1,  258,  259,
+  260,  261,  262,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  271,   -1,   -1,   -1,  275,   -1,  277,   -1,   -1,
+  280,  281,  282,  283,  284,  285,  286,   -1,   -1,  289,
+  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,
+   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,
+  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,
+   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,  339,
+  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
+  350,  351,  352,  353,  354,   -1,   -1,  357,  358,  359,
+   -1,  361,  362,  363,   -1,  365,  366,  367,   42,   43,
+  370,   45,  372,   -1,   -1,  375,  376,  377,  378,   -1,
+  380,  381,  382,  383,   58,   -1,   60,   61,   62,  389,
+   -1,   -1,  392,  393,  394,  395,  396,  397,  398,  399,
+   -1,  401,  402,  403,  404,  405,   -1,  256,  408,  258,
+  259,  260,  261,  262,   -1,  415,  416,  417,   -1,   -1,
+    0,   -1,  271,   -1,  424,  425,  275,   -1,  277,   -1,
+   10,  280,  281,  282,  283,  284,  285,  286,   -1,   -1,
+  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,
+   -1,   -1,  301,  302,   -1,   -1,   -1,   37,   -1,   -1,
+   -1,   41,  311,   -1,   44,   -1,  315,  316,   -1,   -1,
+   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   58,  328,
+  329,   61,  331,   -1,  333,  334,  335,  336,  337,   -1,
+  339,  340,  341,  342,  343,  344,  345,  346,  347,  348,
+  349,  350,  351,  352,  353,  354,   -1,   -1,  357,  358,
+  359,   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,
+   -1,  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,
+   -1,  380,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,
+  389,   -1,   -1,  392,  393,  394,  395,  396,  397,  398,
+  399,   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,
+   -1,   -1,   -1,   -1,   -1,   -1,  415,  416,  417,   -1,
+   -1,    0,   -1,   -1,   -1,  424,  425,   -1,   -1,   -1,
+   -1,   10,   -1,   -1,  258,  259,  260,  261,  262,   -1,
+  264,  265,  266,  267,  268,  269,   -1,   -1,  272,  273,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   37,   -1,
+   -1,   -1,   41,   -1,   -1,   44,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   58,
+   -1,   -1,   61,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  256,   -1,  258,  259,
+  260,  261,  262,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  271,   -1,   -1,   -1,  275,   -1,  277,   -1,   -1,
+  280,  281,  282,  283,  284,  285,  286,   -1,   -1,  289,
+  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,
+   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,
+  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,
+   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,  339,
+  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
+  350,  351,  352,  353,  354,   -1,   -1,  357,  358,  359,
+   -1,  361,  362,  363,   -1,  365,  366,  367,   42,   43,
+  370,   45,  372,   -1,   -1,  375,  376,  377,  378,   -1,
+  380,  381,  382,  383,   -1,   -1,   60,   61,   62,  389,
+   -1,   -1,  392,  393,  394,  395,  396,  397,  398,  399,
+   -1,  401,  402,  403,  404,  405,   -1,  256,  408,  258,
+  259,  260,  261,  262,   -1,  415,  416,  417,   -1,   -1,
+    0,   -1,  271,   -1,  424,  425,  275,   -1,  277,   -1,
+   10,  280,  281,  282,  283,  284,  285,  286,   -1,   -1,
+  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,
+   -1,   -1,  301,  302,   -1,   -1,   -1,   37,   -1,   -1,
+   -1,   41,  311,   -1,   44,   -1,  315,  316,   -1,   -1,
+   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   58,  328,
+  329,   61,  331,   -1,  333,  334,  335,  336,  337,   -1,
+  339,  340,  341,  342,  343,  344,  345,  346,  347,  348,
+  349,  350,  351,  352,  353,  354,   -1,   -1,  357,  358,
+  359,   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,
+   -1,  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,
+   -1,  380,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,
+  389,   -1,   -1,  392,  393,  394,  395,  396,  397,  398,
+  399,   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,
+   -1,   -1,   -1,   -1,   -1,   -1,  415,  416,  417,   -1,
+   -1,    0,   -1,   -1,   -1,  424,  425,   -1,   -1,   -1,
+   -1,   10,   -1,   -1,  258,  259,  260,  261,  262,   -1,
+  264,  265,  266,  267,  268,  269,   -1,   -1,  272,  273,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   37,   -1,
+   -1,   -1,   41,   -1,   -1,   44,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   58,
+   -1,   -1,   61,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  256,   -1,  258,  259,
+  260,  261,  262,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  271,   -1,   -1,   -1,  275,   -1,  277,   -1,   -1,
+  280,  281,  282,  283,  284,  285,  286,   -1,   -1,  289,
+  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,
+   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,
+  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,
+   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,  339,
+  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
+  350,  351,  352,  353,  354,   -1,   -1,  357,  358,  359,
+   -1,  361,  362,  363,   -1,  365,  366,  367,   42,   43,
+  370,   45,  372,   -1,   -1,  375,  376,  377,  378,   -1,
+  380,  381,  382,  383,   -1,   -1,   60,   61,   62,  389,
+   -1,   -1,  392,  393,  394,  395,  396,  397,  398,  399,
+   -1,  401,  402,  403,  404,  405,   -1,  256,  408,  258,
+  259,  260,  261,  262,   -1,  415,  416,  417,   -1,   -1,
+    0,   -1,  271,   -1,  424,  425,  275,   -1,  277,   -1,
+   10,  280,  281,  282,  283,  284,  285,  286,   -1,   -1,
+  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,
+   -1,   -1,  301,  302,   -1,   -1,   -1,   37,   -1,   -1,
+   -1,   41,  311,   -1,   44,   -1,  315,  316,   -1,   -1,
+   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   58,  328,
+  329,   61,  331,   -1,  333,  334,  335,  336,  337,   -1,
+  339,  340,  341,  342,  343,  344,  345,  346,  347,  348,
+  349,  350,  351,  352,  353,  354,   -1,   -1,  357,  358,
+  359,   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,
+   -1,  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,
+   -1,  380,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,
+  389,   -1,   -1,  392,  393,  394,  395,  396,  397,  398,
+  399,   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,
+   -1,   -1,   -1,   -1,   -1,   -1,  415,  416,  417,   -1,
+   -1,    0,   -1,   -1,   -1,  424,  425,   -1,   -1,   -1,
+   -1,   10,   -1,   -1,  258,  259,  260,  261,  262,   -1,
+  264,  265,  266,  267,  268,  269,   -1,   -1,  272,  273,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   37,   -1,
+   -1,   -1,   41,   -1,   -1,   44,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   58,
+   -1,   -1,   61,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  256,   -1,  258,  259,
+  260,  261,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  271,   -1,   -1,   -1,  275,   -1,  277,   -1,   -1,
+  280,  281,  282,  283,  284,  285,  286,   -1,   -1,  289,
+  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,
+   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,
+  320,   -1,   -1,   -1,   -1,   -1,  326,   40,  328,  329,
+   43,  331,   45,  333,  334,  335,  336,  337,   -1,  339,
+  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
+  350,  351,  352,  353,  354,   -1,   -1,  357,  358,  359,
+   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,   -1,
+  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,   -1,
+  380,  381,  382,  383,   -1,   40,   -1,   42,   43,  389,
+   45,   -1,  392,  393,  394,  395,  396,  397,  398,  399,
+   -1,  401,  402,  403,  404,  405,   61,  256,  408,  258,
+  259,  260,  261,   -1,   -1,  415,  416,  417,   -1,   -1,
+   -1,   -1,  271,   -1,  424,  425,  275,   -1,  277,   -1,
+   -1,  280,  281,  282,  283,  284,  285,  286,   -1,   -1,
+  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,
+   -1,   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,
+   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,
+  329,   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,
+  339,  340,  341,  342,  343,  344,  345,  346,  347,  348,
+  349,  350,  351,  352,  353,  354,   -1,   -1,  357,  358,
+  359,   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,
+    0,  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,
+   10,  380,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,
+  389,   -1,   -1,  392,  393,  394,  395,  396,  397,  398,
+  399,   -1,  401,  402,  403,  404,  405,   37,   -1,  408,
+   40,   41,   42,   43,   44,   45,  415,  416,  417,   -1,
+   -1,   -1,   -1,   -1,   -1,  424,  425,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  298,  299,  300,   -1,   -1,
+  303,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  263,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  273,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  287,  288,   -1,   -1,   -1,  292,  293,  294,
+  295,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  304,
+  305,  306,  307,  308,  309,  310,   -1,  312,  313,  314,
+   -1,   -1,  317,  318,  319,   -1,  321,  322,  323,  324,
+  325,    0,  327,   -1,   -1,   -1,   -1,  390,  391,   -1,
+   -1,   10,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  406,  407,   -1,   -1,  410,  411,  412,
+  413,   -1,   -1,   -1,  417,   -1,   -1,   -1,   37,   -1,
+   -1,  424,   41,   -1,   -1,   44,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  379,   -1,   -1,   -1,   -1,   58,
+   -1,   -1,   61,   -1,   -1,  390,  391,   -1,   -1,   -1,
+   -1,  396,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  406,  407,   -1,   -1,  410,  411,  412,  413,   -1,
+   -1,   -1,  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,
+   -1,   -1,   -1,   -1,   -1,   -1,  256,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  271,  272,  273,   -1,  275,   -1,  277,   -1,   -1,
+  280,  281,  282,  283,  284,  285,  286,   -1,   -1,  289,
+  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,
+   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,
+  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,
+   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,  339,
+  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
+  350,  351,  352,  353,  354,   -1,   -1,  357,  358,  359,
+   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,   -1,
+  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,   -1,
+   -1,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,  389,
+   -1,   -1,  392,  393,  394,  395,  396,  397,  398,  399,
+   -1,  401,  402,  403,  404,  405,   -1,  256,  408,  258,
+  259,   -1,   -1,   -1,   -1,  415,  416,  417,   -1,   -1,
+    0,   -1,  271,   -1,  424,  425,  275,   -1,  277,   -1,
+   10,  280,  281,  282,  283,  284,  285,  286,   -1,   -1,
+  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,
+   -1,   -1,  301,  302,   -1,   -1,   -1,   37,   -1,   -1,
+   -1,   41,  311,   -1,   44,   -1,  315,  316,   -1,   -1,
+   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   58,  328,
+  329,   61,  331,   -1,  333,  334,  335,  336,  337,   -1,
+  339,  340,  341,  342,  343,  344,  345,  346,  347,  348,
+  349,  350,  351,  352,  353,  354,   -1,   -1,  357,  358,
+  359,   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,
+   -1,  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,
+   -1,  380,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,
+  389,   -1,   -1,  392,  393,  394,  395,  396,  397,  398,
+  399,   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,
+   -1,   -1,   -1,   -1,   -1,   -1,  415,  416,  417,   -1,
+   -1,   -1,   -1,   -1,   -1,  424,  425,    0,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   10,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   41,   42,
+   43,   44,   45,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  256,   -1,  258,  259,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  271,   -1,   -1,   -1,  275,   -1,  277,   -1,   -1,
+  280,  281,  282,  283,  284,  285,  286,   -1,   -1,  289,
+  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,
+   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,
+  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,
+   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,  339,
+  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
+  350,  351,  352,  353,  354,   -1,   -1,  357,  358,  359,
+   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,   -1,
+  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,   -1,
+  380,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,  389,
+   -1,   -1,  392,  393,  394,  395,  396,  397,  398,  399,
+   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,   -1,
+   -1,   -1,   -1,  256,   -1,  415,  416,  417,   -1,   -1,
+   -1,    0,   -1,   -1,  424,  425,   -1,   -1,  271,  272,
+  273,   10,  275,   -1,  277,   -1,   -1,  280,  281,  282,
+  283,  284,  285,  286,   -1,   -1,  289,  290,  291,   -1,
+   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,  301,  302,
+   -1,   -1,   41,   42,   43,   44,   45,   -1,  311,   -1,
+   -1,   -1,  315,  316,   -1,   -1,   -1,  320,   -1,   -1,
+   -1,   -1,   -1,  326,   -1,  328,  329,   -1,  331,   -1,
+  333,  334,  335,  336,  337,   -1,  339,  340,  341,  342,
+  343,  344,  345,  346,  347,  348,  349,  350,  351,  352,
+  353,  354,   -1,   -1,  357,  358,  359,   -1,  361,  362,
+  363,   -1,  365,  366,  367,   -1,   -1,  370,   -1,  372,
+   -1,   -1,  375,  376,  377,  378,   -1,   -1,  381,  382,
+  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,
+  393,  394,  395,  396,  397,  398,  399,   -1,  401,  402,
+  403,  404,  405,   -1,   -1,  408,   -1,   -1,   -1,   -1,
+   -1,   -1,  415,  416,  417,   -1,    0,   -1,   -1,   -1,
+   -1,  424,  425,   -1,   -1,   -1,   10,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   42,   43,
+   44,   45,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  256,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  271,  272,  273,   -1,  275,   -1,  277,   -1,
+   -1,  280,  281,  282,  283,  284,  285,  286,   -1,   -1,
+  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,
+   -1,   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,
+   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,
+  329,   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,
+  339,  340,  341,  342,  343,  344,  345,  346,  347,  348,
+  349,  350,  351,  352,  353,  354,   -1,   -1,  357,  358,
+  359,   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,
+   -1,  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,
+   -1,   -1,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,
+  389,   -1,   -1,  392,  393,  394,  395,  396,  397,  398,
+  399,   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,
+   -1,   -1,  256,   -1,   -1,   -1,  415,  416,   -1,   -1,
+    0,   -1,   -1,   -1,   -1,  424,  425,  271,  272,  273,
+   10,  275,   -1,  277,   -1,   -1,  280,  281,  282,  283,
+  284,  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,
+   -1,   -1,  296,  297,   -1,   -1,   -1,  301,  302,   -1,
+   -1,   41,   42,   43,   44,   45,   -1,  311,   -1,   -1,
+   -1,  315,  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,
+   -1,   -1,  326,   -1,  328,  329,   -1,  331,   -1,  333,
+  334,  335,  336,  337,   -1,  339,  340,  341,  342,  343,
+  344,  345,  346,  347,  348,  349,  350,  351,  352,  353,
+  354,   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,
+   -1,  365,  366,  367,   -1,   -1,  370,   -1,  372,   -1,
+   -1,  375,  376,  377,  378,   -1,   -1,  381,  382,  383,
+   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,  393,
+  394,  395,  396,  397,  398,  399,   -1,  401,  402,  403,
+  404,  405,   -1,   -1,  408,   -1,   -1,   -1,   -1,   -1,
+   -1,  415,  416,  417,   -1,    0,   -1,   -1,   -1,   -1,
+  424,  425,   -1,   -1,   -1,   10,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   41,   42,   43,   44,
+   45,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  256,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  271,  272,   -1,   -1,  275,   -1,  277,   -1,   -1,
+  280,  281,  282,  283,  284,  285,  286,   -1,   -1,  289,
+  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,
+   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,
+  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,
+   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,  339,
+  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
+  350,  351,  352,  353,  354,   -1,   -1,  357,  358,  359,
+   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,   -1,
+  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,   -1,
+   -1,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,  389,
+   -1,   -1,  392,  393,  394,  395,  396,  397,  398,  399,
+   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,   -1,
+   -1,  256,   -1,   -1,   -1,  415,  416,  417,    0,   -1,
+   -1,   -1,   -1,   -1,  424,  425,  271,  272,   10,   -1,
+  275,   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,
+  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,
+   -1,  296,  297,   -1,   -1,   -1,  301,  302,   -1,   41,
+   42,   43,   44,   45,   -1,   -1,  311,   -1,   -1,   -1,
+  315,  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,
+   -1,  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,
+  335,  336,  337,   -1,  339,  340,  341,  342,  343,  344,
+  345,  346,  347,  348,  349,  350,  351,  352,  353,  354,
+   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,
+  365,  366,  367,   -1,   -1,  370,   -1,  372,   -1,   -1,
+  375,  376,  377,  378,   -1,   -1,  381,  382,  383,   -1,
+   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,
+  395,  396,  397,  398,  399,   -1,  401,  402,  403,  404,
+  405,   -1,   -1,  408,   -1,   -1,   -1,   -1,   -1,   -1,
+  415,  416,  417,    0,   -1,   -1,   -1,   -1,   -1,  424,
+  425,   -1,   -1,   10,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   41,   42,   43,   44,   45,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  256,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  271,
+  272,   -1,   -1,  275,   -1,  277,   -1,   -1,  280,  281,
+  282,  283,  284,  285,  286,   -1,   -1,  289,  290,  291,
+   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,  301,
+  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  311,
+   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,  320,   -1,
+   -1,   -1,   -1,   -1,  326,   -1,  328,  329,   -1,  331,
+   -1,  333,  334,  335,  336,  337,   -1,  339,  340,  341,
+  342,  343,  344,  345,  346,  347,  348,  349,  350,  351,
+  352,  353,  354,   -1,   -1,  357,  358,  359,   -1,  361,
+  362,  363,   -1,  365,  366,  367,   -1,   -1,  370,   -1,
+  372,   -1,   -1,  375,  376,  377,  378,   -1,   -1,  381,
+  382,  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,
+  392,  393,  394,  395,  396,  397,  398,  399,   -1,  401,
+  402,  403,  404,  405,   -1,   -1,  408,   -1,   -1,  256,
+   -1,   -1,   -1,  415,  416,  417,    0,   -1,   -1,   -1,
+   -1,   -1,  424,  425,  271,  272,   10,   -1,  275,   -1,
+  277,   -1,   -1,  280,  281,  282,  283,  284,  285,  286,
+   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,
+  297,   -1,   -1,   37,  301,  302,   -1,   41,   -1,   -1,
+   44,   -1,   -1,   -1,  311,   -1,   -1,   -1,  315,  316,
+   -1,   -1,   -1,  320,   58,   -1,   -1,   -1,   -1,  326,
+   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,  336,
+  337,   -1,  339,  340,  341,  342,  343,  344,  345,  346,
+  347,  348,  349,  350,  351,  352,  353,  354,   -1,   -1,
+  357,  358,  359,   -1,  361,  362,  363,   -1,  365,  366,
+  367,   -1,   -1,  370,   -1,  372,   -1,   -1,  375,  376,
+  377,  378,   -1,   -1,  381,  382,  383,   -1,   -1,   -1,
+   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,  396,
+  397,  398,  399,   -1,  401,  402,  403,  404,  405,   -1,
+   -1,  408,   -1,   -1,   -1,   -1,   -1,   -1,  415,  416,
+  417,    0,   -1,   -1,   -1,   -1,   -1,  424,  425,   -1,
+   -1,   10,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   37,   -1,
+   -1,   -1,   41,   -1,   -1,   44,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   58,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  256,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  271,   -1,   -1,
+   -1,  275,   -1,  277,   -1,   -1,  280,  281,  282,  283,
+  284,  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,
+   -1,   -1,  296,  297,   -1,   -1,   -1,  301,  302,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,
+   -1,  315,  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,
+   -1,   -1,  326,   -1,  328,  329,   -1,  331,   -1,  333,
+  334,  335,  336,  337,   -1,  339,  340,  341,  342,  343,
+  344,  345,  346,  347,  348,  349,  350,  351,  352,  353,
+  354,   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,
+   -1,  365,  366,  367,   -1,    0,  370,   -1,  372,   -1,
+   -1,  375,  376,  377,  378,   10,  380,  381,  382,  383,
+   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,  393,
+  394,  395,  396,  397,  398,  399,   -1,  401,  402,  403,
+  404,  405,   -1,   -1,  408,   -1,   41,  256,   43,   44,
+   45,  415,  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,
+  424,  425,  271,   -1,   -1,   -1,  275,   -1,  277,   -1,
+   -1,  280,  281,  282,  283,  284,  285,  286,   -1,   -1,
+  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,
+   -1,   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,
+   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,
+  329,   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,
+  339,  340,  341,  342,  343,  344,  345,  346,  347,  348,
+  349,  350,  351,  352,  353,  354,   -1,   -1,  357,  358,
+  359,   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,
+    0,  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,
+   10,  380,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,
+  389,   -1,   -1,  392,  393,  394,  395,  396,  397,  398,
+  399,   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,
+   -1,   41,   -1,   -1,   44,   -1,  415,  416,  417,   -1,
+   -1,   -1,   -1,   -1,   -1,  424,  425,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  256,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  271,   -1,   -1,   -1,
+  275,   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,
+  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,
+   -1,  296,  297,   -1,   -1,   -1,  301,  302,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,   -1,
+  315,  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,
+   -1,  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,
+  335,  336,  337,   -1,  339,  340,  341,  342,  343,  344,
+  345,  346,  347,  348,  349,  350,  351,  352,  353,  354,
+   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,
+  365,  366,  367,   -1,    0,  370,   -1,  372,   -1,   -1,
+  375,  376,  377,  378,   10,   -1,  381,  382,  383,   -1,
+   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,
+  395,  396,  397,  398,  399,   -1,  401,  402,  403,  404,
+  405,   -1,   -1,  408,   -1,   41,  256,   -1,   44,   -1,
+  415,  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,
+  425,  271,   -1,   -1,   -1,  275,   -1,  277,   -1,   -1,
+  280,  281,  282,  283,  284,  285,  286,   -1,   -1,  289,
+  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,
+   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,
+  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,
+   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,  339,
+  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
+  350,  351,  352,  353,  354,   -1,   -1,  357,  358,  359,
+   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,    0,
+  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,   10,
+   -1,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,  389,
+   -1,   -1,  392,  393,  394,  395,  396,  397,  398,  399,
+   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,   -1,
+   41,   -1,   -1,   44,   -1,  415,  416,  417,   -1,   -1,
+   -1,   -1,   -1,   -1,  424,  425,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  256,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  271,   -1,   -1,   -1,  275,
+   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,  285,
+  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,
+  296,  297,   -1,   -1,   -1,  301,  302,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,   -1,  315,
+  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,
+  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,
+  336,  337,   -1,  339,  340,  341,  342,  343,  344,  345,
+  346,  347,  348,  349,  350,  351,  352,  353,  354,   -1,
+   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,  365,
+  366,  367,   -1,    0,  370,   -1,  372,   -1,   -1,  375,
+  376,  377,  378,   10,   -1,  381,  382,  383,   -1,   -1,
+   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,
+  396,  397,  398,  399,   -1,  401,  402,  403,  404,  405,
+   -1,   -1,  408,   -1,   41,  256,   -1,   44,   -1,  415,
+  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,
+  271,   -1,   -1,   -1,  275,   -1,  277,   -1,   -1,  280,
+  281,  282,  283,  284,  285,  286,   -1,   -1,  289,  290,
+  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,
+  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  311,   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,  320,
+   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,   -1,
+  331,   -1,  333,  334,  335,  336,  337,   -1,  339,  340,
+  341,  342,  343,  344,  345,  346,  347,  348,  349,  350,
+  351,  352,  353,  354,   -1,   -1,  357,  358,  359,   -1,
+  361,  362,  363,   -1,  365,  366,  367,   -1,    0,  370,
+   -1,  372,   -1,   -1,  375,  376,  377,  378,   10,   -1,
+  381,  382,  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,
+   -1,  392,  393,  394,  395,  396,  397,  398,  399,   -1,
+  401,  402,  403,  404,  405,   -1,   -1,  408,   -1,   -1,
+   42,   -1,   44,   -1,  415,  416,  417,   -1,   -1,   -1,
+   -1,   -1,   -1,  424,  425,   -1,   -1,   -1,   -1,   61,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  256,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  271,   -1,   -1,   -1,  275,   -1,
+  277,   -1,   -1,  280,  281,  282,  283,  284,  285,  286,
+   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,
+  297,   -1,   -1,   -1,  301,  302,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  311,   -1,   -1,   -1,  315,  316,
+   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,
+   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,  336,
+  337,   -1,  339,  340,  341,  342,  343,  344,  345,  346,
+  347,  348,  349,  350,  351,  352,  353,  354,   -1,   -1,
+  357,  358,  359,   -1,  361,  362,  363,   -1,  365,  366,
+  367,   -1,    0,  370,   -1,  372,   -1,   -1,  375,  376,
+  377,  378,   10,   -1,  381,  382,  383,   -1,   -1,   -1,
+   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,  396,
+  397,  398,  399,   -1,  401,  402,  403,  404,  405,   -1,
+   -1,  408,   -1,   41,  256,   -1,   44,   -1,  415,  416,
+  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,   -1,
+   -1,   -1,   -1,  275,   -1,  277,   -1,   -1,  280,  281,
+  282,  283,  284,  285,  286,   -1,   -1,  289,  290,  291,
+   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,  301,
+  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  311,
+   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,  320,   -1,
+   -1,   -1,   -1,   -1,  326,   -1,  328,  329,   -1,  331,
+   -1,  333,  334,  335,  336,  337,   -1,  339,  340,  341,
+  342,  343,  344,  345,  346,  347,  348,  349,  350,  351,
+  352,  353,  354,   -1,   -1,  357,  358,  359,   -1,  361,
+  362,  363,   -1,  365,  366,  367,   -1,    0,  370,   -1,
+  372,   -1,   -1,  375,  376,  377,  378,   10,   -1,  381,
+  382,  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,
+  392,  393,  394,  395,  396,  397,  398,  399,   -1,  401,
+  402,  403,  404,  405,   -1,   -1,  408,   -1,   41,   -1,
+   -1,   44,   -1,  415,  416,  417,   -1,   -1,   -1,   -1,
+   -1,   -1,  424,  425,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  256,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  271,   -1,   -1,   -1,  275,   -1,  277,
+   -1,   -1,  280,  281,  282,  283,  284,  285,  286,   -1,
+   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,
+   -1,   -1,   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  311,    0,   -1,   -1,  315,  316,   -1,
+   -1,   -1,  320,   -1,   10,   -1,   -1,   -1,  326,   -1,
+  328,  329,   -1,  331,   -1,  333,  334,  335,  336,  337,
+   -1,  339,  340,  341,  342,  343,  344,  345,  346,  347,
+  348,  349,  350,  351,  352,  353,  354,   -1,   -1,  357,
+  358,  359,   -1,  361,  362,  363,   -1,  365,  366,  367,
+   -1,   -1,  370,   -1,  372,   -1,   -1,  375,  376,  377,
+  378,   -1,   -1,  381,  382,  383,   -1,   -1,   -1,   -1,
+   -1,  389,   -1,   -1,  392,  393,  394,  395,  396,  397,
+  398,  399,   -1,  401,  402,  403,  404,  405,   -1,   -1,
+  408,   -1,   -1,  256,   -1,   -1,   -1,  415,  416,  417,
+   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,  271,   -1,
+   -1,   -1,  275,   -1,  277,   -1,   -1,  280,  281,  282,
+  283,  284,  285,  286,   -1,   -1,  289,  290,  291,   -1,
+   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,  301,  302,
+   -1,   -1,   -1,   -1,   -1,    0,   -1,   -1,  311,   -1,
+   -1,   -1,  315,  316,   -1,   10,   -1,  320,   -1,   -1,
+   -1,   -1,   -1,  326,   -1,  328,  329,   -1,  331,   -1,
+  333,  334,  335,  336,  337,   -1,  339,  340,  341,  342,
+  343,  344,  345,  346,  347,  348,  349,  350,  351,  352,
+  353,  354,   -1,   -1,  357,  358,  359,   -1,  361,  362,
+  363,   -1,  365,  366,  367,   -1,   -1,  370,   -1,  372,
+   -1,   -1,  375,  376,  377,  378,   -1,   -1,  381,  382,
+  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,
+  393,  394,  395,  396,  397,  398,  399,   -1,  401,  402,
+  403,  404,  405,   -1,   -1,  408,   -1,   -1,   -1,   -1,
+  256,   -1,  415,  416,  417,   -1,   -1,   -1,   -1,   -1,
+   -1,  424,  425,   -1,   -1,  271,  272,   -1,   -1,  275,
+   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,  285,
+  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,
+  296,  297,   -1,   -1,   -1,  301,  302,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,   -1,  315,
+  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,
+  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,
+  336,  337,   -1,  339,  340,  341,  342,  343,  344,  345,
+  346,  347,  348,  349,  350,  351,  352,  353,  354,   -1,
+   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,  365,
+  366,  367,   -1,    0,  370,   -1,  372,   -1,   -1,  375,
+  376,  377,  378,   10,   -1,  381,  382,  383,   -1,   -1,
+   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,
+  396,  397,  398,  399,   -1,  401,  402,  403,  404,  405,
+   -1,  256,  408,   -1,   41,   -1,   -1,   -1,   -1,  415,
+  416,  417,   -1,   -1,   -1,   -1,  271,  272,  424,  425,
+  275,   58,  277,   -1,   -1,  280,  281,  282,  283,  284,
+  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,
+   -1,  296,  297,   -1,   -1,   -1,  301,  302,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,   -1,
+  315,  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,
+   -1,  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,
+  335,  336,  337,   -1,  339,  340,  341,  342,  343,  344,
+  345,  346,  347,  348,  349,  350,  351,  352,  353,  354,
+   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,
+  365,  366,  367,   -1,    0,  370,   -1,  372,   -1,   -1,
+  375,  376,  377,  378,   10,   -1,  381,  382,  383,   -1,
+   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,
+  395,  396,  397,  398,  399,   -1,  401,  402,  403,  404,
+  405,   -1,   -1,  408,   -1,   -1,   -1,   -1,   44,   -1,
+  415,  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,
+  425,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  256,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  275,   -1,
+  277,   -1,   -1,  280,  281,  282,  283,  284,  285,  286,
+   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,
+  297,   -1,   -1,   -1,  301,  302,   -1,   -1,   -1,   -1,
+    0,   -1,   -1,   -1,  311,   -1,   -1,   -1,  315,  316,
+   10,   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,
+   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,  336,
+  337,   -1,  339,  340,  341,  342,  343,  344,  345,  346,
+  347,  348,  349,  350,  351,  352,  353,  354,   -1,   -1,
+  357,  358,  359,   -1,  361,  362,  363,   -1,  365,  366,
+  367,   -1,   -1,  370,   -1,  372,   -1,   -1,  375,  376,
+  377,  378,   -1,   -1,  381,  382,  383,   -1,   -1,   -1,
+   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,  396,
+  397,  398,  399,   -1,  401,  402,  403,  404,  405,   -1,
+  256,  408,   -1,   -1,   -1,   -1,   -1,   -1,  415,  416,
+  417,   -1,   -1,   -1,   -1,  271,  272,  424,  425,  275,
+   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,  285,
+  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,
+  296,  297,   -1,   -1,   -1,  301,  302,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,   -1,  315,
+  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,
+  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,
+  336,  337,   -1,  339,  340,  341,  342,  343,  344,  345,
+  346,  347,  348,  349,  350,  351,  352,  353,  354,   -1,
+   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,  365,
+  366,  367,   -1,    0,  370,   -1,  372,   -1,   -1,  375,
+  376,  377,  378,   10,   -1,  381,  382,  383,   -1,   -1,
+   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,
+  396,  397,  398,  399,   -1,  401,  402,  403,  404,  405,
+   -1,   -1,  408,   -1,   -1,   42,  256,   44,   -1,  415,
+  416,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,
+   -1,  271,  272,   -1,   -1,  275,   -1,  277,   -1,   -1,
+  280,  281,  282,  283,  284,  285,  286,   -1,   -1,  289,
+  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,
+   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,
+  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,
+   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,  339,
+  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
+  350,  351,  352,  353,  354,   -1,   -1,  357,  358,  359,
+   -1,  361,  362,  363,    0,  365,  366,  367,   -1,   -1,
+  370,   -1,  372,   -1,   10,  375,  376,  377,  378,   -1,
+   -1,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,  389,
+   -1,   -1,  392,  393,  394,  395,  396,  397,  398,  399,
+   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,   -1,
+   -1,   -1,   -1,   -1,   -1,  415,  416,  417,   -1,   -1,
+   -1,   -1,   -1,   -1,  424,  425,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  256,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  275,   -1,
+  277,   -1,   -1,  280,  281,  282,  283,  284,  285,  286,
+   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,
+  297,   -1,   -1,   -1,  301,  302,   -1,   -1,   -1,   -1,
+    0,   -1,   -1,   -1,  311,   -1,   -1,   -1,  315,  316,
+   10,   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,
+   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,  336,
+  337,   -1,  339,  340,  341,  342,  343,  344,  345,  346,
+  347,  348,  349,  350,  351,  352,  353,  354,   -1,   -1,
+  357,  358,  359,   -1,  361,  362,  363,   -1,  365,  366,
+  367,   -1,   -1,  370,   -1,  372,   -1,   -1,  375,  376,
+  377,  378,   -1,   -1,  381,  382,  383,   -1,   -1,   -1,
+   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,  396,
+  397,  398,  399,   -1,  401,  402,  403,  404,  405,   -1,
+  256,  408,   -1,   -1,   -1,   -1,   -1,   -1,  415,  416,
+  417,   -1,   -1,   -1,   -1,  271,  272,  424,  425,  275,
+   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,  285,
+  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,
+  296,  297,   -1,   -1,   -1,  301,  302,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,   -1,  315,
+  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,
+  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,
+  336,  337,   -1,  339,  340,  341,  342,  343,  344,  345,
+  346,  347,  348,  349,  350,  351,  352,  353,  354,   -1,
+   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,  365,
+  366,  367,   -1,    0,  370,   -1,  372,   -1,   -1,  375,
+  376,  377,  378,   10,   -1,  381,  382,  383,   -1,   -1,
+   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,
+  396,  397,  398,  399,   -1,  401,  402,  403,  404,  405,
+   -1,   -1,  408,   -1,   41,   -1,  256,   44,   -1,  415,
+  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,
+   -1,  271,  272,   -1,   -1,  275,   -1,  277,   -1,   -1,
+  280,  281,  282,  283,  284,  285,  286,   -1,   -1,  289,
+  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,
+   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,
+  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,
+   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,  339,
+  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
+  350,  351,  352,  353,  354,   -1,   -1,  357,  358,  359,
+   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,    0,
+  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,   10,
+   -1,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,  389,
+   -1,   -1,  392,  393,  394,  395,  396,  397,  398,  399,
+   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,   -1,
+   41,   -1,   -1,   44,   -1,  415,  416,  417,   -1,   -1,
+   -1,   -1,   -1,   -1,  424,  425,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  256,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  275,   -1,
+  277,   -1,   -1,  280,  281,  282,  283,  284,  285,  286,
+   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,
+  297,   -1,   -1,   -1,  301,  302,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  311,   -1,   -1,   -1,  315,  316,
+   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,
+   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,  336,
+  337,   -1,  339,  340,  341,  342,  343,  344,  345,  346,
+  347,  348,  349,  350,  351,  352,  353,  354,   -1,   -1,
+  357,  358,  359,   -1,  361,  362,  363,   -1,  365,  366,
+  367,   -1,    0,  370,   -1,  372,   -1,   -1,  375,  376,
+  377,  378,   10,   -1,  381,  382,  383,   -1,   -1,   -1,
+   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,  396,
+  397,  398,  399,   -1,  401,  402,  403,  404,  405,   -1,
+   -1,  408,   -1,   41,   -1,  256,   44,   -1,  415,  416,
+  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,   -1,
+   -1,   -1,   -1,   -1,  275,   -1,  277,   -1,   -1,  280,
+  281,  282,  283,  284,  285,  286,   -1,   -1,  289,  290,
+  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,
+  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  311,   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,  320,
+   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,   -1,
+  331,   -1,  333,  334,  335,  336,  337,   -1,  339,  340,
+  341,  342,  343,  344,  345,  346,  347,  348,  349,  350,
+  351,  352,  353,  354,   -1,   -1,  357,  358,  359,   -1,
+  361,  362,  363,   -1,  365,  366,  367,   -1,    0,  370,
+   -1,  372,   -1,   -1,  375,  376,  377,  378,   10,   -1,
+  381,  382,  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,
+   -1,  392,  393,  394,  395,  396,  397,  398,  399,   -1,
+  401,  402,  403,  404,  405,   -1,   -1,  408,   -1,   41,
+   -1,   -1,   44,   -1,  415,  416,  417,   -1,   -1,   -1,
+   -1,   -1,   -1,  424,  425,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  256,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  275,   -1,  277,
+   -1,   -1,  280,  281,  282,  283,  284,  285,  286,   -1,
+   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,
+   -1,   -1,   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  311,   -1,   -1,   -1,  315,  316,   -1,
+   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,
+  328,  329,   -1,  331,   -1,  333,  334,  335,  336,  337,
+   -1,  339,  340,  341,  342,  343,  344,  345,  346,  347,
+  348,  349,  350,  351,  352,  353,  354,   -1,   -1,  357,
+  358,  359,   -1,  361,  362,  363,   -1,  365,  366,  367,
+   -1,    0,  370,   -1,  372,   -1,   -1,  375,  376,  377,
+  378,   10,   -1,  381,  382,  383,   -1,   -1,   -1,   -1,
+   -1,  389,   -1,   -1,  392,  393,  394,  395,  396,  397,
+  398,  399,   -1,  401,  402,  403,  404,  405,   -1,   -1,
+  408,   -1,   41,   -1,  256,   44,   -1,  415,  416,  417,
+   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,   -1,   -1,
+   -1,   -1,   -1,  275,   -1,  277,   -1,   -1,  280,  281,
+  282,  283,  284,  285,  286,   -1,   -1,  289,  290,  291,
+   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,  301,
+  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  311,
+   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,  320,   -1,
+   -1,   -1,   -1,   -1,  326,   -1,  328,  329,   -1,  331,
+   -1,  333,  334,  335,  336,  337,   -1,  339,  340,  341,
+  342,  343,  344,  345,  346,  347,  348,  349,  350,  351,
+  352,  353,  354,   -1,   -1,  357,  358,  359,   -1,  361,
+  362,  363,   -1,  365,  366,  367,   -1,    0,  370,   -1,
+  372,   -1,   -1,  375,  376,  377,  378,   10,   -1,  381,
+  382,  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,
+  392,  393,  394,  395,  396,  397,  398,  399,   -1,  401,
+  402,  403,  404,  405,   -1,   -1,  408,   -1,   -1,   -1,
+   -1,   44,   -1,  415,  416,  417,   -1,   -1,   -1,   -1,
+   -1,   -1,  424,  425,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  256,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  275,   -1,  277,   -1,
+   -1,  280,  281,  282,  283,  284,  285,  286,   -1,   -1,
+  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,
+   -1,   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  311,    0,   -1,   -1,  315,  316,   -1,   -1,
+   -1,  320,   -1,   10,   -1,   -1,   -1,  326,   -1,  328,
+  329,   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,
+  339,  340,  341,  342,  343,  344,  345,  346,  347,  348,
+  349,  350,  351,  352,  353,  354,   -1,   44,  357,  358,
+  359,   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,
+   -1,  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,
+   -1,   -1,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,
+  389,   -1,   -1,  392,  393,  394,  395,  396,  397,  398,
+  399,   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,
+   -1,   -1,   -1,  256,   -1,   -1,  415,  416,  417,   -1,
+   -1,   -1,   -1,   -1,   -1,  424,  425,   -1,   -1,   -1,
+   -1,   -1,  275,   -1,  277,   -1,   -1,  280,  281,  282,
+  283,  284,  285,  286,   -1,   -1,  289,  290,  291,   -1,
+   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,  301,  302,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  311,    0,
+   -1,   -1,  315,  316,   -1,   -1,   -1,  320,   -1,   10,
+   -1,   -1,   -1,  326,   -1,  328,  329,   -1,  331,   -1,
+  333,  334,  335,  336,  337,   -1,  339,  340,  341,  342,
+  343,  344,  345,  346,  347,  348,  349,  350,  351,  352,
+  353,  354,   -1,   44,  357,  358,  359,   -1,  361,  362,
+  363,   -1,  365,  366,  367,   -1,   -1,  370,   -1,  372,
+   -1,   -1,  375,  376,  377,  378,   -1,  380,  381,  382,
+  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,
+  393,  394,  395,  396,  397,  398,  399,   -1,  401,  402,
+  403,  404,  405,   -1,   -1,  408,   -1,   -1,   -1,  256,
+   -1,   -1,  415,  416,  417,   -1,   -1,   -1,   -1,   -1,
+   -1,  424,  425,   -1,   -1,   -1,   -1,   -1,  275,   -1,
+  277,   -1,   -1,  280,  281,  282,  283,  284,  285,  286,
+   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,
+  297,   -1,   -1,   -1,  301,  302,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  311,    0,   -1,   -1,  315,  316,
+   -1,   -1,   -1,  320,   -1,   10,   -1,   -1,   -1,  326,
+   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,  336,
+  337,   -1,  339,  340,  341,  342,  343,  344,  345,  346,
+  347,  348,  349,  350,  351,  352,  353,  354,   -1,   44,
+  357,  358,  359,   -1,  361,  362,  363,   -1,  365,  366,
+  367,   -1,   -1,  370,   -1,  372,   61,   -1,  375,  376,
+  377,  378,   -1,  380,  381,  382,  383,   -1,   -1,   -1,
+   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,  396,
+  397,  398,  399,   -1,  401,  402,  403,  404,  405,   -1,
+   -1,  408,   -1,   -1,   -1,  256,   -1,   -1,  415,  416,
+  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,   -1,
+   -1,   -1,   -1,   -1,  275,   -1,  277,   -1,   -1,  280,
+  281,  282,  283,  284,  285,  286,   -1,   -1,  289,  290,
+  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,
+  301,  302,   -1,   -1,   -1,   -1,    0,   -1,   -1,   -1,
+  311,   -1,   -1,   -1,  315,  316,   10,   -1,   -1,  320,
+   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,   -1,
+  331,   -1,  333,  334,  335,  336,  337,   -1,  339,  340,
+  341,  342,  343,  344,  345,  346,  347,  348,  349,  350,
+  351,  352,  353,  354,   -1,   -1,  357,  358,  359,   -1,
+  361,  362,  363,   -1,  365,  366,  367,   -1,   -1,  370,
+   -1,  372,   -1,   -1,  375,  376,  377,  378,   -1,  380,
+  381,  382,  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,
+   -1,  392,  393,  394,  395,  396,  397,  398,  399,   -1,
+  401,  402,  403,  404,  405,   -1,   -1,  408,   -1,   -1,
+   -1,  256,   -1,   -1,  415,  416,  417,   -1,   -1,   -1,
+   -1,   -1,   -1,  424,  425,   -1,   -1,   -1,   -1,   -1,
+  275,   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,
+  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,
+   -1,  296,  297,   -1,   -1,   -1,  301,  302,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,   -1,
+  315,  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,
+   -1,  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,
+  335,  336,  337,   -1,  339,  340,  341,  342,  343,  344,
+  345,  346,  347,  348,  349,  350,  351,  352,  353,  354,
+   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,
+  365,  366,  367,   -1,    0,  370,   -1,  372,   -1,   -1,
+  375,  376,  377,  378,   10,   -1,  381,  382,  383,   -1,
+   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,
+  395,  396,  397,  398,  399,   -1,  401,  402,  403,  404,
+  405,   -1,  256,  408,   -1,   -1,   -1,   -1,   44,   -1,
+  415,  416,  417,   -1,   -1,   -1,   -1,  271,  272,  424,
+  425,  275,   -1,  277,   -1,   61,  280,  281,  282,  283,
+  284,  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,
+   -1,   -1,  296,  297,   -1,   -1,   -1,  301,  302,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,
+   -1,  315,  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,
+   -1,   -1,  326,   -1,  328,  329,   -1,  331,   -1,  333,
+  334,  335,  336,  337,   -1,  339,  340,  341,  342,  343,
+  344,  345,  346,  347,  348,  349,  350,  351,  352,  353,
+  354,   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,
+   -1,  365,  366,  367,   -1,    0,  370,   -1,  372,   -1,
+   -1,  375,  376,  377,  378,   10,   -1,  381,  382,  383,
+   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,  393,
+  394,  395,  396,  397,  398,  399,   -1,  401,  402,  403,
+  404,  405,   -1,   -1,  408,   -1,   41,   -1,   -1,   44,
+   -1,  415,  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,
+  424,  425,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  256,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  275,
+   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,  285,
+  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,
+  296,  297,   -1,   -1,   -1,  301,  302,   -1,    0,   -1,
+   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,   10,  315,
+  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,
+  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,
+  336,  337,   -1,  339,  340,  341,  342,  343,  344,  345,
+  346,  347,  348,  349,  350,  351,  352,  353,  354,   -1,
+   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,  365,
+  366,  367,   -1,   -1,  370,   -1,  372,   -1,   -1,  375,
+  376,  377,  378,   -1,   -1,  381,  382,  383,   -1,   -1,
+   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,
+  396,  397,  398,  399,   -1,  401,  402,  403,  404,  405,
+   -1,  256,  408,   -1,   -1,   -1,   -1,   -1,   -1,  415,
+  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,
+  275,   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,
+  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,
+   -1,  296,  297,   -1,   -1,   -1,  301,  302,   -1,    0,
+   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,   10,
+  315,  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,
+   -1,  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,
+  335,  336,  337,   -1,  339,  340,  341,  342,  343,  344,
+  345,  346,  347,  348,  349,  350,  351,  352,  353,  354,
+   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,
+  365,  366,  367,   -1,   -1,  370,   -1,  372,   -1,   -1,
+  375,  376,  377,  378,   -1,   -1,  381,  382,  383,   -1,
+   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,
+  395,  396,  397,  398,  399,   -1,  401,  402,  403,  404,
+  405,   -1,   -1,  408,  256,   -1,   -1,   -1,   -1,   -1,
+  415,  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,
+  425,   -1,   -1,  275,   -1,  277,  278,   -1,  280,  281,
+  282,  283,  284,  285,  286,   -1,   -1,  289,  290,  291,
+   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,  301,
+  302,   -1,    0,   -1,   -1,   -1,   -1,   -1,   -1,  311,
+   -1,   -1,   10,  315,  316,   -1,   -1,   -1,  320,   -1,
+   -1,   -1,   -1,   -1,  326,   -1,  328,  329,   -1,  331,
+   -1,  333,  334,  335,  336,  337,   -1,  339,  340,  341,
+  342,  343,  344,  345,  346,  347,  348,  349,  350,  351,
+  352,  353,  354,   -1,   -1,  357,  358,  359,   -1,  361,
+  362,  363,   -1,  365,  366,  367,   -1,   -1,  370,   -1,
+  372,   -1,   -1,  375,  376,  377,  378,   -1,   -1,  381,
+  382,  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,
+  392,  393,  394,  395,  396,  397,  398,  399,   -1,  401,
+  402,  403,  404,  405,   -1,  256,  408,   -1,   -1,   -1,
+   -1,   -1,   -1,  415,  416,  417,   -1,   -1,   -1,   -1,
+   -1,   -1,  424,  425,  275,   -1,  277,   -1,   -1,  280,
+  281,  282,  283,  284,  285,  286,   -1,   -1,  289,  290,
+  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,
+  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  311,   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,  320,
+   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,   -1,
+  331,   -1,  333,  334,  335,  336,  337,   -1,  339,  340,
+  341,  342,  343,  344,  345,  346,  347,  348,  349,  350,
+  351,  352,  353,  354,   -1,   -1,  357,  358,  359,   -1,
+  361,  362,  363,   -1,  365,  366,  367,   -1,    0,  370,
+   -1,  372,   -1,   -1,  375,  376,  377,  378,   10,  380,
+  381,  382,  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,
+   -1,  392,  393,  394,  395,  396,  397,  398,  399,   -1,
+  401,  402,  403,  404,  405,   -1,   -1,  408,  256,   41,
+   -1,   -1,   44,   -1,  415,  416,  417,   -1,   -1,   -1,
+   -1,   -1,   -1,  424,  425,   -1,   -1,  275,   -1,  277,
+   -1,   -1,  280,  281,  282,  283,  284,  285,  286,   -1,
+   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,
+   -1,   -1,   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  311,   -1,   -1,   -1,  315,  316,   -1,
+   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,
+  328,  329,   -1,  331,   -1,  333,  334,  335,  336,  337,
+   -1,  339,  340,  341,  342,  343,  344,  345,  346,  347,
+  348,  349,  350,  351,  352,  353,  354,   -1,   -1,  357,
+  358,  359,   -1,  361,  362,  363,   -1,  365,  366,  367,
+   -1,    0,  370,   -1,  372,   -1,   -1,  375,  376,  377,
+  378,   10,  380,  381,  382,  383,   -1,   -1,   -1,   -1,
+   -1,  389,   -1,   -1,  392,  393,  394,  395,  396,  397,
+  398,  399,   -1,  401,  402,  403,  404,  405,   -1,   -1,
+  408,   -1,   -1,   -1,   -1,   44,   -1,  415,  416,  417,
+   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  256,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  275,   -1,  277,   -1,   -1,  280,  281,
+  282,  283,  284,  285,  286,   -1,   -1,  289,  290,  291,
+   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,  301,
+  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  311,
+   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,  320,   -1,
+   -1,   -1,   -1,   -1,  326,   -1,  328,  329,   -1,  331,
+   -1,  333,  334,  335,  336,  337,   -1,  339,  340,  341,
+  342,  343,  344,  345,  346,  347,  348,  349,  350,  351,
+  352,  353,  354,   -1,   -1,  357,  358,  359,   -1,  361,
+  362,  363,   -1,  365,  366,  367,   -1,    0,  370,   -1,
+  372,   -1,   -1,  375,  376,  377,  378,   10,   -1,  381,
+  382,  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,
+  392,  393,  394,  395,  396,  397,  398,  399,   -1,  401,
+  402,  403,  404,  405,   -1,   -1,  408,  256,   -1,   -1,
+   -1,   44,   -1,  415,  416,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  424,  425,   -1,   -1,  275,   -1,  277,   -1,
+   -1,  280,  281,  282,  283,  284,  285,  286,   -1,   -1,
+  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,
+   -1,   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,
+   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,
+  329,   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,
+  339,  340,  341,  342,  343,  344,  345,  346,  347,  348,
+  349,  350,  351,  352,  353,  354,   -1,   -1,  357,  358,
+  359,   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,
+    0,  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,
+   10,   -1,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,
+  389,   -1,   -1,  392,  393,  394,  395,  396,  397,  398,
+  399,   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,
+   -1,   -1,   -1,   -1,   44,   -1,  415,  416,  417,   -1,
+   -1,   -1,   -1,   -1,   -1,  424,  425,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  256,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  275,   -1,  277,   -1,   -1,  280,  281,  282,
+  283,  284,  285,  286,   -1,   -1,  289,  290,  291,   -1,
+   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,  301,  302,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,
+   -1,   -1,  315,  316,   -1,   -1,   -1,  320,   -1,   -1,
+   -1,   -1,   -1,  326,   -1,  328,  329,   -1,  331,   -1,
+  333,  334,  335,  336,  337,   -1,  339,  340,  341,  342,
+  343,  344,  345,  346,  347,  348,  349,  350,  351,  352,
+  353,  354,   -1,   -1,  357,  358,  359,   -1,  361,  362,
+  363,   -1,  365,  366,  367,   -1,    0,  370,   -1,  372,
+   -1,   -1,  375,  376,  377,  378,   10,   -1,  381,  382,
+  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,
+  393,  394,  395,  396,  397,  398,  399,   -1,  401,  402,
+  403,  404,  405,   -1,   -1,  408,  256,   -1,   -1,   -1,
+   44,   -1,  415,  416,  417,   -1,   -1,   -1,   -1,   -1,
+   -1,  424,  425,   -1,   -1,  275,   -1,  277,   -1,   -1,
+  280,  281,  282,  283,  284,  285,  286,   -1,   -1,  289,
+  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,
+   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,
+  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,
+   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,  339,
+  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
+  350,  351,  352,  353,  354,   -1,   -1,  357,  358,  359,
+   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,    0,
+  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,   10,
+   -1,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,  389,
+   -1,   -1,  392,  393,  394,  395,  396,  397,  398,  399,
+   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,   -1,
+   -1,   -1,   -1,   -1,   -1,  415,  416,  417,   -1,   -1,
+   -1,   -1,   -1,   -1,  424,  425,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  256,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  275,   -1,  277,   -1,   -1,  280,  281,  282,  283,
+  284,  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,
+   -1,   -1,  296,  297,   -1,   -1,   -1,  301,  302,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,
+   -1,  315,  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,
+   -1,   -1,  326,   -1,  328,  329,   -1,  331,   -1,  333,
+  334,  335,  336,  337,   -1,  339,  340,  341,  342,  343,
+  344,  345,  346,  347,  348,  349,  350,  351,  352,  353,
+  354,   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,
+   -1,  365,  366,  367,   -1,    0,  370,   -1,  372,   -1,
+   -1,  375,  376,  377,  378,   10,   -1,  381,  382,  383,
+   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,  393,
+  394,  395,  396,  397,  398,  399,   -1,  401,  402,  403,
+  404,  405,   -1,   -1,  408,  256,   -1,   -1,   -1,   44,
+   -1,  415,  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,
+  424,  425,   -1,   -1,  275,   -1,  277,   -1,   -1,  280,
+  281,  282,  283,  284,  285,  286,   -1,   -1,  289,  290,
+  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,
+  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  311,   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,  320,
+   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,   -1,
+  331,   -1,  333,  334,  335,  336,  337,   -1,  339,  340,
+  341,  342,  343,  344,  345,  346,  347,  348,  349,  350,
+  351,  352,  353,  354,   -1,   -1,  357,  358,  359,   -1,
+  361,  362,  363,   -1,  365,  366,  367,   -1,    0,  370,
+   -1,  372,   -1,   -1,  375,  376,  377,  378,   10,   -1,
+  381,  382,  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,
+   -1,  392,  393,  394,  395,  396,  397,  398,  399,   -1,
+  401,  402,  403,  404,  405,   -1,   -1,  408,   -1,   -1,
+   -1,   -1,   -1,   -1,  415,  416,  417,   -1,   -1,   -1,
+   -1,   -1,   -1,  424,  425,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  256,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  275,   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,
+  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,
+   -1,  296,  297,   -1,   -1,   -1,  301,  302,   -1,    0,
+   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,   10,
+  315,  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,
+   -1,  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,
+  335,  336,  337,   -1,  339,  340,  341,  342,  343,  344,
+  345,  346,  347,  348,  349,  350,  351,  352,  353,  354,
+   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,
+  365,  366,  367,   -1,   -1,  370,   -1,  372,   -1,   -1,
+  375,  376,  377,  378,   -1,   -1,  381,  382,  383,   -1,
+   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,
+  395,  396,  397,  398,  399,   -1,  401,  402,  403,  404,
+  405,   -1,   -1,  408,  256,   -1,   -1,   -1,   -1,   -1,
+  415,  416,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  424,
+  425,   -1,   -1,  275,   -1,  277,   -1,   -1,  280,  281,
+  282,  283,  284,  285,  286,   -1,   -1,  289,  290,  291,
+   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,  301,
+  302,   -1,    0,   -1,   -1,   -1,   -1,   -1,   -1,  311,
+   -1,   -1,   10,  315,  316,   -1,   -1,   -1,  320,   -1,
+   -1,   -1,   -1,   -1,  326,   -1,  328,  329,   -1,  331,
+   -1,  333,  334,  335,  336,  337,   -1,  339,  340,  341,
+  342,  343,  344,  345,  346,  347,  348,  349,  350,  351,
+  352,  353,  354,   -1,   -1,  357,  358,  359,   -1,  361,
+  362,  363,   -1,  365,  366,  367,   -1,   -1,  370,   -1,
+  372,   -1,   -1,  375,  376,  377,  378,   -1,   -1,  381,
+  382,  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,
+  392,  393,  394,  395,  396,  397,  398,  399,   -1,  401,
+  402,  403,  404,  405,   -1,  256,  408,   -1,   -1,   -1,
+   -1,   -1,   -1,  415,  416,  417,   -1,   -1,   -1,   -1,
+   -1,   -1,  424,  425,  275,   -1,  277,   -1,   -1,  280,
+  281,  282,  283,  284,  285,  286,   -1,   -1,  289,  290,
+  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,
+  301,  302,   -1,    0,   -1,   -1,   -1,   -1,   -1,   -1,
+  311,   -1,   -1,   10,  315,  316,   -1,   -1,   -1,  320,
+   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,   -1,
+  331,   -1,  333,  334,  335,  336,  337,   -1,  339,  340,
+  341,  342,  343,  344,  345,  346,  347,  348,  349,  350,
+  351,  352,  353,  354,   -1,   -1,  357,  358,  359,   -1,
+  361,  362,  363,   -1,  365,  366,  367,   -1,   -1,  370,
+   -1,  372,   -1,   -1,  375,  376,  377,  378,   -1,   -1,
+  381,  382,  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,
+   -1,  392,  393,  394,  395,  396,  397,  398,  399,   -1,
+  401,  402,  403,  404,  405,   -1,   -1,  408,  256,   -1,
+   -1,   -1,   -1,   -1,  415,  416,  417,   -1,   -1,   -1,
+   -1,   -1,   -1,  424,  425,   -1,   -1,  275,   -1,  277,
+   -1,   -1,  280,  281,  282,  283,  284,  285,  286,   -1,
+   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,
+   -1,   -1,   -1,  301,  302,   -1,    0,   -1,   -1,   -1,
+   -1,   -1,   -1,  311,   -1,   -1,   10,  315,  316,   -1,
+   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,
+  328,  329,   -1,  331,   -1,  333,  334,  335,  336,  337,
+   -1,  339,  340,  341,  342,  343,  344,  345,  346,  347,
+  348,  349,  350,  351,  352,  353,  354,   -1,   -1,  357,
+  358,  359,   -1,  361,  362,  363,   -1,  365,  366,  367,
+   -1,   -1,  370,   -1,  372,   -1,   -1,  375,  376,  377,
+  378,   -1,   -1,  381,  382,  383,   -1,   -1,   -1,   -1,
+   -1,  389,   -1,   -1,  392,  393,  394,  395,  396,  397,
+  398,  399,   -1,  401,  402,  403,  404,  405,   -1,  256,
+  408,   -1,   -1,   -1,   -1,   -1,   -1,  415,  416,  417,
+   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,  275,   -1,
+  277,   -1,   -1,  280,  281,  282,  283,  284,  285,  286,
+   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,
+  297,   -1,   -1,   -1,  301,  302,   -1,    0,   -1,   -1,
+   -1,   -1,   -1,   -1,  311,   -1,   -1,   10,  315,  316,
+   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,
+   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,  336,
+  337,   -1,  339,  340,  341,  342,  343,  344,  345,  346,
+  347,  348,  349,  350,  351,  352,  353,  354,   -1,   -1,
+  357,  358,  359,   -1,  361,  362,  363,   -1,  365,  366,
+  367,   -1,   -1,  370,   -1,  372,   -1,   -1,  375,  376,
+  377,  378,   -1,   -1,  381,  382,  383,   -1,   -1,   -1,
+   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,  396,
+  397,  398,  399,   -1,  401,  402,  403,  404,  405,   -1,
+   -1,  408,  256,   -1,   -1,   -1,   -1,   -1,  415,  416,
+  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,   -1,
+   -1,  275,   -1,  277,   -1,   -1,  280,  281,  282,  283,
+  284,  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,
+   -1,   -1,  296,  297,   -1,   -1,   -1,  301,  302,   -1,
+    0,   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,
+   10,  315,  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,
+   -1,   -1,  326,   -1,  328,  329,   -1,  331,   -1,  333,
+  334,  335,  336,  337,   -1,  339,  340,  341,  342,  343,
+  344,  345,  346,  347,  348,  349,  350,  351,  352,  353,
+  354,   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,
+   -1,  365,  366,  367,   -1,   -1,  370,   -1,  372,   -1,
+   -1,  375,  376,  377,  378,   -1,   -1,  381,  382,  383,
+   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,  393,
+  394,  395,  396,  397,  398,  399,   -1,  401,  402,  403,
+  404,  405,   -1,  256,  408,   -1,   -1,   -1,   -1,   -1,
+   -1,  415,  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,
+  424,  425,  275,   -1,  277,   -1,   -1,  280,  281,  282,
+  283,  284,  285,  286,   -1,   -1,  289,  290,  291,   -1,
+   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,  301,  302,
+   -1,    0,   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,
+   -1,   10,  315,  316,   -1,   -1,   -1,  320,   -1,   -1,
+   -1,   -1,   -1,  326,   -1,  328,  329,   -1,  331,   -1,
+  333,  334,  335,  336,  337,   -1,  339,  340,  341,  342,
+  343,  344,  345,  346,  347,  348,  349,  350,  351,  352,
+  353,  354,   -1,   -1,  357,  358,  359,   -1,  361,  362,
+  363,   -1,  365,  366,  367,   -1,   -1,  370,   -1,  372,
+   -1,   -1,  375,  376,  377,  378,   -1,   -1,  381,  382,
+  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,
+  393,  394,  395,  396,  397,  398,  399,   -1,  401,  402,
+  403,  404,  405,   -1,   -1,  408,  256,   -1,   -1,   -1,
+   -1,   -1,  415,  416,  417,   -1,   -1,   -1,   -1,   -1,
+   -1,  424,  425,   -1,   -1,  275,   -1,  277,   -1,   -1,
+  280,  281,  282,  283,  284,  285,  286,   -1,   -1,  289,
+  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,
+   -1,  301,  302,   -1,    0,   -1,   -1,   -1,   -1,   -1,
+   -1,  311,   -1,   -1,   10,  315,  316,   -1,   -1,   -1,
+  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,
+   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,  339,
+  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
+  350,  351,  352,  353,  354,   -1,   -1,  357,  358,  359,
+   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,   -1,
+  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,   -1,
+   -1,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,  389,
+   -1,   -1,  392,  393,  394,  395,  396,  397,  398,  399,
+   -1,  401,  402,  403,  404,  405,   -1,  256,  408,   -1,
+   -1,   -1,   -1,   -1,   -1,  415,  416,  417,   -1,   -1,
+   -1,   -1,   -1,   -1,  424,  425,  275,   -1,  277,   -1,
+   -1,  280,  281,  282,  283,  284,  285,  286,   -1,   -1,
+  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,
+   -1,   -1,  301,  302,   -1,    0,   -1,   -1,   -1,   -1,
+   -1,   -1,  311,   -1,   -1,   10,  315,  316,   -1,   -1,
+   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,
+  329,   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,
+  339,  340,  341,  342,  343,  344,  345,  346,  347,  348,
+  349,  350,  351,  352,  353,  354,   -1,   -1,  357,  358,
+  359,   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,
+   -1,  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,
+   -1,   -1,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,
+  389,   -1,   -1,  392,  393,  394,  395,  396,  397,  398,
+  399,   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,
+  256,   -1,   -1,   -1,   -1,   -1,  415,  416,  417,   -1,
+   -1,   -1,   -1,   -1,   -1,  424,  425,   -1,   -1,  275,
+   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,  285,
+  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,
+  296,  297,   -1,   -1,   -1,  301,  302,   -1,    0,   -1,
+   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,   10,  315,
+  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,
+  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,
+  336,  337,   -1,  339,  340,  341,  342,  343,  344,  345,
+  346,  347,  348,  349,  350,  351,  352,  353,  354,   -1,
+   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,  365,
+  366,  367,   -1,   -1,  370,   -1,  372,   -1,   -1,  375,
+  376,  377,  378,   -1,   -1,  381,  382,  383,   -1,   -1,
+   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,
+  396,  397,  398,  399,   -1,  401,  402,  403,  404,  405,
+   -1,  256,  408,   -1,   -1,   -1,   -1,   -1,   -1,  415,
+  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,
+  275,   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,
+  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,
+   -1,  296,  297,   -1,   -1,   -1,  301,  302,   -1,    0,
+   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,   10,
+  315,  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,
+   -1,  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,
+  335,  336,  337,   -1,  339,  340,  341,  342,  343,  344,
+  345,  346,  347,  348,  349,  350,  351,  352,  353,  354,
+   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,
+  365,  366,  367,   -1,   -1,  370,   -1,  372,   -1,   -1,
+  375,  376,  377,  378,   -1,   -1,  381,  382,  383,   -1,
+   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,
+  395,  396,  397,  398,  399,   -1,  401,  402,  403,  404,
+  405,   -1,   -1,  408,  256,   -1,   -1,   -1,   -1,   -1,
+  415,  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,
+  425,   -1,   -1,  275,   -1,  277,   -1,   -1,  280,  281,
+  282,  283,  284,  285,  286,   -1,   -1,  289,  290,  291,
+   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,  301,
+  302,   -1,    0,   -1,   -1,   -1,   -1,   -1,   -1,  311,
+   -1,   -1,   10,  315,  316,   -1,   -1,   -1,  320,   -1,
+   -1,   -1,   -1,   -1,  326,   -1,  328,  329,   -1,  331,
+   -1,  333,  334,  335,  336,  337,   -1,  339,  340,  341,
+  342,  343,  344,  345,  346,  347,  348,  349,  350,  351,
+  352,  353,  354,   -1,   -1,  357,  358,  359,   -1,  361,
+  362,  363,   -1,  365,  366,  367,   -1,   -1,  370,   -1,
+  372,   -1,   -1,  375,  376,  377,  378,   -1,   -1,  381,
+  382,  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,
+  392,  393,  394,  395,  396,  397,  398,  399,   -1,  401,
+  402,  403,  404,  405,   -1,  256,  408,   -1,   -1,   -1,
+   -1,   -1,   -1,  415,  416,  417,   -1,   -1,   -1,   -1,
+   -1,   -1,  424,  425,  275,   -1,  277,   -1,   -1,  280,
+  281,  282,  283,  284,  285,  286,   -1,   -1,  289,  290,
+  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,
+  301,  302,   -1,    0,   -1,   -1,   -1,   -1,   -1,   -1,
+  311,   -1,   -1,   10,  315,  316,   -1,   -1,   -1,  320,
+   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,   -1,
+  331,   -1,  333,  334,  335,  336,  337,   -1,  339,  340,
+  341,  342,  343,  344,  345,  346,  347,  348,  349,  350,
+  351,  352,  353,  354,   -1,   -1,  357,  358,  359,   -1,
+  361,  362,  363,   -1,  365,  366,  367,   -1,   -1,  370,
+   -1,  372,   -1,   -1,  375,  376,  377,  378,   -1,   -1,
+  381,  382,  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,
+   -1,  392,  393,  394,  395,  396,  397,  398,  399,   -1,
+  401,  402,  403,  404,  405,   -1,   -1,  408,  256,   -1,
+   -1,   -1,   -1,   -1,  415,  416,  417,   -1,   -1,   -1,
+   -1,   -1,   -1,  424,  425,   -1,   -1,  275,   -1,  277,
+   -1,   -1,  280,  281,  282,  283,  284,  285,  286,   -1,
+   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,
+   -1,   -1,   -1,  301,  302,   -1,    0,   -1,   -1,   -1,
+   -1,   -1,   -1,  311,   -1,   -1,   10,  315,  316,   -1,
+   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,
+  328,  329,   -1,  331,   -1,  333,  334,  335,  336,  337,
+   -1,  339,  340,  341,  342,  343,  344,  345,  346,  347,
+  348,  349,  350,  351,  352,  353,  354,   -1,   -1,  357,
+  358,  359,   -1,  361,  362,  363,   -1,  365,  366,  367,
+   -1,   -1,  370,   -1,  372,   -1,   -1,  375,  376,  377,
+  378,   -1,   -1,  381,  382,  383,   -1,   -1,   -1,   -1,
+   -1,  389,   -1,   -1,  392,  393,  394,  395,  396,  397,
+  398,  399,   -1,  401,  402,  403,  404,  405,   -1,  256,
+  408,   -1,   -1,   -1,   -1,   -1,   -1,  415,  416,  417,
+   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,  275,   -1,
+  277,   -1,   -1,  280,  281,  282,  283,  284,  285,  286,
+   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,
+  297,   -1,   -1,   -1,  301,  302,   -1,    0,   -1,   -1,
+   -1,   -1,   -1,   -1,  311,   -1,   -1,   10,  315,  316,
+   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,
+   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,  336,
+  337,   -1,  339,  340,  341,  342,  343,  344,  345,  346,
+  347,  348,  349,  350,  351,  352,  353,  354,   -1,   -1,
+  357,  358,  359,   -1,  361,  362,  363,   -1,  365,  366,
+  367,   -1,   -1,  370,   -1,  372,   -1,   -1,  375,  376,
+  377,  378,   -1,   -1,  381,  382,  383,   -1,   -1,   -1,
+   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,  396,
+  397,  398,  399,   -1,  401,  402,  403,  404,  405,   -1,
+   -1,  408,  256,   -1,   -1,   -1,   -1,   -1,  415,  416,
+  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,   -1,
+   -1,  275,   -1,  277,   -1,   -1,  280,  281,  282,  283,
+  284,  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,
+   -1,   -1,  296,  297,   -1,   -1,   -1,  301,  302,   -1,
+    0,   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,
+   10,  315,  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,
+   -1,   -1,  326,   -1,  328,  329,   -1,  331,   -1,  333,
+  334,  335,  336,  337,   -1,  339,  340,  341,  342,  343,
+  344,  345,  346,  347,  348,  349,  350,  351,  352,  353,
+  354,   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,
+   -1,  365,  366,  367,   -1,   -1,  370,   -1,  372,   -1,
+   -1,  375,  376,  377,  378,   -1,   -1,  381,  382,  383,
+   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,  393,
+  394,  395,  396,  397,  398,  399,   -1,  401,  402,  403,
+  404,  405,   -1,  256,  408,   -1,   -1,   -1,   -1,   -1,
+   -1,  415,  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,
+  424,  425,  275,   -1,  277,   -1,   -1,  280,  281,  282,
+  283,  284,  285,  286,   -1,   -1,  289,  290,  291,   -1,
+   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,  301,  302,
+   -1,    0,   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,
+   -1,   10,  315,  316,   -1,   -1,   -1,  320,   -1,   -1,
+   -1,   -1,   -1,  326,   -1,  328,  329,   -1,  331,   -1,
+  333,  334,  335,  336,  337,   -1,  339,  340,  341,  342,
+  343,  344,  345,  346,  347,  348,  349,  350,  351,  352,
+  353,  354,   -1,   -1,  357,  358,  359,   -1,  361,  362,
+  363,   -1,  365,  366,  367,   -1,   -1,  370,   -1,  372,
+   -1,   -1,  375,  376,  377,  378,   -1,   -1,  381,  382,
+  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,
+  393,  394,  395,  396,  397,  398,  399,   -1,  401,  402,
+  403,  404,  405,   -1,   -1,  408,  256,   -1,   -1,   -1,
+   -1,   -1,  415,  416,  417,   -1,   -1,   -1,   -1,   -1,
+   -1,  424,  425,   -1,   -1,  275,   -1,  277,   -1,   -1,
+  280,  281,  282,  283,  284,  285,  286,   -1,   -1,  289,
+  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,
+   -1,  301,  302,   -1,    0,   -1,   -1,   -1,   -1,   -1,
+   -1,  311,   -1,   -1,   10,  315,  316,   -1,   -1,   -1,
+  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,
+   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,  339,
+  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
+  350,  351,  352,  353,  354,   -1,   -1,  357,  358,  359,
+   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,   -1,
+  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,   -1,
+   -1,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,  389,
+   -1,   -1,  392,  393,  394,  395,  396,  397,  398,  399,
+   -1,  401,  402,  403,  404,  405,   -1,  256,  408,   -1,
+   -1,   -1,   -1,   -1,   -1,  415,  416,  417,   -1,   -1,
+   -1,   -1,   -1,   -1,  424,  425,  275,   -1,  277,   -1,
+   -1,  280,  281,  282,  283,  284,  285,  286,   -1,   -1,
+  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,
+   -1,   -1,  301,  302,   -1,    0,   -1,   -1,   -1,   -1,
+   -1,   -1,  311,   -1,   -1,   10,  315,  316,   -1,   -1,
+   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,
+  329,   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,
+  339,  340,  341,  342,  343,  344,  345,  346,  347,  348,
+  349,  350,  351,  352,  353,  354,   -1,   -1,  357,  358,
+  359,   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,
+   -1,  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,
+   -1,   -1,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,
+  389,   -1,   -1,  392,  393,  394,  395,  396,  397,  398,
+  399,   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,
+  256,   -1,   -1,   -1,   -1,   -1,  415,  416,  417,   -1,
+   -1,   -1,   -1,   -1,   -1,  424,  425,   -1,   -1,  275,
+   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,  285,
+  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,
+  296,  297,   -1,   -1,   -1,  301,  302,   -1,    0,   -1,
+   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,   10,  315,
+  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,
+  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,
+  336,  337,   -1,  339,  340,  341,  342,  343,  344,  345,
+  346,  347,  348,  349,  350,  351,  352,  353,  354,   -1,
+   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,  365,
+  366,  367,   -1,   -1,  370,   -1,  372,   -1,   -1,  375,
+  376,  377,  378,   -1,   -1,  381,  382,  383,   -1,   -1,
+   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,
+  396,  397,  398,  399,   -1,  401,  402,  403,  404,  405,
+   -1,  256,  408,   -1,   -1,   -1,   -1,   -1,   -1,  415,
+  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,
+  275,   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,
+  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,
+   -1,  296,  297,   -1,   -1,   -1,  301,  302,   -1,    0,
+   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,   10,
+  315,  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,
+   -1,  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,
+  335,  336,  337,   -1,  339,  340,  341,  342,  343,  344,
+  345,  346,  347,  348,  349,  350,  351,  352,  353,  354,
+   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,
+  365,  366,  367,   -1,   -1,  370,   -1,  372,   -1,   -1,
+  375,  376,  377,  378,   -1,   -1,  381,  382,  383,   -1,
+   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,
+  395,  396,  397,  398,  399,   -1,  401,  402,  403,  404,
+  405,   -1,   -1,  408,  256,   -1,   -1,   -1,   -1,   -1,
+  415,  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,
+  425,   -1,   -1,  275,   -1,  277,   -1,   -1,  280,  281,
+  282,  283,  284,  285,  286,   -1,   -1,  289,  290,  291,
+   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,  301,
+  302,   -1,    0,   -1,   -1,   -1,   -1,   -1,   -1,  311,
+   -1,   -1,   10,  315,  316,   -1,   -1,   -1,  320,   -1,
+   -1,   -1,   -1,   -1,  326,   -1,  328,  329,   -1,  331,
+   -1,  333,  334,  335,  336,  337,   -1,  339,  340,  341,
+  342,  343,  344,  345,  346,  347,  348,  349,  350,  351,
+  352,  353,  354,   -1,   -1,  357,  358,  359,   -1,  361,
+  362,  363,   -1,  365,  366,  367,   -1,   -1,  370,   -1,
+  372,   -1,   -1,  375,  376,  377,  378,   -1,   -1,  381,
+  382,  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,
+  392,  393,  394,  395,  396,  397,  398,  399,   -1,  401,
+  402,  403,  404,  405,   -1,  256,  408,   -1,   -1,   -1,
+   -1,   -1,   -1,  415,  416,  417,   -1,   -1,   -1,   -1,
+   -1,   -1,  424,  425,  275,   -1,  277,   -1,   -1,  280,
+  281,  282,  283,  284,  285,  286,   -1,   -1,  289,  290,
+  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,
+  301,  302,   -1,    0,   -1,   -1,   -1,   -1,   -1,   -1,
+  311,   -1,   -1,   10,  315,  316,   -1,   -1,   -1,  320,
+   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,   -1,
+  331,   -1,  333,  334,  335,  336,  337,   -1,  339,  340,
+  341,  342,  343,  344,  345,  346,  347,  348,  349,  350,
+  351,  352,  353,  354,   -1,   -1,  357,  358,  359,   -1,
+  361,  362,  363,   -1,  365,  366,  367,   -1,   -1,  370,
+   -1,  372,   -1,   -1,  375,  376,  377,  378,   -1,   -1,
+  381,  382,  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,
+   -1,  392,  393,  394,  395,  396,  397,  398,  399,   -1,
+  401,  402,  403,  404,  405,   -1,   -1,  408,  256,   -1,
+   -1,   -1,   -1,   -1,  415,  416,  417,   -1,   -1,   -1,
+   -1,   -1,   -1,  424,  425,   -1,   -1,  275,   -1,  277,
+   -1,   -1,  280,  281,  282,  283,  284,  285,  286,   -1,
+   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,
+   -1,   -1,   -1,  301,  302,   -1,    0,   -1,   -1,   -1,
+   -1,   -1,   -1,  311,   -1,   -1,   10,  315,  316,   -1,
+   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,
+  328,  329,   -1,  331,   -1,  333,  334,  335,  336,  337,
+   -1,  339,  340,  341,  342,  343,  344,  345,  346,  347,
+  348,  349,  350,  351,  352,  353,  354,   -1,   -1,  357,
+  358,  359,   -1,  361,  362,  363,   -1,  365,  366,  367,
+   -1,   -1,  370,   -1,  372,   -1,   -1,  375,  376,  377,
+  378,   -1,   -1,  381,  382,  383,   -1,   -1,   -1,   -1,
+   -1,  389,   -1,   -1,  392,  393,  394,  395,  396,  397,
+  398,  399,   -1,  401,  402,  403,  404,  405,   -1,  256,
+  408,   -1,   -1,   -1,   -1,   -1,   -1,  415,  416,  417,
+   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,  275,   -1,
+  277,   -1,   -1,  280,  281,  282,  283,  284,  285,  286,
+   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,
+  297,   -1,   -1,   -1,  301,  302,   -1,    0,   -1,   -1,
+   -1,   -1,   -1,   -1,  311,   -1,   -1,   10,  315,  316,
+   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,
+   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,  336,
+  337,   -1,  339,  340,  341,  342,  343,  344,  345,  346,
+  347,  348,  349,  350,  351,  352,  353,  354,   -1,   -1,
+  357,  358,  359,   -1,  361,  362,  363,   -1,  365,  366,
+  367,   -1,   -1,  370,   -1,  372,   -1,   -1,  375,  376,
+  377,  378,   -1,   -1,  381,  382,  383,   -1,   -1,   -1,
+   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,  396,
+  397,  398,  399,   -1,  401,  402,  403,  404,  405,   -1,
+   -1,  408,  256,   -1,   -1,   -1,   -1,   -1,  415,  416,
+  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,   -1,
+   -1,  275,   -1,  277,   -1,   -1,  280,  281,  282,  283,
+  284,  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,
+   -1,   -1,  296,  297,   -1,   -1,   -1,  301,  302,   -1,
+    0,   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,
+   10,  315,  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,
+   -1,   -1,  326,   -1,  328,  329,   -1,  331,   -1,  333,
+  334,  335,  336,  337,   -1,  339,  340,  341,  342,  343,
+  344,  345,  346,  347,  348,  349,  350,  351,  352,  353,
+  354,   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,
+   -1,  365,  366,  367,   -1,   -1,  370,   -1,  372,   -1,
+   -1,  375,  376,  377,  378,   -1,   -1,  381,  382,  383,
+   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,  393,
+  394,  395,  396,  397,  398,  399,   -1,  401,  402,  403,
+  404,  405,   -1,  256,  408,   -1,   -1,   -1,   -1,   -1,
+   -1,  415,  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,
+  424,  425,  275,   -1,  277,   -1,   -1,  280,  281,  282,
+  283,  284,  285,  286,   -1,   -1,  289,  290,  291,   -1,
+   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,  301,  302,
+   -1,    0,   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,
+   -1,   10,  315,  316,   -1,   -1,   -1,  320,   -1,   -1,
+   -1,   -1,   -1,  326,   -1,  328,  329,   -1,  331,   -1,
+  333,  334,  335,  336,  337,   -1,  339,  340,  341,  342,
+  343,  344,  345,  346,  347,  348,  349,  350,  351,  352,
+  353,  354,   -1,   -1,  357,  358,  359,   -1,  361,  362,
+  363,   -1,  365,  366,  367,   -1,   -1,  370,   -1,  372,
+   -1,   -1,  375,  376,  377,  378,   -1,   -1,  381,  382,
+  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,
+  393,  394,  395,  396,  397,  398,  399,   -1,  401,  402,
+  403,  404,  405,   -1,   -1,  408,  256,   -1,   -1,   -1,
+   -1,   -1,  415,  416,  417,   -1,   -1,   -1,   -1,   -1,
+   -1,  424,  425,   -1,   -1,  275,   -1,  277,   -1,   -1,
+  280,  281,  282,  283,  284,  285,  286,   -1,   -1,  289,
+  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,
+   -1,  301,  302,   -1,    0,   -1,   -1,   -1,   -1,   -1,
+   -1,  311,   -1,   -1,   10,  315,  316,   -1,   -1,   -1,
+  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,
+   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,  339,
+  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
+  350,  351,  352,  353,  354,   -1,   -1,  357,  358,  359,
+   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,   -1,
+  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,   -1,
+   -1,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,  389,
+   -1,   -1,  392,  393,  394,  395,  396,  397,  398,  399,
+   -1,  401,  402,  403,  404,  405,   -1,  256,  408,   -1,
+   -1,   -1,   -1,   -1,   -1,  415,  416,  417,   -1,   -1,
+   -1,   -1,   -1,   -1,  424,  425,  275,   -1,  277,   -1,
+   -1,  280,  281,  282,  283,  284,  285,  286,   -1,   -1,
+  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,
+   -1,   -1,  301,  302,    0,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  311,   -1,   10,   -1,  315,  316,   -1,   -1,
+   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,
+  329,   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,
+  339,  340,  341,  342,  343,  344,  345,  346,  347,  348,
+  349,  350,  351,  352,  353,  354,   -1,   -1,  357,  358,
+  359,   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,
+   -1,  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,
+   -1,   -1,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,
+  389,   -1,   -1,  392,  393,  394,  395,  396,  397,  398,
+  399,   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,
+  256,   -1,   -1,   -1,   -1,   -1,  415,  416,  417,   -1,
+   -1,   -1,   -1,   -1,   -1,  424,  425,   -1,   -1,  275,
+   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,  285,
+  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,
+  296,  297,   -1,   -1,   -1,  301,  302,    0,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  311,   -1,   10,   -1,  315,
+  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,
+  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,
+  336,  337,   -1,  339,  340,  341,  342,  343,  344,  345,
+  346,  347,  348,  349,  350,  351,  352,  353,  354,   -1,
+   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,  365,
+  366,  367,   -1,   -1,  370,   -1,  372,   -1,   -1,  375,
+  376,  377,  378,   -1,   -1,  381,  382,  383,   -1,   -1,
+   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,
+  396,  397,  398,  399,   -1,  401,  402,  403,  404,  405,
+  256,   -1,  408,   -1,   -1,   -1,   -1,   -1,   -1,  415,
+  416,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,
+   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,  285,
+  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,
+  296,  297,   -1,   -1,   -1,  301,  302,   -1,    0,   -1,
+   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,   10,  315,
+  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,
+  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,
+  336,  337,   -1,  339,  340,  341,  342,  343,  344,  345,
+  346,  347,  348,  349,  350,  351,  352,  353,  354,   -1,
+   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,  365,
+  366,  367,   -1,   -1,  370,   -1,  372,   -1,   -1,  375,
+  376,  377,  378,   -1,   -1,  381,  382,  383,   -1,   -1,
+   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,
+  396,  397,  398,  399,   -1,  401,  402,  403,  404,  405,
+   -1,   -1,  408,  256,   -1,   -1,   -1,   -1,   -1,  415,
+  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,
+   -1,   -1,  275,   -1,  277,   -1,   -1,  280,  281,  282,
+  283,  284,  285,  286,   -1,   -1,  289,  290,  291,   -1,
+   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,  301,  302,
+   -1,    0,   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,
+   -1,   10,  315,  316,   -1,   -1,   -1,  320,   -1,   -1,
+   -1,   -1,   -1,  326,   -1,  328,  329,   -1,  331,   -1,
+  333,  334,  335,  336,  337,   -1,  339,  340,  341,  342,
+  343,  344,  345,  346,  347,  348,  349,  350,  351,  352,
+  353,  354,   -1,   -1,  357,  358,  359,   -1,  361,  362,
+  363,   -1,  365,  366,  367,   -1,   -1,  370,   -1,  372,
+   -1,   -1,  375,  376,  377,  378,   -1,   -1,  381,  382,
+  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,
+  393,  394,  395,  396,  397,  398,  399,   -1,  401,  402,
+  403,  404,  405,   -1,  256,  408,   -1,   -1,   -1,   -1,
+   -1,   -1,  415,  416,  417,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  425,  275,   -1,  277,   -1,   -1,  280,  281,
+  282,  283,  284,  285,  286,   -1,   -1,  289,  290,  291,
+   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,  301,
+  302,   -1,    0,   -1,   -1,   -1,   -1,   -1,   -1,  311,
+   -1,   -1,   10,  315,  316,   -1,   -1,   -1,  320,   -1,
+   -1,   -1,   -1,   -1,  326,   -1,  328,  329,   -1,  331,
+   -1,  333,  334,  335,  336,  337,   -1,  339,  340,  341,
+  342,  343,  344,  345,  346,  347,  348,  349,  350,  351,
+  352,  353,  354,   -1,   -1,  357,  358,  359,   -1,  361,
+  362,  363,   -1,  365,  366,  367,   -1,   -1,  370,   -1,
+  372,   -1,   -1,  375,  376,  377,  378,   -1,   -1,  381,
+  382,  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,
+  392,  393,  394,  395,  396,  397,  398,  399,   -1,  401,
+  402,  403,  404,  405,   -1,   -1,  408,  256,   -1,   -1,
+   -1,   -1,   -1,  415,  416,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  424,  425,   -1,   -1,  275,   -1,  277,   -1,
+   -1,  280,  281,  282,  283,  284,  285,  286,   -1,   -1,
+  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,
+   -1,   -1,  301,  302,   -1,    0,   -1,   -1,   -1,   -1,
+   -1,   -1,  311,   -1,   -1,   10,  315,  316,   -1,   -1,
+   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,
+  329,   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,
+  339,  340,  341,  342,  343,  344,  345,  346,  347,  348,
+  349,  350,  351,  352,  353,  354,   -1,   -1,  357,  358,
+  359,   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,
+   -1,  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,
+   -1,   -1,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,
+  389,   -1,   -1,  392,  393,  394,  395,   -1,  397,  398,
+  399,   -1,  401,  402,  403,  404,  405,   -1,  256,  408,
+   -1,   -1,   -1,   -1,   -1,   -1,  415,  416,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  425,  275,   -1,  277,
+   -1,   -1,  280,  281,  282,  283,  284,  285,  286,   -1,
+   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,
+   -1,   -1,   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  311,   -1,   -1,   -1,  315,  316,   -1,
+   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,
+  328,  329,   -1,  331,   -1,  333,  334,  335,  336,  337,
+   -1,  339,  340,  341,  342,  343,  344,  345,  346,  347,
+  348,  349,  350,  351,  352,  353,  354,   -1,   -1,  357,
+  358,  359,   -1,  361,  362,  363,   -1,  365,  366,  367,
+   -1,   -1,  370,   -1,  372,   -1,   -1,  375,  376,  377,
+  378,   -1,   -1,  381,  382,  383,   -1,   40,   -1,   42,
+   43,  389,   45,   -1,  392,  393,  394,  395,   -1,  397,
+  398,  399,   -1,  401,  402,  403,  404,  405,   61,   -1,
+  408,  256,   -1,   -1,   -1,   -1,   -1,  415,  416,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  425,   -1,   -1,
+  275,   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,
+  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,
+   -1,  296,  297,   -1,   -1,   -1,  301,  302,   -1,   41,
+   42,   43,   -1,   45,   -1,   -1,  311,   -1,   -1,   -1,
+  315,  316,   -1,   -1,   -1,  320,   58,   -1,   60,   61,
+   62,  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,
+  335,  336,  337,   -1,  339,  340,  341,  342,  343,  344,
+  345,  346,  347,  348,  349,  350,  351,  352,  353,  354,
+   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,
+  365,  366,  367,   -1,   -1,  370,   -1,  372,   -1,   -1,
+  375,  376,  377,  378,   -1,   -1,  381,  382,  383,   -1,
+   40,   -1,   42,   43,  389,   45,   -1,  392,  393,  394,
+  395,  396,  397,  398,  399,   -1,  401,  402,  403,  404,
+  405,   61,   -1,  408,   -1,   -1,   -1,   -1,   -1,   -1,
+  415,  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   40,   -1,
+   -1,   43,   -1,   45,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   61,
+  263,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  287,  288,   -1,   -1,   -1,  292,
+  293,  294,  295,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  304,  305,  306,  307,  308,  309,  310,   -1,  312,
+  313,  314,   -1,   -1,  317,  318,  319,   -1,  321,  322,
+  323,  324,  325,   -1,  327,   -1,  258,  259,  260,  261,
+  262,   -1,  264,  265,  266,  267,  268,  269,   -1,   -1,
+  272,  273,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  379,   40,   -1,   -1,
+   43,   -1,   45,   -1,   -1,   -1,   -1,  390,  391,   -1,
+   -1,   -1,   -1,  396,   -1,   -1,   -1,   -1,   61,   -1,
+   -1,   -1,   -1,  406,  407,   -1,   -1,  410,  411,  412,
+  413,   -1,   -1,  263,  417,   -1,   -1,   -1,   -1,   -1,
+   -1,  424,   -1,   -1,   -1,   40,   -1,   -1,   43,   -1,
+   45,   -1,   -1,   -1,   -1,   -1,   -1,  287,  288,   -1,
+   -1,   -1,  292,  293,  294,  295,   61,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  304,  305,  306,  307,  308,  309,
+  310,  263,  312,  313,  314,   -1,   -1,  317,  318,  319,
+   -1,  321,  322,  323,  324,  325,   -1,  327,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  287,  288,   -1,   -1,   -1,
+  292,  293,  294,  295,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  304,  305,  306,  307,  308,  309,  310,   -1,
+  312,  313,  314,   -1,   -1,  317,  318,  319,   -1,  321,
+  322,  323,  324,  325,   -1,  327,   -1,   -1,   -1,  379,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  390,  391,   -1,   -1,   -1,   -1,  396,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  406,  407,   -1,   -1,
+  410,  411,  412,  413,   -1,   -1,   40,  417,   42,   43,
+   -1,   45,   -1,   -1,  424,   -1,   -1,  379,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  390,  391,
+   -1,   -1,   -1,   -1,  396,   -1,   -1,   -1,   -1,   -1,
+  263,   -1,   -1,   -1,  406,  407,   -1,   -1,  410,  411,
+  412,  413,   -1,   -1,   40,  417,   42,   43,   -1,   45,
+   -1,   -1,  424,   -1,  287,  288,   -1,   -1,   -1,  292,
+  293,  294,  295,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  304,  305,  306,  307,  308,  309,  310,  263,  312,
+  313,  314,   -1,   -1,  317,  318,  319,   -1,  321,  322,
+  323,  324,  325,   -1,  327,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  287,  288,   -1,   -1,   -1,  292,  293,  294,
+  295,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  304,
+  305,  306,  307,  308,  309,  310,   -1,  312,  313,  314,
+   -1,   -1,  317,  318,  319,   -1,  321,  322,  323,  324,
+  325,   -1,  327,   -1,   -1,   -1,  379,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  390,  391,   -1,
+   -1,   -1,   -1,  396,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  406,  407,   -1,   -1,  410,  411,  412,
+  413,   -1,   40,   -1,  417,   43,   -1,   45,   -1,   -1,
+   -1,  424,   -1,   -1,  379,   -1,   -1,   -1,   -1,   -1,
+   58,   -1,   -1,   -1,   -1,  390,  391,   -1,   -1,   -1,
+   -1,  396,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  263,
+   -1,  406,  407,   -1,   -1,  410,  411,  412,  413,   -1,
+   -1,   -1,  417,   -1,   -1,   40,   -1,   -1,   43,  424,
+   45,   -1,   -1,  287,  288,   -1,   -1,   -1,  292,  293,
+  294,  295,   -1,   58,   -1,   -1,   -1,   -1,   -1,   -1,
+  304,  305,  306,  307,  308,  309,  310,  263,  312,  313,
+  314,   -1,   -1,  317,  318,  319,   -1,  321,  322,  323,
+  324,  325,   -1,  327,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  287,  288,   -1,   -1,   -1,  292,  293,  294,  295,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  304,  305,
+  306,  307,  308,  309,  310,   -1,  312,  313,  314,   -1,
+   -1,  317,  318,  319,   -1,  321,  322,  323,  324,  325,
+   -1,  327,   -1,   -1,   -1,  379,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  390,  391,   -1,   -1,
+   -1,   -1,  396,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  406,  407,   -1,   -1,  410,  411,  412,  413,
+   -1,   -1,   -1,  417,   40,   -1,   42,   43,   -1,   45,
+  424,   -1,   -1,  379,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  390,  391,   -1,   -1,   -1,   -1,
+  396,   -1,   -1,   -1,   -1,  263,   -1,   -1,   -1,   -1,
+  406,  407,   -1,   -1,  410,  411,  412,  413,   -1,   -1,
+   -1,  417,   40,   -1,   42,   43,   -1,   45,  424,  287,
+  288,   -1,   -1,   -1,  292,  293,  294,  295,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  304,  305,  306,  307,
+  308,  309,  310,   -1,  312,  313,  314,   -1,  263,  317,
+  318,  319,   -1,  321,  322,  323,  324,  325,   -1,  327,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  287,  288,   -1,   -1,   -1,  292,  293,  294,
+  295,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  304,
+  305,  306,  307,  308,  309,  310,   -1,  312,  313,  314,
+   -1,   -1,  317,  318,  319,   -1,  321,  322,  323,  324,
+  325,  379,  327,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  390,  391,   -1,   -1,   -1,   -1,  396,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  406,  407,
+   -1,   -1,  410,  411,  412,  413,   -1,   40,   -1,  417,
+   43,   -1,   45,   -1,   -1,   -1,  424,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  379,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  390,  391,   -1,   -1,   -1,
+   -1,  396,   -1,   -1,   -1,   -1,   -1,  263,   -1,   -1,
+   -1,  406,  407,   -1,   -1,  410,  411,  412,  413,   -1,
+   40,   -1,  417,   43,   -1,   45,   -1,   -1,   -1,  424,
+   -1,  287,  288,   -1,   -1,   -1,  292,  293,  294,  295,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  304,  305,
+  306,  307,  308,  309,  310,  263,  312,  313,  314,   -1,
+   -1,  317,  318,  319,   -1,  321,  322,  323,  324,  325,
+   -1,  327,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  287,
+  288,   -1,   -1,   -1,  292,  293,  294,  295,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  304,  305,  306,  307,
+  308,  309,  310,   -1,  312,  313,  314,   -1,   -1,  317,
+  318,  319,   -1,  321,  322,  323,  324,  325,   -1,  327,
+   -1,   -1,   -1,  379,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  390,  391,   -1,   -1,   -1,   -1,
+  396,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  406,  407,   -1,   -1,  410,  411,  412,  413,   -1,   40,
+   -1,  417,   43,   -1,   45,   -1,   -1,   -1,  424,   -1,
+   -1,  379,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  390,  391,   -1,   -1,   -1,   -1,  396,   -1,
+  263,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  406,  407,
+   -1,   -1,  410,  411,  412,  413,   -1,   40,   -1,  417,
+   43,   -1,   45,   -1,  287,  288,  424,   -1,   -1,  292,
+  293,  294,  295,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  304,  305,  306,  307,  308,  309,  310,   -1,  312,
+  313,  314,   -1,  263,  317,  318,  319,   -1,  321,  322,
+  323,  324,  325,   -1,  327,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  287,  288,   -1,
+   -1,   -1,  292,  293,  294,  295,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  304,  305,  306,  307,  308,  309,
+  310,   -1,  312,  313,  314,   -1,   -1,  317,  318,  319,
+   -1,  321,  322,  323,  324,  325,  379,  327,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  390,  391,   -1,
+   -1,   -1,   -1,  396,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  406,  407,   -1,   -1,  410,  411,  412,
+  413,   -1,   40,   -1,  417,   43,   -1,   45,   -1,   -1,
+   -1,  424,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  379,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  390,  391,   -1,   -1,   -1,   -1,  396,   -1,   -1,   -1,
+   -1,   -1,  263,   -1,   -1,   -1,  406,  407,   -1,   -1,
+  410,  411,  412,  413,   -1,   40,   -1,  417,   43,   -1,
+   45,   -1,   -1,   -1,  424,   -1,  287,  288,   -1,   -1,
+   -1,  292,  293,  294,  295,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  304,  305,  306,  307,  308,  309,  310,
+  263,  312,  313,  314,   -1,   -1,  317,  318,  319,   -1,
+  321,  322,  323,  324,  325,   -1,  327,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  287,  288,   -1,   -1,   -1,  292,
+  293,  294,  295,   -1,   40,   -1,   42,   43,   -1,   45,
+   -1,  304,  305,  306,  307,  308,  309,  310,   -1,  312,
+  313,  314,   -1,   -1,  317,  318,  319,   -1,  321,  322,
+  323,  324,  325,   -1,  327,   -1,   -1,   -1,  379,   -1,
+   40,   -1,   42,   43,   -1,   45,   -1,   -1,   -1,  390,
+  391,   -1,   -1,   -1,   -1,  396,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  406,  407,   -1,   -1,  410,
+  411,  412,  413,   -1,   -1,   -1,  417,   -1,   -1,   -1,
+   -1,   -1,   -1,  424,   -1,   -1,  379,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  390,  391,   -1,
+   -1,   -1,   -1,  396,   -1,  263,   41,   42,   43,   -1,
+   45,   -1,   -1,  406,  407,   -1,   -1,  410,  411,  412,
+  413,   -1,   -1,   58,  417,   60,   61,   62,   -1,  287,
+  288,  424,   -1,   -1,  292,  293,  294,  295,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  304,  305,  306,  307,
+  308,  309,  310,   -1,  312,  313,  314,   -1,  263,  317,
+  318,  319,   -1,  321,  322,  323,  324,  325,   -1,  327,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   41,   42,   43,
+   44,   45,  287,  288,   -1,   -1,   -1,  292,  293,  294,
+  295,   -1,   -1,   -1,   -1,   -1,   60,   61,   62,  304,
+  305,  306,  307,  308,  309,  310,   -1,  312,  313,  314,
+   -1,   -1,  317,  318,  319,   -1,  321,  322,  323,  324,
+  325,  379,  327,   41,   42,   43,   -1,   45,   -1,   -1,
+   -1,   -1,  390,  391,   -1,   -1,   -1,  273,  396,   -1,
+   -1,   -1,   60,   61,   62,   -1,   -1,   -1,  406,  407,
+   -1,   -1,  410,  411,  412,  413,   41,   42,   43,  417,
+   45,   -1,  298,  299,  300,   -1,  424,  303,   -1,   -1,
+   -1,   -1,   -1,   -1,  379,   60,   61,   62,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  390,  391,   -1,   -1,   -1,
+   -1,  396,   -1,   -1,   -1,   -1,   -1,   -1,  298,  299,
+  300,  406,  407,  303,   -1,  410,  411,  412,  413,   -1,
+   -1,   -1,  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,
+   -1,   -1,   -1,  258,  259,  260,  261,  262,   -1,  264,
+  265,  266,  267,  268,  269,   -1,   -1,  272,  273,   41,
+   42,   43,   -1,   45,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  390,  391,   -1,   -1,   60,   61,
+   62,   -1,   -1,   41,   42,   43,   -1,   45,   -1,   -1,
+  406,  407,   -1,   -1,  410,  411,  412,  413,   -1,   -1,
+   -1,  417,   60,   61,   62,   -1,   -1,   -1,  424,   -1,
+  390,  391,   -1,   -1,  258,  259,  260,  261,  262,   -1,
+  264,  265,  266,  267,  268,  269,  406,  407,  272,  273,
+  410,  411,  412,  413,   41,   42,   43,  417,   45,   -1,
+   -1,   -1,   -1,   -1,  424,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   60,   61,   62,   -1,   -1,   -1,   -1,
+  258,  259,  260,  261,  262,   -1,  264,  265,  266,  267,
+  268,  269,   -1,   -1,  272,  273,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  258,  259,  260,  261,  262,   -1,  264,
+  265,  266,  267,  268,  269,   -1,   -1,  272,  273,   41,
+   42,   43,   -1,   45,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   60,   61,
+   62,   41,   42,   43,   -1,   45,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   60,   61,   62,   41,   42,   43,   -1,   45,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   60,   61,   62,   -1,  258,  259,  260,  261,
+  262,   -1,  264,  265,  266,  267,  268,  269,   -1,   -1,
+  272,  273,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  258,  259,  260,  261,  262,   -1,  264,  265,  266,  267,
+  268,  269,   -1,   -1,  272,  273,   41,   42,   43,   -1,
+   45,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   60,   61,   62,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  258,  259,  260,  261,  262,   -1,  264,  265,  266,
+  267,  268,  269,   -1,   -1,  272,  273,   41,   42,   43,
+   -1,   45,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   60,   61,   62,   41,
+   42,   43,   -1,   45,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   60,   61,
+   62,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  258,  259,  260,  261,
+  262,   -1,  264,  265,  266,  267,  268,  269,   -1,   -1,
+  272,  273,   -1,   -1,   -1,   -1,   -1,   -1,  258,  259,
+  260,  261,  262,   -1,  264,  265,  266,  267,  268,  269,
+   -1,   -1,  272,  273,   -1,   -1,   -1,   -1,   -1,   -1,
+  258,  259,  260,  261,  262,   -1,  264,  265,  266,  267,
+  268,  269,   -1,   -1,  272,  273,   41,   42,   43,   -1,
+   45,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   60,   61,   62,   41,   42,
+   43,   -1,   45,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   60,   61,   62,
+   -1,   -1,   -1,  258,  259,  260,  261,  262,   -1,  264,
+  265,  266,  267,  268,  269,   -1,   -1,  272,  273,   41,
+   42,   43,   -1,   45,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   60,   61,
+   62,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  258,  259,  260,  261,  262,   -1,
+  264,  265,  266,  267,  268,  269,   -1,   -1,  272,  273,
+   -1,   -1,   -1,   -1,   -1,   -1,  258,  259,  260,  261,
+  262,   -1,  264,  265,  266,  267,  268,  269,   -1,   -1,
+  272,  273,   41,   42,   43,   -1,   45,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   60,   61,   62,   41,   42,   43,   -1,   45,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   60,   61,   62,   41,   42,   43,   -1,
+   45,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   60,   61,   62,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  258,  259,  260,  261,  262,   -1,  264,
+  265,  266,  267,  268,  269,   -1,   -1,  272,  273,   -1,
+   -1,   -1,   -1,   -1,   -1,  258,  259,  260,  261,  262,
+   -1,  264,  265,  266,  267,  268,  269,   -1,   -1,  272,
+  273,   41,   42,   43,   -1,   45,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   60,   61,   62,   -1,   -1,   -1,  258,  259,  260,  261,
+  262,   -1,  264,  265,  266,  267,  268,  269,   -1,   -1,
+  272,  273,   41,   42,   43,   -1,   45,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   60,   61,   62,   41,   42,   43,   -1,   45,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   60,   61,   62,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  258,
+  259,  260,  261,  262,   -1,  264,  265,  266,  267,  268,
+  269,   -1,   -1,  272,  273,   -1,   -1,   -1,   -1,   -1,
+   -1,  258,  259,  260,  261,  262,   -1,  264,  265,  266,
+  267,  268,  269,   -1,   -1,  272,  273,   -1,   -1,   -1,
+   -1,   -1,   -1,  258,  259,  260,  261,  262,   -1,  264,
+  265,  266,  267,  268,  269,   -1,   -1,  272,  273,   41,
+   42,   43,   -1,   45,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   60,   61,
+   62,   41,   42,   43,   -1,   45,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   60,   61,   62,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  258,  259,
+  260,  261,  262,   -1,  264,  265,  266,  267,  268,  269,
+   -1,   -1,  272,  273,   41,   42,   43,   -1,   45,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   60,   61,   62,   -1,   -1,   -1,  258,
+  259,  260,  261,  262,   -1,  264,  265,  266,  267,  268,
+  269,   -1,   -1,  272,  273,   -1,   -1,   -1,   -1,   -1,
+   -1,  258,  259,  260,  261,  262,   -1,  264,  265,  266,
+  267,  268,  269,   -1,   -1,  272,  273,   41,   42,   43,
+   -1,   45,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   60,   61,   62,   41,
+   42,   43,   -1,   45,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   60,   61,
+   62,   42,   43,   44,   45,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   60,
+   61,   62,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  258,  259,  260,  261,
+  262,   -1,  264,  265,  266,  267,  268,  269,   -1,   -1,
+  272,  273,   -1,   -1,   -1,   -1,   -1,   -1,  258,  259,
+  260,  261,  262,   -1,  264,  265,  266,  267,  268,  269,
+   -1,   -1,  272,  273,   42,   43,   44,   45,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   60,   61,   62,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  258,  259,  260,  261,  262,   -1,  264,  265,  266,
+  267,  268,  269,   -1,   -1,  272,  273,   42,   43,   44,
+   45,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   60,   61,   62,   42,   43,
+   44,   45,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   60,   61,   62,   -1,
+   -1,   -1,   -1,   -1,  258,  259,  260,  261,  262,   -1,
+  264,  265,  266,  267,  268,  269,   -1,   -1,  272,  273,
+   -1,   -1,   -1,   -1,   -1,   -1,  258,  259,  260,  261,
+  262,   -1,  264,  265,  266,  267,  268,  269,   -1,   -1,
+  272,  273,   -1,   -1,   -1,   -1,   -1,  258,  259,  260,
+  261,  262,   -1,  264,  265,  266,  267,  268,  269,   -1,
+   -1,  272,  273,   42,   43,   44,   45,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   60,   61,   62,   42,   43,   44,   45,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   60,   61,   62,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  258,  259,  260,  261,  262,   -1,  264,  265,  266,  267,
+  268,  269,   -1,   -1,  272,  273,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  258,  259,  260,  261,  262,   -1,  264,
+  265,  266,  267,  268,  269,   -1,   -1,  272,  273,   -1,
+   -1,   -1,   -1,   -1,  258,  259,  260,  261,  262,   -1,
+  264,  265,  266,  267,  268,  269,   -1,   -1,  272,  273,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  258,
+  259,  260,  261,  262,   -1,  264,  265,  266,  267,  268,
+  269,   -1,   -1,  272,  273,   -1,   -1,   -1,   -1,   -1,
+  258,  259,  260,  261,  262,   -1,  264,  265,  266,  267,
+  268,  269,   -1,  277,  272,  273,  280,   -1,  282,  283,
+   -1,   -1,  286,   -1,   -1,  289,  290,  291,   -1,   -1,
+   -1,   -1,  296,  297,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,
+   -1,  315,  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,
+   -1,   -1,  326,   -1,  328,  329,   -1,  331,   -1,  333,
+  334,  335,  336,  337,   -1,  339,  340,  341,  342,  343,
+  344,  345,  346,  347,  348,  349,  350,  351,  352,  353,
+  354,   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,
+   -1,  365,  366,  367,   -1,   -1,  370,   -1,  372,   -1,
+   -1,  375,  376,  377,  378,   -1,   -1,  381,  382,  383,
+   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,   -1,  393,
+  394,  395,  396,  397,  398,  399,   -1,  401,  402,  403,
+  404,  405,   -1,   -1,  408,   -1,   -1,   -1,   -1,   -1,
+   -1,  415,  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,
+  424,
+};
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 1
+#endif
+#define YYMAXTOKEN 426
+#if YYDEBUG
+char *fortranname[] = {
+"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,"'!'",0,0,0,"'%'",0,0,"'('","')'","'*'","'+'","','","'-'",0,"'/'",0,0,0,0,0,
+0,0,0,0,0,"':'",0,"'<'","'='","'>'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,"'['",0,"']'",0,"'_'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"TOK_BINARY_OP","TOK_EQV","TOK_NEQV",
+"TOK_OR","TOK_XOR","TOK_AND","TOK_NOT","TOK_LT","TOK_GT","TOK_LE","TOK_GE",
+"TOK_EQ","TOK_NE","TOK_UNARY_OP","TOK_DSLASH","TOK_SLASH","TOK_DASTER",
+"TOK_SEP","TOK_SEMICOLON","TOK_NEXTLINE","TOK_PARAMETER","TOK_RESULT",
+"TOK_ONLY","TOK_INCLUDE","TOK_SUBROUTINE","TOK_PROGRAM","TOK_FUNCTION",
+"TOK_OMP","TOK_DOLLAR","TOK_FORMAT","TOK_MAX","TOK_TANH","TOK_WHERE",
+"TOK_ELSEWHERE","TOK_ENDWHERE","TOK_MAXVAL","TOK_TRIM","TOK_SUM","TOK_SQRT",
+"TOK_CASE","TOK_SELECTCASE","TOK_FILE","TOK_END","TOK_ERR","TOK_DONOTTREAT",
+"TOK_ENDDONOTTREAT","TOK_EXIST","TOK_MIN","TOK_FLOAT","TOK_EXP","TOK_COS",
+"TOK_COSH","TOK_ACOS","TOK_NINT","TOK_CYCLE","TOK_SIN","TOK_SINH","TOK_ASIN",
+"TOK_EQUIVALENCE","TOK_BACKSPACE","TOK_LOG","TOK_TAN","TOK_ATAN",
+"TOK_RECURSIVE","TOK_ABS","TOK_MOD","TOK_SIGN","TOK_MINLOC","TOK_MAXLOC",
+"TOK_EXIT","TOK_MINVAL","TOK_PUBLIC","TOK_PRIVATE","TOK_ALLOCATABLE",
+"TOK_RETURN","TOK_THEN","TOK_ELSEIF","TOK_ELSE","TOK_ENDIF","TOK_PRINT",
+"TOK_PLAINGOTO","TOK_CONSTRUCTID","TOK_LOGICALIF","TOK_PLAINDO","TOK_CONTAINS",
+"TOK_ENDDO","TOK_MODULE","TOK_ENDMODULE","TOK_DOWHILE","TOK_ALLOCATE",
+"TOK_OPEN","TOK_CLOSE","TOK_INQUIRE","TOK_WRITE","TOK_READ","TOK_REWIND",
+"TOK_DEALLOCATE","TOK_NULLIFY","TOK_FIN","TOK_DEBUT","TOK_DIMENSION",
+"TOK_ENDSELECT","TOK_EXTERNAL","TOK_INTENT","TOK_INTRINSIC","TOK_NAMELIST",
+"TOK_CASEDEFAULT","TOK_OPTIONAL","TOK_POINTER","TOK_CONTINUE","TOK_SAVE",
+"TOK_TARGET","TOK_QUOTE","TOK_IMPLICIT","TOK_NONE","TOK_CALL","TOK_STAT",
+"TOK_POINT_TO","TOK_COMMON","TOK_GLOBAL","TOK_INTERFACE","TOK_ENDINTERFACE",
+"TOK_LEFTAB","TOK_RIGHTAB","TOK_PAUSE","TOK_PROCEDURE","TOK_STOP","TOK_NAMEEQ",
+"TOK_REAL8","TOK_OUT","TOK_INOUT","TOK_IN","TOK_USE","TOK_TRUE","TOK_FALSE",
+"TOK_LABEL","TOK_TYPE","TOK_TYPEPAR","TOK_ENDTYPE","TOK_REAL","TOK_INTEGER",
+"TOK_LOGICAL","TOK_DOUBLEPRECISION","TOK_DOUBLEREAL","TOK_ENDSUBROUTINE",
+"TOK_ENDFUNCTION","TOK_ENDPROGRAM","TOK_ENDUNIT","TOK_CHARACTER",
+"TOK_CHAR_CONSTANT","TOK_CHAR_CUT","TOK_DATA","TOK_CHAR_INT","TOK_CHAR_MESSAGE",
+"TOK_CSTREAL","TOK_CSTREALDP","TOK_CSTREALQP","TOK_SFREAL","TOK_COMPLEX",
+"TOK_DOUBLECOMPLEX","TOK_NAME","TOK_NAME_CHAR","TOK_PROBTYPE","TOK_INTERPTYPE",
+"TOK_VARTYPE","TOK_BC","TOK_OP","TOK_CSTINT","TOK_COMMENT","TOK_FILENAME",
+};
+char *fortranrule[] = {
+"$accept : input",
+"input :",
+"input : input line",
+"line : '\\n' position",
+"line : thislabel suite_line_list",
+"line : TOK_COMMENT",
+"line : keyword cmnt writedeclar",
+"line : error writedeclar nulcurbuf",
+"suite_line_list : suite_line",
+"suite_line_list : suite_line_list TOK_SEMICOLON suite_line",
+"suite_line : entry fin_line",
+"suite_line : spec fin_line",
+"suite_line : before_include filename fin_line",
+"suite_line : exec cmnt writedeclar",
+"suite_line : instr fin_line",
+"instr : ident ':'",
+"fin_line : position cmnt",
+"keyword : TOK_DONOTTREAT",
+"keyword : TOK_ENDDONOTTREAT",
+"keyword : TOK_OMP",
+"keyword : TOK_DOLLAR",
+"position :",
+"thislabel :",
+"thislabel : TOK_LABEL nulcurbuf",
+"cmnt :",
+"cmnt : TOK_COMMENT",
+"incomment :",
+"nulcurbuf :",
+"opt_recursive :",
+"opt_recursive : TOK_RECURSIVE",
+"entry :",
+"entry : opt_recursive TOK_SUBROUTINE name_routine arglist",
+"entry : TOK_PROGRAM name_routine",
+"entry : TOK_FUNCTION name_routine arglist TOK_RESULT arglist1",
+"entry : TOK_FUNCTION name_routine arglist",
+"entry : TOK_MODULE TOK_NAME",
+"name_routine : TOK_NAME",
+"writedeclar :",
+"before_include : TOK_INCLUDE",
+"filename : TOK_CHAR_CONSTANT",
+"arglist :",
+"arglist : '(' ')'",
+"arglist : '(' args ')'",
+"arglist1 :",
+"arglist1 : '(' ')'",
+"arglist1 : '(' args ')'",
+"args : arg",
+"args : args ',' arg",
+"arg : TOK_NAME",
+"arg : '*'",
+"spec : type after_type",
+"spec : TOK_TYPE opt_spec opt_sep opt_name",
+"spec : TOK_ENDTYPE opt_name",
+"spec : TOK_POINTER list_couple",
+"spec : before_parameter '(' paramlist ')'",
+"spec : before_parameter paramlist",
+"spec : common",
+"spec : save",
+"spec : implicit",
+"spec : dimension",
+"spec : public",
+"spec : private",
+"spec : use_stat",
+"spec : module_proc_stmt",
+"spec : interface",
+"spec : namelist",
+"spec : TOK_BACKSPACE '(' expr ')'",
+"spec : TOK_EXTERNAL opt_sep use_name_list",
+"spec : TOK_INTRINSIC opt_sep use_intrinsic_list",
+"spec : TOK_EQUIVALENCE list_expr_equi",
+"spec : before_data data '\\n'",
+"opt_spec :",
+"opt_spec : access_spec",
+"name_intrinsic : TOK_SUM",
+"name_intrinsic : TOK_TANH",
+"name_intrinsic : TOK_MAXVAL",
+"name_intrinsic : TOK_MIN",
+"name_intrinsic : TOK_MINVAL",
+"name_intrinsic : TOK_TRIM",
+"name_intrinsic : TOK_SQRT",
+"name_intrinsic : TOK_NINT",
+"name_intrinsic : TOK_FLOAT",
+"name_intrinsic : TOK_EXP",
+"name_intrinsic : TOK_COS",
+"name_intrinsic : TOK_COSH",
+"name_intrinsic : TOK_ACOS",
+"name_intrinsic : TOK_SIN",
+"name_intrinsic : TOK_SINH",
+"name_intrinsic : TOK_ASIN",
+"name_intrinsic : TOK_LOG",
+"name_intrinsic : TOK_TAN",
+"name_intrinsic : TOK_ATAN",
+"name_intrinsic : TOK_MOD",
+"name_intrinsic : TOK_SIGN",
+"name_intrinsic : TOK_MINLOC",
+"name_intrinsic : TOK_MAXLOC",
+"name_intrinsic : TOK_NAME",
+"use_intrinsic_list : name_intrinsic",
+"use_intrinsic_list : use_intrinsic_list ',' name_intrinsic",
+"list_couple : '(' list_expr ')'",
+"list_couple : list_couple ',' '(' list_expr ')'",
+"list_expr_equi : expr_equi",
+"list_expr_equi : list_expr_equi ',' expr_equi",
+"expr_equi : '(' list_expr_equi1 ')'",
+"list_expr_equi1 : ident dims",
+"list_expr_equi1 : list_expr_equi1 ',' ident dims",
+"list_expr : expr",
+"list_expr : list_expr ',' expr",
+"opt_sep :",
+"opt_sep : ':' ':'",
+"after_type : dcl nodimsgiven",
+"after_type : before_function name_routine arglist",
+"before_function : TOK_FUNCTION",
+"before_parameter : TOK_PARAMETER",
+"before_data : TOK_DATA",
+"data : TOK_NAME TOK_SLASH datavallist TOK_SLASH",
+"data : data opt_comma TOK_NAME TOK_SLASH datavallist TOK_SLASH",
+"data : datanamelist TOK_SLASH datavallist TOK_SLASH",
+"datavallist : expr_data",
+"datavallist : expr_data ',' datavallist",
+"save : before_save varsave",
+"save : before_save comblock varsave",
+"save : save opt_comma comblock opt_comma varsave",
+"save : save ',' varsave",
+"before_save : TOK_SAVE",
+"varsave :",
+"varsave : TOK_NAME dims",
+"datanamelist : TOK_NAME",
+"datanamelist : TOK_NAME '(' expr ')'",
+"datanamelist : datanamelist ',' datanamelist",
+"expr_data : opt_signe simple_const",
+"expr_data : expr_data '+' expr_data",
+"expr_data : expr_data '-' expr_data",
+"expr_data : expr_data '*' expr_data",
+"expr_data : expr_data '/' expr_data",
+"opt_signe :",
+"opt_signe : signe",
+"namelist : namelist_action after_namelist",
+"namelist_action : TOK_NAMELIST ident",
+"namelist_action : TOK_NAMELIST comblock ident",
+"namelist_action : namelist_action opt_comma comblock opt_comma ident",
+"namelist_action : namelist_action ',' ident",
+"after_namelist :",
+"interface : TOK_INTERFACE opt_name",
+"interface : TOK_ENDINTERFACE opt_name",
+"before_dimension : TOK_DIMENSION",
+"dimension : before_dimension opt_comma TOK_NAME dims lengspec",
+"dimension : dimension ',' TOK_NAME dims lengspec",
+"private : TOK_PRIVATE '\\n'",
+"private : TOK_PRIVATE opt_sep use_name_list",
+"public : TOK_PUBLIC '\\n'",
+"public : TOK_PUBLIC opt_sep use_name_list",
+"use_name_list : TOK_NAME",
+"use_name_list : use_name_list ',' TOK_NAME",
+"common : before_common var_common_list",
+"common : before_common comblock var_common_list",
+"common : common opt_comma comblock opt_comma var_common_list",
+"before_common : TOK_COMMON",
+"before_common : TOK_GLOBAL TOK_COMMON",
+"var_common_list : var_common",
+"var_common_list : var_common_list ',' var_common",
+"var_common : TOK_NAME dims",
+"comblock : TOK_DSLASH",
+"comblock : TOK_SLASH TOK_NAME TOK_SLASH",
+"opt_comma :",
+"opt_comma : ','",
+"paramlist : paramitem",
+"paramlist : paramlist ',' paramitem",
+"paramitem : TOK_NAME '=' expr",
+"module_proc_stmt : TOK_PROCEDURE proc_name_list",
+"proc_name_list : TOK_NAME",
+"proc_name_list : proc_name_list ',' TOK_NAME",
+"implicit : TOK_IMPLICIT TOK_NONE",
+"implicit : TOK_IMPLICIT TOK_REAL8",
+"opt_retour :",
+"dcl : options opt_retour TOK_NAME dims lengspec initial_value",
+"dcl : dcl ',' opt_retour TOK_NAME dims lengspec initial_value",
+"nodimsgiven :",
+"type : typespec selector",
+"type : before_character c_selector",
+"type : typename '*' TOK_CSTINT",
+"type : before_typepar attribute ')'",
+"before_typepar : TOK_TYPEPAR",
+"c_selector :",
+"c_selector : '*' TOK_CSTINT",
+"c_selector : '*' '(' c_attribute ')'",
+"c_selector : '(' c_attribute ')'",
+"c_attribute : TOK_NAME clause opt_clause",
+"c_attribute : TOK_NAME '=' clause opt_clause",
+"c_attribute : clause opt_clause",
+"before_character : TOK_CHARACTER",
+"typespec : typename",
+"typename : TOK_INTEGER",
+"typename : TOK_REAL",
+"typename : TOK_COMPLEX",
+"typename : TOK_DOUBLEPRECISION",
+"typename : TOK_DOUBLECOMPLEX",
+"typename : TOK_LOGICAL",
+"lengspec :",
+"lengspec : '*' proper_lengspec",
+"proper_lengspec : expr",
+"proper_lengspec : '(' '*' ')'",
+"selector :",
+"selector : '*' proper_selector",
+"selector : '(' attribute ')'",
+"proper_selector : expr",
+"proper_selector : '(' '*' ')'",
+"attribute : TOK_NAME clause",
+"attribute : TOK_NAME '=' clause",
+"attribute : TOK_NAME",
+"attribute : TOK_CSTINT",
+"clause : expr",
+"clause : '*'",
+"opt_clause :",
+"opt_clause : ',' TOK_NAME clause",
+"options :",
+"options : ':' ':'",
+"options : ',' attr_spec_list ':' ':'",
+"attr_spec_list : attr_spec",
+"attr_spec_list : attr_spec_list ',' attr_spec",
+"attr_spec : TOK_PARAMETER",
+"attr_spec : access_spec",
+"attr_spec : TOK_ALLOCATABLE",
+"attr_spec : TOK_DIMENSION dims",
+"attr_spec : TOK_EXTERNAL",
+"attr_spec : TOK_INTENT '(' intent_spec ')'",
+"attr_spec : TOK_INTRINSIC",
+"attr_spec : TOK_OPTIONAL",
+"attr_spec : TOK_POINTER",
+"attr_spec : TOK_SAVE",
+"attr_spec : TOK_TARGET",
+"intent_spec : TOK_IN",
+"intent_spec : TOK_OUT",
+"intent_spec : TOK_INOUT",
+"access_spec : TOK_PUBLIC",
+"access_spec : TOK_PRIVATE",
+"dims :",
+"dims : '(' dimlist ')'",
+"dimlist : dim",
+"dimlist : dimlist ',' dim",
+"dim : ubound",
+"dim : ':'",
+"dim : expr ':'",
+"dim : ':' expr",
+"dim : expr ':' ubound",
+"ubound : '*'",
+"ubound : expr",
+"expr : uexpr",
+"expr : '(' expr ')'",
+"expr : complex_const",
+"expr : predefinedfunction",
+"predefinedfunction : TOK_SUM minmaxlist ')'",
+"predefinedfunction : TOK_MAX minmaxlist ')'",
+"predefinedfunction : TOK_TANH '(' minmaxlist ')'",
+"predefinedfunction : TOK_MAXVAL '(' minmaxlist ')'",
+"predefinedfunction : TOK_MIN minmaxlist ')'",
+"predefinedfunction : TOK_MINVAL '(' minmaxlist ')'",
+"predefinedfunction : TOK_TRIM '(' expr ')'",
+"predefinedfunction : TOK_SQRT expr ')'",
+"predefinedfunction : TOK_REAL '(' minmaxlist ')'",
+"predefinedfunction : TOK_NINT '(' expr ')'",
+"predefinedfunction : TOK_FLOAT '(' expr ')'",
+"predefinedfunction : TOK_EXP '(' expr ')'",
+"predefinedfunction : TOK_COS '(' expr ')'",
+"predefinedfunction : TOK_COSH '(' expr ')'",
+"predefinedfunction : TOK_ACOS '(' expr ')'",
+"predefinedfunction : TOK_SIN '(' expr ')'",
+"predefinedfunction : TOK_SINH '(' expr ')'",
+"predefinedfunction : TOK_ASIN '(' expr ')'",
+"predefinedfunction : TOK_LOG '(' expr ')'",
+"predefinedfunction : TOK_TAN '(' expr ')'",
+"predefinedfunction : TOK_ATAN '(' expr ')'",
+"predefinedfunction : TOK_ABS expr ')'",
+"predefinedfunction : TOK_MOD '(' minmaxlist ')'",
+"predefinedfunction : TOK_SIGN '(' minmaxlist ')'",
+"predefinedfunction : TOK_MINLOC '(' minmaxlist ')'",
+"predefinedfunction : TOK_MAXLOC '(' minmaxlist ')'",
+"minmaxlist : expr",
+"minmaxlist : minmaxlist ',' expr",
+"uexpr : lhs",
+"uexpr : simple_const",
+"uexpr : vec",
+"uexpr : expr operation",
+"uexpr : signe expr",
+"uexpr : TOK_NOT expr",
+"signe : '+'",
+"signe : '-'",
+"operation : '+' expr",
+"operation : '-' expr",
+"operation : '*' expr",
+"operation : TOK_DASTER expr",
+"operation : TOK_EQ expr",
+"operation : TOK_EQV expr",
+"operation : TOK_GT expr",
+"operation : '>' expr",
+"operation : TOK_LT expr",
+"operation : '<' expr",
+"operation : TOK_GE expr",
+"operation : '>' '=' expr",
+"operation : TOK_LE expr",
+"operation : '<' '=' expr",
+"operation : TOK_NE expr",
+"operation : TOK_NEQV expr",
+"operation : TOK_XOR expr",
+"operation : TOK_OR expr",
+"operation : TOK_AND expr",
+"operation : TOK_SLASH after_slash",
+"operation : '=' after_equal",
+"after_slash :",
+"after_slash : expr",
+"after_slash : '=' expr",
+"after_slash : TOK_SLASH expr",
+"after_equal : '=' expr",
+"after_equal : expr",
+"lhs : ident",
+"lhs : structure_component",
+"lhs : array_ele_substring_func_ref",
+"beforefunctionuse :",
+"array_ele_substring_func_ref : begin_array",
+"array_ele_substring_func_ref : begin_array substring",
+"array_ele_substring_func_ref : structure_component '(' funarglist ')'",
+"array_ele_substring_func_ref : structure_component '(' funarglist ')' substring",
+"begin_array : ident '(' funarglist ')'",
+"structure_component : lhs '%' lhs",
+"vec : TOK_LEFTAB outlist TOK_RIGHTAB",
+"funarglist : beforefunctionuse",
+"funarglist : beforefunctionuse funargs",
+"funargs : funarg",
+"funargs : funargs ',' funarg",
+"funarg : expr",
+"funarg : triplet",
+"triplet : expr ':' expr",
+"triplet : expr ':' expr ':' expr",
+"triplet : ':' expr ':' expr",
+"triplet : ':' ':' expr",
+"triplet : ':' expr",
+"triplet : expr ':'",
+"triplet : ':'",
+"ident : TOK_NAME",
+"simple_const : TOK_TRUE",
+"simple_const : TOK_FALSE",
+"simple_const : TOK_CSTINT",
+"simple_const : TOK_CSTREAL",
+"simple_const : TOK_CSTREALDP",
+"simple_const : TOK_CSTREALQP",
+"simple_const : simple_const TOK_NAME",
+"simple_const : string_constant opt_substring",
+"string_constant : TOK_CHAR_CONSTANT",
+"string_constant : string_constant TOK_CHAR_CONSTANT",
+"string_constant : TOK_CHAR_MESSAGE",
+"string_constant : TOK_CHAR_CUT",
+"opt_substring :",
+"opt_substring : substring",
+"substring : '(' optexpr ':' optexpr ')'",
+"optexpr :",
+"optexpr : expr",
+"opt_expr : '\\n'",
+"opt_expr : expr",
+"initial_value :",
+"initial_value : before_initial '=' expr",
+"before_initial :",
+"complex_const : '(' uexpr ',' uexpr ')'",
+"use_stat : word_use module_name",
+"use_stat : word_use module_name ',' rename_list",
+"use_stat : word_use module_name ',' TOK_ONLY ':' '\\n'",
+"use_stat : word_use module_name ',' TOK_ONLY ':' only_list",
+"word_use : TOK_USE",
+"module_name : TOK_NAME",
+"rename_list : rename_name",
+"rename_list : rename_list ',' rename_name",
+"rename_name : TOK_NAME TOK_POINT_TO TOK_NAME",
+"only_list : only_name",
+"only_list : only_list ',' only_name",
+"only_name : TOK_NAME TOK_POINT_TO TOK_NAME",
+"only_name : TOK_NAME",
+"exec : iffable",
+"exec : TOK_ALLOCATE '(' allocation_list opt_stat_spec ')'",
+"exec : TOK_DEALLOCATE '(' allocate_object_list opt_stat_spec ')'",
+"exec : TOK_NULLIFY '(' pointer_name_list ')'",
+"exec : word_endunit",
+"exec : word_endprogram opt_name",
+"exec : word_endsubroutine opt_name",
+"exec : word_endfunction opt_name",
+"exec : TOK_ENDMODULE opt_name",
+"exec : boucledo",
+"exec : logif iffable",
+"exec : TOK_WHERE '(' expr ')' opt_expr",
+"exec : TOK_ELSEWHERE",
+"exec : TOK_ENDWHERE",
+"exec : logif TOK_THEN",
+"exec : TOK_ELSEIF '(' expr ')' TOK_THEN",
+"exec : TOK_ELSE",
+"exec : TOK_ENDIF opt_name",
+"exec : TOK_CASE caselist ')'",
+"exec : TOK_SELECTCASE '(' expr ')'",
+"exec : TOK_CASEDEFAULT",
+"exec : TOK_ENDSELECT",
+"exec : TOK_CONTAINS",
+"word_endsubroutine : TOK_ENDSUBROUTINE",
+"word_endunit : TOK_ENDUNIT",
+"word_endprogram : TOK_ENDPROGRAM",
+"word_endfunction : TOK_ENDFUNCTION",
+"caselist : expr",
+"caselist : caselist ',' expr",
+"caselist : caselist ':' expr",
+"boucledo : worddo opt_int do_arg",
+"boucledo : wordwhile expr",
+"boucledo : TOK_ENDDO optname",
+"do_arg :",
+"do_arg : do_var '=' expr ',' expr",
+"do_arg : do_var '=' expr ',' expr ',' expr",
+"opt_int :",
+"opt_int : TOK_CSTINT opt_comma",
+"opt_name : '\\n'",
+"opt_name : TOK_NAME",
+"optname :",
+"optname : TOK_NAME",
+"worddo : TOK_PLAINDO",
+"wordwhile : TOK_DOWHILE",
+"dotarget :",
+"dotarget : TOK_CSTINT",
+"iffable : TOK_CONTINUE",
+"iffable : ident_dims after_ident_dims",
+"iffable : goto",
+"iffable : io",
+"iffable : call",
+"iffable : TOK_ALLOCATE '(' allocation_list opt_stat_spec ')'",
+"iffable : TOK_DEALLOCATE '(' allocate_object_list opt_stat_spec ')'",
+"iffable : TOK_EXIT optexpr",
+"iffable : TOK_RETURN opt_expr",
+"iffable : TOK_CYCLE opt_expr",
+"iffable : stop opt_expr",
+"iffable : int_list",
+"before_dims :",
+"ident_dims : ident before_dims dims dims",
+"ident_dims : ident_dims '%' ident before_dims dims dims",
+"int_list : TOK_CSTINT",
+"int_list : int_list ',' TOK_CSTINT",
+"after_ident_dims : '=' expr",
+"after_ident_dims : TOK_POINT_TO expr",
+"call : keywordcall opt_call",
+"opt_call :",
+"opt_call : '(' opt_callarglist ')'",
+"opt_callarglist :",
+"opt_callarglist : callarglist",
+"keywordcall : before_call TOK_NAME",
+"before_call : TOK_CALL",
+"callarglist : callarg",
+"callarglist : callarglist ',' callarg",
+"callarg : expr",
+"callarg : '*' label",
+"stop : TOK_PAUSE",
+"stop : TOK_STOP",
+"io : iofctl ioctl",
+"io : read option_read",
+"io : write ioctl",
+"io : write ioctl outlist",
+"io : TOK_REWIND after_rewind",
+"io : TOK_FORMAT",
+"opt_CHAR_INT :",
+"opt_CHAR_INT : TOK_CSTINT TOK_NAME",
+"idfile : '*'",
+"idfile : TOK_CSTINT",
+"idfile : ident",
+"option_print :",
+"option_print : ',' outlist",
+"option_inlist :",
+"option_inlist : inlist",
+"option_read : ioctl option_inlist",
+"option_read : infmt opt_inlist",
+"opt_outlist :",
+"opt_outlist : outlist",
+"opt_inlist :",
+"opt_inlist : ',' inlist",
+"ioctl : '(' ctllist ')'",
+"ioctl : '(' fexpr ')'",
+"after_rewind : '(' ident ')'",
+"after_rewind : '(' TOK_CSTINT ')'",
+"after_rewind : TOK_CSTINT",
+"after_rewind : '(' uexpr ')'",
+"after_rewind : TOK_NAME",
+"ctllist : ioclause",
+"ctllist : ctllist ',' ioclause",
+"ioclause : fexpr",
+"ioclause : '*'",
+"ioclause : TOK_DASTER",
+"ioclause : TOK_NAME expr",
+"ioclause : TOK_NAME expr '%' ident_dims",
+"ioclause : TOK_NAME '(' triplet ')'",
+"ioclause : TOK_NAME '*'",
+"ioclause : TOK_NAME TOK_DASTER",
+"iofctl : TOK_OPEN",
+"iofctl : TOK_CLOSE",
+"infmt : unpar_fexpr",
+"infmt : '*'",
+"read : TOK_READ",
+"read : TOK_INQUIRE",
+"read : TOK_PRINT",
+"write : TOK_WRITE",
+"fexpr : unpar_fexpr",
+"fexpr : '(' fexpr ')'",
+"unpar_fexpr : lhs",
+"unpar_fexpr : simple_const",
+"unpar_fexpr : fexpr addop fexpr",
+"unpar_fexpr : fexpr '*' fexpr",
+"unpar_fexpr : fexpr TOK_SLASH fexpr",
+"unpar_fexpr : fexpr TOK_DASTER fexpr",
+"unpar_fexpr : addop fexpr",
+"unpar_fexpr : fexpr TOK_DSLASH fexpr",
+"unpar_fexpr : TOK_FILE expr",
+"unpar_fexpr : TOK_EXIST expr",
+"unpar_fexpr : TOK_ERR expr",
+"unpar_fexpr : TOK_END expr",
+"unpar_fexpr : TOK_NAME '=' expr",
+"addop : '+'",
+"addop : '-'",
+"inlist : inelt",
+"inlist : inlist ',' inelt",
+"opt_lhs :",
+"opt_lhs : lhs",
+"inelt : opt_lhs opt_operation",
+"inelt : '(' inlist ')' opt_operation",
+"inelt : predefinedfunction opt_operation",
+"inelt : simple_const opt_operation",
+"inelt : '(' inlist ',' dospec ')'",
+"opt_operation :",
+"opt_operation : operation",
+"opt_operation : opt_operation operation",
+"outlist : uexpr",
+"outlist : other",
+"outlist : out2",
+"out2 : uexpr ',' expr",
+"out2 : uexpr ',' other",
+"out2 : other ',' expr",
+"out2 : other ',' other",
+"out2 : out2 ',' expr",
+"out2 : out2 ',' other",
+"out2 : uexpr",
+"out2 : predefinedfunction",
+"other : complex_const",
+"other : '(' expr ')'",
+"other : '(' uexpr ',' dospec ')'",
+"other : '(' other ',' dospec ')'",
+"other : '(' out2 ',' dospec ')'",
+"dospec : TOK_NAME '=' expr ',' expr",
+"dospec : TOK_NAME '=' expr ',' expr ',' expr",
+"labellist : label",
+"labellist : labellist ',' label",
+"label : TOK_CSTINT",
+"goto : TOK_PLAINGOTO '(' expr ',' expr ')' ',' expr",
+"goto : TOK_PLAINGOTO label",
+"allocation_list : allocate_object",
+"allocation_list : ident_dims",
+"allocation_list : allocation_list ',' allocate_object",
+"allocate_object : ident",
+"allocate_object : structure_component",
+"allocate_object : array_element",
+"array_element : ident '(' funargs ')'",
+"subscript_list : expr",
+"subscript_list : subscript_list ',' expr",
+"allocate_object_list : allocate_object",
+"allocate_object_list : allocate_object_list ',' allocate_object",
+"opt_stat_spec :",
+"opt_stat_spec : ',' TOK_STAT '=' ident",
+"pointer_name_list : ident",
+"pointer_name_list : pointer_name_list ',' ident",
+"opt_construct_name :",
+"opt_construct_name : TOK_NAME",
+"opt_construct_name_colon :",
+"opt_construct_name_colon : TOK_CONSTRUCTID ':'",
+"logif : TOK_LOGICALIF expr ')'",
+"do_var : ident",
+};
+#endif
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 500
+#define YYMAXDEPTH 500
+#endif
+#endif
+int yydebug;
+int yynerrs;
+int yyerrflag;
+int yychar;
+short *yyssp;
+YYSTYPE *yyvsp;
+YYSTYPE yyval;
+YYSTYPE yylval;
+short yyss[YYSTACKSIZE];
+YYSTYPE yyvs[YYSTACKSIZE];
+#define yystacksize YYSTACKSIZE
+#line 2567 "fortran.y"
+
+void processfortran(char *fichier_entree)
+{
+   extern FILE *fortranin;
+   extern FILE *fortranout;
+   char nomfile[LONG_C];
+   int c;
+   int confirmyes;
+
+   /*fortrandebug = 1;*/
+   if ( mark == 1 ) printf("Firstpass == %d \n",firstpass);
+/******************************************************************************/
+/*  1-  Open input and output files                                           */
+/******************************************************************************/
+   strcpy(nomfile,commondirin);
+   strcat(nomfile,"/");
+   strcat(nomfile,fichier_entree);
+   fortranin=fopen( nomfile,"r");
+   if (! fortranin)
+   {
+      printf("Error : File %s does not exist\n",nomfile);
+      exit(1);
+   }
+
+   strcpy(curfile,nomfile);
+   strcpy(nomfile,commondirout);
+   strcat(nomfile,"/");
+   strcat(nomfile,fichier_entree);
+   strcpy(nomfileoutput,nomfile);
+   Save_Length(nomfileoutput,31);
+   if (firstpass == 1)
+   {
+      if (checkexistcommon == 1)
+      {
+         if (fopen(nomfile,"r"))
+         {
+            printf("Warning : file %s already exist\n",nomfile);
+            confirmyes = 0;
+            while (confirmyes==0)
+            {
+               printf("Override file %s ? [Y/N]\n",nomfile);
+               c=getchar();
+               getchar();
+               if (c==79 || c==110)
+               {
+                  printf("We stop\n");
+                  exit(1);
+               }
+               if (c==89 || c==121)
+               {
+                  confirmyes=1;
+               }
+            }
+         }
+      }
+   }
+
+/******************************************************************************/
+/*  2-  Variables initialization                                              */
+/******************************************************************************/
+
+   line_num_fortran_common=1;
+   line_num_fortran=1;
+   PublicDeclare = 0;
+   PrivateDeclare = 0;
+   ExternalDeclare = 0;
+   SaveDeclare = 0;
+   pointerdeclare = 0;
+   optionaldeclare = 0;
+   incalldeclare = 0;
+   VarType = 0;
+   VarTypepar = 0;
+   Allocatabledeclare = 0 ;
+   strcpy(NamePrecision," ");
+   VariableIsParameter =  0 ;
+   strcpy(NamePrecision,"");
+   c_star = 0 ;
+   functiondeclarationisdone = 0;
+   insubroutinedeclare = 0 ;
+   strcpy(subroutinename," ");
+   InitialValueGiven = 0 ;
+   strcpy(EmptyChar," ");
+   inmoduledeclare = 0;
+   colnum=0;
+   incom=0;
+   couldaddvariable=1;
+   aftercontainsdeclare = 1;
+   strcpy(nameinttypename,"");
+   /* Name of the file without format                                         */
+   tmp = strchr(fichier_entree, '.');
+   strncpy(curfilename,fichier_entree,strlen(fichier_entree)-strlen(tmp));
+   Save_Length(curfilename,30);
+/******************************************************************************/
+/*  3-  Parsing of the input file (1 time)                                    */
+/******************************************************************************/
+   if (firstpass == 0 )
+   {
+      fortranout=fopen(nomfileoutput,"w");
+
+      NewModule_Creation_0();
+   }
+
+   fortranparse();
+
+   strcpy(curfile,mainfile);
+
+   if (firstpass == 0 ) fclose(fortranout);
+}
+#line 7005 "y.tab.c"
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+int
+yyparse()
+{
+    register int yym, yyn, yystate;
+#if YYDEBUG
+    register char *yys;
+    extern char *getenv();
+
+    if (yys = getenv("YYDEBUG"))
+    {
+        yyn = *yys;
+        if (yyn >= '0' && yyn <= '9')
+            yydebug = yyn - '0';
+    }
+#endif
+
+    yynerrs = 0;
+    yyerrflag = 0;
+    yychar = (-1);
+
+    yyssp = yyss;
+    yyvsp = yyvs;
+    *yyssp = yystate = 0;
+
+yyloop:
+    if (yyn = yydefred[yystate]) goto yyreduce;
+    if (yychar < 0)
+    {
+        if ((yychar = yylex()) < 0) yychar = 0;
+#if YYDEBUG
+        if (yydebug)
+        {
+            yys = 0;
+            if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+            if (!yys) yys = "illegal-symbol";
+            printf("%sdebug: state %d, reading %d (%s)\n",
+                    YYPREFIX, yystate, yychar, yys);
+        }
+#endif
+    }
+    if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+    {
+#if YYDEBUG
+        if (yydebug)
+            printf("%sdebug: state %d, shifting to state %d\n",
+                    YYPREFIX, yystate, yytable[yyn]);
+#endif
+        if (yyssp >= yyss + yystacksize - 1)
+        {
+            goto yyoverflow;
+        }
+        *++yyssp = yystate = yytable[yyn];
+        *++yyvsp = yylval;
+        yychar = (-1);
+        if (yyerrflag > 0)  --yyerrflag;
+        goto yyloop;
+    }
+    if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+    {
+        yyn = yytable[yyn];
+        goto yyreduce;
+    }
+    if (yyerrflag) goto yyinrecovery;
+#ifdef lint
+    goto yynewerror;
+#endif
+yynewerror:
+    yyerror("syntax error");
+#ifdef lint
+    goto yyerrlab;
+#endif
+yyerrlab:
+    ++yynerrs;
+yyinrecovery:
+    if (yyerrflag < 3)
+    {
+        yyerrflag = 3;
+        for (;;)
+        {
+            if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&
+                    yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+            {
+#if YYDEBUG
+                if (yydebug)
+                    printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yyssp, yytable[yyn]);
+#endif
+                if (yyssp >= yyss + yystacksize - 1)
+                {
+                    goto yyoverflow;
+                }
+                *++yyssp = yystate = yytable[yyn];
+                *++yyvsp = yylval;
+                goto yyloop;
+            }
+            else
+            {
+#if YYDEBUG
+                if (yydebug)
+                    printf("%sdebug: error recovery discarding state %d\n",
+                            YYPREFIX, *yyssp);
+#endif
+                if (yyssp <= yyss) goto yyabort;
+                --yyssp;
+                --yyvsp;
+            }
+        }
+    }
+    else
+    {
+        if (yychar == 0) goto yyabort;
+#if YYDEBUG
+        if (yydebug)
+        {
+            yys = 0;
+            if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+            if (!yys) yys = "illegal-symbol";
+            printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+                    YYPREFIX, yystate, yychar, yys);
+        }
+#endif
+        yychar = (-1);
+        goto yyloop;
+    }
+yyreduce:
+#if YYDEBUG
+    if (yydebug)
+        printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+                YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+    yym = yylen[yyn];
+    yyval = yyvsp[1-yym];
+    switch (yyn)
+    {
+case 7:
+#line 341 "fortran.y"
+{yyerrok;yyclearin;}
+break;
+case 12:
+#line 349 "fortran.y"
+{
+                     if (inmoduledeclare == 0 )
+                     {
+                        pos_end = setposcur();
+                        RemoveWordSET_0(fortranout,pos_curinclude,
+                                              pos_end-pos_curinclude);
+                     }
+                  }
+break;
+case 17:
+#line 365 "fortran.y"
+{
+            /* we should ignore the declaration until the keyword             */
+            /*    TOK_ENDDONOTTREAT                                           */
+            couldaddvariable = 0 ;
+            RemoveWordCUR_0(fortranout,-20,20);
+         }
+break;
+case 18:
+#line 372 "fortran.y"
+{
+             couldaddvariable = 1 ;
+             RemoveWordCUR_0(fortranout,-24,24);
+          }
+break;
+case 21:
+#line 379 "fortran.y"
+{pos_cur = setposcur();}
+break;
+case 26:
+#line 388 "fortran.y"
+{incom = 1;}
+break;
+case 27:
+#line 391 "fortran.y"
+{if (incom !=1) {strcpy(curbuf,"");incom=0;}}
+break;
+case 31:
+#line 398 "fortran.y"
+{
+                      if ( couldaddvariable == 1 )
+                      {
+                      /* open param file                                      */
+                      if ( firstpass == 0 )
+                      {
+                         sprintf(ligne,"%s/ParamFile%s.h",nomdir,yyvsp[-1].nac);
+                         paramout=fopen(ligne,"w");
+                         if ( retour77 == 0 ) fprintf(paramout,"!\n");
+                         else fprintf(paramout,"C\n");
+
+                      }
+                      Add_SubroutineArgument_Var_1(yyvsp[0].l);
+                      if ( inmodulemeet == 1 )
+                      {
+                         insubroutinedeclare = 1;
+                         /* in the second step we should write the head of    */
+                         /*    the subroutine sub_loop_<subroutinename>       */
+                         writeheadnewsub_0(1);
+                      }
+                      else
+                      {
+                            insubroutinedeclare = 1;
+                            writeheadnewsub_0(1);
+                      }
+                      }
+                   }
+break;
+case 32:
+#line 426 "fortran.y"
+{
+                      /* open param file                                      */
+                      if ( firstpass == 0 )
+                      {
+                         sprintf(ligne,"%s/ParamFile%s.h",nomdir,yyvsp[0].nac);
+                         paramout=fopen(ligne,"w");
+                         if ( retour77 == 0 ) fprintf(paramout,"!\n");
+                         else fprintf(paramout,"C\n");
+
+                      }
+                      strcpy(subroutinename,yyvsp[0].nac);
+                      /* Common case                                          */
+                      insubroutinedeclare = 1;
+                      /* in the second step we should write the head of       */
+                      /*    the subroutine sub_loop_<subroutinename>          */
+                      writeheadnewsub_0(1);
+                   }
+break;
+case 33:
+#line 444 "fortran.y"
+{
+                      /* open param file                                      */
+                      if ( firstpass == 0 )
+                      {
+                         sprintf(ligne,"%s/ParamFile%s.h",nomdir,yyvsp[-3].nac);
+                         paramout=fopen(ligne,"w");
+                         if ( retour77 == 0 ) fprintf(paramout,"!\n");
+                         else fprintf(paramout,"C\n");
+                      }
+                      strcpy(subroutinename,yyvsp[-3].nac);
+                      if ( inmodulemeet == 1 )
+                      {
+                         insubroutinedeclare = 1;
+                         /* we should to list of the subroutine argument the  */
+                         /*    name of the function which has to be defined   */
+                         Add_SubroutineArgument_Var_1(yyvsp[-2].l);
+                         strcpy(DeclType,"");
+                         /* in the second step we should write the head of    */
+                         /*    the subroutine sub_loop_<subroutinename>       */
+                         writeheadnewsub_0(2);
+                      }
+                      else
+                      {
+                            insubroutinedeclare = 1;
+                            /* we should to list of the subroutine argument   */
+                            /* name of the function which has to be defined   */
+                            Add_SubroutineArgument_Var_1(yyvsp[-2].l);
+                            strcpy(DeclType,"");
+                            Add_FunctionType_Var_1(yyvsp[-3].nac);
+                            writeheadnewsub_0(2);
+                      }
+                   }
+break;
+case 34:
+#line 477 "fortran.y"
+{
+                      /* open param file                                      */
+                      if ( firstpass == 0 )
+                      {
+                         sprintf(ligne,"%s/ParamFile%s.h",nomdir,yyvsp[-1].nac);
+                         paramout=fopen(ligne,"w");
+                         if ( retour77 == 0 ) fprintf(paramout,"!\n");
+                         else fprintf(paramout,"C\n");
+                      }
+                      strcpy(subroutinename,yyvsp[-1].nac);
+                      if ( inmodulemeet == 1 )
+                      {
+                         insubroutinedeclare = 1;
+                         /* we should to list of the subroutine argument the  */
+                         /*    name of the function which has to be defined   */
+                         Add_SubroutineArgument_Var_1(yyvsp[0].l);
+                         strcpy(DeclType,"");
+                         Add_FunctionType_Var_1(yyvsp[-1].nac);
+                         /* in the second step we should write the head of    */
+                         /*    the subroutine sub_loop_<subroutinename>       */
+                         writeheadnewsub_0(2);
+                      }
+                      else
+                      {
+                            insubroutinedeclare = 1;
+                            /* we should to list of the subroutine argument   */
+                            /* name of the function which has to be defined   */
+                            Add_SubroutineArgument_Var_1(yyvsp[0].l);
+                            strcpy(DeclType,"");
+                            Add_FunctionType_Var_1(yyvsp[-1].nac);
+                            writeheadnewsub_0(2);
+                      }
+                   }
+break;
+case 35:
+#line 511 "fortran.y"
+{
+                      GlobalDeclaration = 0;
+                      strcpy(curmodulename,yyvsp[0].nac);
+                      strcpy(subroutinename,"");
+                      Add_NameOfModule_1(yyvsp[0].nac);
+                      if ( inmoduledeclare == 0 )
+                      {
+                         /* To know if there are in the module declaration    */
+                         inmoduledeclare = 1;
+                         /* to know if a module has been met                  */
+                         inmodulemeet = 1;
+                         /* to know if we are after the keyword contains      */
+                         aftercontainsdeclare = 0 ;
+                      }
+                   }
+break;
+case 36:
+#line 528 "fortran.y"
+{
+                      if ( couldaddvariable == 1 )
+                      {
+                         strcpy(yyval.nac,yyvsp[0].nac);strcpy(subroutinename,yyvsp[0].nac);
+                      }
+                   }
+break;
+case 38:
+#line 537 "fortran.y"
+{
+                      pos_curinclude = setposcur()-9;
+                   }
+break;
+case 39:
+#line 541 "fortran.y"
+{
+                      if ( couldaddvariable == 1 ) Add_Include_1(yyvsp[0].nac);
+                   }
+break;
+case 40:
+#line 545 "fortran.y"
+{
+                      if ( firstpass == 1 && couldaddvariable == 1) yyval.l=NULL;
+                   }
+break;
+case 41:
+#line 548 "fortran.y"
+{
+                      if ( firstpass == 1 && couldaddvariable == 1 ) yyval.l=NULL;
+                   }
+break;
+case 42:
+#line 552 "fortran.y"
+{
+                       if ( firstpass == 1 && couldaddvariable == 1 ) yyval.l=yyvsp[-1].l;
+                   }
+break;
+case 45:
+#line 559 "fortran.y"
+{
+                      if ( couldaddvariable == 1 )
+                      {
+                         Add_SubroutineArgument_Var_1(yyvsp[-1].l);
+                      }
+                   }
+break;
+case 46:
+#line 566 "fortran.y"
+{
+                      if ( firstpass == 1  && couldaddvariable == 1)
+                      {
+                         strcpy(nameinttypenameback,nameinttypename);
+                         strcpy(nameinttypename,"");
+                         curvar=createvar(yyvsp[0].na,NULL);
+                        strcpy(nameinttypename,nameinttypenameback);
+                         curlistvar=insertvar(NULL,curvar);
+                         yyval.l=settype("",curlistvar);
+                      }
+                   }
+break;
+case 47:
+#line 578 "fortran.y"
+{
+                      if ( firstpass == 1  && couldaddvariable == 1)
+                      {
+                         strcpy(nameinttypenameback,nameinttypename);
+                         strcpy(nameinttypename,"");                      
+                         curvar=createvar(yyvsp[0].na,NULL);
+                         strcpy(nameinttypename,nameinttypenameback);                         
+                         yyval.l=insertvar(yyvsp[-2].l,curvar);
+                      }
+                   }
+break;
+case 48:
+#line 589 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na,yyvsp[0].nac);}
+break;
+case 49:
+#line 590 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na,"*");}
+break;
+case 50:
+#line 593 "fortran.y"
+{
+                      if ( VarTypepar == 1 )
+                      {
+                         couldaddvariable = 1 ;
+                         VarTypepar = 0;
+                      }
+                   }
+break;
+case 51:
+#line 601 "fortran.y"
+{
+                      if ( couldaddvariable == 1 )
+                      {
+                         VarType = 1;
+                         couldaddvariable = 0 ;
+                      }
+                   }
+break;
+case 52:
+#line 609 "fortran.y"
+{
+                      if ( VarType == 1 ) couldaddvariable = 1 ;
+                      VarType = 0;
+                      VarTypepar = 0;
+                   }
+break;
+case 54:
+#line 616 "fortran.y"
+{
+                      if ( couldaddvariable == 1 )
+                      {
+                         if ( insubroutinedeclare == 0 )
+                                                  Add_GlobalParameter_Var_1(yyvsp[-1].l);
+                         else Add_Parameter_Var_1(yyvsp[-1].l);
+                         pos_end = setposcur();
+                        RemoveWordSET_0(fortranout,pos_cur_decl,
+                                                    pos_end-pos_cur_decl);
+                      }
+                      VariableIsParameter =  0 ;
+                   }
+break;
+case 55:
+#line 629 "fortran.y"
+{
+                     if ( couldaddvariable == 1 )
+                     {
+                        if ( insubroutinedeclare == 0 )
+                                                  Add_GlobalParameter_Var_1(yyvsp[0].l);
+                         else Add_Parameter_Var_1(yyvsp[0].l);
+                         pos_end = setposcur();
+                         RemoveWordSET_0(fortranout,pos_cur_decl,
+                                                    pos_end-pos_cur_decl);
+                      }
+                      VariableIsParameter =  0 ;
+                   }
+break;
+case 57:
+#line 643 "fortran.y"
+{
+                     pos_end = setposcur();
+                     RemoveWordSET_0(fortranout,pos_cursave,
+                                                pos_end-pos_cursave);
+                  }
+break;
+case 59:
+#line 650 "fortran.y"
+{
+                   /* if the variable is a parameter we can suppose that is   */
+                   /*    value is the same on each grid. It is not useless to */
+                   /*    create a copy of it on each grid                     */
+                      if ( couldaddvariable == 1 )
+                      {
+                         Add_Globliste_1(yyvsp[0].l);
+                         /* if variableparamlists has been declared in a      */
+                         /*    subroutine                                     */
+                         if ( insubroutinedeclare == 1 )
+                         {
+                            Add_Dimension_Var_1(yyvsp[0].l);
+                         }
+                         pos_end = setposcur();
+                         RemoveWordSET_0(fortranout,pos_curdimension,
+                                                pos_end-pos_curdimension);
+                      }
+                      /*                                                      */
+                      PublicDeclare = 0;
+                      PrivateDeclare = 0;
+                      ExternalDeclare = 0;
+                      strcpy(NamePrecision,"");
+                      c_star = 0;
+                      InitialValueGiven = 0 ;
+                      strcpy(IntentSpec,"");
+                      VariableIsParameter =  0 ;
+                      Allocatabledeclare = 0 ;
+                      SaveDeclare = 0;
+                      pointerdeclare = 0;
+                      optionaldeclare = 0 ;
+                      dimsgiven=0;
+                      c_selectorgiven=0;
+                      strcpy(nameinttypename,"");
+                      strcpy(c_selectorname,"");
+                   }
+break;
+case 60:
+#line 686 "fortran.y"
+{
+      if (firstpass == 0)
+      {
+      if (yyvsp[0].lnn)
+      {
+      removeglobfromlist(&(yyvsp[0].lnn));
+      pos_end = setposcur();
+           RemoveWordSET_0(fortranout,pos_cur,pos_end-pos_cur);
+      writelistpublic(yyvsp[0].lnn);
+      }
+      }
+      }
+break;
+case 70:
+#line 708 "fortran.y"
+{
+                      /* we should remove the data declaration                */
+                      if ( couldaddvariable == 1 && aftercontainsdeclare == 0 )
+                      {
+                        pos_end = setposcur();
+                        RemoveWordSET_0(fortranout,pos_curdata,
+                                              pos_end-pos_curdata);
+                      }
+                  }
+break;
+case 72:
+#line 720 "fortran.y"
+{
+         PublicDeclare = 0 ;
+         PrivateDeclare = 0 ;
+      }
+break;
+case 110:
+#line 771 "fortran.y"
+{
+                      /* if the variable is a parameter we can suppose that is*/
+                      /*    value is the same on each grid. It is not useless */
+                      /*    to create a copy of it on each grid               */
+                      if ( couldaddvariable == 1 )
+                      {
+                      pos_end = setposcur();
+                      /*if (insubroutinedeclare == 0)
+                        {   */
+                         RemoveWordSET_0(fortranout,pos_cur_decl,
+                                                 pos_end-pos_cur_decl);
+                                         
+                       /* }
+                      else
+                       {*/
+                        ReWriteDeclarationAndAddTosubroutine_01(yyvsp[-1].l);
+                        pos_cur_decl = setposcur();
+                        
+                       /*}*/
+                      if ( firstpass == 0 &&
+                           GlobalDeclaration == 0 &&
+                           insubroutinedeclare == 0 )
+                      {
+                         sprintf(ligne,"\n#include \"Module_Declar_%s.h\"\n"
+                                                                ,curmodulename);
+                         tofich(fortranout,ligne,1);
+                         sprintf (ligne, "Module_Declar_%s.h",curmodulename);
+                         module_declar = associate(ligne);
+                         sprintf (ligne, " ");
+                         tofich (module_declar, ligne,1);
+                         GlobalDeclaration = 1 ;
+                      }
+                         yyval.l = yyvsp[-1].l;
+                         Add_Globliste_1(yyvsp[-1].l);
+                                                  
+                         if ( insubroutinedeclare == 0 )
+                                                  Add_GlobalParameter_Var_1(yyvsp[-1].l);
+                         else
+                         {
+                            if ( pointerdeclare == 1 )
+                                                Add_Pointer_Var_From_List_1(yyvsp[-1].l);
+                            Add_Parameter_Var_1(yyvsp[-1].l);
+                         }
+
+                         /* if variables has been declared in a subroutine    */
+                         if ( insubroutinedeclare == 1 )
+                         { 
+                       /*    Add_SubroutineDeclaration_Var_1($1);*/
+                         }
+                         /* If there are a SAVE declarations in module's      */
+                         /*    subroutines we should remove it from the       */
+                         /*    subroutines declaration and add it in the      */
+                         /*    global declarations                            */
+                         if ( aftercontainsdeclare == 1 &&
+                              SaveDeclare == 1 && firstpass == 1 )
+                         {
+                              if ( inmodulemeet == 0 ) Add_Save_Var_dcl_1(yyvsp[-1].l);
+                              else  Add_SubroutineDeclarationSave_Var_1(yyvsp[-1].l);
+                         }
+                      }
+                      /*                                                      */
+                      PublicDeclare = 0;
+                      PrivateDeclare = 0;
+                      ExternalDeclare = 0;
+                      strcpy(NamePrecision,"");
+                      c_star = 0;
+                      InitialValueGiven = 0 ;
+                      strcpy(IntentSpec,"");
+                      VariableIsParameter =  0 ;
+                      Allocatabledeclare = 0 ;
+                      SaveDeclare = 0;
+                      pointerdeclare = 0;
+                      optionaldeclare = 0 ;
+                      dimsgiven=0;
+                      c_selectorgiven=0;
+                      strcpy(nameinttypename,"");
+                      strcpy(c_selectorname,"");
+                   }
+break;
+case 111:
+#line 850 "fortran.y"
+{
+                      /* open param file                                      */
+                      if ( firstpass == 0 )
+                      {
+                         sprintf(ligne,"%s/ParamFile%s.h",nomdir,yyvsp[-1].nac);
+                         paramout=fopen(ligne,"w");
+                         if ( retour77 == 0 ) fprintf(paramout,"!\n");
+                         else fprintf(paramout,"C\n");
+                      }
+                      strcpy(subroutinename,yyvsp[-1].nac);
+                      if ( inmodulemeet == 1 )
+                      {
+                         insubroutinedeclare = 1;
+                         /* we should to list of the subroutine argument the  */
+                         /*    name of the function which has to be defined   */
+                         Add_SubroutineArgument_Var_1(yyvsp[0].l);
+                         Add_FunctionType_Var_1(yyvsp[-1].nac);
+                         /* in the second step we should write the head of    */
+                         /*    the subroutine sub_loop_<subroutinename>       */
+                         writeheadnewsub_0(2);
+                      }
+                      else
+                      {
+                         insubroutinedeclare = 1;
+                         /* we should to list of the subroutine argument the  */
+                         /*    name of the function which has to be defined   */
+                         Add_SubroutineArgument_Var_1(yyvsp[0].l);
+                         Add_FunctionType_Var_1(yyvsp[-1].nac);
+                         /* in the second step we should write the head of    */
+                         /*    the subroutine sub_loop_<subroutinename>       */
+                         writeheadnewsub_0(2);
+                      }
+                      strcpy(nameinttypename,"");
+
+                   }
+break;
+case 112:
+#line 887 "fortran.y"
+{
+                       functiondeclarationisdone = 1;
+                   }
+break;
+case 113:
+#line 893 "fortran.y"
+{
+                      VariableIsParameter = 1;
+                      pos_curparameter = setposcur()-9;
+                   }
+break;
+case 114:
+#line 898 "fortran.y"
+{
+                      pos_curdata = setposcur()-strlen(yyvsp[0].nac);
+                   }
+break;
+case 115:
+#line 902 "fortran.y"
+{
+                      if ( couldaddvariable == 1 )
+                      {
+                      if ( aftercontainsdeclare == 1 ) strcpy(ligne,"");
+                      else sprintf(ligne,"(/ %s /)",yyvsp[-1].na);
+                      Add_Data_Var_1(yyvsp[-3].nac,ligne);
+                      }
+                   }
+break;
+case 116:
+#line 911 "fortran.y"
+{
+                      if ( couldaddvariable == 1 )
+                      {
+                      if ( aftercontainsdeclare == 1 ) strcpy(ligne,"");
+                      else sprintf(ligne,"(/ %s /)",yyvsp[-1].na);
+                      Add_Data_Var_1(yyvsp[-3].nac,ligne);
+                      }
+                   }
+break;
+case 117:
+#line 920 "fortran.y"
+{
+                       /*******************************************************/
+                       /*******************************************************/
+                       /*******************************************************/
+                       /*******************************************************/
+                       /*******************************************************/
+                       /*******************************************************/
+                       /*******************************************************/
+                   }
+break;
+case 118:
+#line 931 "fortran.y"
+{
+                      if ( couldaddvariable == 1 )
+                      {
+                         strcpy(yyval.na,yyvsp[0].na);
+                      }
+                   }
+break;
+case 119:
+#line 938 "fortran.y"
+{
+                      if ( couldaddvariable == 1 )
+                      {
+                         sprintf(yyval.na,"%s,%s",yyvsp[-2].na,yyvsp[0].na);
+                      }
+                   }
+break;
+case 124:
+#line 952 "fortran.y"
+{
+                     pos_cursave = setposcur()-4;
+                  }
+break;
+case 126:
+#line 958 "fortran.y"
+{
+                     if ( couldaddvariable == 1 ) Add_Save_Var_1(yyvsp[-1].nac,yyvsp[0].d);
+                  }
+break;
+case 130:
+#line 967 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s%s",yyvsp[-1].nac,yyvsp[0].nac);}
+break;
+case 131:
+#line 969 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s+%s",yyvsp[-2].na,yyvsp[0].na);}
+break;
+case 132:
+#line 971 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s-%s",yyvsp[-2].na,yyvsp[0].na);}
+break;
+case 133:
+#line 973 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s*%s",yyvsp[-2].na,yyvsp[0].na);}
+break;
+case 134:
+#line 975 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s/%s",yyvsp[-2].na,yyvsp[0].na);}
+break;
+case 135:
+#line 978 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.nac,"");}
+break;
+case 136:
+#line 980 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.nac,yyvsp[0].nac);}
+break;
+case 145:
+#line 995 "fortran.y"
+{
+                      positioninblock=0;
+                      pos_curdimension = setposcur()-9;
+                   }
+break;
+case 146:
+#line 1001 "fortran.y"
+{
+         if ( couldaddvariable == 1 )
+         {
+            /*                                                                */
+            curvar=createvar(yyvsp[-2].nac,yyvsp[-1].d);
+            /*                                                                */
+            CreateAndFillin_Curvar("",curvar);
+            /*                                                                */
+            curlistvar=insertvar(NULL,curvar);
+            /*                                                                */
+            yyval.l=settype("",curlistvar);
+            /*                                                                */
+            strcpy(vallengspec,"");
+         }
+      }
+break;
+case 147:
+#line 1017 "fortran.y"
+{
+         if ( couldaddvariable == 1 )
+         {
+            /*                                                                */
+            curvar=createvar(yyvsp[-2].nac,yyvsp[-1].d);
+            /*                                                                */
+            CreateAndFillin_Curvar("",curvar);
+            /*                                                                */
+            curlistvar=insertvar(yyvsp[-4].l,curvar);
+            /*                                                                */
+            yyval.l=curlistvar;
+            /*                                                                */
+            strcpy(vallengspec,"");
+         }
+      }
+break;
+case 150:
+#line 1037 "fortran.y"
+{
+        yyval.lnn=(listname *)NULL;
+        }
+break;
+case 151:
+#line 1041 "fortran.y"
+{
+          yyval.lnn=yyvsp[0].lnn;
+         }
+break;
+case 152:
+#line 1046 "fortran.y"
+{
+           yyval.lnn = Insertname(NULL,yyvsp[0].nac);
+           }
+break;
+case 153:
+#line 1050 "fortran.y"
+{
+          yyval.lnn = Insertname(yyvsp[-2].lnn,yyvsp[0].nac);
+          }
+break;
+case 154:
+#line 1055 "fortran.y"
+{
+                         pos_end = setposcur();
+                         RemoveWordSET_0(fortranout,pos_curcommon,
+                                                  pos_end-pos_curcommon);
+                   }
+break;
+case 155:
+#line 1061 "fortran.y"
+{
+                         if ( couldaddvariable == 1 )
+                         {
+                            sprintf(charusemodule,"%s",yyvsp[-1].nac);
+                            Add_NameOfCommon_1(yyvsp[-1].nac);
+                            pos_end = setposcur();
+                            RemoveWordSET_0(fortranout,pos_curcommon,
+                                                       pos_end-pos_curcommon);
+                         }
+                   }
+break;
+case 156:
+#line 1072 "fortran.y"
+{
+                         if ( couldaddvariable == 1 )
+                         {
+                            sprintf(charusemodule,"%s",yyvsp[-2].nac);
+                            Add_NameOfCommon_1(yyvsp[-2].nac);
+                            pos_end = setposcur();
+                            RemoveWordSET_0(fortranout,pos_curcommon,
+                                                       pos_end-pos_curcommon);
+                         }
+                   }
+break;
+case 157:
+#line 1084 "fortran.y"
+{
+                      positioninblock=0;
+                      pos_curcommon = setposcur()-6;
+                   }
+break;
+case 158:
+#line 1089 "fortran.y"
+{
+                      positioninblock=0;
+                      pos_curcommon = setposcur()-6-7;
+                   }
+break;
+case 159:
+#line 1095 "fortran.y"
+{
+                      if ( couldaddvariable == 1 ) Add_Common_var_1();
+                   }
+break;
+case 160:
+#line 1100 "fortran.y"
+{
+                      if ( couldaddvariable == 1 ) Add_Common_var_1();
+                   }
+break;
+case 161:
+#line 1104 "fortran.y"
+{
+                      if ( couldaddvariable == 1 )
+                      {
+                         positioninblock = positioninblock + 1 ;
+                         strcpy(commonvar,yyvsp[-1].nac);
+                         commondim = yyvsp[0].d;
+                      }
+                   }
+break;
+case 162:
+#line 1114 "fortran.y"
+{
+                      if ( couldaddvariable == 1 )
+                      {
+                         strcpy(yyval.nac,"");
+                         positioninblock=0;
+                         strcpy(commonblockname,"");
+                      }
+                   }
+break;
+case 163:
+#line 1123 "fortran.y"
+{
+                      if ( couldaddvariable == 1 )
+                      {
+                         strcpy(yyval.nac,yyvsp[-1].nac);
+                         positioninblock=0;
+                         strcpy(commonblockname,yyvsp[-1].nac);
+                      }
+                   }
+break;
+case 166:
+#line 1136 "fortran.y"
+{
+                      if ( couldaddvariable == 1 ) yyval.l=insertvar(NULL,yyvsp[0].v);
+                   }
+break;
+case 167:
+#line 1140 "fortran.y"
+{
+                      if ( couldaddvariable == 1 ) yyval.l=insertvar(yyvsp[-2].l,yyvsp[0].v);
+                   }
+break;
+case 168:
+#line 1145 "fortran.y"
+{
+                     if ( couldaddvariable == 1 )
+                     {
+                         curvar=(variable *) malloc(sizeof(variable));
+                         /*                                                   */
+                         Init_Variable(curvar);
+                         /*                                                   */
+                         curvar->v_VariableIsParameter=1;
+                         strcpy(curvar->v_nomvar,yyvsp[-2].nac);
+                         Save_Length(yyvsp[-2].nac,4);
+                         strcpy(curvar->v_subroutinename,subroutinename);
+                         Save_Length(subroutinename,11);
+                         strcpy(curvar->v_modulename,curmodulename);
+                         Save_Length(curmodulename,6);
+                         strcpy(curvar->v_initialvalue,yyvsp[0].na);
+                         Save_Length(yyvsp[0].na,14);
+                         strcpy(curvar->v_commoninfile,mainfile);
+                         Save_Length(mainfile,10);
+                         yyval.v=curvar;
+                      }
+                   }
+break;
+case 172:
+#line 1173 "fortran.y"
+{
+                       if ( insubroutinedeclare == 1 )
+                       {
+                          Add_ImplicitNoneSubroutine_1();
+                          pos_end = setposcur();
+                          RemoveWordSET_0(fortranout,pos_end-13,
+                                                             13);
+                       }
+                    }
+break;
+case 175:
+#line 1187 "fortran.y"
+{
+                      if ( couldaddvariable == 1 )
+                      {
+                         /*                                                   */
+                         if (dimsgiven == 1)
+                         {
+                            curvar=createvar(yyvsp[-3].nac,curdim);
+                         }
+                         else
+                         {
+                            curvar=createvar(yyvsp[-3].nac,yyvsp[-2].d);
+                         }
+                         /*                                                   */
+                         CreateAndFillin_Curvar(DeclType,curvar);
+                         /*                                                   */
+                         curlistvar=insertvar(NULL,curvar);
+                         if (!strcasecmp(DeclType,"character"))
+                         {
+                            if (c_selectorgiven == 1)
+                            {
+                               strcpy(c_selectordim.first,"1");
+                               strcpy(c_selectordim.last,c_selectorname);
+                               Save_Length(c_selectorname,1);
+                               change_dim_char
+                                     (insertdim(NULL,c_selectordim),curlistvar);
+                            }
+                         }
+                         yyval.l=settype(DeclType,curlistvar);
+                      }
+                      strcpy(vallengspec,"");
+                   }
+break;
+case 176:
+#line 1219 "fortran.y"
+{
+                      if ( couldaddvariable == 1 )
+                      {
+                         if (dimsgiven == 1)
+                         {
+                            curvar=createvar(yyvsp[-3].nac,curdim);
+                         }
+                         else
+                         {
+                            curvar=createvar(yyvsp[-3].nac,yyvsp[-2].d);
+                         }
+                         /*                                                   */
+                         CreateAndFillin_Curvar(yyvsp[-6].l->var->v_typevar,curvar);
+                         /*                                                   */
+                         strcpy(curvar->v_typevar,(yyvsp[-6].l->var->v_typevar));
+                         Save_Length(yyvsp[-6].l->var->v_typevar,3);
+                         /*                                                   */
+                         curlistvar=insertvar(yyvsp[-6].l,curvar);
+                         if (!strcasecmp(DeclType,"character"))
+                         {
+                            if (c_selectorgiven == 1)
+                            {
+                               strcpy(c_selectordim.first,"1");
+                               strcpy(c_selectordim.last,c_selectorname);
+                               Save_Length(c_selectorname,1);
+                               change_dim_char
+                                     (insertdim(NULL,c_selectordim),curlistvar);
+                            }
+                         }
+                         yyval.l=curlistvar;
+                      }
+                      strcpy(vallengspec,"");
+                   }
+break;
+case 177:
+#line 1253 "fortran.y"
+{dimsgiven=0;}
+break;
+case 178:
+#line 1256 "fortran.y"
+{strcpy(DeclType,yyvsp[-1].nac);}
+break;
+case 179:
+#line 1258 "fortran.y"
+{
+                      strcpy(DeclType,"CHARACTER");
+                   }
+break;
+case 180:
+#line 1262 "fortran.y"
+{
+                      strcpy(DeclType,yyvsp[-2].nac);
+                      strcpy(nameinttypename,yyvsp[0].nac);
+                   }
+break;
+case 181:
+#line 1267 "fortran.y"
+{
+                      strcpy(DeclType,"TYPE");
+                   }
+break;
+case 182:
+#line 1272 "fortran.y"
+{
+                 /*     if ( couldaddvariable == 1 ) VarTypepar = 1 ;
+                      couldaddvariable = 0 ;
+                      pos_cur_decl = setposcur()-5;*/
+                   pos_cur_decl = setposcur()-5;
+                   }
+break;
+case 184:
+#line 1281 "fortran.y"
+{c_selectorgiven=1;strcpy(c_selectorname,yyvsp[0].nac);}
+break;
+case 185:
+#line 1282 "fortran.y"
+{c_star = 1;}
+break;
+case 190:
+#line 1290 "fortran.y"
+{
+                      pos_cur_decl = setposcur()-9;
+                   }
+break;
+case 191:
+#line 1294 "fortran.y"
+{strcpy(yyval.nac,yyvsp[0].nac);}
+break;
+case 192:
+#line 1297 "fortran.y"
+{
+                      strcpy(yyval.nac,"INTEGER");
+                      pos_cur_decl = setposcur()-7;
+                   }
+break;
+case 193:
+#line 1301 "fortran.y"
+{
+                      strcpy(yyval.nac,"REAL");
+                      pos_cur_decl = setposcur()-4;
+                   }
+break;
+case 194:
+#line 1306 "fortran.y"
+{strcpy(yyval.nac,"COMPLEX");
+                   pos_cur_decl = setposcur()-7;}
+break;
+case 195:
+#line 1309 "fortran.y"
+{
+                      pos_cur_decl = setposcur()-16;
+                      strcpy(yyval.nac,"REAL");
+                      strcpy(nameinttypename,"8");
+                   }
+break;
+case 196:
+#line 1315 "fortran.y"
+{strcpy(yyval.nac,"DOUBLE COMPLEX");}
+break;
+case 197:
+#line 1317 "fortran.y"
+{
+                      strcpy(yyval.nac,"LOGICAL");
+                      pos_cur_decl = setposcur()-7;
+                   }
+break;
+case 199:
+#line 1323 "fortran.y"
+{strcpy(vallengspec,yyvsp[0].na);}
+break;
+case 200:
+#line 1325 "fortran.y"
+{sprintf(yyval.na,"*%s",yyvsp[0].na);}
+break;
+case 201:
+#line 1326 "fortran.y"
+{strcpy(yyval.na,"*(*)");}
+break;
+case 208:
+#line 1337 "fortran.y"
+{
+                      if ( strstr(yyvsp[0].na,"0.d0") )
+                      {
+                         strcpy(nameinttypename,"8");
+                         sprintf(NamePrecision,"");
+                      }
+                      else sprintf(NamePrecision,"%s = %s",yyvsp[-2].nac,yyvsp[0].na);
+                   }
+break;
+case 209:
+#line 1346 "fortran.y"
+{
+                      strcpy(NamePrecision,yyvsp[0].nac);
+                   }
+break;
+case 210:
+#line 1350 "fortran.y"
+{
+                      strcpy(NamePrecision,yyvsp[0].nac);
+                   }
+break;
+case 211:
+#line 1354 "fortran.y"
+{strcpy(CharacterSize,yyvsp[0].na);
+                    strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 212:
+#line 1356 "fortran.y"
+{strcpy(CharacterSize,"*");
+                    strcpy(yyval.na,"*");}
+break;
+case 220:
+#line 1370 "fortran.y"
+{
+                      VariableIsParameter = 1;
+                   }
+break;
+case 222:
+#line 1375 "fortran.y"
+{Allocatabledeclare = 1;}
+break;
+case 223:
+#line 1377 "fortran.y"
+{
+                      dimsgiven=1;
+                      curdim=yyvsp[0].d;
+                   }
+break;
+case 224:
+#line 1382 "fortran.y"
+{ExternalDeclare = 1;}
+break;
+case 225:
+#line 1384 "fortran.y"
+{strcpy(IntentSpec,yyvsp[-1].nac);}
+break;
+case 227:
+#line 1386 "fortran.y"
+{optionaldeclare = 1 ;}
+break;
+case 228:
+#line 1387 "fortran.y"
+{pointerdeclare = 1 ;}
+break;
+case 229:
+#line 1388 "fortran.y"
+{
+/*                       if ( inmodulemeet == 1 )
+                       {*/
+                          SaveDeclare = 1 ;
+                     /*  }*/
+                    }
+break;
+case 231:
+#line 1396 "fortran.y"
+{strcpy(yyval.nac,yyvsp[0].nac);}
+break;
+case 232:
+#line 1397 "fortran.y"
+{strcpy(yyval.nac,yyvsp[0].nac);}
+break;
+case 233:
+#line 1398 "fortran.y"
+{strcpy(yyval.nac,yyvsp[0].nac); }
+break;
+case 234:
+#line 1401 "fortran.y"
+{PublicDeclare = 1;}
+break;
+case 235:
+#line 1403 "fortran.y"
+{PrivateDeclare = 1;}
+break;
+case 236:
+#line 1405 "fortran.y"
+{if ( created_dimensionlist == 1 )
+                       {
+                           yyval.d=(listdim *)NULL;
+                       }
+                   }
+break;
+case 237:
+#line 1411 "fortran.y"
+{if ( created_dimensionlist == 1 ||
+                         agrif_parentcall      == 1 ) yyval.d=yyvsp[-1].d;}
+break;
+case 238:
+#line 1414 "fortran.y"
+{if ( created_dimensionlist == 1 ||
+                         agrif_parentcall      == 1 ) yyval.d=insertdim(NULL,yyvsp[0].dim1);}
+break;
+case 239:
+#line 1417 "fortran.y"
+{if ( couldaddvariable == 1 )
+                         if ( created_dimensionlist == 1 ) yyval.d=insertdim(yyvsp[-2].d,yyvsp[0].dim1);}
+break;
+case 240:
+#line 1420 "fortran.y"
+{
+                      strcpy(yyval.dim1.first,"1");
+                      strcpy(yyval.dim1.last,yyvsp[0].na);
+                      Save_Length(yyvsp[0].na,1);
+                   }
+break;
+case 241:
+#line 1425 "fortran.y"
+{
+                      strcpy(yyval.dim1.first,"");
+                      strcpy(yyval.dim1.last,"");
+                   }
+break;
+case 242:
+#line 1429 "fortran.y"
+{
+                      strcpy(yyval.dim1.first,yyvsp[-1].na);
+                      Save_Length(yyvsp[-1].na,2);
+                      strcpy(yyval.dim1.last,"");
+                   }
+break;
+case 243:
+#line 1434 "fortran.y"
+{
+                      strcpy(yyval.dim1.first,"");
+                      strcpy(yyval.dim1.last,yyvsp[0].na);
+                      Save_Length(yyvsp[0].na,1);
+                   }
+break;
+case 244:
+#line 1440 "fortran.y"
+{
+                      strcpy(yyval.dim1.first,yyvsp[-2].na);
+                      Save_Length(yyvsp[-2].na,2);
+                      strcpy(yyval.dim1.last,yyvsp[0].na);
+                      Save_Length(yyvsp[0].na,1);
+                   }
+break;
+case 245:
+#line 1447 "fortran.y"
+{strcpy(yyval.na,"*");}
+break;
+case 246:
+#line 1448 "fortran.y"
+{strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 247:
+#line 1450 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 248:
+#line 1452 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"(%s)",yyvsp[-1].na);}
+break;
+case 249:
+#line 1454 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 250:
+#line 1456 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 251:
+#line 1460 "fortran.y"
+{sprintf(yyval.na,"SUM(%s)",yyvsp[-1].na);}
+break;
+case 252:
+#line 1462 "fortran.y"
+{sprintf(yyval.na,"MAX(%s)",yyvsp[-1].na);}
+break;
+case 253:
+#line 1464 "fortran.y"
+{sprintf(yyval.na,"TANH(%s)",yyvsp[-1].na);}
+break;
+case 254:
+#line 1466 "fortran.y"
+{sprintf(yyval.na,"MAXVAL(%s)",yyvsp[-1].na);}
+break;
+case 255:
+#line 1468 "fortran.y"
+{sprintf(yyval.na,"MIN(%s)",yyvsp[-1].na);}
+break;
+case 256:
+#line 1470 "fortran.y"
+{sprintf(yyval.na,"MINVAL(%s)",yyvsp[-1].na);}
+break;
+case 257:
+#line 1472 "fortran.y"
+{sprintf(yyval.na,"TRIM(%s)",yyvsp[-1].na);}
+break;
+case 258:
+#line 1474 "fortran.y"
+{sprintf(yyval.na,"SQRT(%s)",yyvsp[-1].na);}
+break;
+case 259:
+#line 1476 "fortran.y"
+{sprintf(yyval.na,"REAL(%s)",yyvsp[-1].na);}
+break;
+case 260:
+#line 1478 "fortran.y"
+{sprintf(yyval.na,"NINT(%s)",yyvsp[-1].na);}
+break;
+case 261:
+#line 1480 "fortran.y"
+{sprintf(yyval.na,"FLOAT(%s)",yyvsp[-1].na);}
+break;
+case 262:
+#line 1482 "fortran.y"
+{sprintf(yyval.na,"EXP(%s)",yyvsp[-1].na);}
+break;
+case 263:
+#line 1484 "fortran.y"
+{sprintf(yyval.na,"COS(%s)",yyvsp[-1].na);}
+break;
+case 264:
+#line 1486 "fortran.y"
+{sprintf(yyval.na,"COSH(%s)",yyvsp[-1].na);}
+break;
+case 265:
+#line 1488 "fortran.y"
+{sprintf(yyval.na,"ACOS(%s)",yyvsp[-1].na);}
+break;
+case 266:
+#line 1490 "fortran.y"
+{sprintf(yyval.na,"SIN(%s)",yyvsp[-1].na);}
+break;
+case 267:
+#line 1492 "fortran.y"
+{sprintf(yyval.na,"SINH(%s)",yyvsp[-1].na);}
+break;
+case 268:
+#line 1494 "fortran.y"
+{sprintf(yyval.na,"ASIN(%s)",yyvsp[-1].na);}
+break;
+case 269:
+#line 1496 "fortran.y"
+{sprintf(yyval.na,"LOG(%s)",yyvsp[-1].na);}
+break;
+case 270:
+#line 1498 "fortran.y"
+{sprintf(yyval.na,"TAN(%s)",yyvsp[-1].na);}
+break;
+case 271:
+#line 1500 "fortran.y"
+{sprintf(yyval.na,"ATAN(%s)",yyvsp[-1].na);}
+break;
+case 272:
+#line 1502 "fortran.y"
+{sprintf(yyval.na,"ABS(%s)",yyvsp[-1].na);}
+break;
+case 273:
+#line 1504 "fortran.y"
+{sprintf(yyval.na,"MOD(%s)",yyvsp[-1].na);}
+break;
+case 274:
+#line 1506 "fortran.y"
+{sprintf(yyval.na,"SIGN(%s)",yyvsp[-1].na);}
+break;
+case 275:
+#line 1508 "fortran.y"
+{sprintf(yyval.na,"MINLOC(%s)",yyvsp[-1].na);}
+break;
+case 276:
+#line 1510 "fortran.y"
+{sprintf(yyval.na,"MAXLOC(%s)",yyvsp[-1].na);}
+break;
+case 277:
+#line 1512 "fortran.y"
+{strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 278:
+#line 1514 "fortran.y"
+{if ( couldaddvariable == 1 )
+                   { strcpy(yyval.na,yyvsp[-2].na);strcat(yyval.na,",");strcat(yyval.na,yyvsp[0].na);}}
+break;
+case 279:
+#line 1517 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 280:
+#line 1519 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na,yyvsp[0].nac);}
+break;
+case 281:
+#line 1521 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 282:
+#line 1523 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s%s",yyvsp[-1].na,yyvsp[0].na);}
+break;
+case 283:
+#line 1525 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s%s",yyvsp[-1].nac,yyvsp[0].na);}
+break;
+case 284:
+#line 1527 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s%s",yyvsp[-1].nac,yyvsp[0].na);}
+break;
+case 285:
+#line 1529 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.nac,"+");}
+break;
+case 286:
+#line 1530 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.nac,"-");}
+break;
+case 287:
+#line 1533 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"+%s",yyvsp[0].na);}
+break;
+case 288:
+#line 1535 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"-%s",yyvsp[0].na);}
+break;
+case 289:
+#line 1537 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"*%s",yyvsp[0].na);}
+break;
+case 290:
+#line 1539 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s%s",yyvsp[-1].nac,yyvsp[0].na);}
+break;
+case 291:
+#line 1541 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s%s",yyvsp[-1].nac,yyvsp[0].na);}
+break;
+case 292:
+#line 1543 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s%s",yyvsp[-1].nac,yyvsp[0].na);}
+break;
+case 293:
+#line 1545 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s%s",yyvsp[-1].nac,yyvsp[0].na);}
+break;
+case 294:
+#line 1547 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na," > %s",yyvsp[0].na);}
+break;
+case 295:
+#line 1549 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s%s",yyvsp[-1].nac,yyvsp[0].na);}
+break;
+case 296:
+#line 1551 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na," < %s",yyvsp[0].na);}
+break;
+case 297:
+#line 1553 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s%s",yyvsp[-1].nac,yyvsp[0].na);}
+break;
+case 298:
+#line 1555 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na," >= %s",yyvsp[0].na);}
+break;
+case 299:
+#line 1557 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s%s",yyvsp[-1].nac,yyvsp[0].na);}
+break;
+case 300:
+#line 1559 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na," <= %s",yyvsp[0].na);}
+break;
+case 301:
+#line 1561 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s%s",yyvsp[-1].nac,yyvsp[0].na);}
+break;
+case 302:
+#line 1563 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s%s",yyvsp[-1].nac,yyvsp[0].na);}
+break;
+case 303:
+#line 1565 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s%s",yyvsp[-1].nac,yyvsp[0].na);}
+break;
+case 304:
+#line 1567 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s%s",yyvsp[-1].nac,yyvsp[0].na);}
+break;
+case 305:
+#line 1569 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s%s",yyvsp[-1].nac,yyvsp[0].na);}
+break;
+case 306:
+#line 1571 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s",yyvsp[0].na);}
+break;
+case 307:
+#line 1573 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s",yyvsp[0].na);}
+break;
+case 308:
+#line 1575 "fortran.y"
+{strcpy(yyval.na,"");}
+break;
+case 309:
+#line 1577 "fortran.y"
+{sprintf(yyval.na,"/%s",yyvsp[0].na);}
+break;
+case 310:
+#line 1579 "fortran.y"
+{sprintf(yyval.na,"/= %s",yyvsp[0].na);}
+break;
+case 311:
+#line 1581 "fortran.y"
+{sprintf(yyval.na,"//%s",yyvsp[0].na);}
+break;
+case 312:
+#line 1584 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"==%s",yyvsp[0].na);}
+break;
+case 313:
+#line 1586 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"= %s",yyvsp[0].na);}
+break;
+case 314:
+#line 1589 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na,yyvsp[0].nac);}
+break;
+case 315:
+#line 1591 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 316:
+#line 1593 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 317:
+#line 1595 "fortran.y"
+{
+                      agrif_parentcall =0;
+                      if (!strcasecmp(identcopy,"Agrif_Parent") )
+                                                            agrif_parentcall =1;
+                      if ( Agrif_in_Tok_NAME(identcopy) == 1 )
+                      {
+                         inagrifcallargument = 1;
+                         Add_SubroutineWhereAgrifUsed_1(subroutinename,
+                                                        curmodulename);
+                      }
+                   }
+break;
+case 318:
+#line 1608 "fortran.y"
+{
+                     strcpy(yyval.na,yyvsp[0].na);
+                     if ( incalldeclare == 0 ) inagrifcallargument = 0;
+                   }
+break;
+case 319:
+#line 1613 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na," %s %s ",yyvsp[-1].na,yyvsp[0].na);}
+break;
+case 320:
+#line 1615 "fortran.y"
+{if ( couldaddvariable == 1 )
+                                                sprintf(yyval.na," %s ( %s )",yyvsp[-3].na,yyvsp[-1].na);}
+break;
+case 321:
+#line 1618 "fortran.y"
+{if ( couldaddvariable == 1 )
+                                         sprintf(yyval.na," %s ( %s ) %s ",yyvsp[-4].na,yyvsp[-2].na,yyvsp[0].na);}
+break;
+case 322:
+#line 1622 "fortran.y"
+{
+                      if ( couldaddvariable == 1 )
+                      {
+                         sprintf(yyval.na," %s ( %s )",yyvsp[-3].nac,yyvsp[-1].na);
+                         ModifyTheAgrifFunction_0(yyvsp[-1].na);
+                         agrif_parentcall =0;
+                      }
+                   }
+break;
+case 323:
+#line 1632 "fortran.y"
+{
+                      sprintf(yyval.na," %s %% %s ",yyvsp[-2].na,yyvsp[0].na);
+                      if ( incalldeclare == 0 ) inagrifcallargument = 0;
+                   }
+break;
+case 324:
+#line 1638 "fortran.y"
+{sprintf(yyval.na,"(/%s/)",yyvsp[-1].na);}
+break;
+case 325:
+#line 1640 "fortran.y"
+{strcpy(yyval.na," ");}
+break;
+case 326:
+#line 1642 "fortran.y"
+{strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 327:
+#line 1644 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 328:
+#line 1646 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s,%s",yyvsp[-2].na,yyvsp[0].na);}
+break;
+case 329:
+#line 1648 "fortran.y"
+{strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 330:
+#line 1649 "fortran.y"
+{strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 331:
+#line 1652 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s :%s",yyvsp[-2].na,yyvsp[0].na);}
+break;
+case 332:
+#line 1654 "fortran.y"
+{if ( couldaddvariable == 1 )
+                                               sprintf(yyval.na,"%s :%s :%s",yyvsp[-4].na,yyvsp[-2].na,yyvsp[0].na);}
+break;
+case 333:
+#line 1657 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,":%s :%s",yyvsp[-2].na,yyvsp[0].na);}
+break;
+case 334:
+#line 1658 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,": : %s",yyvsp[0].na);}
+break;
+case 335:
+#line 1659 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,":%s",yyvsp[0].na);}
+break;
+case 336:
+#line 1660 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s :",yyvsp[-1].na);}
+break;
+case 337:
+#line 1661 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,":");}
+break;
+case 338:
+#line 1663 "fortran.y"
+{
+                       if ( couldaddvariable == 1 )
+                       {
+                       if ( Vartonumber(yyvsp[0].nac) == 1 )
+                       {
+                          Add_SubroutineWhereAgrifUsed_1(subroutinename,
+                                                        curmodulename);
+                       }
+                       if (!strcasecmp(yyvsp[0].nac,"Agrif_Parent") )
+                                                            agrif_parentcall =1;
+                       if ( VariableIsNotFunction(yyvsp[0].nac) == 0 )
+                       {
+                          if ( inagrifcallargument == 1 )
+                          {
+                             if ( !strcasecmp(yyvsp[0].nac,identcopy) )
+                             {
+                                strcpy(sameagrifname,identcopy);
+                                sameagrifargument = 1;
+                             }
+                          }
+                          strcpy(identcopy,yyvsp[0].nac);
+                          pointedvar=0;
+                          strcpy(truename,yyvsp[0].nac);
+                          if (variscoupled_0(yyvsp[0].nac)) strcpy(truename,getcoupledname_0(yyvsp[0].nac));
+/*
+                          if ( VarIsNonGridDepend($1) == 0 &&
+                               Variableshouldberemove($1) == 0 )
+                          {
+                             if ( inagrifcallargument == 1 ||
+                                  varisallocatable_0($1) == 1 ||
+                                  varispointer_0($1) == 1 )
+                             {
+                            if ((IsinListe(List_UsedInSubroutine_Var,$1) == 1) || (inagrifcallargument == 1))
+                             {
+                              if (varistyped_0($1) == 0)
+                                 {
+                                 ModifyTheVariableName_0($1);
+                                 }
+                                 }
+                                 else
+                                 {
+                                 }
+                             }
+                             if (variscoupled_0($1) == 1)
+                             {
+      printf("mla variable %s est couplee %s\n",$1,getcoupledname_0($1));
+                             ModifyTheVariableNamecoupled_0($1,getcoupledname_0($1));
+                             }
+                             if ( inagrifcallargument != 1 ||
+                                  sameagrifargument ==1 )
+                                  Add_UsedInSubroutine_Var_1($1);
+                          }
+                          NotifyAgrifFunction_0($1);
+*/
+                          if ( VarIsNonGridDepend(truename) == 0 &&
+                               Variableshouldberemove(truename) == 0 )
+                          {
+                             if ( inagrifcallargument == 1 ||
+                                  varisallocatable_0(truename) == 1 ||
+                                  varispointer_0(truename) == 1 )
+                             {
+                            if ((IsinListe(List_UsedInSubroutine_Var,yyvsp[0].nac) == 1) || (inagrifcallargument == 1))
+                             {
+                              if (varistyped_0(truename) == 0)
+                                 {
+                                 ModifyTheVariableName_0(truename,strlen(yyvsp[0].nac));
+                                 }
+                                 }
+                             }
+                             if ( inagrifcallargument != 1 ||
+                                  sameagrifargument ==1 )
+                                  Add_UsedInSubroutine_Var_1(truename);
+                          }
+                          NotifyAgrifFunction_0(truename);
+                       }
+                       }
+                    }
+break;
+case 339:
+#line 1742 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.nac,".TRUE.");}
+break;
+case 340:
+#line 1743 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.nac,".FALSE.");}
+break;
+case 341:
+#line 1744 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.nac,yyvsp[0].nac);}
+break;
+case 342:
+#line 1745 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.nac,yyvsp[0].nac);}
+break;
+case 343:
+#line 1746 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.nac,yyvsp[0].nac);}
+break;
+case 344:
+#line 1747 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.nac,yyvsp[0].nac);}
+break;
+case 345:
+#line 1749 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.nac,"%s%s",yyvsp[-1].nac,yyvsp[0].nac);}
+break;
+case 347:
+#line 1753 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.nac,yyvsp[0].nac);}
+break;
+case 349:
+#line 1756 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.nac,yyvsp[0].nac);}
+break;
+case 350:
+#line 1758 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.nac,yyvsp[0].nac);}
+break;
+case 351:
+#line 1760 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na," ");}
+break;
+case 352:
+#line 1761 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 353:
+#line 1764 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"(%s :%s)",yyvsp[-3].na,yyvsp[-1].na);}
+break;
+case 354:
+#line 1766 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na," ");}
+break;
+case 355:
+#line 1767 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 356:
+#line 1769 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na," ");}
+break;
+case 357:
+#line 1770 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 358:
+#line 1772 "fortran.y"
+{InitialValueGiven = 0;}
+break;
+case 359:
+#line 1774 "fortran.y"
+{
+                       if ( couldaddvariable == 1 )
+                       {
+                          strcpy(InitValue,yyvsp[0].na);
+                          InitialValueGiven = 1;
+                       }
+                    }
+break;
+case 360:
+#line 1782 "fortran.y"
+{pos_curinit = setposcur();}
+break;
+case 361:
+#line 1785 "fortran.y"
+{sprintf(yyval.na,"(%s,%s)",yyvsp[-3].na,yyvsp[-1].na);}
+break;
+case 362:
+#line 1788 "fortran.y"
+{
+                      if ( couldaddvariable == 1 )
+                      {
+                      /* if variables has been declared in a subroutine       */
+                      if (insubroutinedeclare == 1)
+                      {
+                         copyuse_0(yyvsp[0].nac);
+                      }
+                      sprintf(charusemodule,"%s",yyvsp[0].nac);
+                      Add_NameOfModuleUsed_1(yyvsp[0].nac);
+
+                      if ( inmoduledeclare == 0 )
+                      {
+                         pos_end = setposcur();
+                         RemoveWordSET_0(fortranout,pos_curuse,
+                                               pos_end-pos_curuse);
+                      }
+                      }
+                    }
+break;
+case 363:
+#line 1808 "fortran.y"
+{
+                       if ( couldaddvariable == 1 )
+                       {
+                      if (insubroutinedeclare == 1)
+                      {
+                         Add_CouplePointed_Var_1(yyvsp[-2].nac,yyvsp[0].lc);
+                      }
+                      if ( firstpass == 1 )
+                      {
+                         if ( insubroutinedeclare == 1 )
+                         {
+                            coupletmp = yyvsp[0].lc;
+                            strcpy(ligne,"");
+                            while ( coupletmp )
+                            {
+                               strcat(ligne,coupletmp->c_namevar);
+                               strcat(ligne," => ");
+                               strcat(ligne,coupletmp->c_namepointedvar);
+                               coupletmp = coupletmp->suiv;
+                               if ( coupletmp ) strcat(ligne,",");
+                            }
+                            sprintf(charusemodule,"%s",yyvsp[-2].nac);
+                         }
+                         Add_NameOfModuleUsed_1(yyvsp[-2].nac);
+                      }
+                      if ( inmoduledeclare == 0 )
+                      {
+                         pos_end = setposcur();
+                         RemoveWordSET_0(fortranout,pos_curuse,
+                                               pos_end-pos_curuse);
+                      }
+                      }
+                    }
+break;
+case 364:
+#line 1842 "fortran.y"
+{
+                       if ( couldaddvariable == 1 )
+                       {
+                      /* if variables has been declared in a subroutine       */
+                      if (insubroutinedeclare == 1)
+                      {
+                         copyuseonly_0(yyvsp[-4].nac);
+                      }
+                      sprintf(charusemodule,"%s",yyvsp[-4].nac);
+                      Add_NameOfModuleUsed_1(yyvsp[-4].nac);
+
+                       if ( inmoduledeclare == 0 )
+                       {
+                          pos_end = setposcur();
+                          RemoveWordSET_0(fortranout,pos_curuse,
+                                                pos_end-pos_curuse);
+                       }
+                       }
+                    }
+break;
+case 365:
+#line 1862 "fortran.y"
+{
+                       if ( couldaddvariable == 1 )
+                       {
+                       /* if variables has been declared in a subroutine      */
+                       if (insubroutinedeclare == 1)
+                       {
+                          Add_CouplePointed_Var_1(yyvsp[-4].nac,yyvsp[0].lc);
+                       }
+                       if ( firstpass == 1 )
+                       {
+                         if ( insubroutinedeclare == 1 )
+                         {
+                             coupletmp = yyvsp[0].lc;
+                             strcpy(ligne,"");
+                             while ( coupletmp )
+                             {
+                                strcat(ligne,coupletmp->c_namevar);
+                               if ( strcasecmp(coupletmp->c_namepointedvar,"") )
+                                                           strcat(ligne," => ");
+                                strcat(ligne,coupletmp->c_namepointedvar);
+                                coupletmp = coupletmp->suiv;
+                                if ( coupletmp ) strcat(ligne,",");
+                             }
+                             sprintf(charusemodule,"%s",yyvsp[-4].nac);
+                          }
+                          Add_NameOfModuleUsed_1(yyvsp[-4].nac);
+                       }
+                       if ( firstpass == 0 )
+                       {
+                          if ( inmoduledeclare == 0 )
+                          {
+
+                            pos_end = setposcur();
+                             RemoveWordSET_0(fortranout,pos_curuse,
+                                                   pos_end-pos_curuse);
+                       if (oldfortranout) 
+                         variableisglobalinmodule(yyvsp[0].lc,yyvsp[-4].nac,oldfortranout,pos_curuseold);
+                        
+                          }
+                          else
+                          {
+
+                             /* if we are in the module declare and if the    */
+                             /* onlylist is a list of global variable         */
+                             variableisglobalinmodule(yyvsp[0].lc, yyvsp[-4].nac, fortranout,pos_curuse);
+                          }
+                       }
+                       }
+                    }
+break;
+case 366:
+#line 1913 "fortran.y"
+{
+                      pos_curuse = setposcur()-strlen(yyvsp[0].nac);
+                     if (firstpass == 0 && oldfortranout) {
+                     pos_curuseold = setposcurname(oldfortranout);
+                     }
+                   }
+break;
+case 367:
+#line 1921 "fortran.y"
+{strcpy(yyval.nac,yyvsp[0].nac);}
+break;
+case 368:
+#line 1924 "fortran.y"
+{
+                       if ( couldaddvariable == 1 ) yyval.lc = yyvsp[0].lc;
+                    }
+break;
+case 369:
+#line 1928 "fortran.y"
+{
+                        if ( couldaddvariable == 1 )
+                        {
+                        /* insert the variable in the list $1                 */
+                        yyvsp[0].lc->suiv = yyvsp[-2].lc;
+                        yyval.lc = yyvsp[0].lc;
+                        }
+                    }
+break;
+case 370:
+#line 1938 "fortran.y"
+{
+                       coupletmp =(listcouple *)malloc(sizeof(listcouple));
+                       strcpy(coupletmp->c_namevar,yyvsp[-2].nac);
+                       Save_Length(yyvsp[-2].nac,21);
+                       strcpy(coupletmp->c_namepointedvar,yyvsp[0].nac);
+                       Save_Length(yyvsp[0].nac,22);
+                       coupletmp->suiv = NULL;
+                       yyval.lc = coupletmp;
+                     }
+break;
+case 371:
+#line 1949 "fortran.y"
+{
+                       if ( couldaddvariable == 1 ) yyval.lc = yyvsp[0].lc;
+                    }
+break;
+case 372:
+#line 1953 "fortran.y"
+{
+                        if ( couldaddvariable == 1 )
+                        {
+                        /* insert the variable in the list $1                 */
+                        yyvsp[0].lc->suiv = yyvsp[-2].lc;
+                        yyval.lc = yyvsp[0].lc;
+                        }
+                    }
+break;
+case 373:
+#line 1963 "fortran.y"
+{
+                       coupletmp =(listcouple *)malloc(sizeof(listcouple));
+                       strcpy(coupletmp->c_namevar,yyvsp[-2].nac);
+                       Save_Length(yyvsp[-2].nac,21);
+                       strcpy(coupletmp->c_namepointedvar,yyvsp[0].nac);
+                       Save_Length(yyvsp[0].nac,22);
+                       coupletmp->suiv = NULL;
+                       yyval.lc = coupletmp;
+                       pointedvar=1;
+                       Add_UsedInSubroutine_Var_1(yyvsp[-2].nac);
+                    }
+break;
+case 374:
+#line 1974 "fortran.y"
+{
+                       coupletmp =(listcouple *)malloc(sizeof(listcouple));
+                       strcpy(coupletmp->c_namevar,yyvsp[0].nac);
+                       Save_Length(yyvsp[0].nac,21);
+                       strcpy(coupletmp->c_namepointedvar,"");
+                       coupletmp->suiv = NULL;
+                       yyval.lc = coupletmp;
+                     }
+break;
+case 376:
+#line 1985 "fortran.y"
+{
+                         Add_SubroutineWhereAgrifUsed_1(subroutinename,
+                                                        curmodulename);
+                                                        inallocate = 0;
+                     }
+break;
+case 377:
+#line 1991 "fortran.y"
+{
+                          Add_SubroutineWhereAgrifUsed_1(subroutinename,
+                                                         curmodulename);
+                                                         inallocate = 0;
+                     }
+break;
+case 379:
+#line 1998 "fortran.y"
+{
+                       GlobalDeclaration = 0 ;
+                       if ( firstpass == 0 &&
+                            strcasecmp(subroutinename,"") )
+                       {
+                          if ( module_declar && insubroutinedeclare == 0 )
+                          {
+                              fclose(module_declar);
+                          }
+                       }
+                       if ( couldaddvariable == 1 &&
+                            strcasecmp(subroutinename,"") )
+                       {
+                       if ( inmodulemeet == 1 )
+                       {
+                         /* we are in a module                                */
+                         if ( insubroutinedeclare == 1 )
+                         {
+                            /* it is like an end subroutine <name>            */
+                            insubroutinedeclare = 0 ;
+                            /*                                                */
+                            pos_cur = setposcur();
+                            closeandcallsubloopandincludeit_0(1);
+                            functiondeclarationisdone = 0;
+                         }
+                         else
+                         {
+                            /* it is like an end module <name>                */
+                            inmoduledeclare = 0 ;
+                            inmodulemeet = 0 ;
+                         }
+                       }
+                       else
+                       {
+                          insubroutinedeclare = 0;
+                          /*                                                  */
+                          pos_cur = setposcur();                        
+                          closeandcallsubloopandincludeit_0(2);
+                            functiondeclarationisdone = 0;
+                          if ( firstpass == 0 )
+                          {
+                             if ( retour77 == 0 ) fprintf(paramout,"!\n");
+                             else fprintf(paramout,"C\n");
+                             fclose(paramout);
+                           }
+                        }
+                      }
+                      strcpy(subroutinename,"");
+                    }
+break;
+case 380:
+#line 2048 "fortran.y"
+{
+                       if ( couldaddvariable == 1 )
+                       {
+                       insubroutinedeclare = 0;
+                       /*                                                     */
+                       pos_cur = setposcur();                      
+                       closeandcallsubloopandincludeit_0(3);
+                            functiondeclarationisdone = 0;
+                      if ( firstpass == 0 )
+                      {
+                         if ( retour77 == 0 ) fprintf(paramout,"!\n");
+                         else fprintf(paramout,"C\n");
+                         fclose(paramout);
+                      }
+                      strcpy(subroutinename,"");
+                      }
+                    }
+break;
+case 381:
+#line 2066 "fortran.y"
+{
+                       if ( couldaddvariable == 1 &&
+                            strcasecmp(subroutinename,"") )
+                       {
+                       insubroutinedeclare = 0;
+                       /*                                                     */
+                       pos_cur = setposcur();
+                                             
+                       closeandcallsubloopandincludeit_0(1);
+                            functiondeclarationisdone = 0;
+                      if ( firstpass == 0 )
+                      {
+                         if ( retour77 == 0 ) fprintf(paramout,"!\n");
+                         else fprintf(paramout,"C\n");
+                         fclose(paramout);
+                      }
+                      strcpy(subroutinename,"");
+                      }
+                    }
+break;
+case 382:
+#line 2086 "fortran.y"
+{
+                       if ( couldaddvariable == 1 )
+                       {
+                       insubroutinedeclare = 0;
+                       /*                                                     */
+                       pos_cur = setposcur();
+
+                       closeandcallsubloopandincludeit_0(0);
+                            functiondeclarationisdone = 0;
+                      if ( firstpass == 0 )
+                      {
+                         if ( retour77 == 0 ) fprintf(paramout,"!\n");
+                         else fprintf(paramout,"C\n");
+                         fclose(paramout);
+                      }
+                      strcpy(subroutinename,"");
+                      }
+                    }
+break;
+case 383:
+#line 2105 "fortran.y"
+{
+                       if ( couldaddvariable == 1 )
+                       {
+                       /* if we never meet the contains keyword               */
+                      Remove_Word_end_module_0(strlen(yyvsp[0].nac));
+                       if ( inmoduledeclare == 1 )
+                       {
+                          if ( aftercontainsdeclare == 0 )
+                          {
+                             Write_GlobalParameter_Declaration_0();
+                             Write_NotGridDepend_Declaration_0();
+                             Write_GlobalType_Declaration_0();
+                             Write_Alloc_Subroutine_For_End_0();
+                          }
+                       }
+                                           
+                       inmoduledeclare = 0 ;
+                       inmodulemeet = 0 ;
+
+                      Write_Word_end_module_0();
+                      strcpy(curmodulename,"");
+                      aftercontainsdeclare = 1;
+                      if ( firstpass == 0 )
+                      {
+                         if ( module_declar && insubroutinedeclare == 0)
+                         {
+                           fclose(module_declar);
+                         }
+                      }
+                      GlobalDeclaration = 0 ;
+                      }
+                  }
+break;
+case 397:
+#line 2151 "fortran.y"
+{
+                      if (inmoduledeclare == 1 )
+                      {
+                         Remove_Word_Contains_0();
+                         Write_GlobalParameter_Declaration_0();
+                         Write_GlobalType_Declaration_0();
+                         Write_NotGridDepend_Declaration_0();
+                         Write_Alloc_Subroutine_0();
+                         inmoduledeclare = 0 ;
+                         aftercontainsdeclare = 1;
+                      }
+                      else
+                      {
+                       if ( couldaddvariable == 1 )
+                       {
+                          if ( firstpass == 1 ) List_ContainsSubroutine =
+                                                Addtolistnom(subroutinename,
+                                                     List_ContainsSubroutine,0);
+                          insubroutinedeclare = 0;
+                          /*                                                  */
+
+                          closeandcallsubloop_contains_0();
+                            functiondeclarationisdone = 0;
+                         if ( firstpass == 0 )
+                         {
+                            if ( retour77 == 0 ) fprintf(paramout,"!\n");
+                            else fprintf(paramout,"C\n");
+                            fclose(paramout);
+                         }
+                         }
+                         strcpy(subroutinename,"");
+                      }
+                   }
+break;
+case 398:
+#line 2186 "fortran.y"
+{
+                      if ( couldaddvariable == 1 )
+                      {
+                       strcpy(yyval.nac,yyvsp[0].nac);
+                       pos_endsubroutine = setposcur()-strlen(yyvsp[0].nac);
+                       functiondeclarationisdone = 0;
+                       }
+                    }
+break;
+case 399:
+#line 2196 "fortran.y"
+{
+                      if ( couldaddvariable == 1 )
+                      {
+                       strcpy(yyval.nac,yyvsp[0].nac);
+                       pos_endsubroutine = setposcur()-strlen(yyvsp[0].nac);
+                       }
+                    }
+break;
+case 400:
+#line 2205 "fortran.y"
+{
+                      if ( couldaddvariable == 1 )
+                      {
+                       strcpy(yyval.nac,yyvsp[0].nac);
+                       pos_endsubroutine = setposcur()-strlen(yyvsp[0].nac);
+                       }
+                    }
+break;
+case 401:
+#line 2214 "fortran.y"
+{
+                      if ( couldaddvariable == 1 )
+                      {
+                       strcpy(yyval.nac,yyvsp[0].nac);
+                       pos_endsubroutine = setposcur()-strlen(yyvsp[0].nac);
+                       }
+                    }
+break;
+case 413:
+#line 2236 "fortran.y"
+{strcpy(yyval.nac,"");}
+break;
+case 414:
+#line 2237 "fortran.y"
+{strcpy(yyval.nac,yyvsp[0].nac);}
+break;
+case 426:
+#line 2257 "fortran.y"
+{
+                          Add_SubroutineWhereAgrifUsed_1(subroutinename,
+                                                        curmodulename);
+                                                        inallocate = 0;
+                     }
+break;
+case 427:
+#line 2263 "fortran.y"
+{
+                          Add_SubroutineWhereAgrifUsed_1(subroutinename,
+                                                        curmodulename);
+                                                        inallocate = 0;
+                     }
+break;
+case 433:
+#line 2274 "fortran.y"
+{if ( couldaddvariable == 1 ) created_dimensionlist = 0;}
+break;
+case 434:
+#line 2276 "fortran.y"
+{
+                  created_dimensionlist = 1;
+                  if  ( agrif_parentcall == 1 )
+                  {
+                      ModifyTheAgrifFunction_0(yyvsp[-1].d->dim.last);
+                      agrif_parentcall =0;
+                      fprintf(fortranout," = ");
+                  }
+              }
+break;
+case 435:
+#line 2286 "fortran.y"
+{created_dimensionlist = 1;}
+break;
+case 440:
+#line 2294 "fortran.y"
+{
+                      inagrifcallargument = 0 ;
+                      incalldeclare=0;
+                      if ( oldfortranout &&
+                           !strcasecmp(meetagrifinitgrids,subroutinename) &&
+                           firstpass == 0 &&
+                           callmpiinit == 1)
+                      {
+                      /*   pos_end = setposcur();
+                         RemoveWordSET_0(fortranout,pos_curcall,
+                                               pos_end-pos_curcall);
+                         fprintf(oldfortranout,"      Call MPI_Init (%s) \n"
+                                                                   ,mpiinitvar);*/
+                      }
+                      if ( oldfortranout           &&
+                           callagrifinitgrids == 1 &&
+                           firstpass == 0 )
+                      {
+                         pos_end = setposcur();
+                         RemoveWordSET_0(fortranout,pos_curcall,
+                                               pos_end-pos_curcall);
+
+                         strcpy(subofagrifinitgrids,subroutinename);
+                      }
+                      Instanciation_0(sameagrifname);
+                   }
+break;
+case 445:
+#line 2328 "fortran.y"
+{
+                       if (!strcasecmp(yyvsp[0].nac,"MPI_Init") )
+                       {
+                          callmpiinit = 1;
+                       }
+                       else
+                       {
+                          callmpiinit = 0;
+                       }
+                       if (!strcasecmp(yyvsp[0].nac,"Agrif_Init_Grids") )
+                       {
+                          callagrifinitgrids = 1;
+                          strcpy(meetagrifinitgrids,subroutinename);
+                       }
+                       else callagrifinitgrids = 0;
+                       if ( !strcasecmp(yyvsp[0].nac,"Agrif_Open_File") )
+                       {
+                          Add_SubroutineWhereAgrifUsed_1(subroutinename,
+                                                        curmodulename);
+                       }
+                       if ( Vartonumber(yyvsp[0].nac) == 1 )
+                       {
+                          incalldeclare=1;
+                          inagrifcallargument = 1 ;
+                          Add_SubroutineWhereAgrifUsed_1(subroutinename,
+                                                        curmodulename);
+                       }
+                    }
+break;
+case 446:
+#line 2358 "fortran.y"
+{pos_curcall=setposcur()-4;}
+break;
+case 449:
+#line 2363 "fortran.y"
+{
+                  if ( callmpiinit == 1 )
+                  {
+                     strcpy(mpiinitvar,yyvsp[0].na);
+                     if ( firstpass == 1 )
+                     {
+                        Add_UsedInSubroutine_Var_1 (mpiinitvar);
+/*                        curvar=createvar($1,NULL);
+                        curlistvar=insertvar(NULL,curvar);
+                        List_Subr outineArgument_Var = AddListvarToListvar
+                         (curlistvar,List_SubroutineAr gument_Var,1);*/
+                     }
+                  }
+               }
+break;
+case 528:
+#line 2485 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 529:
+#line 2486 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 530:
+#line 2487 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 531:
+#line 2490 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s,%s",yyvsp[-2].na,yyvsp[0].na);}
+break;
+case 532:
+#line 2492 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s,%s",yyvsp[-2].na,yyvsp[0].na);}
+break;
+case 533:
+#line 2494 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s,%s",yyvsp[-2].na,yyvsp[0].na);}
+break;
+case 534:
+#line 2496 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s,%s",yyvsp[-2].na,yyvsp[0].na);}
+break;
+case 535:
+#line 2498 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s,%s",yyvsp[-2].na,yyvsp[0].na);}
+break;
+case 536:
+#line 2500 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s,%s",yyvsp[-2].na,yyvsp[0].na);}
+break;
+case 537:
+#line 2501 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 538:
+#line 2502 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 539:
+#line 2505 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 540:
+#line 2507 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na," (%s)",yyvsp[-1].na);}
+break;
+case 541:
+#line 2509 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"(%s,%s)",yyvsp[-3].na,yyvsp[-1].na);}
+break;
+case 542:
+#line 2511 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"(%s,%s)",yyvsp[-3].na,yyvsp[-1].na);}
+break;
+case 543:
+#line 2513 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"(%s,%s)",yyvsp[-3].na,yyvsp[-1].na);}
+break;
+case 544:
+#line 2517 "fortran.y"
+{if ( couldaddvariable == 1 )
+                                              sprintf(yyval.na,"%s=%s,%s)",yyvsp[-4].nac,yyvsp[-2].na,yyvsp[0].na);}
+break;
+case 545:
+#line 2520 "fortran.y"
+{if ( couldaddvariable == 1 )
+                                        sprintf(yyval.na,"%s=%s,%s,%s)",yyvsp[-6].nac,yyvsp[-4].na,yyvsp[-2].na,yyvsp[0].na);}
+break;
+case 554:
+#line 2536 "fortran.y"
+{Add_Allocate_Var_1(yyvsp[0].nac,curmodulename);}
+break;
+case 557:
+#line 2541 "fortran.y"
+{Add_Allocate_Var_1(yyvsp[-3].nac,curmodulename);}
+break;
+case 571:
+#line 2564 "fortran.y"
+{strcpy(yyval.nac,yyvsp[0].nac);}
+break;
+#line 9558 "y.tab.c"
+    }
+    yyssp -= yym;
+    yystate = *yyssp;
+    yyvsp -= yym;
+    yym = yylhs[yyn];
+    if (yystate == 0 && yym == 0)
+    {
+#if YYDEBUG
+        if (yydebug)
+            printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+        yystate = YYFINAL;
+        *++yyssp = YYFINAL;
+        *++yyvsp = yyval;
+        if (yychar < 0)
+        {
+            if ((yychar = yylex()) < 0) yychar = 0;
+#if YYDEBUG
+            if (yydebug)
+            {
+                yys = 0;
+                if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+                if (!yys) yys = "illegal-symbol";
+                printf("%sdebug: state %d, reading %d (%s)\n",
+                        YYPREFIX, YYFINAL, yychar, yys);
+            }
+#endif
+        }
+        if (yychar == 0) goto yyaccept;
+        goto yyloop;
+    }
+    if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+            yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+        yystate = yytable[yyn];
+    else
+        yystate = yydgoto[yym];
+#if YYDEBUG
+    if (yydebug)
+        printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yyssp, yystate);
+#endif
+    if (yyssp >= yyss + yystacksize - 1)
+    {
+        goto yyoverflow;
+    }
+    *++yyssp = yystate;
+    *++yyvsp = yyval;
+    goto yyloop;
+yyoverflow:
+    yyerror("yacc stack overflow");
+yyabort:
+    return (1);
+yyaccept:
+    return (0);
+}
+#define yy_create_buffer fortran_create_buffer
+#define yy_delete_buffer fortran_delete_buffer
+#define yy_scan_buffer fortran_scan_buffer
+#define yy_scan_string fortran_scan_string
+#define yy_scan_bytes fortran_scan_bytes
+#define yy_flex_debug fortran_flex_debug
+#define yy_init_buffer fortran_init_buffer
+#define yy_flush_buffer fortran_flush_buffer
+#define yy_load_buffer_state fortran_load_buffer_state
+#define yy_switch_to_buffer fortran_switch_to_buffer
+#define yyin fortranin
+#define yyleng fortranleng
+#define yylex fortranlex
+#define yyout fortranout
+#define yyrestart fortranrestart
+#define yytext fortrantext
+#define yywrap fortranwrap
+
+#line 20 "fortran.yy.c"
+/* A lexical scanner generated by flex */
+
+/* Scanner skeleton version:
+ * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $
+ */
+
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 5
+
+#include <stdio.h>
+
+
+/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
+#ifdef c_plusplus
+#ifndef __cplusplus
+#define __cplusplus
+#endif
+#endif
+
+
+#ifdef __cplusplus
+
+#include <stdlib.h>
+#include <unistd.h>
+
+/* Use prototypes in function declarations. */
+#define YY_USE_PROTOS
+
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else	/* ! __cplusplus */
+
+#if __STDC__
+
+#define YY_USE_PROTOS
+#define YY_USE_CONST
+
+#endif	/* __STDC__ */
+#endif	/* ! __cplusplus */
+
+#ifdef __TURBOC__
+ #pragma warn -rch
+ #pragma warn -use
+#include <io.h>
+#include <stdlib.h>
+#define YY_USE_CONST
+#define YY_USE_PROTOS
+#endif
+
+#ifdef YY_USE_CONST
+#define yyconst const
+#else
+#define yyconst
+#endif
+
+
+#ifdef YY_USE_PROTOS
+#define YY_PROTO(proto) proto
+#else
+#define YY_PROTO(proto) ()
+#endif
+
+/* Returned upon end-of-file. */
+#define YY_NULL 0
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index.  If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
+ */
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+
+/* Enter a start condition.  This macro really ought to take a parameter,
+ * but we do it the disgusting crufty way forced on us by the ()-less
+ * definition of BEGIN.
+ */
+#define BEGIN yy_start = 1 + 2 *
+
+/* Translate the current start state into a value that can be later handed
+ * to BEGIN to return to the state.  The YYSTATE alias is for lex
+ * compatibility.
+ */
+#define YY_START ((yy_start - 1) / 2)
+#define YYSTATE YY_START
+
+/* Action number for EOF rule of a given start state. */
+#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
+/* Special action meaning "start processing a new file". */
+#define YY_NEW_FILE yyrestart( yyin )
+
+#define YY_END_OF_BUFFER_CHAR 0
+
+/* Size of default input buffer. */
+#define YY_BUF_SIZE 16384
+
+typedef struct yy_buffer_state *YY_BUFFER_STATE;
+
+extern int yyleng;
+extern FILE *yyin, *yyout;
+
+#define EOB_ACT_CONTINUE_SCAN 0
+#define EOB_ACT_END_OF_FILE 1
+#define EOB_ACT_LAST_MATCH 2
+
+/* The funky do-while in the following #define is used to turn the definition
+ * int a single C statement (which needs a semi-colon terminator).  This
+ * avoids problems with code like:
+ *
+ * 	if ( condition_holds )
+ *		yyless( 5 );
+ *	else
+ *		do_something_else();
+ *
+ * Prior to using the do-while the compiler would get upset at the
+ * "else" because it interpreted the "if" statement as being all
+ * done when it reached the ';' after the yyless() call.
+ */
+
+/* Return all but the first 'n' matched characters back to the input stream. */
+
+#define yyless(n) \
+	do \
+		{ \
+		/* Undo effects of setting up yytext. */ \
+		*yy_cp = yy_hold_char; \
+		YY_RESTORE_YY_MORE_OFFSET \
+		yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
+		YY_DO_BEFORE_ACTION; /* set up yytext again */ \
+		} \
+	while ( 0 )
+
+#define unput(c) yyunput( c, yytext_ptr )
+
+/* The following is because we cannot portably get our hands on size_t
+ * (without autoconf's help, which isn't available because we want
+ * flex-generated scanners to compile on their own).
+ */
+typedef unsigned int yy_size_t;
+
+
+struct yy_buffer_state
+	{
+	FILE *yy_input_file;
+
+	char *yy_ch_buf;		/* input buffer */
+	char *yy_buf_pos;		/* current position in input buffer */
+
+	/* Size of input buffer in bytes, not including room for EOB
+	 * characters.
+	 */
+	yy_size_t yy_buf_size;
+
+	/* Number of characters read into yy_ch_buf, not including EOB
+	 * characters.
+	 */
+	int yy_n_chars;
+
+	/* Whether we "own" the buffer - i.e., we know we created it,
+	 * and can realloc() it to grow it, and should free() it to
+	 * delete it.
+	 */
+	int yy_is_our_buffer;
+
+	/* Whether this is an "interactive" input source; if so, and
+	 * if we're using stdio for input, then we want to use getc()
+	 * instead of fread(), to make sure we stop fetching input after
+	 * each newline.
+	 */
+	int yy_is_interactive;
+
+	/* Whether we're considered to be at the beginning of a line.
+	 * If so, '^' rules will be active on the next match, otherwise
+	 * not.
+	 */
+	int yy_at_bol;
+
+	/* Whether to try to fill the input buffer when we reach the
+	 * end of it.
+	 */
+	int yy_fill_buffer;
+
+	int yy_buffer_status;
+#define YY_BUFFER_NEW 0
+#define YY_BUFFER_NORMAL 1
+	/* When an EOF's been seen but there's still some text to process
+	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+	 * shouldn't try reading from the input source any more.  We might
+	 * still have a bunch of tokens to match, though, because of
+	 * possible backing-up.
+	 *
+	 * When we actually see the EOF, we change the status to "new"
+	 * (via yyrestart()), so that the user can continue scanning by
+	 * just pointing yyin at a new input file.
+	 */
+#define YY_BUFFER_EOF_PENDING 2
+	};
+
+static YY_BUFFER_STATE yy_current_buffer = 0;
+
+/* We provide macros for accessing buffer states in case in the
+ * future we want to put the buffer states in a more general
+ * "scanner state".
+ */
+#define YY_CURRENT_BUFFER yy_current_buffer
+
+
+/* yy_hold_char holds the character lost when yytext is formed. */
+static char yy_hold_char;
+
+static int yy_n_chars;		/* number of characters read into yy_ch_buf */
+
+
+int yyleng;
+
+/* Points to current character in buffer. */
+static char *yy_c_buf_p = (char *) 0;
+static int yy_init = 1;		/* whether we need to initialize */
+static int yy_start = 0;	/* start state number */
+
+/* Flag which is used to allow yywrap()'s to do buffer switches
+ * instead of setting up a fresh yyin.  A bit of a hack ...
+ */
+static int yy_did_buffer_switch_on_eof;
+
+void yyrestart YY_PROTO(( FILE *input_file ));
+
+void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
+void yy_load_buffer_state YY_PROTO(( void ));
+YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
+void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
+void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
+void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
+#define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
+
+YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
+YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
+YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
+
+static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
+static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));
+static void yy_flex_free YY_PROTO(( void * ));
+
+#define yy_new_buffer yy_create_buffer
+
+#define yy_set_interactive(is_interactive) \
+	{ \
+	if ( ! yy_current_buffer ) \
+		yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
+	yy_current_buffer->yy_is_interactive = is_interactive; \
+	}
+
+#define yy_set_bol(at_bol) \
+	{ \
+	if ( ! yy_current_buffer ) \
+		yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
+	yy_current_buffer->yy_at_bol = at_bol; \
+	}
+
+#define YY_AT_BOL() (yy_current_buffer->yy_at_bol)
+
+typedef unsigned char YY_CHAR;
+FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
+typedef int yy_state_type;
+extern char *yytext;
+#define yytext_ptr yytext
+
+static yy_state_type yy_get_previous_state YY_PROTO(( void ));
+static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
+static int yy_get_next_buffer YY_PROTO(( void ));
+static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
+
+/* Done after the current pattern has been matched and before the
+ * corresponding action - sets up yytext.
+ */
+#define YY_DO_BEFORE_ACTION \
+	yytext_ptr = yy_bp; \
+	yyleng = (int) (yy_cp - yy_bp); \
+	yy_hold_char = *yy_cp; \
+	*yy_cp = '\0'; \
+	yy_c_buf_p = yy_cp;
+
+#define YY_NUM_RULES 173
+#define YY_END_OF_BUFFER 174
+static yyconst short int yy_accept[1124] =
+    {   0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  174,  173,  163,  159,  162,  172,  151,  150,
+      153,  165,  151,  153,  153,  155,  152,  138,  149,  154,
+      157,  156,  158,  144,  144,  144,  144,  144,  144,  144,
+      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
+      144,  163,  159,  162,  172,  149,  144,  144,  144,  144,
+      144,  173,  173,  170,  173,  153,  144,    0,    0,  163,
+      164,    0,  162,  172,  172,  172,    0,  142,    0,    0,
+      165,  165,  165,  165,    0,    0,    0,  141,    0,    0,
+      133,   25,    0,  145,    0,    0,    0,    0,    0,    0,
+
+        0,  134,    0,  149,   24,    0,  144,  144,  144,  144,
+      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
+      144,  144,  144,   42,  144,  144,  144,  144,  144,  144,
+      144,  144,  144,  144,  144,  144,  144,   84,  144,  144,
+      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
+      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
+      144,  144,  144,  144,  163,  161,    0,  161,    0,    0,
+        0,    0,    0,  164,  160,  161,    0,  172,  171,  172,
+      172,  172,  161,  149,    4,  144,  144,  144,  144,  144,
+      144,    0,  170,    0,    0,    0,  167,   25,    0,    0,
+
+        4,    0,  144,  144,  144,  144,  144,  144,    0,    0,
+        0,  172,  172,    0,    0,  165,  165,    0,    0,    0,
+        0,  140,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  148,  145,    0,
+        0,    0,  143,    0,  144,  144,  144,  144,  144,  144,
+      144,  144,  144,  144,  144,  144,  144,  114,  144,  144,
+      144,    0,  144,  144,  144,  144,  144,   15,  144,  144,
+      144,  113,  144,  144,  144,  144,  144,    0,  144,    0,
+       95,  144,  144,  144,  144,  144,  120,  144,  144,  125,
+      144,  144,  144,  144,  144,  144,   88,  144,  144,  144,
+
+      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
+      144,  117,  144,  144,  144,  144,  144,  121,  144,  144,
+      144,  144,  144,  163,  161,    0,  164,    0,    0,    0,
+        0,    0,    0,    0,  161,    0,  161,  172,  172,  172,
+      149,    4,    4,    4,    4,  144,  144,  144,  144,  144,
+      144,    0,    0,    0,  167,    0,    0,    4,    4,    4,
+        4,  143,    0,  144,  144,    0,  144,  144,  144,  144,
+        0,    0,    0,  172,  172,    0,    0,  165,  165,    0,
+        0,    0,    0,  146,    0,  145,    0,  147,    0,   27,
+        0,   29,   28,   31,   30,   33,    0,    0,   35,    0,
+
+      145,    0,  146,    0,  145,    0,  147,    0,  143,    0,
+      144,  144,  124,  116,  144,  119,  122,  144,   21,  144,
+      144,  144,  144,  144,  115,  144,  144,  144,    0,  144,
+      144,  144,   93,    0,  107,  144,  144,  144,  144,  144,
+      144,  144,  144,  144,    0,  108,  144,  144,  144,  144,
+      144,  144,  144,    0,   87,  144,  144,  144,  144,  144,
+      144,  144,    0,   97,  144,  144,    0,  110,  144,  144,
+      144,  144,  111,   20,   59,   73,  144,  144,  144,  144,
+      144,  144,  144,  144,   78,   43,  144,  144,  144,  144,
+       68,  144,  126,  118,  144,   71,   53,  144,    0,   96,
+
+       98,  144,   91,  100,  144,  144,  163,  161,  164,    0,
+        0,    0,    0,    0,    0,  161,    0,  161,  172,  172,
+      172,  149,    4,    4,  144,  144,  144,  144,  144,   17,
+        0,    0,    0,    4,    4,    0,  143,    0,  144,  144,
+      144,  144,    0,    0,    0,  172,  172,    0,    0,  165,
+      165,    0,    0,   37,   26,    0,   34,   36,    0,  143,
+        0,  143,  144,  144,  144,  144,  144,   48,  144,  144,
+      144,  123,  144,  144,    0,  144,  144,  144,    0,  144,
+      144,    0,    0,    0,    0,    0,    0,    0,    0,   41,
+      144,   94,  144,  144,  144,  144,  144,  144,  144,  144,
+
+      144,   75,   75,   75,   75,  144,    0,  106,  112,  144,
+      144,   87,  144,  144,   89,  144,  144,  144,  144,  144,
+      144,  144,  144,  144,  144,  144,  144,  144,  144,   51,
+      144,   76,  144,  144,  144,    0,  144,  144,  144,  144,
+      144,  101,  144,  144,   54,   80,  163,  161,  164,    0,
+        0,    0,    0,    0,  161,    0,  161,  172,  172,  172,
+      149,    4,    3,    0,  103,  144,  144,   85,  144,   69,
+       70,   69,    0,    0,    0,    4,    3,    0,  143,    0,
+      143,  144,   48,  144,  123,    0,   22,    0,  172,   22,
+        0,   22,   22,  165,   22,    0,   22,   22,   22,   32,
+
+      144,   22,   22,   22,  144,  144,  144,   62,  144,  144,
+      144,  144,    0,  144,  144,  139,    0,    0,   92,  144,
+       41,    0,   94,    0,    0,    0,    0,    0,    0,    0,
+      144,  144,  144,  144,  144,  144,  144,  144,  144,    0,
+      109,  144,  144,  144,  144,  144,  144,  144,   65,  144,
+      144,  144,  128,   99,  127,  129,   38,  144,  144,  144,
+      144,  144,  144,   82,    0,  144,   10,   74,   18,  144,
+      144,   81,  163,  161,  164,    0,    0,    0,  161,  172,
+      172,   22,    4,    3,    3,  144,  144,  144,    0,    0,
+       22,    4,    3,    3,  144,   22,   22,   22,   23,  166,
+
+       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,
+      144,  144,  144,   57,  144,  144,  144,    0,    0,  144,
+      144,   39,   92,    0,  144,    0,    0,    0,    0,    0,
+        0,    0,    0,  144,  144,  144,  144,  144,  144,   72,
+      144,  144,  144,    0,    0,  144,  144,   16,   49,   44,
+      144,  144,   45,    0,  144,  144,  144,  144,   66,   83,
+        7,    0,    0,  144,    0,  144,  144,    0,    0,    0,
+      172,   23,    4,  144,  144,   63,    0,   23,    4,   23,
+       23,   23,  144,    8,  144,  144,   86,  144,  144,   39,
+        0,    0,  144,  144,    0,  144,    0,    0,    0,    0,
+
+        0,    0,   72,    0,  144,  144,  144,  144,  144,  144,
+       55,  144,   64,    0,    0,    0,  135,   11,   19,  144,
+      144,    0,  144,   79,   67,  144,    0,  144,    0,  144,
+      144,    0,    0,  172,    4,  144,   58,    0,    4,  144,
+      131,   46,  144,   50,    0,    0,  144,  144,    0,   56,
+        0,    0,    0,    0,    0,    0,   55,  144,  144,   40,
+      144,  105,  144,  144,    0,    0,    0,    0,  135,  130,
+       90,    0,  144,   60,    0,   61,    0,  144,  144,    0,
+       58,  172,    4,    4,  144,    0,    4,    4,  144,    9,
+        0,    0,  144,  144,   56,    0,    0,   40,    0,  105,
+
+        0,  144,  144,   13,  144,  144,    0,    0,    0,  144,
+        0,    0,  102,    6,    0,  172,    4,    4,  144,    0,
+        4,    4,   47,    0,    0,  144,  144,    0,    0,   13,
+        0,   14,  144,  144,   52,    0,    0,    0,  144,    0,
+      102,    0,  172,    4,    2,  104,    0,    4,    2,    0,
+        0,  144,  144,   14,    0,    0,  132,  144,    0,    0,
+        0,  144,    0,  104,  172,    4,    0,    4,    0,    0,
+      137,  144,  132,    0,   12,    0,    0,    0,  144,    0,
+      172,    1,    0,    1,  137,    0,  144,   12,    0,    0,
+        0,  144,    0,  172,    0,    0,  136,    0,    0,    0,
+
+       77,    5,  172,    0,  136,   77,  172,    0,  172,    0,
+      172,    0,  172,    0,  172,    0,  168,    0,    0,    0,
+        0,  169,    0
+    } ;
+
+static yyconst int yy_ec[256] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    4,    5,    6,    7,    8,    9,   10,   11,   12,
+       13,   14,   15,   16,   17,   18,   19,   20,   21,   22,
+       23,   24,   25,   26,   27,   28,   20,   29,   30,   31,
+       32,   33,    1,    1,   37,   38,   39,   40,   41,   42,
+       43,   44,   45,   46,   47,   48,   49,   50,   51,   52,
+       53,   54,   55,   56,   57,   58,   59,   60,   61,   62,
+       34,    1,   35,    1,   36,    1,   37,   38,   39,   40,
+
+       41,   42,   43,   44,   45,   46,   47,   48,   49,   50,
+       51,   52,   53,   54,   55,   56,   57,   58,   59,   60,
+       61,   62,   63,   63,   63,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1
+    } ;
+
+static yyconst int yy_meta[64] =
+    {   0,
+        1,    2,    3,    4,    1,    5,    1,    1,    1,    6,
+        1,    1,    1,    1,    7,    1,    7,    8,    1,    9,
+        9,    9,    9,    9,    9,    9,    9,    9,    1,    1,
+        1,    1,    1,    1,    1,   10,   11,   10,   10,   12,
+       13,   14,   15,   16,   10,   10,   10,   15,   15,   15,
+       11,   10,   12,   15,   15,   14,   15,   10,   17,   10,
+       10,   10,    5
+    } ;
+
+static yyconst short int yy_base[1180] =
+    {   0,
+        0,   62,    0,    0,    0,    0, 4185,   65,    0,   55,
+        0,    0, 4187,   35,   69,   70,   74,   37,   75,   50,
+       53,   72,   93,   78,   66,   56,  148,   87,   81,   65,
+       68,   99,   71,  191,  230,  108,  183,  225,  244,  103,
+      137,  152,  185,  250,  265,  262,  281,  220,  286,  296,
+      308,  368,  134,  424,  321,  350,  149, 4149,  310,  337,
+      270, 4189, 4182, 4189,  158,  380,  481, 4147, 4129,  138,
+      163,  175,  179,    0, 4145, 4127, 4174, 4189,  147,  133,
+     4176, 4175,  192,  156,  232,  393,  376, 4189,  402,  406,
+     4189, 4189,  543,  184, 4127, 4123,  204,  218,  226, 4121,
+
+     4123, 4189,  584,  358, 4189,  448,  532,  507,  514,  572,
+      534,  588,  593,  605,  617,  381,  242,  169,  195,  404,
+      384,  312,  517,  672,  524,  378,  403,  544,  365,  630,
+      597,  545,  424,  565,  651,  679,  425,  650,  626,  648,
+      672,  673,  603,  674,  680,  684,  698,  686,  699,  704,
+      706,  584,  707,  710,  711,  730,  683,  297,  732,  735,
+      734,  737,  742,  750,  788,  795, 4170,  389,  316, 4135,
+     4123,   72, 4115,  807, 4189,  863,  427, 4166, 4189,  225,
+      327,  543,  632,  660,  804,  765,  799,  770,  764,  785,
+      788, 4165, 4189,  343, 4164,  774, 4189, 4163,  820,  564,
+
+      856,  918,  946, 4147,  271,  661,  187,  270, 4116, 4106,
+      812, 4114, 4104,  547,  804,  617,  398,  859,  894,  906,
+      868, 4189,  889,  871,  815,  860,  896, 4120,  372, 4141,
+     4140, 4139, 4138,  275, 4099, 4136, 4099, 4189,  874,  907,
+      908,  914, 4111, 4110,  864,  973,  999,  977,  975,  983,
+      984,  981, 1002,  986,  987, 1006, 1007, 1008, 1011, 1020,
+     1010, 4091,  737, 1029, 1032, 1017, 1036, 1089, 1033, 1078,
+     1042, 1035, 1047, 1058, 1038, 1057, 1063, 1101, 1071, 1013,
+     4189, 1070, 1079, 1082, 1083, 1105, 1110, 1148, 1149, 1112,
+     1117, 1119, 1126, 1128, 1133, 1139, 1076, 1125, 1137, 1140,
+
+     1151, 1161, 1162, 1171, 1163, 1175, 1176, 1177, 1186, 1187,
+     1184, 1198, 1189, 1199, 1202, 1141, 1245, 1207, 1221, 1209,
+     1211, 1213, 1225, 1264, 1283, 4088, 1290, 4145, 4092, 4096,
+     4089, 4093, 4091, 4101, 1346,  715,  922,  557, 1120,  837,
+     1266,    0,  931, 4098, 4091, 1236, 1235, 1243, 1264, 1271,
+     1274,  800, 4020, 1311, 4189, 1268,  873, 4003, 1332, 1295,
+     1132, 1401, 1440,    0, 3971, 1479,  697,  659,  815,  998,
+     3883, 3892,  932, 3876, 3823, 1231,  551,  561, 1302, 1321,
+     1342, 1351, 1355, 1385, 1410, 1424, 1449, 1463, 3829, 4189,
+     3812, 4189, 4189, 4189, 4189, 4189, 3767, 3805, 4189, 3802,
+
+     1347, 1488, 1497, 1506, 1515, 1524, 1533, 1302, 3778, 1327,
+     1304, 1525, 4189, 1273, 1362, 1361, 1402, 1403, 1441, 1442,
+     1526, 1443, 1527, 1528, 1531, 1533, 1535, 1534, 3773, 1549,
+     1553, 1539, 1597, 1655, 4189, 1541, 1554, 1563, 1565, 1567,
+     1569, 1575, 1578, 1577, 1361, 4189, 1583, 1714, 1587, 1623,
+     1591, 1596, 1607, 3762, 1611, 1617, 1612, 1616, 1630, 1631,
+     1645, 1639, 1684, 4189, 1652, 1654, 1690, 4189, 1741, 1672,
+     1742, 1743, 1744, 1745, 1746, 1747, 1751, 1757, 1766, 1756,
+     1767, 1771, 1772, 1777, 1776, 1801, 1779, 1780, 1781, 1782,
+     1787, 1790, 1800, 1802, 1828, 1805, 1806, 1810, 1846, 4189,
+
+     1808, 1812, 1809, 1814, 1830, 1832, 1870, 1885, 1892, 3770,
+     3752, 3770, 3767, 3761, 3797, 1948, 1009, 1380, 1303,  663,
+     1414, 1873, 3746, 3747, 1903, 1863, 1902, 1839, 1943, 3794,
+     1306, 1438, 1451, 1849, 1566, 2003, 2029, 2068, 1591,  424,
+     1063, 1373, 3756,    0, 1392, 3755,    0,  815, 3788, 1875,
+     3790, 1919, 1702, 4189, 4189, 3774, 4189, 4189, 1987, 2013,
+     2038, 2052, 1844, 2096, 1864, 1882, 1884, 1883, 1927, 1924,
+     1929, 1909, 1945, 1930, 3746, 1949, 2123, 2124, 2160, 2045,
+     2126, 3738, 3728, 1588, 3733, 3680, 1623, 3668, 3683, 1963,
+     2129, 1965, 2030, 2132, 2130, 2128, 2136, 2148, 2150, 2138,
+
+     2191, 4189, 2186, 2178, 2162, 2180, 1990, 4189, 2164, 2166,
+     2184, 4189, 2187, 2196, 2188, 2190, 2194, 2200, 2209, 2203,
+     2206, 2210, 2218, 2222, 2221, 2230, 2225, 2228, 2236, 2231,
+     2246, 2237, 2243, 2244, 2249, 3696, 2252, 2255, 2258, 2256,
+     2264, 4189, 2265, 2267, 2276, 2277, 2322, 2331, 2341, 2313,
+     3686, 1416, 3684, 2336, 2397, 1449, 1648, 1854, 2040, 3697,
+     2324, 3654, 1783, 2335, 4189, 2313, 2312, 1910, 2335, 2392,
+     4189, 2389, 2194, 2341, 3693, 2249, 2042, 2452, 2478, 2504,
+     2530, 1870, 3675, 2558, 3672,    0, 4189, 2615,    0,    0,
+     3677, 3676, 4189, 3659, 3654, 2353, 2366, 2400, 4189, 4189,
+
+     2643, 2392, 2355, 2331, 2369, 2384, 2385, 2389, 2390, 2391,
+     2392, 2397, 3580, 2431, 2415, 2393, 3585, 3582, 2395, 2430,
+     4189, 3575, 4189, 3566, 3580, 3539, 3541, 3550, 3535, 3495,
+     2454, 2455, 2457, 2480, 2481, 2428, 2670, 2458, 2671, 2455,
+     4189, 2482, 2708, 2672, 2676, 2677, 2692, 2483, 2484, 2678,
+     2680, 2690, 2685, 2699, 2700, 2703, 2739, 2705, 2710, 2711,
+     2712, 2714, 2721, 2715, 2537, 2726, 2719, 2724, 2735, 2775,
+     2744, 2745, 2781, 2792, 2801, 3478, 3436, 3432,    0, 1637,
+     3476, 3475, 3435,    0, 1991, 2750, 2772, 2806, 1959, 3473,
+     3472, 2313, 3471, 2356, 2860, 2921,    0, 3455, 4189, 4189,
+
+        0, 3466, 4189, 3468, 2537, 2621, 4189, 2905, 2793, 2747,
+     2782, 2779, 2805, 2753, 2897, 2780, 2802, 3429, 2458, 2899,
+     2791, 2898, 4189, 3428, 2900, 3429, 3426, 3409, 3422, 3423,
+     3409, 3421, 3407, 2902, 2903, 2918, 2922, 2923, 2924, 2926,
+     2927, 2928, 2936, 2981, 2976, 2937, 2951, 2955, 2957, 2958,
+     2959, 2963, 2960, 2997, 2965, 2966, 2967, 2969, 2979, 2981,
+     2987, 3024, 3423, 2988, 2811, 2990, 2993, 3417, 3407, 2459,
+     2510, 3453, 3419, 2994, 2997, 2462, 3026, 3448, 3029, 3063,
+        0, 3426, 3002, 3000, 3016, 3006, 3013, 3018, 3021, 4189,
+     3389, 3309, 3024, 3022, 3272, 3027, 3215, 3209, 3187, 3150,
+
+     3134, 3029, 4189, 3004, 3055, 3040, 3056, 3042, 3058, 3061,
+     3062, 3067, 3065, 3098, 2484, 3110, 3119, 3070, 3088, 3089,
+     3094, 2917, 3090, 3091, 3097, 3098, 2953, 3099, 2930, 3100,
+     3109, 2818, 2796, 2785, 2502, 3110, 3102, 2383, 3135, 3112,
+     3120, 3124, 3128, 3125, 2746, 2687, 3131, 3133, 2605, 3134,
+     2590, 2592, 2586, 2479, 2459, 2433, 4189, 3139, 3143, 3144,
+     3147, 3149, 3152, 3155, 2541, 3192, 3208, 3204, 3210, 3162,
+     3178, 2438, 3185, 3182, 2414, 3188, 2340, 3189, 3190, 2333,
+     4189, 2018, 2288, 2260, 3192,  112, 3197, 3188, 3200, 3191,
+     2137, 2149, 3210, 3211, 4189, 2017, 2011, 4189, 1998, 4189,
+
+     1986, 3212, 3213, 3197, 3216, 3218, 2624, 3271, 1977, 3239,
+     1982, 1903, 3223, 3231, 1885, 3254, 1854, 1829, 3232, 3066,
+     1951, 1593, 3241, 1822, 1744, 3242, 3245, 1736, 1662, 4189,
+     1653, 3250, 3257, 3252, 3254, 2850, 3310, 1642, 3270, 1622,
+     4189, 1521, 3100, 1441,    0, 3255, 3294, 1280, 1416, 1354,
+     1309, 3268, 3280, 4189, 1314, 1246, 3264, 3278, 3325, 3333,
+     1178, 3284, 1155, 4189, 3300, 1072, 3313, 2771, 1054, 1064,
+     3294, 3296, 4189, 1044, 3302, 3350, 3377,  992, 3305,  960,
+     3102,    0, 3337,  892, 4189,  829, 3312, 4189, 3342, 3388,
+      696, 3345,  555, 3358, 3364,  406, 3367, 3414, 3415,  348,
+
+     3368, 4189, 3341, 3380, 4189, 4189, 3366, 3381, 3351, 3367,
+     2713, 3390, 3382, 3386,  281, 3404, 4189, 3405, 3416, 3426,
+      177, 4189, 4189, 3482, 3499, 3516, 3533, 3550, 3567, 3577,
+     3584, 3601, 3615, 3629, 3646, 3663, 3672, 3685, 3702, 3716,
+     3722, 3731, 3748, 3765, 3424, 3427, 3428, 3774, 3432, 3436,
+     3440,  362, 2185, 3786, 3800, 3806, 3441, 3445, 3812, 3818,
+     3827, 3844, 3861, 3878, 3895, 3912, 3926, 3935, 3952, 3969,
+     3986, 4003, 4020, 4037, 4054, 4071, 4088, 4105, 4122
+    } ;
+
+static yyconst short int yy_def[1180] =
+    {   0,
+     1123,    1, 1124, 1124,    1,    2, 1125, 1125,    1,    2,
+        1,    2, 1123, 1123, 1123, 1123, 1123, 1126, 1127, 1123,
+     1123, 1128, 1129, 1123, 1123, 1123, 1123, 1123, 1130, 1123,
+     1123, 1123, 1123, 1131, 1131,   35,   35,   35,   35,   38,
+       38,   38,   38,   38,   38,   38,   38,   38,   38,   37,
+       37, 1123, 1123, 1123, 1132, 1133,   37,   38,   38,   37,
+       38, 1123, 1134, 1123, 1134, 1135, 1123, 1123, 1123, 1123,
+     1123, 1123, 1123, 1126, 1126, 1126, 1127, 1123, 1127, 1127,
+     1128, 1123, 1128, 1128, 1129, 1136, 1129, 1123, 1129, 1129,
+     1123, 1123, 1123, 1137, 1123, 1123, 1123, 1123, 1123, 1123,
+
+     1123, 1123, 1138, 1130, 1123, 1123,   38,   38,   38,   38,
+       38,   38,   35,   38,   38,  115,  115,  115,  115,  115,
+      115,  115,  115, 1131,  115,  115,  115,  115,  115,  115,
+      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
+      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
+      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
+      115,  115,  115,  115, 1123, 1123, 1139, 1123, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1140, 1132, 1123, 1132,
+     1132, 1132, 1140, 1141, 1142,  115,  115,  115,  115,  115,
+      115, 1134, 1123, 1134, 1143, 1143, 1123, 1143, 1143, 1143,
+
+     1144, 1143, 1123,  203,  203,  203,  203,  203, 1123, 1123,
+     1123, 1126, 1126, 1127, 1127, 1128, 1128, 1136, 1136, 1136,
+     1136, 1123, 1129, 1129, 1145, 1146, 1147, 1123, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1148, 1149,
+     1150, 1151, 1152, 1153,  115,  115,  115,  115,  115,  115,
+      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
+      115, 1154,  124,  115,  115,  115,  115,  115,  115,  115,
+      115,  115,  115,  115,  115,  115,  115, 1123,  115, 1123,
+     1123,  115,  115,  115,  115,  115,  115,  115,  115,  115,
+      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
+
+      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
+      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
+      115,  115,  115, 1123, 1123, 1123, 1123, 1139, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1155, 1155, 1132, 1132, 1132,
+     1156, 1142, 1142, 1142, 1142,  115,  115,  115,  115,  115,
+      115, 1134, 1143, 1143, 1123, 1143, 1143, 1144, 1144, 1144,
+     1144, 1143, 1143,  203,  203, 1143,  203,  203,  203,  203,
+     1123, 1123, 1123, 1126, 1126, 1127, 1127, 1128, 1128, 1136,
+     1129, 1129, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+
+     1148, 1123, 1123, 1123, 1123, 1123, 1123, 1157, 1153, 1158,
+      115,  115, 1123,  115,  115,  115,  115,  115,  115,  115,
+      115,  115,  115,  115,  115,  115,  115,  115, 1123,  115,
+      115,  115,  115, 1123, 1123,  115,  115,  115,  115,  115,
+      115,  115,  115,  115, 1123, 1123,  115, 1123,  115,  115,
+      115,  115,  115, 1123,  115,  115,  115,  115,  115,  115,
+      115,  115, 1123, 1123,  115,  115, 1123, 1123,  115,  115,
+      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
+      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
+      115,  115,  115,  115,  115,  115,  115,  115, 1123, 1123,
+
+      115,  115,  115,  115,  115,  115, 1123, 1123, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1159, 1159, 1132, 1132,
+     1132, 1160, 1142, 1142,  115,  115,  115,  115,  115, 1123,
+     1134, 1143, 1143, 1144, 1144, 1143, 1143, 1143,  203,  203,
+      203,  203, 1123, 1161, 1123, 1126, 1162, 1127, 1163, 1128,
+     1164, 1129, 1165, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+     1123, 1123,  115, 1123,  115,  115,  115,  115,  115,  115,
+      115,  115,  115,  115, 1123,  115,  115,  115, 1123,  115,
+      115, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,  115,
+      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
+
+      115, 1123, 1123,  115,  115,  115, 1123, 1123,  115,  115,
+      115, 1123,  115,  115,  115,  115,  115,  115,  115,  115,
+      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
+      115,  115,  115,  115,  115, 1123,  115,  115,  115,  115,
+      115, 1123,  115,  115,  115,  115, 1123, 1123, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1132, 1132, 1166,
+     1167, 1142, 1168, 1123, 1123,  115,  115, 1123,  115, 1123,
+     1123, 1123, 1134, 1143, 1169, 1144, 1170, 1143, 1143, 1143,
+     1143,  203,  203, 1123,  203, 1171, 1123, 1123, 1172, 1126,
+     1173, 1127, 1123, 1174, 1128, 1175, 1129, 1129, 1123, 1123,
+
+     1123, 1123,  115,  115,  115,  115,  115,  115,  115,  115,
+      115,  115, 1123,  115,  115,  115, 1123, 1123,  115,  115,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+      115,  115,  115,  115,  115,  115,  115,  115,  115, 1123,
+     1123,  115,  115,  115,  115,  115,  115,  115,  115,  115,
+      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
+      115,  115,  115,  115, 1123,  115,  115,  115,  115,  115,
+      115,  115, 1123, 1123, 1123, 1123, 1123, 1123,  655, 1132,
+     1176, 1132, 1142, 1168, 1168,  115,  115,  115, 1134, 1177,
+     1143, 1144, 1170, 1170, 1123, 1143,  203,  203, 1123, 1123,
+
+     1126, 1127, 1123, 1128, 1129, 1129, 1123, 1123,  115,  115,
+      115,  115,  115,  115,  115,  115,  115, 1123, 1123,  115,
+      115,  115, 1123, 1123,  115, 1123, 1123, 1123, 1123, 1123,
+     1123, 1123, 1123,  115,  115,  115,  115,  115,  115,  115,
+      115,  115,  115, 1123, 1178,  115,  115,  115,  115,  115,
+      115,  115,  115, 1123,  115,  115,  115,  115,  115,  115,
+      115, 1123, 1123,  115, 1123,  115,  115, 1123, 1123, 1123,
+     1132, 1132, 1142,  115,  115, 1123, 1134, 1143, 1144, 1143,
+      203,  203,  115,  115,  115,  115,  115,  115,  115, 1123,
+     1123, 1123,  115,  115, 1123,  115, 1123, 1123, 1123, 1123,
+
+     1123, 1123, 1123, 1123,  115,  115,  115,  115,  115,  115,
+      115,  115,  115, 1178, 1123, 1179, 1178,  115,  115,  115,
+      115, 1123,  115,  115,  115,  115, 1123,  115, 1123,  115,
+      115, 1123, 1123, 1132, 1142,  115,  115, 1134, 1144,  115,
+      115,  115,  115,  115, 1123, 1123,  115,  115, 1123,  115,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123,  115,  115,  115,
+      115,  115,  115,  115, 1123, 1179, 1178, 1179, 1179,  115,
+      115, 1123,  115,  115, 1123,  115, 1123,  115,  115, 1123,
+     1123, 1132, 1142, 1142,  115, 1134, 1144, 1144,  115,  115,
+     1123, 1123,  115,  115, 1123, 1123, 1123, 1123, 1123, 1123,
+
+     1123,  115,  115,  115,  115,  115, 1123, 1178, 1123,  115,
+     1123, 1123,  115,  115, 1123, 1132, 1142, 1142,  115, 1134,
+     1144, 1144,  115, 1123, 1123,  115,  115, 1123, 1123, 1123,
+     1123,  115,  115,  115,  115, 1123, 1178, 1123,  115, 1123,
+     1123, 1123, 1132, 1142, 1142,  115, 1134, 1144, 1144, 1123,
+     1123,  115,  115, 1123, 1123, 1123,  115,  115, 1123, 1178,
+     1123,  115, 1123, 1123, 1132, 1142, 1134, 1144, 1123, 1123,
+      115,  115, 1123, 1123,  115, 1123, 1178, 1123,  115, 1123,
+     1132, 1142, 1134, 1144, 1123, 1123,  115, 1123, 1178, 1178,
+     1123,  115, 1123, 1132, 1134, 1123,  115, 1178, 1179, 1123,
+
+      115, 1123, 1132, 1134, 1123, 1123, 1132, 1134, 1132, 1134,
+     1132, 1134, 1132, 1134, 1132, 1134, 1123, 1134, 1134, 1134,
+     1134, 1123,    0, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123
+    } ;
+
+static yyconst short int yy_nxt[4253] =
+    {   0,
+       14,   15,   16,   17,   18,   19,   14,   20,   21,   22,
+       23,   24,   21,   25,   21,   26,   21,   27,   28,   29,
+       29,   29,   29,   29,   29,   29,   29,   29,   21,   30,
+       31,   32,   33,   21,   21,   34,   35,   36,   37,   38,
+       39,   40,   41,   34,   42,   34,   34,   43,   44,   45,
+       46,   47,   34,   48,   49,   50,   34,   34,   51,   34,
+       34,   34,   14,   52,   53,   54,   55,   64,   66,   65,
+       70,   72,   71,   72,   82,   71,   68,   73,   75,   92,
+       78,   56,   56,   56,   56,   56,   56,   56,   56,   56,
+       69,   68,   76,   67,   68,   86,   91,   68,  103,  102,
+
+       57,   58,   87,   88,   59,   69,   68,   68,   69,   68,
+       68,   69,   68,   83,  193,   68,   79,   60,   61,   68,
+       69,   69,   68,   69,   69,  210,   69,   84,   68,   69,
+       80,  105,  333,   69,   89,   72,   69,   72,   78,   70,
+       68,   71,   69,  108,  116,  108,  108,  131,   90,   93,
+      132,   93,   78,  133,   69,  108,  185,  108,   82,  134,
+      193, 1020,  108,  110,   71,  194,   71,   94,   94,   94,
+       94,   94,   94,   94,   94,   94,  211,  108,  211, 1122,
+       71,  108,   73,  214,   95,  186,  215,  135,   96,   68,
+       97,  108,  108,  136,   82,   98,  108,   99,  100,  187,
+
+      137,  138,  108,   69,  366,  254,  108,  101,  106,  217,
+      107,  107,  107,  107,  107,  107,  107,  107,  107,  117,
+      108,  108,  108,  225,  226,  108,  118,  179,  216,  108,
+      119,  108,  109,  120,   86,  139,  227,  108,  110,  108,
+      369,   87,   88,  121,  230,  255,  110,  106,  108,  107,
+      107,  107,  107,  107,  107,  107,  107,  107,  232,  231,
+      153,  338,  108,  108,  108,  122,  234,  111,  112,  123,
+      108,  109,  108,  233,  108,  124,  235,  113,  108,  125,
+      110,  108,  108, 1117,  114,  115,  140,  366,  366,  253,
+      108,  126,  396,  127,  141,  108,  128,  129,  108,  110,
+
+      142,  143,  108,  130,  108,  108,  108,  367,  370,  144,
+      108,  146,  108,  147,  108,  145,  108,  149,  148,  108,
+      108,  108,  154,  179,  191,  108,  155,  397,  180,  179,
+      156,  150,  160,  314,  151,  108,  108,  152,  157,  161,
+      108,  158,  159,  108,  108,  193,  108,  315,  260,  162,
+      108,  163,  329,  183,  108,  108,  108,  189,  108,  168,
+      135,  164,  181,  339,  108,  108,  330,  103,  108,  165,
+      243,  166,  167,  160,  243,  103,  182,  168,   86,  352,
+      161,  196,  197,  196,  108,   87,   88,  108, 1106,  390,
+      162,   68,  168,  198,  219,  220,  219,  190,  168, 1123,
+
+       82,  108,  221,  222,   86,   69,  169,  170,   86,   68,
+      171,   87,   88, 1123,  108,   87,   88,  108,  270,  252,
+      108,  199,  259,  172,  173,  174,  175,  176,  167,  391,
+      337,  108,  267,  168,  108,  200,  168,  108,  223,  108,
+      108,  366,  268,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  256,  257,  379, 1105,  108,  108,  258,  224,
+      108,  108,  169,  170,  683,   68,  171,  243,  243,  243,
+      243,  243,  243,  243,  243,  243,  282,  276,  108,  172,
+      173,  195,  196,  197,  196,  195,  195,  195,  201,  195,
+      195,  195,  195,  195,  195,  195,  195,  195,  202,  195,
+
+      203,  203,  203,  203,  203,  203,  203,  203,  203,  195,
+      195,  195,  195,  195,  195,  195,  204,  186,  204,  204,
+      204,  204,  205,  204,  118,  204,  204,  204,  206,  204,
+      204,  187,  204,  204,  204,  204,  207,  204,  204,  204,
+      204,  208,  204,  195,   93,  179,   93,  108,  108,  244,
+      245,  108,   78,  108,  108,  108,   78,  108,  108,  179,
+      108,  108,  108,   82,  108,  261,  197, 1102,  108,  108,
+      108,  266,  108,  108,  108,  108,  108,  108,  108,   95,
+      108,  108,  108,   96,  108,   97,  108,  108,  247,  108,
+       98,  549,   99,  100,  376,  275,  340,  108,  108,  519,
+
+      269,  108,  101,  239,  239,  239,  239,  239,  239,  239,
+      239,  239,  108,  108,  277,  550,  108,  357,  108,   82,
+      108,  303,  108,  240,  241,  246,  108,  108,  108,  108,
+      108,  108,  108,  108,  108,  337,  242,  108,  248,  108,
+      249,  168,  108,  108,  274,  108,  108,  108,  108,  250,
+      108,  291,  278,  251,  278,  108,  108,  108,  108,  108,
+      108,  108,  108,  337,  378,  179,  108,  108,  287,  168,
+      246,  108,  108,  262,  271,  262,  366,  103,  366,  108,
+      280,  272,  280,  108,  108,  273,  108,  108,  283,  106,
+      281,  263,  263,  263,  263,  263,  263,  263,  263,  263,
+
+      284,  108,  285,  108,  108,  286,  279,  288,  108,  108,
+      108,  368,  290,  540,  366,  245,  108,  659,  518,  108,
+      108,  289,  108,  292,  168,  108,  108,  108,  264,  293,
+      265,  294,  108,  108,  108,  108,  313,  108,  295,  108,
+      108,  297,  108,  304,  539,  305,  108,  108,  300, 1100,
+      301,  108,  298,  296,  244,  299,  302,  108,  310,  108,
+      108,  306,  307,  108,  108,  308,  108,  309,  108,  316,
+      108,  108,  311,  108,  320,  354,  355,  354,  108,  312,
+      317,  321,  322,  108,  318,  108,  108,  108,  319,  324,
+      108,  325,  167,  108,  323,  108,  327,  168,  325,  167,
+
+      108,  108,  193,  108,  168,  343,  108,  343,  327,   78,
+      325,  167,  253,  373,  349,  373,  168,  108,  108,  346,
+       78,  108,  197,  108,  108,  348,  169,  170,  351,  383,
+      171,  383,  366,  169,  170,  108,  350,  171,  108,  179,
+      344,  108,  531,  326,  173,  169,  170,  256,  347,  171,
+      326,  173,  108,  258,  345,  691,  356,  359,  197,  359,
+      377,  220,  326,  173,  327,  175,  335,  167,  380,  222,
+      220,  541,  168,   86,  385,  197,  385,  380,  222, 1096,
+       87,   88,  336,  336,  336,  336,  336,  336,  336,  336,
+      336,   86,  360,  521,  197,  219,  220,  219,   87,   88,
+
+      108,  169,  170,  221,  222,  171,  361,  219,  220,  219,
+      387,  411,  387,  225,  226,  221,  222,  108,  326,  173,
+      197,  402,  404,  402,  404,  518,  227,  382,  406,  533,
+      406,  168,  343,  545,  343,  545,  381,  362,  362,  362,
+      362,  362,  362,  362,  362,  362,  353,  353,  197,  353,
+      353,  353,  353,  353,  353,  353,  353,  353,  353,  353,
+      353,  353,  353,  363,  353,  364,  364,  364,  364,  364,
+      364,  364,  364,  364,  353,  353,  353,  353,  353,  353,
+      353,  365,  365,  365,  365,  365,  365,  365,  365,  365,
+      365,  365,  365,  365,  365,  365,  365,  365,  365,  365,
+
+      365,  365,  365,  365,  365,  365,  365,  365,  353,  108,
+      413,  108,  657,  108,  280,  366,  280,  108,  168,  108,
+      108, 1093,  108,  108,  281,  415,  108,  418,  108,  412,
+      108,  414,  416,  417,  108,  108,  108,  108,  108,  420,
+      108,  421,  108,  108,  108,  542,  108,  108, 1091,  419,
+      428,  425,  108,  432,  422,  108,  108,  423,  426,  108,
+      108,  108,  424,  108,  108,  108,  430,  427,  108,  108,
+      108,  108,  108,  108,  451,  431,  433,  444,  108,  445,
+      366,  445,  108,  108, 1088,  108,  108,  449,  108,  108,
+      434,  108,  434,  108,  108,  108,  447,  448,  450,  108,
+
+      108,  453,  278,  684,  278,  452,  108,  108, 1086,  446,
+      108,  108,  108, 1085,  108,  108,  108,  456,  108,  108,
+      435,  455,  179,  108,  108,  108,  457, 1082,  436,  108,
+      437,  108,  108,  438,  197,  108,  108,  439,  458,  459,
+      440,  108,  108,  441,  442,  460,  108,  443,  108,  463,
+      467,  463,  467,  108,  462,  108,  454,  472,  461,  464,
+      468,  478,  108,  108,  108,  108,  474,  520,  471,  108,
+      108, 1080,  108,  108,  473,  108,  108,  108,  108,  108,
+      535,  108,  476,  477,  108,  108,  108,  108,  475,  480,
+      108,  479,  108,  108,  498,  465,  469,  108,  108,  108,
+
+      481,  108,  108,  483,  108,  466,  470,  108,  482,  484,
+      485,  108,  108,  108,  108,  108,  108, 1078,  486,  487,
+      108,  490,  108,  108,  108,  108,  491,  492,  108,  108,
+      108,  488,  489,  493,  108,  108,   78,  108,  108,  108,
+      108,  494,  108,  108,  495,  108,  499,  108,  499,  108,
+      501,  108,  108,  497,  496,  108,  500,  108,  503,  504,
+      108,  108,  108,  502,  108,  507,  505,  508,  167,  518,
+      197,  108,  108,  168,  108,  168,  525,  530,  108,  527,
+      506,  108,  197,  103,  509,  548,  508,  167,  108,  108,
+      526,  509,  168,  508,  167, 1074,  108,  197,  108,  168,
+
+      108,  528,  169,  170,   82,  179,  171,  108,  193,  108,
+      108,  529,  354,  355,  354,  532,  559,  108,  559,  326,
+      173,  169,  170,  220,  108,  171,  108,  108,  169,  170,
+      380,  222,  171,  359,  197,  359, 1068,  534,  326,  173,
+      108,  561,  551,  561,   86,  326,  173,  509,  175,  516,
+      167,   87,   88,   86, 1073,  168,  658,  108,  563,  673,
+       87,   88,  445, 1070,  445,  517,  517,  517,  517,  517,
+      517,  517,  517,  517,  384,  384,  384,  384,  384,  384,
+      384,  384,  384,  657,  169,  170,  225,  226,  171,  168,
+      366,  553,  446,  688, 1069,  688,  552,  108,  108,  227,
+
+      565,  326,  173,  197,  384,  384,  384,  384,  384,  384,
+      384,  384,  384,  685,  108,  108,  179,  668,  197,  668,
+      362,  362,  362,  362,  362,  362,  362,  362,  362,  386,
+      386,  386,  386,  386,  386,  386,  386,  386,  108,  108,
+      197,  536,  197,  386,  386,  386,  386,  386,  386,  386,
+      386,  386,  168,  197,  660,  108,  108,  566,  168,  537,
+      537,  537,  537,  537,  537,  537,  537,  537,  388,  388,
+      388,  388,  388,  388,  388,  388,  388,  108,  567,  108,
+      538,  197,  388,  388,  388,  388,  388,  388,  388,  388,
+      388,  675,  674,  569,  108,  108,  108, 1066,  362,  362,
+
+      362,  362,  362,  362,  362,  362,  362,  403,  403,  403,
+      403,  403,  403,  403,  403,  403,  403,  403,  403,  403,
+      403,  403,  403,  403,  403,  405,  405,  405,  405,  405,
+      405,  405,  405,  405,  405,  405,  405,  405,  405,  405,
+      405,  405,  405,  407,  407,  407,  407,  407,  407,  407,
+      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
+      407,  108,  108,  108,  108,  564,  568,  108,  197,  108,
+      108,  108,  571,  572,  570,  108, 1064,  108,  108,  108,
+      108,  108,  573,  574,  108,  108,  108,  108,  108,  108,
+      108,  590,  108,  578,  108,  197,  576,  577,  579,  108,
+
+      579,  108,  108,  108,  592,  108,  108,  108,  366,  596,
+      591,  108,  593,  108,  108,  594,  108,  677,  108,  108,
+      595,  599,  108,  108,  607,  597,  607,  108,  108,  723,
+      108,  108,  610,  108,  600,  598,  108,  724,  601,  179,
+      606,  580, 1049,  108,  108,  682,  609,  108,  108,  108,
+      108,  168,  108,  108,  608,  581,  434,  168,  434,  108,
+      108,  613,  611,  727,  108,  108,  108,  108,  614,  108,
+      108,  615, 1063,  617,  616,  108,  108,  621,  871,  728,
+      618,  108, 1061,  108,  619,  463,  435,  463,  108,  620,
+      623,  467,  108,  467,  582,  464,  583, 1056,  108,  584,
+
+     1055,  468,  622,  585,   86,  108,  586,  108,  625,  587,
+      588,  698,  699,  589,  602,  602,  602,  602,  602,  602,
+      602,  602,  602,  602,  602,  108,  602,  602,  602,  602,
+      602,  603,  602,  604,  604,  604,  604,  604,  604,  604,
+      604,  604,  602,  602,  602,  602,  602,  602,  602,  605,
+      605,  605,  605,  605,  605,  605,  605,  605,  605,  605,
+      605,  605,  605,  605,  605,  605,  605,  605,  605,  605,
+      605,  605,  605,  605,  605,  605,  602,  108,  108,  108,
+      108,  108,  108,  108,  785, 1054,  785,  108, 1051,  626,
+      627,  624,  108,  108,  108,  108,  108,  108,  108,  108,
+
+      108,  628,  108,  108,  108,  629,  630,  633,  108,  108,
+      108,  631,  108,  108,  636,  108,  108,  108,  108,  108,
+      108,  635,  632,  108,  108,  634,  108,  638,  641,  108,
+      108,  640,  637,  108,  639,  108,  108,  108,  108,  642,
+      108,  108,  108,  108,  108,  108,  108,  499,  108,  499,
+      108,  197,  644,  108,  108,  108,  179,  500,  108,  108,
+      643,  108,  108,  108,  108,  108,  108,  108,  108, 1050,
+      645,  647,  646,  648,  167,  669,  657,   82, 1045,  168,
+      108,  108,  168,  108,  701,  108,  649,  366,  648,  167,
+      103, 1044,  108,  649,  168,  648,  167,  108,  780,  667,
+
+      705,  168,  676,  668,  664,  668,  664,  571,  169,  170,
+      795,  668,  171,  668,  665,  694,  108,  108,  108,  108,
+      108,   86,  707,  169,  170,  326,  173,  171,   87,   88,
+      169,  170, 1042,  706,  171,  108,  108,  108,  108,  108,
+      326,  173,  666, 1041,  670,  108,  670,  326,  173,  649,
+      175,  655,  167,  197,  671,  108,  108,  168,  672,  696,
+      108,  193,  108,  108,  709,  108,  108,  656,  656,  656,
+      656,  656,  656,  656,  656,  656,  708,  108,  710,  108,
+      108,  108,  108,  108,  712,  108,  169,  170, 1048,  714,
+      171,  607,  785,  607,  785,  711,  108, 1040,  108,  108,
+
+      877,  108,  108,  326,  173,  197,  560,  560,  560,  560,
+      560,  560,  560,  560,  560, 1038,  108,  678,  108,  678,
+      179,  608,  679,  679,  679,  679,  679,  679,  679,  679,
+      679,  197,  560,  560,  560,  560,  560,  560,  560,  560,
+      560, 1031,  179,  794,  197,  794, 1030, 1029,  537,  537,
+      537,  537,  537,  537,  537,  537,  537,  562,  562,  562,
+      562,  562,  562,  562,  562,  562,  108, 1028, 1016,  536,
+      197,  562,  562,  562,  562,  562,  562,  562,  562,  562,
+      781,  108,  680,  108,  680,  732,  719,  681,  681,  681,
+      681,  681,  681,  681,  681,  681,  687,  687,  108,  687,
+
+      687,  687,  687,  687,  687,  687,  687,  687,  687,  687,
+      687,  687,  687,  702,  687,  703,  703,  703,  703,  703,
+      703,  703,  703,  703,  687,  687,  687,  687,  687,  687,
+      687,  704,  704,  704,  704,  704,  704,  704,  704,  704,
+      704,  704,  704,  704,  704,  704,  704,  704,  704,  704,
+      704,  704,  704,  704,  704,  704,  704,  704,  687,  108,
+      108,  579,  108,  579,  108,  108,  108,  716,  108,  720,
+      715,  733,  108,  736,  739,  735,  108,  108,  731,  108,
+      734,  108,  108,  108,  108,  108,  108, 1025, 1024,  108,
+      738,  108,  740,  409,  740,  244,  193,  409,  108,  737,
+
+      108,  108,  108,  108,  717,  243,  243,  243,  243,  243,
+      243,  243,  243,  243,  108,  108,  108,  108,  718,  108,
+      108,  743,  741,  108,  108,  745,  108,  108,  744,  742,
+      108,  108,  108,  108,  748,  746,  108,  108,  789,  108,
+      108,  108,  752,  747,  108,  108,  108,  108,  753,  108,
+      750,  197,  751,  108,  108,  749,  108,  108,  108,  108,
+      755,  108,  108,  108,  108,  754,  108,  108,  756,  758,
+      757,  108,  108,  108,  108,  108,  760,  759,  108,  108,
+      763,  108,  108,  108,  108,  108,  761,  764,  108,  108,
+      108,  108,  108,  792,  108,  769,  108,  108,  762,  108,
+
+      108,  108,  108,  108, 1018,  108,  766,  768,  108,  108,
+      767,  108,  108,  108,  664,  197,  664,  108,  108,  770,
+      108,  771,  772,  773,  665,  774,  167,  168, 1017,  108,
+      108,  168,  775,  168,  774,  167,  664,  670,  664,  670,
+      168,  103,  775,  197,  774,  167,  665,  671,  108,  108,
+      168,  672,  776,  786,  879,   86,  787,  794,  197,  794,
+      169,  170,  806,  807,  171,  108,  108,  108,   86,  169,
+      170,  108,  244,  171,  776,   87,   88,  326,  173,  169,
+      170,  790,  788,  171,  108,  193,  326,  173,  108, 1015,
+      672,  108,  672,  670, 1012,  670,  326,  173,  775,  175,
+
+      779,  167,   86,  671,  672,  108,  168,  672,  108,   87,
+       88,  243,  243,  243,  243,  243,  243,  243,  243,  243,
+      812,  108,  108,  986,  811,  108,  108,  108,  108,  108,
+      816,  108,  819,  108,  819,  169,  170,  108,  108,  171,
+      813,  817,  108,  108,  108,  108,  108,  815,  108,  814,
+      108,  108,  326,  173,  197,  822,  740, 1011,  740,  819,
+      876,  819,  876,  876,  108,  876,  108,  108,  108,  820,
+      825,  679,  679,  679,  679,  679,  679,  679,  679,  679,
+      197,  839,  821,  108,  108,  965,  741,  965, 1009, 1001,
+      108,  108,  834,  108,  108,  835,  891,  679,  679,  679,
+
+      679,  679,  679,  679,  679,  679,  197,  108,  108,  892,
+      108,  841,  179,  836, 1000,  999,  108,  108,  843,  108,
+      108,  838,  837,  681,  681,  681,  681,  681,  681,  681,
+      681,  681,  197,  108,  108,  108,  850,  108,  862,   86,
+      862,  983, 1007,  984, 1007,  934,   87,   88,  863,  681,
+      681,  681,  681,  681,  681,  681,  681,  681,  791,  791,
+      197,  791,  791,  791,  791,  791,  791,  791,  791,  791,
+      791,  791,  791,  791,  791,  796,  791,  797,  797,  797,
+      797,  797,  797,  797,  797,  797,  791,  791,  791,  791,
+      791,  791,  791,  798,  798,  798,  798,  798,  798,  798,
+
+      798,  798,  798,  798,  798,  798,  798,  798,  798,  798,
+      798,  798,  798,  798,  798,  798,  798,  798,  798,  798,
+      791,  800,  800,   86,  800, 1036,  998, 1036,  800,  800,
+       87,   88,  800,  997,  996,  800,  800,  800,  800,  800,
+      800,  800,  800,  799,  799,  995,  799,  799,  799,  799,
+      799,  799,  799,  799,  799,  799,  799,  799,  799,  799,
+      808,  799,  809,  809,  809,  809,  809,  809,  809,  809,
+      809,  799,  799,  799,  799,  799,  799,  799,  810,  810,
+      810,  810,  810,  810,  810,  810,  810,  810,  810,  810,
+      810,  810,  810,  810,  810,  810,  810,  810,  810,  810,
+
+      810,  810,  810,  810,  810,  799,  108,  108,  108,  844,
+      840,  844,  108,  108,  851,  179,  108,  848,  842,  845,
+      847,  108,  846,  108,  108,  108,  108,  992,  108,  108,
+      108,  108,  849,  108,  852,  108,  108,  853,  108,  108,
+      854,  108,  854,  108,  108,  108,  857,  108,  108, 1113,
+      108,  108,  108,  108,  860,  108,  108,  108,  108,  856,
+      108,  108,  108,  108,  108,  859,  858,  108,  108,  861,
+      864,  108,  108,  197,  108,  108,  865,  108,  865,  108,
+      108,  108,  773,  108,  775,  167,  108,  179,  108,  108,
+      855,  874,  108,  775,  991,  774,  167,  108,  108,  867,
+
+      108,  168,  775,  108,  775,  167,  108,  876,  108,  876,
+      244,  108,  865,  866,  865,  108,  888,  885,  883,  169,
+      170,  875,  884,  171,  982,  108, 1084,  108,  108,  108,
+      169,  170,  108,  108,  171,  108,  326,  173,  108,  169,
+      170,  108,  108,  171,  894,  886,  108,  326,  173,  929,
+      981, 1059,  889, 1059,  980,  108,  326,  173,  108,  108,
+      878,  878,  197,  878,  878,  878,  878,  878,  878,  878,
+      878,  878,  878,  878,  878,  878,  878,  880,  878,  881,
+      881,  881,  881,  881,  881,  881,  881,  881,  878,  878,
+      878,  878,  878,  878,  878,  882,  882,  882,  882,  882,
+
+      882,  882,  882,  882,  882,  882,  882,  882,  882,  882,
+      882,  882,  882,  882,  882,  882,  882,  882,  882,  882,
+      882,  882,  878,  197,  243,  243,  243,  243,  243,  243,
+      243,  243,  243,  108,  108,  108,  108,  887,  108,  108,
+      362,  362,  362,  362,  362,  362,  362,  362,  362,  893,
+      108,  108,  108,  896,  108,  108,  906,  905,  108,  108,
+      108,  909,  108,  108,  108,  907,  977,  911,  912,  975,
+      972,  108,  108,  108,  910,  908,  108,  108,  915,  108,
+      108,  108,  844,  913,  844,  916,  918,  108,  917,  108,
+      108,  108,  845,  108,  108,  108,  108,  920,  854,  108,
+
+      854,  108,  108,  108,  108,  108,  919,  921,  108,  926,
+      108,  108,  108,  108,  925,  108,  108,  108,  923,  108,
+      108,  924,  108,  108,  108,  862,  930,  862,  193,  108,
+      936,  197,  108,  108,  108,  863,  108,  931,  108,  940,
+      108,  108,  108,  108,  957,  928,  108,  108,  922,  108,
+      108,  937,  108,  108,  108,  108,  941,  108,  108,  942,
+      108,  938,  948,  108,  939,  197,  108,  950,  193,  108,
+      944,  108,  947,  943,  108,  108,  108,  108,  961,  956,
+      108,  959,  362,  362,  362,  362,  362,  362,  362,  362,
+      362,  108,  108,  108,  108,  108,  960,  108,  108,  958,
+
+      915,  108,  179,  108,  179, 1047,  108,  916,  108,  108,
+      917,  108,  967,  962,  108,  108,  964,  963,  108,  968,
+      108,  915,  969,  108,  108,  108,  108,  108,  916,  970,
+      108,  917,  971,  108,  108,  108,  108,  197,  108,  976,
+      973,  108,  108,  108,  108,  108,  108,  108,  108, 1065,
+      108,  974,  108,  108,  978,  108,  108, 1094,  979,  989,
+      108,  108,  108,  108,  108,  108,  985,  108,  990,  108,
+      108,  994,  955,  108,  987,  108,  988,  108,  108, 1003,
+      108,  108,  993,  108,  108,  108,  108,  108,  108, 1002,
+      197,  108,  108, 1006,  967, 1004,  108,  108,  108,  197,
+
+      108,  968,  108,  954,  969,  108,  967, 1005,  108, 1008,
+      967, 1008,  967,  968,  108,  108,  969,  916,  108,  968,
+      917,  108,  969, 1010,  108,  108,  108,  108,  108, 1013,
+     1014,  108, 1022,  108,  953,  108,  108, 1021,  108, 1019,
+     1023,  108,  108,  108,  108,  108,  108,  108,  108,  108,
+      108, 1033,  108,  108,  108, 1027,  179, 1026, 1035,  108,
+     1034, 1032,  952,  108,  108,  108,  108,  108,  108,  108,
+      951,  108, 1037,  915, 1037,  108,  108,  108,  108, 1039,
+      916,  108, 1052,  917,  108,  108,  108, 1046,  108, 1043,
+      108,  108,  108,  108,  108,  108,  193, 1057,  108, 1053,
+
+      108, 1058,  179,  108,  108,  108,  108,  108,  108, 1062,
+      108, 1060,  915, 1060,  108,  193,  108,  108, 1075,  916,
+      108,  108,  917,  108, 1072,  949, 1076, 1071, 1076, 1067,
+      108,  108,  108,  108, 1077,  915, 1077,  108,  108,  193,
+     1079,  108,  916,  179,  915,  917, 1087,  108,  108,  108,
+     1081,  916, 1083,  179,  917,  108, 1089, 1089, 1092, 1089,
+      179, 1097,  946, 1089, 1089,  108,  193, 1089,  179,  193,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1090,  915,
+     1090,  108,  193,  193,  179, 1101,  916, 1095,  193,  917,
+      915, 1111,  193, 1103, 1098, 1098, 1107, 1099,  108, 1104,
+
+      917, 1098, 1098,  108,  108, 1098,  193,  193, 1098, 1098,
+     1098, 1098, 1098, 1098, 1098, 1098,  915,  967,  193, 1109,
+      108,  108, 1112,  916,  968, 1114,  917,  969,  193, 1108,
+      384, 1110,  384,  386,  388,  386,  388, 1115,  403,  945,
+      403, 1116,  405,  366,  405, 1119,  407,  560,  407,  560,
+      197,  562, 1120,  562,  935,  179,  933, 1118,  932,  927,
+      904,  903,  902,  901,  900,  899,  898,  897,  895,  890,
+       82,   78,  366,  197,  197,  197,  873,  179,  179,  870,
+      869, 1121,   62,   62,   62,   62,   62,   62,   62,   62,
+       62,   62,   62,   62,   62,   62,   62,   62,   62,   63,
+
+       63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
+       63,   63,   63,   63,   63,   63,   74,   74,  868,   74,
+       74,   74,   74,   74,   74,   74,   74,   74,   74,   74,
+       74,   74,   74,   77,   77,  833,   77,   77,   77,   77,
+       77,   77,   77,   77,   77,   77,   77,   77,   77,   77,
+       81,   81,   81,   81,   81,   81,   81,   81,   81,   81,
+       81,   81,   81,   81,   81,   81,   81,   85,   85,   85,
+       85,   85,   85,   85,   85,   85,   85,   85,   85,   85,
+       85,   85,   85,   85,  104,  104,  832,  831,  830,  829,
+      104,  108,  108,  108,  108,  108,  108,  108,  108,  108,
+
+      108,  178,  178,  178,  178,  178,  178,  178,  178,  178,
+      178,  178,  178,  178,  178,  178,  178,  178,  184,  828,
+      184,  827,  184,  184,  826,  824,  823,  818,  184,  192,
+      192,  192,  192,  192,  192,  192,  192,  192,  192,  192,
+      192,  192,  192,  192,  192,  192,  195,  195,  195,  195,
+      195,  195,  195,  195,  195,  195,   82,  195,  195,  195,
+      195,   82,  195,  218,  218,  218,  218,  218,  218,  218,
+      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
+       94,   78,  803,   94,   94,  238,  238,  238,  238,  366,
+      238,  238,  366,  238,  238,  197,  238,  238,  783,  179,
+
+      238,  238,  328,  328,  328,  328,  328,  328,  328,  328,
+      328,  328,  328,  328,  328,  328,  328,  328,  328,  336,
+      778,  336,  777,  765,  336,  341,  730,  341,  729,  341,
+      341,  342,  342,  726,  342,  342,  342,  342,  342,  342,
+      342,  342,  342,  342,  342,  342,  342,  342,  353,  353,
+      353,  353,  353,  353,  353,  353,  353,  353,  353,  353,
+      353,  353,  353,  353,  353,  358,  358,  358,  358,  358,
+      358,  358,  358,  358,  358,  358,  358,  358,  358,  358,
+      358,  358,  401,  725,  722,  401,  401,  262,  721,  262,
+      713,  700,   82,  693,  262,  689,  686,  530,  663,  662,
+
+      530,  654,  262,  517,  653,  517,  652,  651,  517,  522,
+      650,  522,  612,  522,  522,  656,  575,  656,  408,  558,
+      656,  661,  557,  661,  556,  661,  661,  687,  687,  555,
+      687,  687,  687,  687,  687,  687,  687,  687,  687,  687,
+      687,  687,  687,  687,  690,  690,  554,  690,  690,  690,
+      690,  690,  690,  690,  690,  690,  690,  690,  690,  690,
+      690,  692,  692,  547,  692,  692,  692,  692,  692,  692,
+      692,  692,  692,  692,  692,  692,  692,  692,  695,  695,
+      695,  695,  695,  695,  695,  695,  695,  695,  695,  695,
+      695,  695,  695,  695,  695,  697,  697,  697,  697,  697,
+
+      697,  697,  697,  697,  697,  697,  697,  697,  697,  697,
+      697,  697,  782,  782,  782,  782,  782,  782,  782,  782,
+      782,  782,  782,  782,  782,  782,  782,  782,  782,  104,
+      546,  104,  544,  104,  104,  784,  784,  543,  784,  784,
+      784,  784,  784,  784,  784,  784,  784,  784,  784,  784,
+      784,  784,  791,  791,  791,  791,  791,  791,  791,  791,
+      791,  791,  791,  791,  791,  791,  791,  791,  791,  793,
+      793,  793,  793,  793,  793,  793,  793,  793,  793,  793,
+      793,  793,  793,  793,  793,  793,  799,  799,  366,  799,
+      799,  799,  799,  799,  799,  799,  799,  799,  799,  799,
+
+      799,  799,  799,  801,  801,  197,  801,  801,  801,  801,
+      801,  801,  801,  801,  801,  801,  801,  801,  801,  801,
+      802,  802,  197,  802,  802,  802,  802,  802,  802,  802,
+      802,  802,  802,  802,  802,  802,  802,  804,  804,  804,
+      804,  804,  804,  804,  804,  804,  804,  804,  804,  804,
+      804,  804,  804,  804,  805,  805,  805,  805,  805,  805,
+      805,  805,  805,  805,  805,  805,  805,  805,  805,  805,
+      805,  872,  872,  872,  872,  872,  872,  872,  872,  872,
+      872,  872,  872,  872,  872,  872,  872,  872,  878,  878,
+      878,  878,  878,  878,  878,  878,  878,  878,  878,  878,
+
+      878,  878,  878,  878,  878,  914,  914,  914,  914,  914,
+      914,  914,  914,  914,  914,  914,  914,  914,  914,  914,
+      914,  914,  966,  966,  966,  966,  966,  966,  966,  966,
+      966,  966,  966,  966,  966,  966,  966,  966,  966,  524,
+      523,  515,  514,  513,  512,  511,  510,  179,  333,  429,
+      410,  408,  400,  399,  398,  395,  394,  393,  392,  389,
+      375,  374,  372,  371,  366,  197,  197,  193,  179,  334,
+      332,  331,  179,  237,  236,  229,  228,   82,   82,   78,
+      213,  212,  210,  209,  193,  188, 1123,   64,   13, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+     1123, 1123
+    } ;
+
+static yyconst short int yy_chk[4253] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    2,    2,    2,    2,    8,   10,    8,
+       15,   16,   15,   16,   22,   17,   14,   17,   18,   25,
+       19,    2,    2,    2,    2,    2,    2,    2,    2,    2,
+       14,   20,   18,   10,   21,   23,   24,   26,   29,   28,
+
+        2,    2,   23,   23,    2,   20,   30,   25,   21,   31,
+       15,   26,   33,   22,  986,   17,   19,    2,    2,   24,
+       30,   25,   29,   31,   15,  172,   33,   22,   28,   17,
+       19,   32,  172,   24,   23,   53,   29,   53,   80,   70,
+       32,   70,   28,   40,   36,   36,   36,   40,   23,   27,
+       40,   27,   79,   40,   32,   36,   57,   40,   84,   40,
+       65,  986,   36,   36,   71,   65,   71,   27,   27,   27,
+       27,   27,   27,   27,   27,   27,   72,   41,   72, 1121,
+       73,   41,   73,   79,   27,   57,   80,   41,   27,   27,
+       27,   41,   42,   42,   83,   27,   42,   27,   27,   57,
+
+       42,   42,   42,   27,  207,  118,   42,   27,   34,   84,
+       34,   34,   34,   34,   34,   34,   34,   34,   34,   37,
+       37,   37,  118,   94,   94,   43,   37,  180,   83,   43,
+       37,  119,   34,   37,   85,   43,   94,   37,   37,   43,
+      207,   85,   85,   37,   97,  119,   34,   35,  119,   35,
+       35,   35,   35,   35,   35,   35,   35,   35,   98,   97,
+       48,  180,   38,   38,   48,   38,   99,   35,   35,   38,
+       48,   35,   38,   98,   48,   38,   99,   35,  117,   38,
+       38,   39,   39, 1115,   35,   35,   44,  208,  205,  117,
+       44,   39,  234,   39,   44,  117,   39,   39,   39,   39,
+
+       44,   45,   46,   39,   44,   45,   46,  205,  208,   45,
+       61,   46,   46,   46,   61,   45,   46,   47,   46,   45,
+       61,   47,   49,   55,   61,   47,   49,  234,   55,  181,
+       49,   47,   50,  158,   47,   47,   49,   47,   49,   50,
+       49,   49,   49,   50,   51,  194,   50,  158,  122,   50,
+       59,   51,  169,   56,   59,   51,   50,   59,   51,   56,
+       59,   51,   55,  181,   59,  122,  169,   56,   51,   52,
+     1152,   52,   52,   60, 1152,  104,   55,   52,   87,  194,
+       60,   66,   66,   66,   60,   87,   87,   60, 1100,  229,
+       60,   56,  168,   66,   86,   86,   86,   60,  168,  104,
+
+      217,  129,   86,   86,   89,   56,   52,   52,   90,   52,
+       52,   89,   89,  104,  126,   90,   90,  116,  129,  116,
+      121,   66,  121,   52,   52,   54,   54,   54,   54,  229,
+      177,  126,  126,   54,  116,   66,  177,  121,   89,  127,
+      120,  540,  127,   54,   54,   54,   54,   54,   54,   54,
+       54,   54,  120,  120,  217, 1096,  127,  120,  120,   90,
+      133,  137,   54,   54,  540,   54,   54,  106,  106,  106,
+      106,  106,  106,  106,  106,  106,  137,  133,  137,   54,
+       54,   67,   67,   67,   67,   67,   67,   67,   67,   67,
+       67,   67,   67,   67,   67,   67,   67,   67,   67,   67,
+
+       67,   67,   67,   67,   67,   67,   67,   67,   67,   67,
+       67,   67,   67,   67,   67,   67,   67,   67,   67,   67,
+       67,   67,   67,   67,   67,   67,   67,   67,   67,   67,
+       67,   67,   67,   67,   67,   67,   67,   67,   67,   67,
+       67,   67,   67,   67,   93,  182,   93,  108,  108,  107,
+      109,  108,  214,  123,  109,  109,  377,  108,  109,  338,
+      125,  108,  108,  378,  109,  123,  200, 1093,  109,  109,
+      123,  125,  107,  107,  111,  111,  107,  125,  111,   93,
+      128,  132,  107,   93,  111,   93,  107,  107,  111,  111,
+       93,  377,   93,   93,  214,  132,  182,  128,  132,  338,
+
+      128,  134,   93,  103,  103,  103,  103,  103,  103,  103,
+      103,  103,  110,  110,  134,  378,  110,  200,  134,  216,
+      152,  152,  110,  103,  103,  110,  110,  110,  112,  112,
+      113,  113,  112,  131,  113,  183,  103,  152,  112,  143,
+      113,  183,  112,  112,  131,  114,  114,  113,  113,  114,
+      131,  143,  135,  115,  135,  114,  143,  115,  115,  114,
+      114,  115,  139,  184,  216,  520,  130,  115,  139,  184,
+      115,  115,  115,  124,  130,  124,  368,  184,  206,  139,
+      136,  130,  136,  130,  140,  130,  138,  135,  138,  124,
+      136,  124,  124,  124,  124,  124,  124,  124,  124,  124,
+
+      138,  140,  138,  138,  135,  138,  135,  140,  141,  142,
+      144,  206,  142,  368,  367,  136,  145,  520,  336,  157,
+      146,  141,  148,  144,  336,  141,  142,  144,  124,  145,
+      124,  146,  136,  145,  147,  149,  157,  146,  147,  148,
+      150,  148,  151,  153,  367,  153,  154,  155,  150, 1091,
+      151,  147,  149,  147,  263,  149,  151,  150,  155,  151,
+      153,  153,  153,  154,  155,  153,  156,  154,  159,  159,
+      161,  160,  156,  162,  161,  196,  196,  196,  163,  156,
+      159,  162,  163,  156,  160,  159,  164,  161,  160,  165,
+      162,  165,  165,  263,  164,  163,  166,  165,  166,  166,
+
+      189,  186,  352,  164,  166,  185,  188,  185,  174,  215,
+      174,  174,  186,  211,  189,  211,  174,  189,  186,  186,
+      548,  190,  199,  188,  191,  188,  165,  165,  191,  225,
+      165,  225,  369,  166,  166,  187,  190,  166,  190,  340,
+      185,  191,  352,  165,  165,  174,  174,  187,  187,  174,
+      166,  166,  187,  187,  185,  548,  199,  201,  201,  201,
+      215,  218,  174,  174,  176,  176,  176,  176,  218,  218,
+      221,  369,  176,  224,  226,  357,  226,  221,  221, 1086,
+      224,  224,  176,  176,  176,  176,  176,  176,  176,  176,
+      176,  223,  201,  340, 1084,  219,  219,  219,  223,  223,
+
+      245,  176,  176,  219,  219,  176,  201,  220,  220,  220,
+      227,  245,  227,  239,  239,  220,  220,  245,  176,  176,
+      202,  240,  241,  240,  241,  337,  239,  224,  242,  357,
+      242,  337,  343,  373,  343,  373,  223,  202,  202,  202,
+      202,  202,  202,  202,  202,  202,  203,  203,  203,  203,
+      203,  203,  203,  203,  203,  203,  203,  203,  203,  203,
+      203,  203,  203,  203,  203,  203,  203,  203,  203,  203,
+      203,  203,  203,  203,  203,  203,  203,  203,  203,  203,
+      203,  203,  203,  203,  203,  203,  203,  203,  203,  203,
+      203,  203,  203,  203,  203,  203,  203,  203,  203,  203,
+
+      203,  203,  203,  203,  203,  203,  203,  203,  203,  246,
+      247,  249,  517,  248,  280,  370,  280,  252,  517,  250,
+      251, 1080,  254,  255,  280,  249,  246,  252,  249,  246,
+      248,  248,  250,  251,  252,  247,  250,  251,  253,  254,
+      255,  255,  256,  257,  258,  370,  261,  259, 1078,  253,
+      261,  258,  247,  266,  256,  253,  260,  256,  259,  256,
+      257,  258,  257,  261,  259,  264,  264,  260,  265,  269,
+      266,  272,  267,  260,  275,  265,  267,  269,  271,  270,
+      541,  270,  264,  273, 1074,  265,  269,  273,  272,  267,
+      268,  275,  268,  276,  274,  271,  271,  271,  274,  277,
+
+      273,  277,  278,  541,  278,  276,  282,  279, 1070,  270,
+      276,  274,  297, 1069,  270,  283,  277,  282,  284,  285,
+      268,  279,  339,  282,  279,  268,  283, 1066,  268,  297,
+      268,  270,  283,  268,  361,  284,  285,  268,  284,  285,
+      268,  286,  268,  268,  268,  286,  287,  268,  290,  288,
+      289,  288,  289,  291,  287,  292,  278,  291,  286,  288,
+      289,  298,  293,  287,  294,  290,  293,  339,  290,  295,
+      291, 1063,  292,  299,  292,  296,  300,  316,  298,  293,
+      361,  294,  295,  296,  288,  289,  295,  301,  294,  300,
+      299,  299,  296,  300,  316,  288,  289,  302,  303,  305,
+
+      301,  288,  289,  302,  301,  288,  289,  304,  301,  303,
+      304,  306,  307,  308,  302,  303,  305, 1061,  304,  305,
+      311,  308,  309,  310,  304,  313,  309,  310,  306,  307,
+      308,  306,  307,  311,  312,  314,  376,  311,  315,  309,
+      310,  312,  313,  318,  313,  320,  317,  321,  317,  322,
+      318,  312,  314,  315,  314,  315,  317,  319,  320,  321,
+      318,  323,  320,  319,  321,  324,  322,  324,  324,  341,
+      356,  347,  346,  324,  319,  341,  346,  351,  323,  348,
+      323,  317, 1048,  341,  325,  376,  325,  325,  347,  346,
+      347,  327,  325,  327,  327, 1056,  348,  360,  317,  327,
+
+      349,  349,  324,  324,  379,  519,  324,  350,  531,  414,
+      351,  350,  354,  354,  354,  356,  408,  349,  408,  324,
+      324,  325,  325,  380,  350,  325,  414,  351,  327,  327,
+      380,  380,  327,  359,  359,  359, 1048,  360,  325,  325,
+      411,  410,  379,  410,  381,  327,  327,  335,  335,  335,
+      335,  381,  381,  382, 1055,  335,  519,  411,  411,  531,
+      382,  382,  445, 1051,  445,  335,  335,  335,  335,  335,
+      335,  335,  335,  335,  383,  383,  383,  383,  383,  383,
+      383,  383,  383,  518,  335,  335,  401,  401,  335,  518,
+      542,  382,  445,  545, 1050,  545,  381,  416,  415,  401,
+
+      415,  335,  335,  362,  384,  384,  384,  384,  384,  384,
+      384,  384,  384,  542,  416,  415,  521,  652, 1049,  652,
+      362,  362,  362,  362,  362,  362,  362,  362,  362,  385,
+      385,  385,  385,  385,  385,  385,  385,  385,  417,  418,
+      532,  362,  363,  386,  386,  386,  386,  386,  386,  386,
+      386,  386,  656,  533,  521,  417,  418,  418,  656,  363,
+      363,  363,  363,  363,  363,  363,  363,  363,  387,  387,
+      387,  387,  387,  387,  387,  387,  387,  419,  420,  422,
+      363,  366,  388,  388,  388,  388,  388,  388,  388,  388,
+      388,  533,  532,  422,  419,  420,  422, 1044,  366,  366,
+
+      366,  366,  366,  366,  366,  366,  366,  402,  402,  402,
+      402,  402,  402,  402,  402,  402,  403,  403,  403,  403,
+      403,  403,  403,  403,  403,  404,  404,  404,  404,  404,
+      404,  404,  404,  404,  405,  405,  405,  405,  405,  405,
+      405,  405,  405,  406,  406,  406,  406,  406,  406,  406,
+      406,  406,  407,  407,  407,  407,  407,  407,  407,  407,
+      407,  412,  421,  423,  424,  412,  421,  425,  535,  426,
+      428,  427,  424,  426,  423,  432, 1042,  436,  412,  421,
+      423,  424,  427,  428,  425,  430,  426,  428,  427,  431,
+      437,  436,  432,  432,  436, 1022,  430,  431,  433,  438,
+
+      433,  439,  430,  440,  438,  441,  431,  437,  539,  441,
+      437,  442,  438,  444,  443,  439,  438,  535,  439,  447,
+      440,  443,  441,  449,  450,  441,  450,  451,  442,  584,
+      444,  443,  452,  433,  444,  442,  447,  584,  447,  780,
+      449,  433, 1022,  453,  451,  539,  451,  455,  457,  452,
+      433,  657,  458,  456,  450,  433,  434,  657,  434,  450,
+      453,  456,  453,  587,  455,  457,  459,  460,  457,  458,
+      456,  458, 1040,  460,  459,  462,  450,  462,  780,  587,
+      460,  461, 1038,  459,  460,  463,  434,  463,  465,  461,
+      466,  467,  462,  467,  434,  463,  434, 1031,  461,  434,
+
+     1029,  467,  465,  434,  553,  465,  434,  466,  470,  434,
+      434,  553,  553,  434,  448,  448,  448,  448,  448,  448,
+      448,  448,  448,  448,  448,  470,  448,  448,  448,  448,
+      448,  448,  448,  448,  448,  448,  448,  448,  448,  448,
+      448,  448,  448,  448,  448,  448,  448,  448,  448,  448,
+      448,  448,  448,  448,  448,  448,  448,  448,  448,  448,
+      448,  448,  448,  448,  448,  448,  448,  448,  448,  448,
+      448,  448,  448,  448,  448,  448,  448,  469,  471,  472,
+      473,  474,  475,  476,  663, 1028,  663,  477, 1025,  471,
+      472,  469,  480,  478,  469,  471,  472,  473,  474,  475,
+
+      476,  477,  479,  481,  477,  478,  479,  482,  483,  480,
+      478,  480,  485,  484,  486,  487,  488,  489,  490,  479,
+      481,  484,  481,  491,  482,  483,  492,  488,  492,  485,
+      484,  490,  487,  488,  489,  490,  493,  486,  494,  495,
+      491,  496,  497,  492,  501,  503,  498,  499,  502,  499,
+      504,  534,  502,  493,  486,  494,  658,  499,  496,  497,
+      498,  501,  503,  498,  495,  502,  505,  504,  506, 1024,
+      505,  507,  506,  507,  507,  528,  522,  550, 1018,  507,
+      563,  495,  522,  505,  563,  506,  508,  682,  508,  508,
+      522, 1017,  528,  509,  508,  509,  509,  563,  658,  526,
+
+      565,  509,  534,  527,  525,  527,  525,  526,  507,  507,
+      682,  668,  507,  668,  525,  550,  526,  565,  566,  568,
+      567,  552,  567,  508,  508,  507,  507,  508,  552,  552,
+      509,  509, 1015,  566,  509,  566,  568,  567,  527,  525,
+      508,  508,  525, 1012,  529,  572,  529,  509,  509,  516,
+      516,  516,  516, 1021,  529,  527,  525,  516,  529,  552,
+      570,  789,  572,  569,  570,  571,  574,  516,  516,  516,
+      516,  516,  516,  516,  516,  516,  569,  570,  571,  529,
+      569,  573,  571,  574,  574,  576,  516,  516, 1021,  576,
+      516,  607,  785,  607,  785,  573,  529, 1011,  573,  590,
+
+      789,  592,  576,  516,  516,  536,  559,  559,  559,  559,
+      559,  559,  559,  559,  559, 1009,  590,  536,  592,  536,
+      982,  607,  536,  536,  536,  536,  536,  536,  536,  536,
+      536,  537,  560,  560,  560,  560,  560,  560,  560,  560,
+      560, 1001,  659,  677,  677,  677,  999,  997,  537,  537,
+      537,  537,  537,  537,  537,  537,  537,  561,  561,  561,
+      561,  561,  561,  561,  561,  561,  593,  996,  982,  537,
+      538,  562,  562,  562,  562,  562,  562,  562,  562,  562,
+      659,  580,  538,  593,  538,  593,  580,  538,  538,  538,
+      538,  538,  538,  538,  538,  538,  564,  564,  580,  564,
+
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  577,
+      578,  579,  581,  579,  596,  591,  595,  578,  594,  581,
+      577,  594,  597,  597,  600,  596,  577,  578,  591,  581,
+      595,  596,  591,  595,  598,  594,  599,  992,  991,  597,
+      599,  600,  601, 1153,  601,  604,  673, 1153,  605,  598,
+
+      609,  598,  610,  599,  579,  603,  603,  603,  603,  603,
+      603,  603,  603,  603,  604,  605,  606,  609,  579,  610,
+      611,  610,  601,  613,  615,  613,  616,  601,  611,  606,
+      617,  604,  614,  606,  617,  614,  618,  611,  673,  620,
+      613,  615,  621,  616,  601,  619,  622,  617,  622,  614,
+      619,  676,  620,  618,  623,  618,  620,  625,  624,  621,
+      624,  627,  619,  622,  628,  623,  626,  630,  625,  627,
+      626,  623,  629,  632,  625,  624,  629,  628,  627,  633,
+      634,  628,  631,  626,  630,  635,  631,  635,  637,  629,
+      632,  638,  640,  676,  639,  640,  633,  634,  633,  631,
+
+      641,  643,  635,  644,  984,  637,  637,  639,  638,  640,
+      638,  639,  645,  646,  650,  792,  650,  641,  643,  641,
+      644,  643,  644,  647,  650,  647,  647,  661,  983,  645,
+      646,  647,  648,  661,  648,  648,  664,  654,  664,  654,
+      648,  661,  649,  674,  649,  649,  664,  654,  667,  666,
+      649,  654,  650,  666,  792,  696,  667,  794,  794,  794,
+      647,  647,  696,  696,  647,  667,  666,  704,  697,  648,
+      648,  669,  703,  648,  664,  697,  697,  647,  647,  649,
+      649,  674,  669,  649,  704,  938,  648,  648,  669,  980,
+      672,  703,  672,  670,  977,  670,  649,  649,  655,  655,
+
+      655,  655,  698,  670,  672,  705,  655,  670,  703,  698,
+      698,  702,  702,  702,  702,  702,  702,  702,  702,  702,
+      706,  707,  705,  938,  705,  708,  709,  710,  711,  716,
+      711,  719,  714,  712,  714,  655,  655,  706,  707,  655,
+      707,  712,  708,  709,  710,  711,  716,  710,  719,  709,
+      712,  715,  655,  655,  678,  715,  740,  975,  740,  819,
+      870,  819,  870,  876,  736,  876,  720,  714,  715,  714,
+      720,  678,  678,  678,  678,  678,  678,  678,  678,  678,
+      679,  736,  714,  720,  714,  915,  740,  915,  972,  956,
+      731,  732,  731,  733,  738,  732,  819,  679,  679,  679,
+
+      679,  679,  679,  679,  679,  679,  680,  731,  732,  819,
+      733,  738,  871,  733,  955,  954,  734,  735,  742,  748,
+      749,  735,  734,  680,  680,  680,  680,  680,  680,  680,
+      680,  680,  681,  734,  735,  742,  748,  749,  765,  805,
+      765,  935,  965,  935,  965,  871,  805,  805,  765,  681,
+      681,  681,  681,  681,  681,  681,  681,  681,  684,  684,
+      684,  684,  684,  684,  684,  684,  684,  684,  684,  684,
+      684,  684,  684,  684,  684,  684,  684,  684,  684,  684,
+      684,  684,  684,  684,  684,  684,  684,  684,  684,  684,
+      684,  684,  684,  684,  684,  684,  684,  684,  684,  684,
+
+      684,  684,  684,  684,  684,  684,  684,  684,  684,  684,
+      684,  684,  684,  684,  684,  684,  684,  684,  684,  684,
+      684,  688,  688,  806,  688, 1007,  953, 1007,  688,  688,
+      806,  806,  688,  952,  951,  688,  688,  688,  688,  688,
+      688,  688,  688,  701,  701,  949,  701,  701,  701,  701,
+      701,  701,  701,  701,  701,  701,  701,  701,  701,  701,
+      701,  701,  701,  701,  701,  701,  701,  701,  701,  701,
+      701,  701,  701,  701,  701,  701,  701,  701,  701,  701,
+      701,  701,  701,  701,  701,  701,  701,  701,  701,  701,
+      701,  701,  701,  701,  701,  701,  701,  701,  701,  701,
+
+      701,  701,  701,  701,  701,  701,  737,  739,  744,  743,
+      737,  743,  745,  746,  750, 1111,  751,  746,  739,  743,
+      745,  753,  744,  737,  739,  744,  752,  946,  747,  745,
+      746,  750,  747,  751,  751,  754,  755,  752,  753,  756,
+      757,  758,  757,  752,  743,  747,  759,  760,  761, 1111,
+      762,  764,  754,  755,  762,  767,  756,  763,  758,  758,
+      768,  743,  766,  759,  760,  761,  760,  762,  764,  763,
+      766,  769,  767, 1068,  763,  757,  770,  768,  770,  766,
+      771,  772,  773,  810,  773,  773,  786,  934,  769,  814,
+      757,  786,  757,  774,  945,  774,  774,  771,  772,  771,
+
+      810,  774,  775,  786,  775,  775,  814,  788,  787,  788,
+      809,  770,  865,  770,  865,  812,  816,  812,  811,  773,
+      773,  787,  811,  773,  934,  787, 1068,  821,  770,  809,
+      774,  774,  812,  816,  774,  811,  773,  773,  817,  775,
+      775,  813,  788,  775,  821,  813,  809,  774,  774,  865,
+      933, 1036,  817, 1036,  932,  817,  775,  775,  813,  788,
+      795,  795,  795,  795,  795,  795,  795,  795,  795,  795,
+      795,  795,  795,  795,  795,  795,  795,  795,  795,  795,
+      795,  795,  795,  795,  795,  795,  795,  795,  795,  795,
+      795,  795,  795,  795,  795,  795,  795,  795,  795,  795,
+
+      795,  795,  795,  795,  795,  795,  795,  795,  795,  795,
+      795,  795,  795,  795,  795,  795,  795,  795,  795,  795,
+      795,  795,  795,  796,  808,  808,  808,  808,  808,  808,
+      808,  808,  808,  815,  822,  820,  825,  815,  834,  835,
+      796,  796,  796,  796,  796,  796,  796,  796,  796,  820,
+      815,  822,  820,  825,  836,  834,  835,  834,  837,  838,
+      839,  838,  840,  841,  842,  836,  929,  841,  842,  927,
+      922,  836,  843,  846,  839,  837,  838,  839,  845,  840,
+      841,  842,  844,  843,  844,  845,  846,  847,  845,  843,
+      846,  848,  844,  849,  850,  851,  853,  851,  854,  852,
+
+      854,  855,  856,  857,  847,  858,  847,  852,  848,  858,
+      849,  850,  851,  853,  857,  859,  852,  860,  855,  856,
+      857,  856,  858,  861,  864,  862,  866,  862,  877,  867,
+      874,  879,  859,  875,  860,  862,  884,  867,  883,  883,
+      861,  864,  886,  866,  904,  864,  867,  874,  854,  887,
+      875,  875,  885,  884,  888,  883,  885,  889,  894,  886,
+      893,  877,  894,  896,  879,  880,  887,  896, 1020,  885,
+      889,  888,  893,  888,  889,  894,  906,  893,  908,  902,
+      896,  906,  880,  880,  880,  880,  880,  880,  880,  880,
+      880,  905,  907,  906,  909,  908,  907,  910,  911,  905,
+
+      914,  913, 1043,  912, 1081, 1020,  918,  914,  905,  907,
+      914,  909,  916,  909,  910,  911,  912,  910,  913,  916,
+      912,  917,  916,  918,  919,  920,  923,  924,  917,  920,
+      921,  917,  921,  925,  926,  928,  930,  939,  937,  928,
+      923,  919,  920,  923,  924,  931,  936,  921,  940, 1043,
+      925,  926,  928,  930,  930,  937,  941, 1081,  931,  940,
+      942,  944,  931,  936,  943,  940,  936,  947,  943,  948,
+      950,  948,  901,  941,  939,  958,  939,  942,  944,  959,
+      960,  943,  947,  961,  947,  962,  948,  950,  963,  958,
+      988,  964,  958,  964,  966,  961,  959,  960,  970,  987,
+
+      961,  966,  962,  900,  966,  963,  968,  963,  964,  967,
+      967,  967,  969,  968,  971,  970,  968,  967,  974,  969,
+      967,  973,  969,  973,  976,  978,  979,  990,  985,  978,
+      979,  971,  988, 1004,  899,  974,  989,  987,  973,  985,
+      989,  976,  978,  979,  990,  985,  993,  994, 1002, 1003,
+     1004, 1003, 1005,  989, 1006,  994, 1016,  993, 1006, 1013,
+     1005, 1002,  898,  993,  994, 1002, 1003, 1014, 1019, 1005,
+      897, 1006, 1008, 1008, 1008, 1010, 1013, 1023, 1026, 1010,
+     1008, 1027, 1026, 1008, 1014, 1019, 1032, 1019, 1034, 1016,
+     1035, 1046, 1010, 1033, 1023, 1026, 1047, 1033, 1027, 1027,
+
+     1057, 1034, 1065, 1032, 1052, 1034, 1039, 1035, 1046, 1039,
+     1033, 1037, 1037, 1037, 1058, 1067, 1053, 1057, 1058, 1037,
+     1062, 1052, 1037, 1039, 1053,  895, 1059, 1052, 1059, 1047,
+     1071, 1058, 1072, 1053, 1060, 1060, 1060, 1062, 1075, 1083,
+     1062, 1079, 1060, 1103, 1089, 1060, 1072, 1071, 1087, 1072,
+     1065, 1089, 1067, 1109, 1089, 1075, 1076, 1076, 1079, 1076,
+     1094, 1087,  892, 1076, 1076, 1087, 1095, 1076, 1107, 1110,
+     1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1077, 1077,
+     1077, 1092, 1104, 1108, 1113, 1092, 1077, 1083, 1114, 1077,
+     1090, 1109, 1112, 1094, 1090, 1090, 1103, 1090, 1092, 1095,
+
+     1090, 1090, 1090, 1097, 1101, 1090, 1116, 1118, 1090, 1090,
+     1090, 1090, 1090, 1090, 1090, 1090, 1098, 1099, 1119, 1107,
+     1097, 1101, 1110, 1098, 1099, 1112, 1098, 1099, 1120, 1104,
+     1145, 1108, 1145, 1146, 1147, 1146, 1147, 1113, 1149,  891,
+     1149, 1114, 1150,  882, 1150, 1118, 1151, 1157, 1151, 1157,
+      878, 1158, 1119, 1158,  873,  872,  869, 1116,  868,  863,
+      833,  832,  831,  830,  829,  828,  827,  826,  824,  818,
+      804,  802,  798,  793,  791,  790,  783,  782,  781,  778,
+      777, 1120, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124,
+     1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1125,
+
+     1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125,
+     1125, 1125, 1125, 1125, 1125, 1125, 1126, 1126,  776, 1126,
+     1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126,
+     1126, 1126, 1126, 1127, 1127,  730, 1127, 1127, 1127, 1127,
+     1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127,
+     1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128,
+     1128, 1128, 1128, 1128, 1128, 1128, 1128, 1129, 1129, 1129,
+     1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
+     1129, 1129, 1129, 1129, 1130, 1130,  729,  728,  727,  726,
+     1130, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131,
+
+     1131, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132,
+     1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1133,  725,
+     1133,  724, 1133, 1133,  722,  718,  717,  713, 1133, 1134,
+     1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134,
+     1134, 1134, 1134, 1134, 1134, 1134, 1135, 1135, 1135, 1135,
+     1135, 1135, 1135, 1135, 1135, 1135,  695, 1135, 1135, 1135,
+     1135,  694, 1135, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
+     1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
+     1137,  692,  691, 1137, 1137, 1138, 1138, 1138, 1138,  685,
+     1138, 1138,  683, 1138, 1138,  675, 1138, 1138,  662,  660,
+
+     1138, 1138, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139,
+     1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1140,
+      653, 1140,  651,  636, 1140, 1141,  589, 1141,  588, 1141,
+     1141, 1142, 1142,  586, 1142, 1142, 1142, 1142, 1142, 1142,
+     1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1143, 1143,
+     1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143,
+     1143, 1143, 1143, 1143, 1143, 1144, 1144, 1144, 1144, 1144,
+     1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144,
+     1144, 1144, 1148,  585,  583, 1148, 1148, 1154,  582, 1154,
+      575,  556,  551,  549, 1154,  546,  543,  530,  524,  523,
+
+      515,  514, 1154, 1155,  513, 1155,  512,  511, 1155, 1156,
+      510, 1156,  454, 1156, 1156, 1159,  429, 1159,  409,  400,
+     1159, 1160,  398, 1160,  397, 1160, 1160, 1161, 1161,  391,
+     1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161,
+     1161, 1161, 1161, 1161, 1162, 1162,  389, 1162, 1162, 1162,
+     1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162,
+     1162, 1163, 1163,  375, 1163, 1163, 1163, 1163, 1163, 1163,
+     1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1164, 1164,
+     1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164,
+     1164, 1164, 1164, 1164, 1164, 1165, 1165, 1165, 1165, 1165,
+
+     1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165,
+     1165, 1165, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
+     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1167,
+      374, 1167,  372, 1167, 1167, 1168, 1168,  371, 1168, 1168,
+     1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
+     1168, 1168, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169,
+     1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1170,
+     1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170,
+     1170, 1170, 1170, 1170, 1170, 1170, 1171, 1171,  365, 1171,
+     1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
+
+     1171, 1171, 1171, 1172, 1172,  358, 1172, 1172, 1172, 1172,
+     1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172,
+     1173, 1173,  353, 1173, 1173, 1173, 1173, 1173, 1173, 1173,
+     1173, 1173, 1173, 1173, 1173, 1173, 1173, 1174, 1174, 1174,
+     1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174,
+     1174, 1174, 1174, 1174, 1175, 1175, 1175, 1175, 1175, 1175,
+     1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
+     1175, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+     1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1177, 1177,
+     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
+
+     1177, 1177, 1177, 1177, 1177, 1178, 1178, 1178, 1178, 1178,
+     1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
+     1178, 1178, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179,
+     1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179,  345,
+      344,  334,  333,  332,  331,  330,  329,  328,  326,  262,
+      244,  243,  237,  236,  235,  233,  232,  231,  230,  228,
+      213,  212,  210,  209,  204,  198,  195,  192,  178,  173,
+      171,  170,  167,  101,  100,   96,   95,   82,   81,   77,
+       76,   75,   69,   68,   63,   58,   13,    7, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+     1123, 1123
+    } ;
+
+static yy_state_type yy_last_accepting_state;
+static char *yy_last_accepting_cpos;
+
+/* The intent behind this definition is that it'll catch
+ * any uses of REJECT which flex missed.
+ */
+#define REJECT reject_used_but_not_detected
+#define yymore() yymore_used_but_not_detected
+#define YY_MORE_ADJ 0
+#define YY_RESTORE_YY_MORE_OFFSET
+char *yytext;
+#line 1 "fortran.lex"
+#define INITIAL 0
+/******************************************************************************/
+/*                                                                            */
+/*     CONV (converter) for Agrif (Adaptive Grid Refinement In Fortran)       */
+/*                                                                            */
+/* Copyright or   or Copr. Laurent Debreu (Laurent.Debreu@imag.fr)            */
+/*                        Cyril Mazauric (Cyril_Mazauric@yahoo.fr)            */
+/* This software is governed by the CeCILL-C license under French law and     */
+/* abiding by the rules of distribution of free software.  You can  use,      */
+/* modify and/ or redistribute the software under the terms of the CeCILL-C   */
+/* license as circulated by CEA, CNRS and INRIA at the following URL          */
+/* "http://www.cecill.info".                                                  */
+/*                                                                            */
+/* As a counterpart to the access to the source code and  rights to copy,     */
+/* modify and redistribute granted by the license, users are provided only    */
+/* with a limited warranty  and the software's author,  the holder of the     */
+/* economic rights,  and the successive licensors  have only  limited         */
+/* liability.                                                                 */
+/*                                                                            */
+/* In this respect, the user's attention is drawn to the risks associated     */
+/* with loading,  using,  modifying and/or developing or reproducing the      */
+/* software by the user in light of its specific status of free software,     */
+/* that may mean  that it is complicated to manipulate,  and  that  also      */
+/* therefore means  that it is reserved for developers  and  experienced      */
+/* professionals having in-depth computer knowledge. Users are therefore      */
+/* encouraged to load and test the software's suitability as regards their    */
+/* requirements in conditions enabling the security of their systems and/or   */
+/* data to be ensured and,  more generally, to use and operate it in the      */
+/* same conditions as regards security.                                       */
+/*                                                                            */
+/* The fact that you are presently reading this means that you have had       */
+/* knowledge of the CeCILL-C license and that you accept its terms.           */
+/******************************************************************************/
+/* version 1.7                                                                */
+/******************************************************************************/
+#define parameter 1
+
+#define character 2
+
+#define donottreat 3
+
+#define fortran77style 4
+
+#define fortran90style 5
+
+#line 41 "fortran.lex"
+#include <math.h>
+#include <stdlib.h>
+#include <string.h>
+extern FILE * yyin;
+#define MAX_INCLUDE_DEPTH 30
+#define tabsize 6
+YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH];
+int line_num_fortran=1;
+int line_num_fortran_common=1;
+int newlinef90 = 0;
+char *tmp;
+char tmpc;
+/******************************************************************************/
+/**************PETITS PB NON PREVUS *******************************************/
+/******************************************************************************/
+/* NEXTLINF77 un ligne fortran 77 peut commencer par -      &a=b or on        */
+/*            a prevu seulement       & a=b avec l'espace entre le symbole    */
+/*            de la 7eme et le debut de la ligne de commande                  */
+/*            le ! est aussi interdit comme symbole de la 7 eme colonne       */
+/*            Normalement NEXTLINEF77 \n+[ ]{5}[^ ]                           */
+/******************************************************************************/
+#define YY_USER_ACTION \
+        {\
+           if (firstpass == 0) \
+           {\
+              strcat(curbuf,yytext); \
+              Save_Length(curbuf,38); \
+              strcpy(motparse,yytext);\
+              Save_Length(motparse,32); \
+              colnum = colnum + strlen(motparse);\
+              ECHO; \
+           }\
+           strcpy(motparse1,yytext);\
+           /*printf("yytext = %s\n",yytext);*/\
+        /*if ( firstpass == 1 ) 
+                      printf("yytext = %s %d\n",yytext,strlen(yytext));*/\
+        }
+#line 1783 "fortran.yy.c"
+
+/* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+#ifndef YY_SKIP_YYWRAP
+#ifdef __cplusplus
+extern "C" int yywrap YY_PROTO(( void ));
+#else
+extern int yywrap YY_PROTO(( void ));
+#endif
+#endif
+
+#ifndef YY_NO_UNPUT
+static void yyunput YY_PROTO(( int c, char *buf_ptr ));
+#endif
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen YY_PROTO(( yyconst char * ));
+#endif
+
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+static int yyinput YY_PROTO(( void ));
+#else
+static int input YY_PROTO(( void ));
+#endif
+#endif
+
+#if YY_STACK_USED
+static int yy_start_stack_ptr = 0;
+static int yy_start_stack_depth = 0;
+static int *yy_start_stack = 0;
+#ifndef YY_NO_PUSH_STATE
+static void yy_push_state YY_PROTO(( int new_state ));
+#endif
+#ifndef YY_NO_POP_STATE
+static void yy_pop_state YY_PROTO(( void ));
+#endif
+#ifndef YY_NO_TOP_STATE
+static int yy_top_state YY_PROTO(( void ));
+#endif
+
+#else
+#define YY_NO_PUSH_STATE 1
+#define YY_NO_POP_STATE 1
+#define YY_NO_TOP_STATE 1
+#endif
+
+#ifdef YY_MALLOC_DECL
+YY_MALLOC_DECL
+#else
+#if __STDC__
+#ifndef __cplusplus
+#include <stdlib.h>
+#endif
+#else
+/* Just try to get by without declaring the routines.  This will fail
+ * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
+ * or sizeof(void*) != sizeof(int).
+ */
+#endif
+#endif
+
+/* Amount of stuff to slurp up with each read. */
+#ifndef YY_READ_BUF_SIZE
+#define YY_READ_BUF_SIZE 8192
+#endif
+
+/* Copy whatever the last rule matched to the standard output. */
+
+#ifndef ECHO
+/* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+#define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
+#endif
+
+/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
+ * is returned in "result".
+ */
+#ifndef YY_INPUT
+#define YY_INPUT(buf,result,max_size) \
+	if ( yy_current_buffer->yy_is_interactive ) \
+		{ \
+		int c = '*', n; \
+		for ( n = 0; n < max_size && \
+			     (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
+			buf[n] = (char) c; \
+		if ( c == '\n' ) \
+			buf[n++] = (char) c; \
+		if ( c == EOF && ferror( yyin ) ) \
+			YY_FATAL_ERROR( "input in flex scanner failed" ); \
+		result = n; \
+		} \
+	else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
+		  && ferror( yyin ) ) \
+		YY_FATAL_ERROR( "input in flex scanner failed" );
+#endif
+
+/* No semi-colon after return; correct usage is to write "yyterminate();" -
+ * we don't want an extra ';' after the "return" because that will cause
+ * some compilers to complain about unreachable statements.
+ */
+#ifndef yyterminate
+#define yyterminate() return YY_NULL
+#endif
+
+/* Number of entries by which start-condition stack grows. */
+#ifndef YY_START_STACK_INCR
+#define YY_START_STACK_INCR 25
+#endif
+
+/* Report a fatal error. */
+#ifndef YY_FATAL_ERROR
+#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
+#endif
+
+/* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+#ifndef YY_DECL
+#define YY_DECL int yylex YY_PROTO(( void ))
+#endif
+
+/* Code executed at the beginning of each rule, after yytext and yyleng
+ * have been set up.
+ */
+#ifndef YY_USER_ACTION
+#define YY_USER_ACTION
+#endif
+
+/* Code executed at the end of each rule. */
+#ifndef YY_BREAK
+#define YY_BREAK break;
+#endif
+
+#define YY_RULE_SETUP \
+	if ( yyleng > 0 ) \
+		yy_current_buffer->yy_at_bol = \
+				(yytext[yyleng - 1] == '\n'); \
+	YY_USER_ACTION
+
+YY_DECL
+	{
+	register yy_state_type yy_current_state;
+	register char *yy_cp, *yy_bp;
+	register int yy_act;
+
+#line 106 "fortran.lex"
+
+  if (infixed) BEGIN(fortran77style) ;
+  if (infree) BEGIN(fortran90style)  ;
+
+#line 1942 "fortran.yy.c"
+
+	if ( yy_init )
+		{
+		yy_init = 0;
+
+#ifdef YY_USER_INIT
+		YY_USER_INIT;
+#endif
+
+		if ( ! yy_start )
+			yy_start = 1;	/* first start state */
+
+		if ( ! yyin )
+			yyin = stdin;
+
+		if ( ! yyout )
+			yyout = stdout;
+
+		if ( ! yy_current_buffer )
+			yy_current_buffer =
+				yy_create_buffer( yyin, YY_BUF_SIZE );
+
+		yy_load_buffer_state();
+		}
+
+	while ( 1 )		/* loops until end-of-file is reached */
+		{
+		yy_cp = yy_c_buf_p;
+
+		/* Support of yytext. */
+		*yy_cp = yy_hold_char;
+
+		/* yy_bp points to the position in yy_ch_buf of the start of
+		 * the current run.
+		 */
+		yy_bp = yy_cp;
+
+		yy_current_state = yy_start;
+		yy_current_state += YY_AT_BOL();
+yy_match:
+		do
+			{
+			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+			if ( yy_accept[yy_current_state] )
+				{
+				yy_last_accepting_state = yy_current_state;
+				yy_last_accepting_cpos = yy_cp;
+				}
+			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+				{
+				yy_current_state = (int) yy_def[yy_current_state];
+				if ( yy_current_state >= 1124 )
+					yy_c = yy_meta[(unsigned int) yy_c];
+				}
+			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+			++yy_cp;
+			}
+		while ( yy_base[yy_current_state] != 4189 );
+
+yy_find_action:
+		yy_act = yy_accept[yy_current_state];
+		if ( yy_act == 0 )
+			{ /* have to back up */
+			yy_cp = yy_last_accepting_cpos;
+			yy_current_state = yy_last_accepting_state;
+			yy_act = yy_accept[yy_current_state];
+			}
+
+		YY_DO_BEFORE_ACTION;
+
+
+do_action:	/* This label is used only to access EOF actions. */
+
+
+		switch ( yy_act )
+	{ /* beginning of action switch */
+			case 0: /* must back up */
+			/* undo the effects of YY_DO_BEFORE_ACTION */
+			*yy_cp = yy_hold_char;
+			yy_cp = yy_last_accepting_cpos;
+			yy_current_state = yy_last_accepting_state;
+			goto yy_find_action;
+
+case 1:
+YY_RULE_SETUP
+#line 110 "fortran.lex"
+return TOK_DEBUT;
+	YY_BREAK
+case 2:
+YY_RULE_SETUP
+#line 111 "fortran.lex"
+return TOK_FIN;
+	YY_BREAK
+case 3:
+YY_RULE_SETUP
+#line 112 "fortran.lex"
+return TOK_OMP;
+	YY_BREAK
+case 4:
+YY_RULE_SETUP
+#line 113 "fortran.lex"
+return TOK_DOLLAR;
+	YY_BREAK
+case 5:
+YY_RULE_SETUP
+#line 115 "fortran.lex"
+{return TOK_REAL8;}
+	YY_BREAK
+case 6:
+YY_RULE_SETUP
+#line 116 "fortran.lex"
+{return TOK_SUBROUTINE;}
+	YY_BREAK
+case 7:
+YY_RULE_SETUP
+#line 117 "fortran.lex"
+{return TOK_PROGRAM;}
+	YY_BREAK
+case 8:
+YY_RULE_SETUP
+#line 118 "fortran.lex"
+{inallocate = 1; return TOK_ALLOCATE;}
+	YY_BREAK
+case 9:
+YY_RULE_SETUP
+#line 119 "fortran.lex"
+{inallocate = 1; return TOK_DEALLOCATE;}
+	YY_BREAK
+case 10:
+YY_RULE_SETUP
+#line 120 "fortran.lex"
+{return TOK_RESULT;}
+	YY_BREAK
+case 11:
+YY_RULE_SETUP
+#line 121 "fortran.lex"
+{return TOK_FUNCTION;}
+	YY_BREAK
+case 12:
+YY_RULE_SETUP
+#line 122 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_ENDSUBROUTINE;}
+	YY_BREAK
+case 13:
+YY_RULE_SETUP
+#line 123 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_ENDPROGRAM;}
+	YY_BREAK
+case 14:
+YY_RULE_SETUP
+#line 124 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_ENDFUNCTION;}
+	YY_BREAK
+case 15:
+YY_RULE_SETUP
+#line 125 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_ENDUNIT;}
+	YY_BREAK
+case 16:
+YY_RULE_SETUP
+#line 126 "fortran.lex"
+return TOK_INCLUDE;
+	YY_BREAK
+case 17:
+YY_RULE_SETUP
+#line 127 "fortran.lex"
+{
+                            strcpy(yylval.na,yytext);
+                            tmpc = input();
+                            unput(tmpc);
+                            if ( (
+                               tmpc >= 'a' && tmpc <= 'z'
+                                  ) || (
+                               tmpc >= 'A' && tmpc <= 'Z'
+                               )  )
+                               {
+                                  return TOK_USE;
+                               }
+                               else
+                               {
+                                  return TOK_NAME;
+                               }
+                         }
+	YY_BREAK
+case 18:
+YY_RULE_SETUP
+#line 144 "fortran.lex"
+{return TOK_REWIND;}
+	YY_BREAK
+case 19:
+YY_RULE_SETUP
+#line 145 "fortran.lex"
+return TOK_IMPLICIT;
+	YY_BREAK
+case 20:
+YY_RULE_SETUP
+#line 146 "fortran.lex"
+return TOK_NONE;
+	YY_BREAK
+case 21:
+YY_RULE_SETUP
+#line 147 "fortran.lex"
+return TOK_CALL;
+	YY_BREAK
+case 22:
+YY_RULE_SETUP
+#line 148 "fortran.lex"
+return TOK_TRUE;
+	YY_BREAK
+case 23:
+YY_RULE_SETUP
+#line 149 "fortran.lex"
+return TOK_FALSE;
+	YY_BREAK
+case 24:
+YY_RULE_SETUP
+#line 150 "fortran.lex"
+{return TOK_POINT_TO;}
+	YY_BREAK
+case 25:
+YY_RULE_SETUP
+#line 151 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_DASTER;}
+	YY_BREAK
+case 26:
+YY_RULE_SETUP
+#line 152 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_EQV;}
+	YY_BREAK
+case 27:
+YY_RULE_SETUP
+#line 153 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_EQ;}
+	YY_BREAK
+case 28:
+YY_RULE_SETUP
+#line 154 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_GT;}
+	YY_BREAK
+case 29:
+YY_RULE_SETUP
+#line 155 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_GE;}
+	YY_BREAK
+case 30:
+YY_RULE_SETUP
+#line 156 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_LT;}
+	YY_BREAK
+case 31:
+YY_RULE_SETUP
+#line 157 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_LE;}
+	YY_BREAK
+case 32:
+YY_RULE_SETUP
+#line 158 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_NEQV;}
+	YY_BREAK
+case 33:
+YY_RULE_SETUP
+#line 159 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_NE;}
+	YY_BREAK
+case 34:
+YY_RULE_SETUP
+#line 160 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_NOT;}
+	YY_BREAK
+case 35:
+YY_RULE_SETUP
+#line 161 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_OR;}
+	YY_BREAK
+case 36:
+YY_RULE_SETUP
+#line 162 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_XOR;}
+	YY_BREAK
+case 37:
+YY_RULE_SETUP
+#line 163 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_AND;}
+	YY_BREAK
+case 38:
+YY_RULE_SETUP
+#line 164 "fortran.lex"
+{return TOK_MODULE;}
+	YY_BREAK
+case 39:
+YY_RULE_SETUP
+#line 165 "fortran.lex"
+{return TOK_DOWHILE;}
+	YY_BREAK
+case 40:
+YY_RULE_SETUP
+#line 166 "fortran.lex"
+return TOK_ENDMODULE;
+	YY_BREAK
+case 41:
+YY_RULE_SETUP
+#line 167 "fortran.lex"
+return TOK_ENDDO;
+	YY_BREAK
+case 42:
+YY_RULE_SETUP
+#line 168 "fortran.lex"
+{return TOK_PLAINDO;}
+	YY_BREAK
+case 43:
+YY_RULE_SETUP
+#line 169 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_REAL;}
+	YY_BREAK
+case 44:
+YY_RULE_SETUP
+#line 170 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_INTEGER;}
+	YY_BREAK
+case 45:
+YY_RULE_SETUP
+#line 171 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_LOGICAL;}
+	YY_BREAK
+case 46:
+YY_RULE_SETUP
+#line 172 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_CHARACTER;}
+	YY_BREAK
+case 47:
+YY_RULE_SETUP
+#line 173 "fortran.lex"
+{return TOK_ALLOCATABLE;}
+	YY_BREAK
+case 48:
+YY_RULE_SETUP
+#line 174 "fortran.lex"
+return TOK_CLOSE;
+	YY_BREAK
+case 49:
+YY_RULE_SETUP
+#line 175 "fortran.lex"
+return TOK_INQUIRE;
+	YY_BREAK
+case 50:
+YY_RULE_SETUP
+#line 176 "fortran.lex"
+{return TOK_DIMENSION;}
+	YY_BREAK
+case 51:
+YY_RULE_SETUP
+#line 177 "fortran.lex"
+return TOK_PAUSE;
+	YY_BREAK
+case 52:
+YY_RULE_SETUP
+#line 178 "fortran.lex"
+return TOK_EQUIVALENCE;
+	YY_BREAK
+case 53:
+YY_RULE_SETUP
+#line 179 "fortran.lex"
+return TOK_STOP;
+	YY_BREAK
+case 54:
+YY_RULE_SETUP
+#line 180 "fortran.lex"
+return TOK_WHERE;
+	YY_BREAK
+case 55:
+YY_RULE_SETUP
+#line 181 "fortran.lex"
+return TOK_ENDWHERE;
+	YY_BREAK
+case 56:
+YY_RULE_SETUP
+#line 182 "fortran.lex"
+return TOK_ELSEWHERE;
+	YY_BREAK
+case 57:
+YY_RULE_SETUP
+#line 183 "fortran.lex"
+{return TOK_COMPLEX;}
+	YY_BREAK
+case 58:
+YY_RULE_SETUP
+#line 184 "fortran.lex"
+{return TOK_CONTAINS;}
+	YY_BREAK
+case 59:
+YY_RULE_SETUP
+#line 185 "fortran.lex"
+{return TOK_ONLY;}
+	YY_BREAK
+case 60:
+YY_RULE_SETUP
+#line 186 "fortran.lex"
+{return TOK_PARAMETER;}
+	YY_BREAK
+case 61:
+YY_RULE_SETUP
+#line 187 "fortran.lex"
+{return TOK_RECURSIVE;}
+	YY_BREAK
+case 62:
+YY_RULE_SETUP
+#line 188 "fortran.lex"
+{return TOK_COMMON;}
+	YY_BREAK
+case 63:
+YY_RULE_SETUP
+#line 189 "fortran.lex"
+{return TOK_GLOBAL;}
+	YY_BREAK
+case 64:
+YY_RULE_SETUP
+#line 190 "fortran.lex"
+{return TOK_EXTERNAL;}
+	YY_BREAK
+case 65:
+YY_RULE_SETUP
+#line 191 "fortran.lex"
+{return TOK_INTENT;}
+	YY_BREAK
+case 66:
+YY_RULE_SETUP
+#line 192 "fortran.lex"
+{return TOK_POINTER;}
+	YY_BREAK
+case 67:
+YY_RULE_SETUP
+#line 193 "fortran.lex"
+{return TOK_OPTIONAL;}
+	YY_BREAK
+case 68:
+YY_RULE_SETUP
+#line 194 "fortran.lex"
+{return TOK_SAVE;}
+	YY_BREAK
+case 69:
+YY_RULE_SETUP
+#line 195 "fortran.lex"
+{return TOK_TYPE;}
+	YY_BREAK
+case 70:
+YY_RULE_SETUP
+#line 196 "fortran.lex"
+{return TOK_TYPEPAR;}
+	YY_BREAK
+case 71:
+YY_RULE_SETUP
+#line 197 "fortran.lex"
+{if (inallocate == 1) return TOK_STAT; else {strcpy(yylval.na,yytext);return TOK_NAME;}}
+	YY_BREAK
+case 72:
+YY_RULE_SETUP
+#line 198 "fortran.lex"
+{return TOK_ENDTYPE;}
+	YY_BREAK
+case 73:
+YY_RULE_SETUP
+#line 199 "fortran.lex"
+return TOK_OPEN;
+	YY_BREAK
+case 74:
+YY_RULE_SETUP
+#line 200 "fortran.lex"
+return TOK_RETURN;
+	YY_BREAK
+case 75:
+YY_RULE_SETUP
+#line 201 "fortran.lex"
+return TOK_EXIT;
+	YY_BREAK
+case 76:
+YY_RULE_SETUP
+#line 202 "fortran.lex"
+return TOK_PRINT;
+	YY_BREAK
+case 77:
+YY_RULE_SETUP
+#line 203 "fortran.lex"
+{return TOK_PROCEDURE;}
+	YY_BREAK
+case 78:
+YY_RULE_SETUP
+#line 204 "fortran.lex"
+{return TOK_READ;}
+	YY_BREAK
+case 79:
+YY_RULE_SETUP
+#line 205 "fortran.lex"
+{return TOK_NAMELIST;}
+	YY_BREAK
+case 80:
+YY_RULE_SETUP
+#line 206 "fortran.lex"
+{return TOK_WRITE;}
+	YY_BREAK
+case 81:
+YY_RULE_SETUP
+#line 207 "fortran.lex"
+{return TOK_TARGET;}
+	YY_BREAK
+case 82:
+YY_RULE_SETUP
+#line 208 "fortran.lex"
+{return TOK_PUBLIC;}
+	YY_BREAK
+case 83:
+YY_RULE_SETUP
+#line 209 "fortran.lex"
+{return TOK_PRIVATE;}
+	YY_BREAK
+case 84:
+YY_RULE_SETUP
+#line 210 "fortran.lex"
+{strcpy(yylval.nac,yytext);return TOK_IN;}
+	YY_BREAK
+case 85:
+YY_RULE_SETUP
+#line 211 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_DATA;}
+	YY_BREAK
+case 86:
+YY_RULE_SETUP
+#line 212 "fortran.lex"
+return TOK_CONTINUE;
+	YY_BREAK
+case 87:
+YY_RULE_SETUP
+#line 213 "fortran.lex"
+{return TOK_PLAINGOTO;}
+	YY_BREAK
+case 88:
+YY_RULE_SETUP
+#line 214 "fortran.lex"
+{strcpy(yylval.nac,yytext);return TOK_OUT;}
+	YY_BREAK
+case 89:
+YY_RULE_SETUP
+#line 215 "fortran.lex"
+{strcpy(yylval.nac,yytext);return TOK_INOUT;}
+	YY_BREAK
+case 90:
+YY_RULE_SETUP
+#line 216 "fortran.lex"
+{return TOK_INTRINSIC;}
+	YY_BREAK
+case 91:
+YY_RULE_SETUP
+#line 217 "fortran.lex"
+{return TOK_THEN;}
+	YY_BREAK
+case 92:
+YY_RULE_SETUP
+#line 218 "fortran.lex"
+{return TOK_ELSEIF;}
+	YY_BREAK
+case 93:
+YY_RULE_SETUP
+#line 219 "fortran.lex"
+{return TOK_ELSE;}
+	YY_BREAK
+case 94:
+YY_RULE_SETUP
+#line 220 "fortran.lex"
+{return TOK_ENDIF;}
+	YY_BREAK
+case 95:
+YY_RULE_SETUP
+#line 221 "fortran.lex"
+{return TOK_LOGICALIF;}
+	YY_BREAK
+case 96:
+YY_RULE_SETUP
+#line 222 "fortran.lex"
+{return TOK_SUM;}
+	YY_BREAK
+case 97:
+YY_RULE_SETUP
+#line 223 "fortran.lex"
+{return TOK_MAX;}
+	YY_BREAK
+case 98:
+YY_RULE_SETUP
+#line 224 "fortran.lex"
+{return TOK_TANH;}
+	YY_BREAK
+case 99:
+YY_RULE_SETUP
+#line 225 "fortran.lex"
+{return TOK_MAXVAL;}
+	YY_BREAK
+case 100:
+YY_RULE_SETUP
+#line 226 "fortran.lex"
+{return TOK_TRIM;}
+	YY_BREAK
+case 101:
+YY_RULE_SETUP
+#line 227 "fortran.lex"
+{return TOK_SQRT;}
+	YY_BREAK
+case 102:
+YY_RULE_SETUP
+#line 228 "fortran.lex"
+{return TOK_SELECTCASE;}
+	YY_BREAK
+case 103:
+YY_RULE_SETUP
+#line 229 "fortran.lex"
+{return TOK_CASE;}
+	YY_BREAK
+case 104:
+YY_RULE_SETUP
+#line 230 "fortran.lex"
+{return TOK_CASEDEFAULT;}
+	YY_BREAK
+case 105:
+YY_RULE_SETUP
+#line 231 "fortran.lex"
+{return TOK_ENDSELECT;}
+	YY_BREAK
+case 106:
+YY_RULE_SETUP
+#line 232 "fortran.lex"
+{return TOK_FILE;}
+	YY_BREAK
+case 107:
+YY_RULE_SETUP
+#line 233 "fortran.lex"
+{return TOK_END;}
+	YY_BREAK
+case 108:
+YY_RULE_SETUP
+#line 234 "fortran.lex"
+{return TOK_ERR;}
+	YY_BREAK
+case 109:
+YY_RULE_SETUP
+#line 235 "fortran.lex"
+{return TOK_EXIST;}
+	YY_BREAK
+case 110:
+YY_RULE_SETUP
+#line 236 "fortran.lex"
+{return TOK_MIN;}
+	YY_BREAK
+case 111:
+YY_RULE_SETUP
+#line 237 "fortran.lex"
+{return TOK_NINT;}
+	YY_BREAK
+case 112:
+YY_RULE_SETUP
+#line 238 "fortran.lex"
+{return TOK_FLOAT;}
+	YY_BREAK
+case 113:
+YY_RULE_SETUP
+#line 239 "fortran.lex"
+{return TOK_EXP;}
+	YY_BREAK
+case 114:
+YY_RULE_SETUP
+#line 240 "fortran.lex"
+{return TOK_COS;}
+	YY_BREAK
+case 115:
+YY_RULE_SETUP
+#line 241 "fortran.lex"
+{return TOK_COSH;}
+	YY_BREAK
+case 116:
+YY_RULE_SETUP
+#line 242 "fortran.lex"
+{return TOK_ACOS;}
+	YY_BREAK
+case 117:
+YY_RULE_SETUP
+#line 243 "fortran.lex"
+{return TOK_SIN;}
+	YY_BREAK
+case 118:
+YY_RULE_SETUP
+#line 244 "fortran.lex"
+{return TOK_SINH;}
+	YY_BREAK
+case 119:
+YY_RULE_SETUP
+#line 245 "fortran.lex"
+{return TOK_ASIN;}
+	YY_BREAK
+case 120:
+YY_RULE_SETUP
+#line 246 "fortran.lex"
+{return TOK_LOG;}
+	YY_BREAK
+case 121:
+YY_RULE_SETUP
+#line 247 "fortran.lex"
+{return TOK_TAN;}
+	YY_BREAK
+case 122:
+YY_RULE_SETUP
+#line 248 "fortran.lex"
+{return TOK_ATAN;}
+	YY_BREAK
+case 123:
+YY_RULE_SETUP
+#line 249 "fortran.lex"
+{return TOK_CYCLE;}
+	YY_BREAK
+case 124:
+YY_RULE_SETUP
+#line 250 "fortran.lex"
+{return TOK_ABS;}
+	YY_BREAK
+case 125:
+YY_RULE_SETUP
+#line 251 "fortran.lex"
+{return TOK_MOD;}
+	YY_BREAK
+case 126:
+YY_RULE_SETUP
+#line 252 "fortran.lex"
+{return TOK_SIGN;}
+	YY_BREAK
+case 127:
+YY_RULE_SETUP
+#line 253 "fortran.lex"
+{return TOK_MINLOC;}
+	YY_BREAK
+case 128:
+YY_RULE_SETUP
+#line 254 "fortran.lex"
+{return TOK_MAXLOC;}
+	YY_BREAK
+case 129:
+YY_RULE_SETUP
+#line 255 "fortran.lex"
+{return TOK_MINVAL;}
+	YY_BREAK
+case 130:
+YY_RULE_SETUP
+#line 256 "fortran.lex"
+{return TOK_INTERFACE;}
+	YY_BREAK
+case 131:
+YY_RULE_SETUP
+#line 257 "fortran.lex"
+{return TOK_BACKSPACE;}
+	YY_BREAK
+case 132:
+YY_RULE_SETUP
+#line 258 "fortran.lex"
+{return TOK_ENDINTERFACE;}
+	YY_BREAK
+case 133:
+YY_RULE_SETUP
+#line 259 "fortran.lex"
+{return TOK_LEFTAB;}
+	YY_BREAK
+case 134:
+YY_RULE_SETUP
+#line 260 "fortran.lex"
+{return TOK_RIGHTAB;}
+	YY_BREAK
+case 135:
+YY_RULE_SETUP
+#line 261 "fortran.lex"
+{return TOK_FORMAT;}
+	YY_BREAK
+case 136:
+YY_RULE_SETUP
+#line 262 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_DOUBLEPRECISION;}
+	YY_BREAK
+case 137:
+YY_RULE_SETUP
+#line 263 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_DOUBLECOMPLEX;}
+	YY_BREAK
+case 138:
+YY_RULE_SETUP
+#line 264 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_SLASH;}
+	YY_BREAK
+case 139:
+YY_RULE_SETUP
+#line 265 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_DSLASH;}
+	YY_BREAK
+case 140:
+YY_RULE_SETUP
+#line 266 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_CHAR_CUT;}
+	YY_BREAK
+case 141:
+YY_RULE_SETUP
+#line 267 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_CHAR_CONSTANT;}
+	YY_BREAK
+case 142:
+YY_RULE_SETUP
+#line 268 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_CHAR_MESSAGE;}
+	YY_BREAK
+case 143:
+YY_RULE_SETUP
+#line 269 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_CHAR_INT;}
+	YY_BREAK
+case 144:
+YY_RULE_SETUP
+#line 270 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_NAME;}
+	YY_BREAK
+case 145:
+YY_RULE_SETUP
+#line 271 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_CSTREAL;}
+	YY_BREAK
+case 146:
+YY_RULE_SETUP
+#line 272 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_CSTREALDP;}
+	YY_BREAK
+case 147:
+YY_RULE_SETUP
+#line 273 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_CSTREALQP;}
+	YY_BREAK
+case 148:
+*yy_cp = yy_hold_char; /* undo effects of setting up yytext */
+yy_c_buf_p = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+#line 274 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_CSTREAL;}
+	YY_BREAK
+case 149:
+YY_RULE_SETUP
+#line 275 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_CSTINT;}
+	YY_BREAK
+case 150:
+YY_RULE_SETUP
+#line 276 "fortran.lex"
+{}
+	YY_BREAK
+case 151:
+YY_RULE_SETUP
+#line 277 "fortran.lex"
+{return TOK_QUOTE;}
+	YY_BREAK
+case 152:
+YY_RULE_SETUP
+#line 278 "fortran.lex"
+{}
+	YY_BREAK
+case 153:
+YY_RULE_SETUP
+#line 279 "fortran.lex"
+{strcpy(yylval.na,yytext);return (int) *yytext;}
+	YY_BREAK
+case 154:
+YY_RULE_SETUP
+#line 280 "fortran.lex"
+{return TOK_SEMICOLON;}
+	YY_BREAK
+case 155:
+YY_RULE_SETUP
+#line 281 "fortran.lex"
+{return (int) *yytext;}
+	YY_BREAK
+case 156:
+YY_RULE_SETUP
+#line 282 "fortran.lex"
+{return (int) *yytext;}
+	YY_BREAK
+case 157:
+YY_RULE_SETUP
+#line 283 "fortran.lex"
+{return (int) *yytext;}
+	YY_BREAK
+case 158:
+YY_RULE_SETUP
+#line 284 "fortran.lex"
+{return (int) *yytext;}
+	YY_BREAK
+case 159:
+YY_RULE_SETUP
+#line 285 "fortran.lex"
+{colnum=0;line_num_fortran++;line_num_fortran_common++; return (int) *yytext;}
+	YY_BREAK
+case 160:
+*yy_cp = yy_hold_char; /* undo effects of setting up yytext */
+yy_c_buf_p = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+#line 286 "fortran.lex"
+
+	YY_BREAK
+case 161:
+YY_RULE_SETUP
+#line 287 "fortran.lex"
+{if (newlinef90 == 0) return TOK_LABEL; else newlinef90 = 0;}
+	YY_BREAK
+case 162:
+YY_RULE_SETUP
+#line 288 "fortran.lex"
+
+	YY_BREAK
+case 163:
+YY_RULE_SETUP
+#line 289 "fortran.lex"
+{colnum=colnum-1+tabsize;}
+	YY_BREAK
+case 164:
+YY_RULE_SETUP
+#line 290 "fortran.lex"
+;
+	YY_BREAK
+case 165:
+YY_RULE_SETUP
+#line 291 "fortran.lex"
+{line_num_fortran++;line_num_fortran_common++;newlinef90=1;colnum=0;}
+	YY_BREAK
+case 166:
+YY_RULE_SETUP
+#line 292 "fortran.lex"
+{line_num_fortran++;line_num_fortran_common++;colnum=0;}
+	YY_BREAK
+case 167:
+YY_RULE_SETUP
+#line 293 "fortran.lex"
+{
+                           convert2lower(motparse1);
+                           if ( strncasecmp(motparse1,"contains",8) == 0 )
+                           {
+                              return TOK_CONTAINS;
+                           }
+                           else
+                           {
+                              colnum=0;line_num_fortran++;line_num_fortran_common++;
+                             if ( !strcasecmp(motparse1,"C$AGRIF_DO_NOT_TREAT\n")) return TOK_DONOTTREAT;
+                             if ( !strcasecmp(motparse1,"C$AGRIF_END_DO_NOT_TREAT\n")) return TOK_ENDDONOTTREAT;
+                           }
+                         }
+	YY_BREAK
+case 168:
+YY_RULE_SETUP
+#line 306 "fortran.lex"
+BEGIN(donottreat);
+	YY_BREAK
+case 169:
+YY_RULE_SETUP
+#line 307 "fortran.lex"
+BEGIN(INITIAL);
+	YY_BREAK
+case 170:
+YY_RULE_SETUP
+#line 308 "fortran.lex"
+
+	YY_BREAK
+case 171:
+YY_RULE_SETUP
+#line 309 "fortran.lex"
+{
+                             colnum = 0;
+                             if ( !strcasecmp(motparse1,"!$AGRIF_DO_NOT_TREAT\n")) return TOK_DONOTTREAT;
+                             if ( !strcasecmp(motparse1,"!$AGRIF_END_DO_NOT_TREAT\n")) return TOK_ENDDONOTTREAT;
+                          }
+	YY_BREAK
+case 172:
+YY_RULE_SETUP
+#line 314 "fortran.lex"
+{
+                             colnum = 0;
+                             if ( !strcasecmp(motparse1,"!$AGRIF_DO_NOT_TREAT\n")) return TOK_DONOTTREAT;
+                             if ( !strcasecmp(motparse1,"!$AGRIF_END_DO_NOT_TREAT\n")) return TOK_ENDDONOTTREAT;
+                          }
+	YY_BREAK
+case 173:
+YY_RULE_SETUP
+#line 319 "fortran.lex"
+ECHO;
+	YY_BREAK
+#line 2933 "fortran.yy.c"
+case YY_STATE_EOF(INITIAL):
+case YY_STATE_EOF(parameter):
+case YY_STATE_EOF(character):
+case YY_STATE_EOF(donottreat):
+case YY_STATE_EOF(fortran77style):
+case YY_STATE_EOF(fortran90style):
+	yyterminate();
+
+	case YY_END_OF_BUFFER:
+		{
+		/* Amount of text matched not including the EOB char. */
+		int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;
+
+		/* Undo the effects of YY_DO_BEFORE_ACTION. */
+		*yy_cp = yy_hold_char;
+		YY_RESTORE_YY_MORE_OFFSET
+
+		if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
+			{
+			/* We're scanning a new file or input source.  It's
+			 * possible that this happened because the user
+			 * just pointed yyin at a new source and called
+			 * yylex().  If so, then we have to assure
+			 * consistency between yy_current_buffer and our
+			 * globals.  Here is the right place to do so, because
+			 * this is the first action (other than possibly a
+			 * back-up) that will match for the new input source.
+			 */
+			yy_n_chars = yy_current_buffer->yy_n_chars;
+			yy_current_buffer->yy_input_file = yyin;
+			yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
+			}
+
+		/* Note that here we test for yy_c_buf_p "<=" to the position
+		 * of the first EOB in the buffer, since yy_c_buf_p will
+		 * already have been incremented past the NUL character
+		 * (since all states make transitions on EOB to the
+		 * end-of-buffer state).  Contrast this with the test
+		 * in input().
+		 */
+		if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
+			{ /* This was really a NUL. */
+			yy_state_type yy_next_state;
+
+			yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
+
+			yy_current_state = yy_get_previous_state();
+
+			/* Okay, we're now positioned to make the NUL
+			 * transition.  We couldn't have
+			 * yy_get_previous_state() go ahead and do it
+			 * for us because it doesn't know how to deal
+			 * with the possibility of jamming (and we don't
+			 * want to build jamming into it because then it
+			 * will run more slowly).
+			 */
+
+			yy_next_state = yy_try_NUL_trans( yy_current_state );
+
+			yy_bp = yytext_ptr + YY_MORE_ADJ;
+
+			if ( yy_next_state )
+				{
+				/* Consume the NUL. */
+				yy_cp = ++yy_c_buf_p;
+				yy_current_state = yy_next_state;
+				goto yy_match;
+				}
+
+			else
+				{
+				yy_cp = yy_c_buf_p;
+				goto yy_find_action;
+				}
+			}
+
+		else switch ( yy_get_next_buffer() )
+			{
+			case EOB_ACT_END_OF_FILE:
+				{
+				yy_did_buffer_switch_on_eof = 0;
+
+				if ( yywrap() )
+					{
+					/* Note: because we've taken care in
+					 * yy_get_next_buffer() to have set up
+					 * yytext, we can now set up
+					 * yy_c_buf_p so that if some total
+					 * hoser (like flex itself) wants to
+					 * call the scanner after we return the
+					 * YY_NULL, it'll still work - another
+					 * YY_NULL will get returned.
+					 */
+					yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
+
+					yy_act = YY_STATE_EOF(YY_START);
+					goto do_action;
+					}
+
+				else
+					{
+					if ( ! yy_did_buffer_switch_on_eof )
+						YY_NEW_FILE;
+					}
+				break;
+				}
+
+			case EOB_ACT_CONTINUE_SCAN:
+				yy_c_buf_p =
+					yytext_ptr + yy_amount_of_matched_text;
+
+				yy_current_state = yy_get_previous_state();
+
+				yy_cp = yy_c_buf_p;
+				yy_bp = yytext_ptr + YY_MORE_ADJ;
+				goto yy_match;
+
+			case EOB_ACT_LAST_MATCH:
+				yy_c_buf_p =
+				&yy_current_buffer->yy_ch_buf[yy_n_chars];
+
+				yy_current_state = yy_get_previous_state();
+
+				yy_cp = yy_c_buf_p;
+				yy_bp = yytext_ptr + YY_MORE_ADJ;
+				goto yy_find_action;
+			}
+		break;
+		}
+
+	default:
+		YY_FATAL_ERROR(
+			"fatal flex scanner internal error--no action found" );
+	} /* end of action switch */
+		} /* end of scanning one token */
+	} /* end of yylex */
+
+
+/* yy_get_next_buffer - try to read in a new buffer
+ *
+ * Returns a code representing an action:
+ *	EOB_ACT_LAST_MATCH -
+ *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+ *	EOB_ACT_END_OF_FILE - end of file
+ */
+
+static int yy_get_next_buffer()
+	{
+	register char *dest = yy_current_buffer->yy_ch_buf;
+	register char *source = yytext_ptr;
+	register int number_to_move, i;
+	int ret_val;
+
+	if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
+		YY_FATAL_ERROR(
+		"fatal flex scanner internal error--end of buffer missed" );
+
+	if ( yy_current_buffer->yy_fill_buffer == 0 )
+		{ /* Don't try to fill the buffer, so this is an EOF. */
+		if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
+			{
+			/* We matched a single character, the EOB, so
+			 * treat this as a final EOF.
+			 */
+			return EOB_ACT_END_OF_FILE;
+			}
+
+		else
+			{
+			/* We matched some text prior to the EOB, first
+			 * process it.
+			 */
+			return EOB_ACT_LAST_MATCH;
+			}
+		}
+
+	/* Try to read more data. */
+
+	/* First move last chars to start of buffer. */
+	number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;
+
+	for ( i = 0; i < number_to_move; ++i )
+		*(dest++) = *(source++);
+
+	if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+		/* don't do the read, it's not guaranteed to return an EOF,
+		 * just force an EOF
+		 */
+		yy_current_buffer->yy_n_chars = yy_n_chars = 0;
+
+	else
+		{
+		int num_to_read =
+			yy_current_buffer->yy_buf_size - number_to_move - 1;
+
+		while ( num_to_read <= 0 )
+			{ /* Not enough room in the buffer - grow it. */
+#ifdef YY_USES_REJECT
+			YY_FATAL_ERROR(
+"input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
+#else
+
+			/* just a shorter name for the current buffer */
+			YY_BUFFER_STATE b = yy_current_buffer;
+
+			int yy_c_buf_p_offset =
+				(int) (yy_c_buf_p - b->yy_ch_buf);
+
+			if ( b->yy_is_our_buffer )
+				{
+				int new_size = b->yy_buf_size * 2;
+
+				if ( new_size <= 0 )
+					b->yy_buf_size += b->yy_buf_size / 8;
+				else
+					b->yy_buf_size *= 2;
+
+				b->yy_ch_buf = (char *)
+					/* Include room in for 2 EOB chars. */
+					yy_flex_realloc( (void *) b->yy_ch_buf,
+							 b->yy_buf_size + 2 );
+				}
+			else
+				/* Can't grow it, we don't own it. */
+				b->yy_ch_buf = 0;
+
+			if ( ! b->yy_ch_buf )
+				YY_FATAL_ERROR(
+				"fatal error - scanner input buffer overflow" );
+
+			yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
+
+			num_to_read = yy_current_buffer->yy_buf_size -
+						number_to_move - 1;
+#endif
+			}
+
+		if ( num_to_read > YY_READ_BUF_SIZE )
+			num_to_read = YY_READ_BUF_SIZE;
+
+		/* Read in more data. */
+		YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
+			yy_n_chars, num_to_read );
+
+		yy_current_buffer->yy_n_chars = yy_n_chars;
+		}
+
+	if ( yy_n_chars == 0 )
+		{
+		if ( number_to_move == YY_MORE_ADJ )
+			{
+			ret_val = EOB_ACT_END_OF_FILE;
+			yyrestart( yyin );
+			}
+
+		else
+			{
+			ret_val = EOB_ACT_LAST_MATCH;
+			yy_current_buffer->yy_buffer_status =
+				YY_BUFFER_EOF_PENDING;
+			}
+		}
+
+	else
+		ret_val = EOB_ACT_CONTINUE_SCAN;
+
+	yy_n_chars += number_to_move;
+	yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
+	yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
+
+	yytext_ptr = &yy_current_buffer->yy_ch_buf[0];
+
+	return ret_val;
+	}
+
+
+/* yy_get_previous_state - get the state just before the EOB char was reached */
+
+static yy_state_type yy_get_previous_state()
+	{
+	register yy_state_type yy_current_state;
+	register char *yy_cp;
+
+	yy_current_state = yy_start;
+	yy_current_state += YY_AT_BOL();
+
+	for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
+		{
+		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+		if ( yy_accept[yy_current_state] )
+			{
+			yy_last_accepting_state = yy_current_state;
+			yy_last_accepting_cpos = yy_cp;
+			}
+		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+			{
+			yy_current_state = (int) yy_def[yy_current_state];
+			if ( yy_current_state >= 1124 )
+				yy_c = yy_meta[(unsigned int) yy_c];
+			}
+		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+		}
+
+	return yy_current_state;
+	}
+
+
+/* yy_try_NUL_trans - try to make a transition on the NUL character
+ *
+ * synopsis
+ *	next_state = yy_try_NUL_trans( current_state );
+ */
+
+#ifdef YY_USE_PROTOS
+static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
+#else
+static yy_state_type yy_try_NUL_trans( yy_current_state )
+yy_state_type yy_current_state;
+#endif
+	{
+	register int yy_is_jam;
+	register char *yy_cp = yy_c_buf_p;
+
+	register YY_CHAR yy_c = 1;
+	if ( yy_accept[yy_current_state] )
+		{
+		yy_last_accepting_state = yy_current_state;
+		yy_last_accepting_cpos = yy_cp;
+		}
+	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+		{
+		yy_current_state = (int) yy_def[yy_current_state];
+		if ( yy_current_state >= 1124 )
+			yy_c = yy_meta[(unsigned int) yy_c];
+		}
+	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+	yy_is_jam = (yy_current_state == 1123);
+
+	return yy_is_jam ? 0 : yy_current_state;
+	}
+
+
+#ifndef YY_NO_UNPUT
+#ifdef YY_USE_PROTOS
+static void yyunput( int c, register char *yy_bp )
+#else
+static void yyunput( c, yy_bp )
+int c;
+register char *yy_bp;
+#endif
+	{
+	register char *yy_cp = yy_c_buf_p;
+
+	/* undo effects of setting up yytext */
+	*yy_cp = yy_hold_char;
+
+	if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
+		{ /* need to shift things up to make room */
+		/* +2 for EOB chars. */
+		register int number_to_move = yy_n_chars + 2;
+		register char *dest = &yy_current_buffer->yy_ch_buf[
+					yy_current_buffer->yy_buf_size + 2];
+		register char *source =
+				&yy_current_buffer->yy_ch_buf[number_to_move];
+
+		while ( source > yy_current_buffer->yy_ch_buf )
+			*--dest = *--source;
+
+		yy_cp += (int) (dest - source);
+		yy_bp += (int) (dest - source);
+		yy_current_buffer->yy_n_chars =
+			yy_n_chars = yy_current_buffer->yy_buf_size;
+
+		if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
+			YY_FATAL_ERROR( "flex scanner push-back overflow" );
+		}
+
+	*--yy_cp = (char) c;
+
+
+	yytext_ptr = yy_bp;
+	yy_hold_char = *yy_cp;
+	yy_c_buf_p = yy_cp;
+	}
+#endif	/* ifndef YY_NO_UNPUT */
+
+
+#ifdef __cplusplus
+static int yyinput()
+#else
+static int input()
+#endif
+	{
+	int c;
+
+	*yy_c_buf_p = yy_hold_char;
+
+	if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
+		{
+		/* yy_c_buf_p now points to the character we want to return.
+		 * If this occurs *before* the EOB characters, then it's a
+		 * valid NUL; if not, then we've hit the end of the buffer.
+		 */
+		if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
+			/* This was really a NUL. */
+			*yy_c_buf_p = '\0';
+
+		else
+			{ /* need more input */
+			int offset = yy_c_buf_p - yytext_ptr;
+			++yy_c_buf_p;
+
+			switch ( yy_get_next_buffer() )
+				{
+				case EOB_ACT_LAST_MATCH:
+					/* This happens because yy_g_n_b()
+					 * sees that we've accumulated a
+					 * token and flags that we need to
+					 * try matching the token before
+					 * proceeding.  But for input(),
+					 * there's no matching to consider.
+					 * So convert the EOB_ACT_LAST_MATCH
+					 * to EOB_ACT_END_OF_FILE.
+					 */
+
+					/* Reset buffer status. */
+					yyrestart( yyin );
+
+					/* fall through */
+
+				case EOB_ACT_END_OF_FILE:
+					{
+					if ( yywrap() )
+						return EOF;
+
+					if ( ! yy_did_buffer_switch_on_eof )
+						YY_NEW_FILE;
+#ifdef __cplusplus
+					return yyinput();
+#else
+					return input();
+#endif
+					}
+
+				case EOB_ACT_CONTINUE_SCAN:
+					yy_c_buf_p = yytext_ptr + offset;
+					break;
+				}
+			}
+		}
+
+	c = *(unsigned char *) yy_c_buf_p;	/* cast for 8-bit char's */
+	*yy_c_buf_p = '\0';	/* preserve yytext */
+	yy_hold_char = *++yy_c_buf_p;
+
+	yy_current_buffer->yy_at_bol = (c == '\n');
+
+	return c;
+	}
+
+
+#ifdef YY_USE_PROTOS
+void yyrestart( FILE *input_file )
+#else
+void yyrestart( input_file )
+FILE *input_file;
+#endif
+	{
+	if ( ! yy_current_buffer )
+		yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
+
+	yy_init_buffer( yy_current_buffer, input_file );
+	yy_load_buffer_state();
+	}
+
+
+#ifdef YY_USE_PROTOS
+void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
+#else
+void yy_switch_to_buffer( new_buffer )
+YY_BUFFER_STATE new_buffer;
+#endif
+	{
+	if ( yy_current_buffer == new_buffer )
+		return;
+
+	if ( yy_current_buffer )
+		{
+		/* Flush out information for old buffer. */
+		*yy_c_buf_p = yy_hold_char;
+		yy_current_buffer->yy_buf_pos = yy_c_buf_p;
+		yy_current_buffer->yy_n_chars = yy_n_chars;
+		}
+
+	yy_current_buffer = new_buffer;
+	yy_load_buffer_state();
+
+	/* We don't actually know whether we did this switch during
+	 * EOF (yywrap()) processing, but the only time this flag
+	 * is looked at is after yywrap() is called, so it's safe
+	 * to go ahead and always set it.
+	 */
+	yy_did_buffer_switch_on_eof = 1;
+	}
+
+
+#ifdef YY_USE_PROTOS
+void yy_load_buffer_state( void )
+#else
+void yy_load_buffer_state()
+#endif
+	{
+	yy_n_chars = yy_current_buffer->yy_n_chars;
+	yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
+	yyin = yy_current_buffer->yy_input_file;
+	yy_hold_char = *yy_c_buf_p;
+	}
+
+
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
+#else
+YY_BUFFER_STATE yy_create_buffer( file, size )
+FILE *file;
+int size;
+#endif
+	{
+	YY_BUFFER_STATE b;
+
+	b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
+	if ( ! b )
+		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+	b->yy_buf_size = size;
+
+	/* yy_ch_buf has to be 2 characters longer than the size given because
+	 * we need to put in 2 end-of-buffer characters.
+	 */
+	b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
+	if ( ! b->yy_ch_buf )
+		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+	b->yy_is_our_buffer = 1;
+
+	yy_init_buffer( b, file );
+
+	return b;
+	}
+
+
+#ifdef YY_USE_PROTOS
+void yy_delete_buffer( YY_BUFFER_STATE b )
+#else
+void yy_delete_buffer( b )
+YY_BUFFER_STATE b;
+#endif
+	{
+	if ( ! b )
+		return;
+
+	if ( b == yy_current_buffer )
+		yy_current_buffer = (YY_BUFFER_STATE) 0;
+
+	if ( b->yy_is_our_buffer )
+		yy_flex_free( (void *) b->yy_ch_buf );
+
+	yy_flex_free( (void *) b );
+	}
+
+
+#ifndef YY_ALWAYS_INTERACTIVE
+#ifndef YY_NEVER_INTERACTIVE
+extern int isatty YY_PROTO(( int ));
+#endif
+#endif
+
+#ifdef YY_USE_PROTOS
+void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
+#else
+void yy_init_buffer( b, file )
+YY_BUFFER_STATE b;
+FILE *file;
+#endif
+
+
+	{
+	yy_flush_buffer( b );
+
+	b->yy_input_file = file;
+	b->yy_fill_buffer = 1;
+
+#if YY_ALWAYS_INTERACTIVE
+	b->yy_is_interactive = 1;
+#else
+#if YY_NEVER_INTERACTIVE
+	b->yy_is_interactive = 0;
+#else
+	b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
+#endif
+#endif
+	}
+
+
+#ifdef YY_USE_PROTOS
+void yy_flush_buffer( YY_BUFFER_STATE b )
+#else
+void yy_flush_buffer( b )
+YY_BUFFER_STATE b;
+#endif
+
+	{
+	if ( ! b )
+		return;
+
+	b->yy_n_chars = 0;
+
+	/* We always need two end-of-buffer characters.  The first causes
+	 * a transition to the end-of-buffer state.  The second causes
+	 * a jam in that state.
+	 */
+	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+
+	b->yy_buf_pos = &b->yy_ch_buf[0];
+
+	b->yy_at_bol = 1;
+	b->yy_buffer_status = YY_BUFFER_NEW;
+
+	if ( b == yy_current_buffer )
+		yy_load_buffer_state();
+	}
+
+
+#ifndef YY_NO_SCAN_BUFFER
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
+#else
+YY_BUFFER_STATE yy_scan_buffer( base, size )
+char *base;
+yy_size_t size;
+#endif
+	{
+	YY_BUFFER_STATE b;
+
+	if ( size < 2 ||
+	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
+	     base[size-1] != YY_END_OF_BUFFER_CHAR )
+		/* They forgot to leave room for the EOB's. */
+		return 0;
+
+	b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
+	if ( ! b )
+		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
+
+	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
+	b->yy_buf_pos = b->yy_ch_buf = base;
+	b->yy_is_our_buffer = 0;
+	b->yy_input_file = 0;
+	b->yy_n_chars = b->yy_buf_size;
+	b->yy_is_interactive = 0;
+	b->yy_at_bol = 1;
+	b->yy_fill_buffer = 0;
+	b->yy_buffer_status = YY_BUFFER_NEW;
+
+	yy_switch_to_buffer( b );
+
+	return b;
+	}
+#endif
+
+
+#ifndef YY_NO_SCAN_STRING
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
+#else
+YY_BUFFER_STATE yy_scan_string( yy_str )
+yyconst char *yy_str;
+#endif
+	{
+	int len;
+	for ( len = 0; yy_str[len]; ++len )
+		;
+
+	return yy_scan_bytes( yy_str, len );
+	}
+#endif
+
+
+#ifndef YY_NO_SCAN_BYTES
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
+#else
+YY_BUFFER_STATE yy_scan_bytes( bytes, len )
+yyconst char *bytes;
+int len;
+#endif
+	{
+	YY_BUFFER_STATE b;
+	char *buf;
+	yy_size_t n;
+	int i;
+
+	/* Get memory for full buffer, including space for trailing EOB's. */
+	n = len + 2;
+	buf = (char *) yy_flex_alloc( n );
+	if ( ! buf )
+		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
+
+	for ( i = 0; i < len; ++i )
+		buf[i] = bytes[i];
+
+	buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
+
+	b = yy_scan_buffer( buf, n );
+	if ( ! b )
+		YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
+
+	/* It's okay to grow etc. this buffer, and we should throw it
+	 * away when we're done.
+	 */
+	b->yy_is_our_buffer = 1;
+
+	return b;
+	}
+#endif
+
+
+#ifndef YY_NO_PUSH_STATE
+#ifdef YY_USE_PROTOS
+static void yy_push_state( int new_state )
+#else
+static void yy_push_state( new_state )
+int new_state;
+#endif
+	{
+	if ( yy_start_stack_ptr >= yy_start_stack_depth )
+		{
+		yy_size_t new_size;
+
+		yy_start_stack_depth += YY_START_STACK_INCR;
+		new_size = yy_start_stack_depth * sizeof( int );
+
+		if ( ! yy_start_stack )
+			yy_start_stack = (int *) yy_flex_alloc( new_size );
+
+		else
+			yy_start_stack = (int *) yy_flex_realloc(
+					(void *) yy_start_stack, new_size );
+
+		if ( ! yy_start_stack )
+			YY_FATAL_ERROR(
+			"out of memory expanding start-condition stack" );
+		}
+
+	yy_start_stack[yy_start_stack_ptr++] = YY_START;
+
+	BEGIN(new_state);
+	}
+#endif
+
+
+#ifndef YY_NO_POP_STATE
+static void yy_pop_state()
+	{
+	if ( --yy_start_stack_ptr < 0 )
+		YY_FATAL_ERROR( "start-condition stack underflow" );
+
+	BEGIN(yy_start_stack[yy_start_stack_ptr]);
+	}
+#endif
+
+
+#ifndef YY_NO_TOP_STATE
+static int yy_top_state()
+	{
+	return yy_start_stack[yy_start_stack_ptr - 1];
+	}
+#endif
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
+#endif
+
+#ifdef YY_USE_PROTOS
+static void yy_fatal_error( yyconst char msg[] )
+#else
+static void yy_fatal_error( msg )
+char msg[];
+#endif
+	{
+	(void) fprintf( stderr, "%s\n", msg );
+	exit( YY_EXIT_FAILURE );
+	}
+
+
+
+/* Redefine yyless() so it works in section 3 code. */
+
+#undef yyless
+#define yyless(n) \
+	do \
+		{ \
+		/* Undo effects of setting up yytext. */ \
+		yytext[yyleng] = yy_hold_char; \
+		yy_c_buf_p = yytext + n; \
+		yy_hold_char = *yy_c_buf_p; \
+		*yy_c_buf_p = '\0'; \
+		yyleng = n; \
+		} \
+	while ( 0 )
+
+
+/* Internal utility routines. */
+
+#ifndef yytext_ptr
+#ifdef YY_USE_PROTOS
+static void yy_flex_strncpy( char *s1, yyconst char *s2, int n )
+#else
+static void yy_flex_strncpy( s1, s2, n )
+char *s1;
+yyconst char *s2;
+int n;
+#endif
+	{
+	register int i;
+	for ( i = 0; i < n; ++i )
+		s1[i] = s2[i];
+	}
+#endif
+
+#ifdef YY_NEED_STRLEN
+#ifdef YY_USE_PROTOS
+static int yy_flex_strlen( yyconst char *s )
+#else
+static int yy_flex_strlen( s )
+yyconst char *s;
+#endif
+	{
+	register int n;
+	for ( n = 0; s[n]; ++n )
+		;
+
+	return n;
+	}
+#endif
+
+
+#ifdef YY_USE_PROTOS
+static void *yy_flex_alloc( yy_size_t size )
+#else
+static void *yy_flex_alloc( size )
+yy_size_t size;
+#endif
+	{
+	return (void *) malloc( size );
+	}
+
+#ifdef YY_USE_PROTOS
+static void *yy_flex_realloc( void *ptr, yy_size_t size )
+#else
+static void *yy_flex_realloc( ptr, size )
+void *ptr;
+yy_size_t size;
+#endif
+	{
+	/* The cast to (char *) in the following accommodates both
+	 * implementations that use char* generic pointers, and those
+	 * that use void* generic pointers.  It works with the latter
+	 * because both ANSI C and C++ allow castless assignment from
+	 * any pointer type to void*, and deal with argument conversions
+	 * as though doing an assignment.
+	 */
+	return (void *) realloc( (char *) ptr, size );
+	}
+
+#ifdef YY_USE_PROTOS
+static void yy_flex_free( void *ptr )
+#else
+static void yy_flex_free( ptr )
+void *ptr;
+#endif
+	{
+	free( ptr );
+	}
+
+#if YY_MAIN
+int main()
+	{
+	yylex();
+	return 0;
+	}
+#endif
+#line 319 "fortran.lex"
+
+
+fortranerror(char *s)
+{
+   if (!strcasecmp(curfile,mainfile))
+   {
+      printf("%s line %d, file %s\n",s,line_num_fortran,curfile);
+   }
+   else
+   {
+      printf("%s line %d, file %s\n",s,line_num_fortran_common,curfile);
+   }
+   /*exit(0);*/
+}
+
+int fortranwrap()
+{
+}
Index: /vendors/AGRIF/r_00/LIB/fortran.lex
===================================================================
--- /vendors/AGRIF/r_00/LIB/fortran.lex	(revision 1902)
+++ /vendors/AGRIF/r_00/LIB/fortran.lex	(revision 1902)
@@ -0,0 +1,336 @@
+/******************************************************************************/
+/*                                                                            */
+/*     CONV (converter) for Agrif (Adaptive Grid Refinement In Fortran)       */
+/*                                                                            */
+/* Copyright or   or Copr. Laurent Debreu (Laurent.Debreu@imag.fr)            */
+/*                        Cyril Mazauric (Cyril_Mazauric@yahoo.fr)            */
+/* This software is governed by the CeCILL-C license under French law and     */
+/* abiding by the rules of distribution of free software.  You can  use,      */
+/* modify and/ or redistribute the software under the terms of the CeCILL-C   */
+/* license as circulated by CEA, CNRS and INRIA at the following URL          */
+/* "http://www.cecill.info".                                                  */
+/*                                                                            */
+/* As a counterpart to the access to the source code and  rights to copy,     */
+/* modify and redistribute granted by the license, users are provided only    */
+/* with a limited warranty  and the software's author,  the holder of the     */
+/* economic rights,  and the successive licensors  have only  limited         */
+/* liability.                                                                 */
+/*                                                                            */
+/* In this respect, the user's attention is drawn to the risks associated     */
+/* with loading,  using,  modifying and/or developing or reproducing the      */
+/* software by the user in light of its specific status of free software,     */
+/* that may mean  that it is complicated to manipulate,  and  that  also      */
+/* therefore means  that it is reserved for developers  and  experienced      */
+/* professionals having in-depth computer knowledge. Users are therefore      */
+/* encouraged to load and test the software's suitability as regards their    */
+/* requirements in conditions enabling the security of their systems and/or   */
+/* data to be ensured and,  more generally, to use and operate it in the      */
+/* same conditions as regards security.                                       */
+/*                                                                            */
+/* The fact that you are presently reading this means that you have had       */
+/* knowledge of the CeCILL-C license and that you accept its terms.           */
+/******************************************************************************/
+/* version 1.7                                                                */
+/******************************************************************************/
+%x parameter
+%s character
+%x donottreat
+%s fortran77style
+%s fortran90style
+%{
+#include <math.h>
+#include <stdlib.h>
+#include <string.h>
+extern FILE * yyin;
+#define MAX_INCLUDE_DEPTH 30
+#define tabsize 6
+YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH];
+int line_num_fortran=1;
+int line_num_fortran_common=1;
+int newlinef90 = 0;
+char *tmp;
+char tmpc;
+/******************************************************************************/
+/**************PETITS PB NON PREVUS *******************************************/
+/******************************************************************************/
+/* NEXTLINF77 un ligne fortran 77 peut commencer par -      &a=b or on        */
+/*            a prevu seulement       & a=b avec l'espace entre le symbole    */
+/*            de la 7eme et le debut de la ligne de commande                  */
+/*            le ! est aussi interdit comme symbole de la 7 eme colonne       */
+/*            Normalement NEXTLINEF77 \n+[ ]{5}[^ ]                           */
+/******************************************************************************/
+#define YY_USER_ACTION \
+        {\
+           if (firstpass == 0) \
+           {\
+              strcat(curbuf,yytext); \
+              Save_Length(curbuf,38); \
+              strcpy(motparse,yytext);\
+              Save_Length(motparse,32); \
+              colnum = colnum + strlen(motparse);\
+              ECHO; \
+           }\
+           strcpy(motparse1,yytext);\
+           /*printf("yytext = %s\n",yytext);*/\
+        /*if ( firstpass == 1 ) 
+                      printf("yytext = %s %d\n",yytext,strlen(yytext));*/\
+        }
+%}
+AGRIFDEB "Agrif_debut"
+AGRIFFIN "Agrif_fin"
+REAL8 "real*8"[ \t]*"(a-h,o-z)"
+NOTTREAT Agrif_do_not_treat
+ENDNOTTREAT Agrif_end_do_not_treat
+
+NIMPORTEQUOI .
+SLASH "/"
+DSLASH "/"[ \t]*"/"
+NAME [a-zA-Z\_][a-zA-Z0-9\_]*
+DIGIT [0-9]+
+INT {DIGIT}
+EXPONENT e[-+]?{DIGIT}
+DEXPONENT d[-+]?{DIGIT}
+QEXPONENT q[-+]?{DIGIT}
+REAL (({DIGIT}\.[0-9]+|[0-9]*\.{DIGIT}){EXPONENT}?)|{DIGIT}\.{EXPONENT}
+REALDP (({DIGIT}\.[0-9]+|[0-9]*\.{DIGIT}){DEXPONENT}?)|{DIGIT}\.{DEXPONENT}
+REALQP (({DIGIT}\.[0-9]+|[0-9]*\.{DIGIT}){QEXPONENT}?)|{DIGIT}\.{QEXPONENT}
+ENDFUNCTION end[ \t]*function
+DOUBLEPRECISION double[ \t]*precision
+DOUBLECOMPLEX double[ \t]*complex
+
+COMMENTAIRESFORTRAN77 ^([Cc*](([ \t]*\n)|([^AaHhOo\n]{NIMPORTEQUOI}*\n)))
+COMMENTAIRESFORTRAN90 ^([ \t]*!{NIMPORTEQUOI}*\n)
+COMMENTAIRESFORTRAN90_2 (!{NIMPORTEQUOI}*)
+NEXTLINEF90 "&"{NIMPORTEQUOI}*[\n]*
+NEXTLINEF77 \n[ \t]{5}("&"|"+"|"$"|"*"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"."|"#")
+%%
+  if (infixed) BEGIN(fortran77style) ;
+  if (infree) BEGIN(fortran90style)  ;
+
+^C${AGRIFDEB}            return TOK_DEBUT;
+^C${AGRIFFIN}            return TOK_FIN;
+^C$OMP[ \t]*{NIMPORTEQUOI}* return TOK_OMP;
+^C$[ \t]*{NIMPORTEQUOI}* return TOK_DOLLAR;
+
+{REAL8}                 {return TOK_REAL8;}
+subroutine              {return TOK_SUBROUTINE;}
+program                 {return TOK_PROGRAM;}
+allocate                {inallocate = 1; return TOK_ALLOCATE;}
+deallocate              {inallocate = 1; return TOK_DEALLOCATE;}
+result                  {return TOK_RESULT;}
+function                {return TOK_FUNCTION;}
+end[ \t]*subroutine     {strcpy(yylval.na,yytext);return TOK_ENDSUBROUTINE;}
+end[ \t]*program        {strcpy(yylval.na,yytext);return TOK_ENDPROGRAM;}
+end[ \t]*function       {strcpy(yylval.na,yytext);return TOK_ENDFUNCTION;}
+end                     {strcpy(yylval.na,yytext);return TOK_ENDUNIT;}
+include                  return TOK_INCLUDE;
+^[ \t]*use[ ]+           {
+                            strcpy(yylval.na,yytext);
+                            tmpc = input();
+                            unput(tmpc);
+                            if ( (
+                               tmpc >= 'a' && tmpc <= 'z'
+                                  ) || (
+                               tmpc >= 'A' && tmpc <= 'Z'
+                               )  )
+                               {
+                                  return TOK_USE;
+                               }
+                               else
+                               {
+                                  return TOK_NAME;
+                               }
+                         }
+rewind                  {return TOK_REWIND;}
+implicit                 return TOK_IMPLICIT;
+none                     return TOK_NONE;
+call                     return TOK_CALL;
+.true.                   return TOK_TRUE;
+.false.                  return TOK_FALSE;
+\=\>                    {return TOK_POINT_TO;}
+\*\*                    {strcpy(yylval.na,yytext);return TOK_DASTER;}
+\.[ \t]*eqv\.            {strcpy(yylval.na,yytext);return TOK_EQV;}
+\.[ \t]*eq\.            {strcpy(yylval.na,yytext);return TOK_EQ;}
+\.[ \t]*gt\.            {strcpy(yylval.na,yytext);return TOK_GT;}
+\.[ \t]*ge\.            {strcpy(yylval.na,yytext);return TOK_GE;}
+\.[ \t]*lt\.            {strcpy(yylval.na,yytext);return TOK_LT;}
+\.[ \t]*le\.            {strcpy(yylval.na,yytext);return TOK_LE;}
+\.[ \t]*neqv\.          {strcpy(yylval.na,yytext);return TOK_NEQV;}
+\.[ \t]*ne\.            {strcpy(yylval.na,yytext);return TOK_NE;}
+\.[ \t]*not\.           {strcpy(yylval.na,yytext);return TOK_NOT;}
+\.[ \t]*or\.            {strcpy(yylval.na,yytext);return TOK_OR;}
+\.[ \t]*xor\.           {strcpy(yylval.na,yytext);return TOK_XOR;}
+\.[ \t]*and\.           {strcpy(yylval.na,yytext);return TOK_AND;}
+module                  {return TOK_MODULE;}
+do[ 0-9\t]*while           {return TOK_DOWHILE;}
+end[ \t]*module          return TOK_ENDMODULE;
+end[ \t]*do              return TOK_ENDDO;
+do                      {return TOK_PLAINDO;}
+real                    {strcpy(yylval.na,yytext);return TOK_REAL;}
+integer                 {strcpy(yylval.na,yytext);return TOK_INTEGER;}
+logical                 {strcpy(yylval.na,yytext);return TOK_LOGICAL;}
+character               {strcpy(yylval.na,yytext);return TOK_CHARACTER;}
+allocatable             {return TOK_ALLOCATABLE;}
+close                    return TOK_CLOSE;
+inquire                  return TOK_INQUIRE;
+dimension               {return TOK_DIMENSION;}
+pause                    return TOK_PAUSE;
+equivalence              return TOK_EQUIVALENCE;
+stop                     return TOK_STOP;
+where                    return TOK_WHERE;
+end[ \t]*where           return TOK_ENDWHERE;
+else[ \t]*where          return TOK_ELSEWHERE;
+complex                 {return TOK_COMPLEX;}
+^[ \t]*contains         {return TOK_CONTAINS;}
+only                    {return TOK_ONLY;}
+parameter               {return TOK_PARAMETER;}
+recursive               {return TOK_RECURSIVE;}
+common                  {return TOK_COMMON;}
+^[ \t]*global[ \t]+     {return TOK_GLOBAL;}
+external                {return TOK_EXTERNAL;}
+intent                  {return TOK_INTENT;}
+pointer                 {return TOK_POINTER;}
+optional                {return TOK_OPTIONAL;}
+save                    {return TOK_SAVE;}
+^[ \t]*type[ \t\,]+       {return TOK_TYPE;}
+^[ \t]*type[ \t]*\(     {return TOK_TYPEPAR;}
+stat                    {if (inallocate == 1) return TOK_STAT; else {strcpy(yylval.na,yytext);return TOK_NAME;}}
+end[ \t]*type           {return TOK_ENDTYPE;}
+open                     return TOK_OPEN;
+return                   return TOK_RETURN;
+exit[^(]                 return TOK_EXIT;
+print                    return TOK_PRINT;
+module[ \t]*procedure   {return TOK_PROCEDURE;}
+read                    {return TOK_READ;}
+namelist                {return TOK_NAMELIST;}
+write                   {return TOK_WRITE;}
+target                  {return TOK_TARGET;}
+public                  {return TOK_PUBLIC;}
+private                 {return TOK_PRIVATE;}
+in                      {strcpy(yylval.nac,yytext);return TOK_IN;}
+^[ \t]*data[ \t]+       {strcpy(yylval.na,yytext);return TOK_DATA;}
+continue                 return TOK_CONTINUE;
+go[ \t]*to              {return TOK_PLAINGOTO;}
+out                     {strcpy(yylval.nac,yytext);return TOK_OUT;}
+inout                   {strcpy(yylval.nac,yytext);return TOK_INOUT;}
+intrinsic               {return TOK_INTRINSIC;}
+then                    {return TOK_THEN;}
+else[ \t]*if            {return TOK_ELSEIF;}
+else                    {return TOK_ELSE;}
+end[ \t]*if             {return TOK_ENDIF;}
+if[ \t]*\(              {return TOK_LOGICALIF;}
+sum[ \t]*\(             {return TOK_SUM;}
+max[ \t]*\(             {return TOK_MAX;}
+tanh                    {return TOK_TANH;}
+maxval                  {return TOK_MAXVAL;}
+trim                    {return TOK_TRIM;}
+sqrt\(                  {return TOK_SQRT;}
+select[ \t]*case        {return TOK_SELECTCASE;}
+^[ \t]*case[ \t]*\(     {return TOK_CASE;}
+^[ \t]*case[ \t]*default       {return TOK_CASEDEFAULT;}
+end[ \t]*select         {return TOK_ENDSELECT;}
+file[ \t]*\=            {return TOK_FILE;}
+end[ \t]*\=             {return TOK_END;}
+err[ \t]*\=             {return TOK_ERR;}
+exist[ \t]*\=           {return TOK_EXIST;}
+min[ \t]*\(             {return TOK_MIN;}
+nint                    {return TOK_NINT;}
+float                   {return TOK_FLOAT;}
+exp                     {return TOK_EXP;}
+cos                     {return TOK_COS;}
+cosh                    {return TOK_COSH;}
+acos                    {return TOK_ACOS;}
+sin                     {return TOK_SIN;}
+sinh                    {return TOK_SINH;}
+asin                    {return TOK_ASIN;}
+log                     {return TOK_LOG;}
+tan                     {return TOK_TAN;}
+atan                    {return TOK_ATAN;}
+cycle                   {return TOK_CYCLE;}
+abs\(                   {return TOK_ABS;}
+mod                     {return TOK_MOD;}
+sign                    {return TOK_SIGN;}
+minloc                  {return TOK_MINLOC;}
+maxloc                  {return TOK_MAXLOC;}
+minval                  {return TOK_MINVAL;}
+interface               {return TOK_INTERFACE;}
+backspace               {return TOK_BACKSPACE;}
+end[ \t]*interface      {return TOK_ENDINTERFACE;}
+\({SLASH}               {return TOK_LEFTAB;}
+{SLASH}\)               {return TOK_RIGHTAB;}
+format[ \t]*\(({NIMPORTEQUOI}|{NEXTLINEF90}|{NEXTLINEF77})*\)  {return TOK_FORMAT;}
+{DOUBLEPRECISION}       {strcpy(yylval.na,yytext);return TOK_DOUBLEPRECISION;}
+{DOUBLECOMPLEX}         {strcpy(yylval.na,yytext);return TOK_DOUBLECOMPLEX;}
+{SLASH}                 {strcpy(yylval.na,yytext);return TOK_SLASH;}
+DSLASH                  {strcpy(yylval.na,yytext);return TOK_DSLASH;}
+(\')[^']*&{0,1}\n[ \t]*&{0,1}[^']*(\')         {strcpy(yylval.na,yytext);return TOK_CHAR_CUT;}
+(\')[^\n']*(\')         {strcpy(yylval.na,yytext);return TOK_CHAR_CONSTANT;}
+(\")[^\n"]*(\")         {strcpy(yylval.na,yytext);return TOK_CHAR_MESSAGE;}
+({NAME}{REAL})          {strcpy(yylval.na,yytext);return TOK_CHAR_INT;}
+{NAME}                  {strcpy(yylval.na,yytext);return TOK_NAME;}
+{REAL}                  {strcpy(yylval.na,yytext);return TOK_CSTREAL;}
+{REALDP}                {strcpy(yylval.na,yytext);return TOK_CSTREALDP;}
+{REALQP}                {strcpy(yylval.na,yytext);return TOK_CSTREALQP;}
+({DIGIT}\.)/[^{NAME}|"and."|"false."|"true."|"eq."|"or."|"gt."|"ge."|"lt."|"le."|"not."|"ne."] {strcpy(yylval.na,yytext);return TOK_CSTREAL;}
+{INT}                   {strcpy(yylval.na,yytext);return TOK_CSTINT;}
+\$ {}
+\'|\"                   {return TOK_QUOTE;}
+\.                      {}
+\(|\)|:|\[|\]|\+|\-|\*|\% {strcpy(yylval.na,yytext);return (int) *yytext;}
+\;                      {return TOK_SEMICOLON;}
+\,                      {return (int) *yytext;}
+\=                      {return (int) *yytext;}
+\<                      {return (int) *yytext;}
+\>                      {return (int) *yytext;}
+\n                      {colnum=0;line_num_fortran++;line_num_fortran_common++; return (int) *yytext;}
+^[ ]*$
+^(((" "|[0-9]){1,5})|([ \t]{1,5}))[ &]+ {if (newlinef90 == 0) return TOK_LABEL; else newlinef90 = 0;}
+[ ]+
+[\t]+                   {colnum=colnum-1+tabsize;}
+[ \t]+ ;
+{NEXTLINEF90}           {line_num_fortran++;line_num_fortran_common++;newlinef90=1;colnum=0;}
+{NEXTLINEF77}           {line_num_fortran++;line_num_fortran_common++;colnum=0;}
+<fortran77style>{COMMENTAIRESFORTRAN77} {
+                           convert2lower(motparse1);
+                           if ( strncasecmp(motparse1,"contains",8) == 0 )
+                           {
+                              return TOK_CONTAINS;
+                           }
+                           else
+                           {
+                              colnum=0;line_num_fortran++;line_num_fortran_common++;
+                             if ( !strcasecmp(motparse1,"C$AGRIF_DO_NOT_TREAT\n")) return TOK_DONOTTREAT;
+                             if ( !strcasecmp(motparse1,"C$AGRIF_END_DO_NOT_TREAT\n")) return TOK_ENDDONOTTREAT;
+                           }
+                         }
+^"!$AGRIF_DO_NOT_TREAT\n" BEGIN(donottreat);
+<donottreat>^"!$AGRIF_END_DO_NOT_TREAT\n" BEGIN(INITIAL);
+<donottreat>.*\n
+{COMMENTAIRESFORTRAN90}   {
+                             colnum = 0;
+                             if ( !strcasecmp(motparse1,"!$AGRIF_DO_NOT_TREAT\n")) return TOK_DONOTTREAT;
+                             if ( !strcasecmp(motparse1,"!$AGRIF_END_DO_NOT_TREAT\n")) return TOK_ENDDONOTTREAT;
+                          }
+{COMMENTAIRESFORTRAN90_2} {
+                             colnum = 0;
+                             if ( !strcasecmp(motparse1,"!$AGRIF_DO_NOT_TREAT\n")) return TOK_DONOTTREAT;
+                             if ( !strcasecmp(motparse1,"!$AGRIF_END_DO_NOT_TREAT\n")) return TOK_ENDDONOTTREAT;
+                          }
+%%
+
+fortranerror(char *s)
+{
+   if (!strcasecmp(curfile,mainfile))
+   {
+      printf("%s line %d, file %s\n",s,line_num_fortran,curfile);
+   }
+   else
+   {
+      printf("%s line %d, file %s\n",s,line_num_fortran_common,curfile);
+   }
+   /*exit(0);*/
+}
+
+int fortranwrap()
+{
+}
Index: /vendors/AGRIF/r_00/LIB/fortran.tab.c
===================================================================
--- /vendors/AGRIF/r_00/LIB/fortran.tab.c	(revision 1902)
+++ /vendors/AGRIF/r_00/LIB/fortran.tab.c	(revision 1902)
@@ -0,0 +1,9613 @@
+#ifndef lint
+static char yysccsid[] = "@(#)yaccpar	1.9 (Berkeley) 02/21/93";
+#endif
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define yyclearin (yychar=(-1))
+#define yyerrok (yyerrflag=0)
+#define YYRECOVERING (yyerrflag!=0)
+#define yyparse fortranparse
+#define yylex fortranlex
+#define yyerror fortranerror
+#define yychar fortranchar
+#define yyval fortranval
+#define yylval fortranlval
+#define yydebug fortrandebug
+#define yynerrs fortrannerrs
+#define yyerrflag fortranerrflag
+#define yyss fortranss
+#define yyssp fortranssp
+#define yyvs fortranvs
+#define yyvsp fortranvsp
+#define yylhs fortranlhs
+#define yylen fortranlen
+#define yydefred fortrandefred
+#define yydgoto fortrandgoto
+#define yysindex fortransindex
+#define yyrindex fortranrindex
+#define yygindex fortrangindex
+#define yytable fortrantable
+#define yycheck fortrancheck
+#define yyname fortranname
+#define yyrule fortranrule
+#define YYPREFIX "fortran"
+#line 36 "fortran.y"
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include "decl.h"
+extern int line_num_fortran;
+extern int line_num_fortran_common;
+char *tmp;
+char c_selectorname[LONG_C];
+char ligne[LONG_C];
+char truename[LONGNOM];
+char identcopy[LONG_C];
+int c_selectorgiven=0;
+int incom;
+listvar *curlistvar;
+typedim c_selectordim;
+listcouple *coupletmp;
+listdim *parcoursdim;
+int removeline=0;
+listvar *test;
+#line 57 "fortran.y"
+typedef union {
+       char      nac[LONG_C];
+       char      na[LONGNOM];
+       listdim  *d;
+       listvar  *l;
+       listnom  *ln;
+       listcouple  *lc;
+       listname *lnn;
+       typedim   dim1;
+       variable *v;
+       } YYSTYPE;
+#line 68 "y.tab.c"
+#define TOK_BINARY_OP 257
+#define TOK_EQV 258
+#define TOK_NEQV 259
+#define TOK_OR 260
+#define TOK_XOR 261
+#define TOK_AND 262
+#define TOK_NOT 263
+#define TOK_LT 264
+#define TOK_GT 265
+#define TOK_LE 266
+#define TOK_GE 267
+#define TOK_EQ 268
+#define TOK_NE 269
+#define TOK_UNARY_OP 270
+#define TOK_DSLASH 271
+#define TOK_SLASH 272
+#define TOK_DASTER 273
+#define TOK_SEP 274
+#define TOK_SEMICOLON 275
+#define TOK_NEXTLINE 276
+#define TOK_PARAMETER 277
+#define TOK_RESULT 278
+#define TOK_ONLY 279
+#define TOK_INCLUDE 280
+#define TOK_SUBROUTINE 281
+#define TOK_PROGRAM 282
+#define TOK_FUNCTION 283
+#define TOK_OMP 284
+#define TOK_DOLLAR 285
+#define TOK_FORMAT 286
+#define TOK_MAX 287
+#define TOK_TANH 288
+#define TOK_WHERE 289
+#define TOK_ELSEWHERE 290
+#define TOK_ENDWHERE 291
+#define TOK_MAXVAL 292
+#define TOK_TRIM 293
+#define TOK_SUM 294
+#define TOK_SQRT 295
+#define TOK_CASE 296
+#define TOK_SELECTCASE 297
+#define TOK_FILE 298
+#define TOK_END 299
+#define TOK_ERR 300
+#define TOK_DONOTTREAT 301
+#define TOK_ENDDONOTTREAT 302
+#define TOK_EXIST 303
+#define TOK_MIN 304
+#define TOK_FLOAT 305
+#define TOK_EXP 306
+#define TOK_COS 307
+#define TOK_COSH 308
+#define TOK_ACOS 309
+#define TOK_NINT 310
+#define TOK_CYCLE 311
+#define TOK_SIN 312
+#define TOK_SINH 313
+#define TOK_ASIN 314
+#define TOK_EQUIVALENCE 315
+#define TOK_BACKSPACE 316
+#define TOK_LOG 317
+#define TOK_TAN 318
+#define TOK_ATAN 319
+#define TOK_RECURSIVE 320
+#define TOK_ABS 321
+#define TOK_MOD 322
+#define TOK_SIGN 323
+#define TOK_MINLOC 324
+#define TOK_MAXLOC 325
+#define TOK_EXIT 326
+#define TOK_MINVAL 327
+#define TOK_PUBLIC 328
+#define TOK_PRIVATE 329
+#define TOK_ALLOCATABLE 330
+#define TOK_RETURN 331
+#define TOK_THEN 332
+#define TOK_ELSEIF 333
+#define TOK_ELSE 334
+#define TOK_ENDIF 335
+#define TOK_PRINT 336
+#define TOK_PLAINGOTO 337
+#define TOK_CONSTRUCTID 338
+#define TOK_LOGICALIF 339
+#define TOK_PLAINDO 340
+#define TOK_CONTAINS 341
+#define TOK_ENDDO 342
+#define TOK_MODULE 343
+#define TOK_ENDMODULE 344
+#define TOK_DOWHILE 345
+#define TOK_ALLOCATE 346
+#define TOK_OPEN 347
+#define TOK_CLOSE 348
+#define TOK_INQUIRE 349
+#define TOK_WRITE 350
+#define TOK_READ 351
+#define TOK_REWIND 352
+#define TOK_DEALLOCATE 353
+#define TOK_NULLIFY 354
+#define TOK_FIN 355
+#define TOK_DEBUT 356
+#define TOK_DIMENSION 357
+#define TOK_ENDSELECT 358
+#define TOK_EXTERNAL 359
+#define TOK_INTENT 360
+#define TOK_INTRINSIC 361
+#define TOK_NAMELIST 362
+#define TOK_CASEDEFAULT 363
+#define TOK_OPTIONAL 364
+#define TOK_POINTER 365
+#define TOK_CONTINUE 366
+#define TOK_SAVE 367
+#define TOK_TARGET 368
+#define TOK_QUOTE 369
+#define TOK_IMPLICIT 370
+#define TOK_NONE 371
+#define TOK_CALL 372
+#define TOK_STAT 373
+#define TOK_POINT_TO 374
+#define TOK_COMMON 375
+#define TOK_GLOBAL 376
+#define TOK_INTERFACE 377
+#define TOK_ENDINTERFACE 378
+#define TOK_LEFTAB 379
+#define TOK_RIGHTAB 380
+#define TOK_PAUSE 381
+#define TOK_PROCEDURE 382
+#define TOK_STOP 383
+#define TOK_NAMEEQ 384
+#define TOK_REAL8 385
+#define TOK_OUT 386
+#define TOK_INOUT 387
+#define TOK_IN 388
+#define TOK_USE 389
+#define TOK_TRUE 390
+#define TOK_FALSE 391
+#define TOK_LABEL 392
+#define TOK_TYPE 393
+#define TOK_TYPEPAR 394
+#define TOK_ENDTYPE 395
+#define TOK_REAL 396
+#define TOK_INTEGER 397
+#define TOK_LOGICAL 398
+#define TOK_DOUBLEPRECISION 399
+#define TOK_DOUBLEREAL 400
+#define TOK_ENDSUBROUTINE 401
+#define TOK_ENDFUNCTION 402
+#define TOK_ENDPROGRAM 403
+#define TOK_ENDUNIT 404
+#define TOK_CHARACTER 405
+#define TOK_CHAR_CONSTANT 406
+#define TOK_CHAR_CUT 407
+#define TOK_DATA 408
+#define TOK_CHAR_INT 409
+#define TOK_CHAR_MESSAGE 410
+#define TOK_CSTREAL 411
+#define TOK_CSTREALDP 412
+#define TOK_CSTREALQP 413
+#define TOK_SFREAL 414
+#define TOK_COMPLEX 415
+#define TOK_DOUBLECOMPLEX 416
+#define TOK_NAME 417
+#define TOK_NAME_CHAR 418
+#define TOK_PROBTYPE 419
+#define TOK_INTERPTYPE 420
+#define TOK_VARTYPE 421
+#define TOK_BC 422
+#define TOK_OP 423
+#define TOK_CSTINT 424
+#define TOK_COMMENT 425
+#define TOK_FILENAME 426
+#define YYERRCODE 256
+short fortranlhs[] = {                                        -1,
+    0,    0,   68,   68,   68,   68,   68,   71,   71,   76,
+   76,   76,   76,   76,   82,   78,   72,   72,   72,   72,
+   69,   70,   70,   73,   73,   83,   75,   84,   84,   77,
+   77,   77,   77,   77,   77,   16,   74,   80,   33,    6,
+    6,    6,   85,   85,   85,    5,    5,   38,   38,   79,
+   79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
+   79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
+   86,   86,  103,  103,  103,  103,  103,  103,  103,  103,
+  103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
+  103,  103,  103,  103,  103,  103,   98,   98,   88,   88,
+   99,   99,  105,  106,  106,  104,  104,   87,   87,    2,
+    2,  108,   89,  100,  101,  101,  101,   58,   58,   91,
+   91,   91,   91,  111,  112,  112,  110,  110,  110,   47,
+   47,   47,   47,   47,   32,   32,   97,  113,  113,  113,
+  113,  114,   96,   96,  115,    3,    3,   93,   93,   67,
+   67,   66,   66,   90,   90,   90,  117,  117,  118,  118,
+  119,   15,   15,  109,  109,    4,    4,   14,   95,  120,
+  120,   92,   92,  121,    1,    1,  107,   19,   19,   19,
+   19,  127,  126,  126,  126,  126,  128,  128,  128,  125,
+   25,   24,   24,   24,   24,   24,   24,  116,  116,   65,
+   65,  124,  124,  124,  130,  130,   34,   34,   34,   34,
+   37,   37,  129,  129,  122,  122,  122,  131,  131,  132,
+  132,  132,  132,  132,  132,  132,  132,  132,  132,  132,
+   30,   30,   30,  102,  102,   11,   11,   12,   12,   13,
+   13,   13,   13,   13,   63,   63,   62,   62,   62,   62,
+   61,   61,   61,   61,   61,   61,   61,   61,   61,   61,
+   61,   61,   61,   61,   61,   61,   61,   61,   61,   61,
+   61,   61,   61,   61,   61,   61,   40,   40,   39,   39,
+   39,   39,   39,   39,   31,   31,   64,   64,   64,   64,
+   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,
+   64,   64,   64,   64,   64,   64,   64,   59,   59,   59,
+   59,   60,   60,   41,   41,   41,  133,   49,   49,   49,
+   49,   36,   48,   42,   50,   50,   52,   52,   51,   51,
+   53,   53,   53,   53,   53,   53,   53,   28,   27,   27,
+   27,   27,   27,   27,   27,   27,   26,   26,   26,   26,
+   55,   55,   54,   57,   57,   56,   56,  123,  123,  134,
+   35,   94,   94,   94,   94,  135,   17,    9,    9,   10,
+    7,    7,    8,    8,   81,   81,   81,   81,   81,   81,
+   81,   81,   81,   81,   81,   81,   81,   81,   81,   81,
+   81,   81,   81,   81,   81,   81,   81,   20,   23,   22,
+   21,  143,  143,  143,  141,  141,  141,  146,  146,  146,
+  145,  145,   18,   18,  148,  148,  144,  147,  149,  149,
+  136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
+  136,  136,  157,  150,  150,  156,  156,  151,  151,  154,
+  159,  159,  160,  160,  158,  162,  161,  161,  163,  163,
+  155,  155,  153,  153,  153,  153,  153,  153,  171,  171,
+  172,  172,  172,  173,  173,  174,  174,  168,  168,  178,
+  178,  177,  177,  166,  166,  170,  170,  170,  170,  170,
+  179,  179,  181,  181,  181,  181,  181,  181,  181,  181,
+  165,  165,  176,  176,  167,  167,  167,  169,  180,  180,
+  182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+  182,  182,  182,  183,  183,  175,  175,  185,  185,  184,
+  184,  184,  184,  184,  186,  186,  186,   43,   43,   43,
+   44,   44,   44,   44,   44,   44,   44,   44,   45,   45,
+   45,   45,   45,   46,   46,  187,  187,  164,  152,  152,
+  137,  137,  137,  188,  188,  188,  189,  190,  190,  139,
+  139,  138,  138,  140,  140,  191,  191,  192,  192,  142,
+   29,
+};
+short fortranlen[] = {                                         2,
+    0,    2,    2,    2,    1,    3,    3,    1,    3,    2,
+    2,    3,    3,    2,    2,    2,    1,    1,    1,    1,
+    0,    0,    2,    0,    1,    0,    0,    0,    1,    0,
+    4,    2,    5,    3,    2,    1,    0,    1,    1,    0,
+    2,    3,    0,    2,    3,    1,    3,    1,    1,    2,
+    4,    2,    2,    4,    2,    1,    1,    1,    1,    1,
+    1,    1,    1,    1,    1,    4,    3,    3,    2,    3,
+    0,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+    1,    1,    1,    1,    1,    1,    1,    3,    3,    5,
+    1,    3,    3,    2,    4,    1,    3,    0,    2,    2,
+    3,    1,    1,    1,    4,    6,    4,    1,    3,    2,
+    3,    5,    3,    1,    0,    2,    1,    4,    3,    2,
+    3,    3,    3,    3,    0,    1,    2,    2,    3,    5,
+    3,    0,    2,    2,    1,    5,    5,    2,    3,    2,
+    3,    1,    3,    2,    3,    5,    1,    2,    1,    3,
+    2,    1,    3,    0,    1,    1,    3,    3,    2,    1,
+    3,    2,    2,    0,    6,    7,    0,    2,    2,    3,
+    3,    1,    0,    2,    4,    3,    3,    4,    2,    1,
+    1,    1,    1,    1,    1,    1,    1,    0,    2,    1,
+    3,    0,    2,    3,    1,    3,    2,    3,    1,    1,
+    1,    1,    0,    3,    0,    2,    4,    1,    3,    1,
+    1,    1,    2,    1,    4,    1,    1,    1,    1,    1,
+    1,    1,    1,    1,    1,    0,    3,    1,    3,    1,
+    1,    2,    2,    3,    1,    1,    1,    3,    1,    1,
+    3,    3,    4,    4,    3,    4,    4,    3,    4,    4,
+    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
+    4,    3,    4,    4,    4,    4,    1,    3,    1,    1,
+    1,    2,    2,    2,    1,    1,    2,    2,    2,    2,
+    2,    2,    2,    2,    2,    2,    2,    3,    2,    3,
+    2,    2,    2,    2,    2,    2,    2,    0,    1,    2,
+    2,    2,    1,    1,    1,    1,    0,    1,    2,    4,
+    5,    4,    3,    3,    1,    2,    1,    3,    1,    1,
+    3,    5,    4,    3,    2,    2,    1,    1,    1,    1,
+    1,    1,    1,    1,    2,    2,    1,    2,    1,    1,
+    0,    1,    5,    0,    1,    1,    1,    0,    3,    0,
+    5,    2,    4,    6,    6,    1,    1,    1,    3,    3,
+    1,    3,    3,    1,    1,    5,    5,    4,    1,    2,
+    2,    2,    2,    1,    2,    5,    1,    1,    2,    5,
+    1,    2,    3,    4,    1,    1,    1,    1,    1,    1,
+    1,    1,    3,    3,    3,    2,    2,    0,    5,    7,
+    0,    2,    1,    1,    0,    1,    1,    1,    0,    1,
+    1,    2,    1,    1,    1,    5,    5,    2,    2,    2,
+    2,    1,    0,    4,    6,    1,    3,    2,    2,    2,
+    0,    3,    0,    1,    2,    1,    1,    3,    1,    2,
+    1,    1,    2,    2,    2,    3,    2,    1,    0,    2,
+    1,    1,    1,    0,    2,    0,    1,    2,    2,    0,
+    1,    0,    2,    3,    3,    3,    3,    1,    3,    1,
+    1,    3,    1,    1,    1,    2,    4,    4,    2,    2,
+    1,    1,    1,    1,    1,    1,    1,    1,    1,    3,
+    1,    1,    3,    3,    3,    3,    2,    3,    2,    2,
+    2,    2,    3,    1,    1,    1,    3,    0,    1,    2,
+    4,    2,    2,    5,    0,    1,    2,    1,    1,    1,
+    3,    3,    3,    3,    3,    3,    1,    1,    1,    3,
+    5,    5,    5,    5,    7,    1,    3,    1,    8,    2,
+    1,    1,    3,    1,    1,    1,    4,    1,    3,    1,
+    3,    0,    4,    1,    3,    0,    1,    0,    2,    3,
+    1,
+};
+short fortrandefred[] = {                                      1,
+    0,   37,   19,   20,   17,   18,   27,    5,   21,    2,
+    0,    0,   27,   23,    3,  113,   38,    0,    0,  458,
+    0,  387,  388,    0,    0,    0,    0,    0,   29,    0,
+    0,    0,    0,    0,  391,    0,  497,    0,    0,  417,
+  397,    0,    0,    0,  418,    0,  491,  492,  496,  498,
+  495,    0,    0,    0,  145,  396,    0,    0,    0,  395,
+    0,  421,  124,    0,  446,  157,    0,    0,    0,  451,
+    0,  452,  366,    0,  182,    0,  193,  192,  197,  195,
+  398,  401,  400,  399,  190,  114,  194,  196,  338,  436,
+    0,    0,    0,    0,    0,  379,    0,    0,    0,   60,
+    0,    8,   21,   21,    0,    0,   21,    0,    0,    0,
+    0,   58,   61,   62,   63,   64,   65,    0,    0,    0,
+    0,    0,    0,    0,    0,  375,  384,    0,    0,    0,
+    0,  423,  424,  425,    0,    0,    0,    0,    0,    0,
+    0,   25,   37,    7,   36,   32,    0,    0,    0,  285,
+  286,    0,    0,    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,  340,    0,
+  347,  350,  349,  342,  343,  344,  341,    0,    0,    0,
+    0,    0,  249,    0,  247,    0,  281,    0,  316,  250,
+    0,    0,    0,  356,  430,    0,    0,    0,  101,    0,
+  428,    0,    0,  150,    0,  148,    0,  429,    0,  414,
+  413,  392,  548,    0,  550,    0,  416,  407,   35,  383,
+    0,  480,  478,    0,  457,    0,    0,    0,    0,  162,
+    0,    0,  138,    0,    0,  172,  173,  158,  143,  144,
+  170,    0,  234,  235,    0,   72,   52,    0,    0,    0,
+  112,    0,   50,    0,  174,  381,  382,  380,    0,    0,
+    0,  178,   15,    0,    0,    0,   10,   11,   39,   21,
+   37,   14,    0,    0,    0,    0,  166,  165,    0,    0,
+    0,    0,    0,    0,    0,    0,  120,    0,    0,  137,
+    0,    0,    0,    0,  159,    0,    0,  179,    0,  210,
+    0,  367,    0,  389,    0,    0,  433,  385,    0,    0,
+    0,    0,    0,    0,  422,  431,    0,    0,  440,  445,
+    0,  453,  514,  515,  494,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,  454,    0,    0,    0,    0,    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,    0,    0,    0,    0,    0,
+    0,    0,  249,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  348,    0,  352,  346,  345,  317,    0,  319,
+    0,  317,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  282,    0,    0,  393,    0,    0,    0,    0,    0,
+  109,  152,    0,    0,    0,    0,  570,    0,    0,    0,
+    0,    0,  551,  556,    0,    0,    0,    0,    0,  560,
+  564,    0,    0,   74,   75,   78,   73,   79,   76,   81,
+   82,   83,   84,   85,   80,   86,   87,   88,   89,   90,
+   91,   92,   93,   94,   95,   77,   96,    0,   97,    0,
+  139,    0,    0,    0,    0,    0,    0,  220,  222,    0,
+  224,    0,  226,  227,  228,  229,  230,  221,    0,  218,
+  216,  174,  110,    0,    0,  180,    0,    0,  203,    0,
+    0,    0,    9,   16,   12,   13,    0,    0,    0,    0,
+    0,  123,    0,    0,    0,   70,    0,    0,    0,  126,
+  121,  141,    0,    0,  161,    0,    0,  184,    0,  212,
+    0,    0,    0,    0,    0,  207,  181,    0,    0,    0,
+  412,  571,    0,  405,    0,    0,  433,  437,    0,    0,
+    0,    0,  447,  484,  485,    0,    0,    0,    0,  481,
+  499,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  468,    0,  516,    0,    0,  469,    0,    0,    0,
+    0,    0,    0,  456,   49,   48,   41,    0,   46,    0,
+    0,    0,  252,    0,    0,    0,  251,  258,  255,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  272,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  324,    0,    0,    0,    0,  248,    0,    0,
+    0,    0,    0,    0,  307,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  306,    0,    0,    0,    0,    0,    0,    0,
+    0,  394,  104,    0,  103,  102,   66,    0,    0,    0,
+    0,    0,    0,  477,  476,  479,    0,    0,    0,  378,
+    0,  163,    0,   99,    0,  171,   51,    0,  223,    0,
+    0,    0,    0,  111,    0,    0,  204,    0,  245,    0,
+  238,    0,  240,  434,   31,    0,   54,  167,    0,    0,
+  136,    0,    0,    0,    0,    0,    0,  129,    0,    0,
+    0,  160,    0,    0,    0,    0,  189,  186,  208,    0,
+    0,    0,  368,    0,    0,    0,    0,  450,  442,    0,
+  489,  490,    0,    0,    0,    0,  474,  475,    0,    0,
+    0,  526,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,   42,    0,   33,  386,    0,  253,  254,
+  257,  261,  262,  263,  264,  265,  260,  266,  267,  268,
+  269,  270,  271,  273,  274,  275,  276,  256,    0,    0,
+    0,  248,  532,    0,  536,    0,  534,    0,  259,    0,
+    0,  322,    0,  327,    0,  330,    0,    0,    0,    0,
+    0,    0,    0,    0,  153,  390,    0,    0,    0,  553,
+  376,  561,  377,  565,   98,    0,    0,    0,  147,  232,
+  233,  231,    0,  219,  217,    0,    0,  206,    0,    0,
+  237,    0,    0,  122,    0,    0,    0,    0,    0,    0,
+  115,  128,    0,  117,  140,  146,  185,    0,  187,    0,
+    0,    0,    0,    0,    0,    0,    0,  448,    0,    0,
+    0,  500,    0,  482,    0,    0,  527,  517,   47,   44,
+    0,    0,    0,    0,    0,  361,    0,    0,    0,    0,
+    0,  321,  105,    0,  557,    0,  100,    0,    0,  199,
+  225,    0,    0,  239,    0,  244,  119,    0,    0,    0,
+    0,    0,  188,  214,    0,  364,    0,  371,  370,  369,
+  426,  427,    0,  435,  488,    0,    0,    0,   45,    0,
+  541,  543,  542,  353,    0,    0,  328,    0,    0,  563,
+    0,    0,  175,    0,  116,    0,    0,    0,  524,    0,
+    0,    0,    0,  201,  176,    0,  373,  372,    0,    0,
+    0,    0,    0,    0,    0,    0,
+};
+short fortrandgoto[] = {                                       1,
+  262,  263,   91,  286,  598,  353,  927,  928,  742,  743,
+  512,  710,  711,  287,  242,  146,  313,  222,   92,   93,
+   94,   95,   96,   97,   98,  189,  190,  191,  553,  843,
+  192,  722,  280,  311,  193,  194,  542,  599,  195,  356,
+  196,  197,  385,  386,  387,  893,  723,  198,  199,  640,
+  814,  815,  816,  395,  396,  205,  211,  724,  663,  645,
+  200,  357,  713,  422,  910,  433,  100,   10,  276,   11,
+  101,   12,  143,   13,   14,  102,  103,  277,  104,  105,
+  106,  107,    0,  108,  776,  255,  215,  245,  109,  110,
+  111,  112,  113,  114,  115,  116,  117,  478,  208,  118,
+  293,  498,  479,  483,  209,  428,  503,  264,  289,  294,
+  119,  297,  120,  300,  121,  839,  122,  304,  305,  252,
+  505,  265,  953,  272,  123,  308,  124,  544,  737,  509,
+  499,  500,  641,  954,  125,  126,  441,  683,  449,  452,
+  127,  128,  202,  129,  320,  554,  130,  228,    0,  131,
+  325,  132,  133,  134,  135,  136,  274,  137,  329,  561,
+  562,  138,  563,  225,  139,  332,  140,  345,  141,  235,
+    0,    0,    0,  582,  583,  346,  587,    0,  568,  347,
+  570,  571,  349,  584,  585,  763,    0,  443,  444,    0,
+    0,    0,
+};
+short fortransindex[] = {                                      0,
+  121,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+27287, -307,    0,    0,    0,    0,    0, -289, -289,    0,
+  111,    0,    0,25188,  118, 1476,  147,  153,    0,25188,
+   91,  107, 1476,  163,    0,   27,    0,  -13,25188,    0,
+    0, -250, -178,   27,    0,  208,    0,    0,    0,    0,
+    0,  -14,  215,  229,    0,    0,  201,  201, -151,    0,
+  244,    0,    0, -237,    0,    0,  -89,   27,   27,    0,
+ -100,    0,    0, -101,    0,   27,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  284,   35,   27,   27,   27,    0,  290,  134,  280,    0,
+   79,    0,    0,    0,   -5, -307,    0,  138,   -9,  387,
+  388,    0,    0,    0,    0,    0,    0,   42, -117,  404,
+  387, -110,  225, -312,   43,    0,    0, 3999,   54,25188,
+   41,    0,    0,    0, 1476,  420,  425,   59,  437,25721,
+  437,    0,    0,    0,    0,    0,  444,25188,25188,    0,
+    0,25188,  446,  448,  450,25188,25188,25188,  455,  456,
+  466,  478,  480,  486,  487,  497,  503,  504,  509,  513,
+25188,  515,  524,  528,  532,  533,25241,    0,    0,  539,
+    0,    0,    0,    0,    0,    0,    0,25188,   18,  149,
+  542,25188,    0,  548,    0,  553,    0,  563,    0,    0,
+ 8597,  115,25188,    0,    0, 8597,  190,  570,    0,25188,
+    0, 8597,  558,    0,  222,    0,  222,    0,25188,    0,
+    0,    0,    0,25188,    0,25903,    0,    0,    0,    0,
+  190,    0,    0,25380,    0,  190,  190,  222, 3040,    0,
+  224,  190,    0,25188,  609,    0,    0,    0,    0,    0,
+    0,  610,    0,    0,  201,    0,    0,  255, 1930,  603,
+    0,  651,    0, -289,    0,    0,    0,    0,  283,25428,
+ -312,    0,    0,  665,27287, -307,    0,    0,    0,    0,
+    0,    0, -289,  648,  296,  675,    0,    0,   19,  308,
+   19,  -12,   86,  -11,  665,  308,    0,  190,   19,    0,
+  313,  665,  318,  692,    0,  -10, 3093,    0,24098,    0,
+  703,    0,  711,    0,  717,  732,    0,    0,  387,  190,
+ 8597,25188,25188,  190,    0,    0,  360, 4498,    0,    0,
+25685,    0,    0,    0,    0,25188,25188,25188,25188,  740,
+25685,  149,  553, 1423,    0,  764,  209,    0, 9398,25241,
+    0,    8,  535,25936, 3157,  236, 8597,25188,25188,25188,
+  281,26019,  461,25188,25188,25188,25188,25188,25188,25188,
+25188,25188,25188,25188,25188,26043,25188,25188,25188,25188,
+25188,25241,    0,  781,  451,  786,  789,    0, 8597,25188,
+  790,26094,    0,25188,    0,    0,    0,    0,   48,    0,
+  190,    0,24299,25188,25188,25188,25188,25188,25188,25188,
+25188,25188,25188,25188,25188,25188,25188, 2012,25188,24438,
+24486,    0,25188,25188,    0,26169,  665,  475,  147,26191,
+    0,    0,  791,  791,26213,27040,    0,  796,  553,  563,
+  793,  801,    0,    0,  798,  256,  799,  796,  797,    0,
+    0,  568,  791,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  800,    0,  571,
+    0, 8597,  577,  802,  428,   27,  665,    0,    0,  665,
+    0,  807,    0,    0,    0,    0,    0,    0,  119,    0,
+    0,    0,    0,  444,  436,    0,24627, 8597,    0,  819,
+ 2554,  665,    0,    0,    0,    0,  444,25188,  599,  296,
+  387,    0,  387,  233,25188,    0,  447,  449,  233,    0,
+    0,    0,  387,  665,    0,  692,  318,    0, 3093,    0,
+24251,  817, 8597,  824,24675,    0,    0, -225,  190,  190,
+    0,    0,  806,    0, 8597, 8597,    0,    0,  445, 8597,
+  827,  826,    0,    0,    0, 9456, 9398,  605,  100,    0,
+    0, 8597, 8597, 8597, 8597,25188,  333, 1423,  538,  553,
+ 8597,    0,  828,    0, 8597, 1423,    0, 9398, 9398, 9398,
+ 9398, 9398,  598,    0,    0,    0,    0,  614,    0,  833,
+ 1476,25188,    0,  618,  619,26276,    0,    0,    0,26327,
+26349,26446,26468,26509,26582,26604,26626,26701,26742,26764,
+26859,    0,  626,  634,  636,  638,  642,  831,  834,  835,
+26881,25241,    0,25241,25241,  644,25188,    0,  822,  840,
+24813,  553,  841,25188,    0, 8597, 2081, 2081, 2226, 2226,
+ 3157,   84,   84,   84,   84,   84,   84,   90,   90,   48,
+25188,25188,    0, 8597,   48,25188,   84,25188,   84, 8597,
+ 8597,    0,    0,  190,    0,    0,    0,  468,  551,25188,
+24813, -278,  845,    0,    0,    0, -278,  846,  190,    0,
+ 3040,    0,25188,    0,25188,    0,    0,  852,    0, -170,
+ 1930,  843,  485,    0,  665,  864,    0,25188,    0,  646,
+    0, 6917,    0,    0,    0, 8597,    0,    0,  318,  308,
+    0,  321,  550,  635,26934,  643,  870,    0,  645,  190,
+  852,    0,  878,24675,  817,  506,    0,    0,    0,  862,
+  547,  880,    0,  793,  797,25188,  665,    0,    0, 4498,
+    0,    0,24813,  631,  544,25685,    0,    0, 8597,    0,
+  656,    0, 8597, 8597, 1423, 8597,  828,  250,  598,  598,
+  598,   38,   -1,    0,   10,    0,    0, 8597,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,25563,25563,
+25563,    0,    0, 8597,    0, 8597,    0, 8597,    0,  885,
+25188,    0,24866,    0,  883,    0, 7337,  548,   84,   84,
+   48,   84,   84,  665,    0,    0,26997,  658,  867,    0,
+    0,    0,    0,    0,    0, 8597,  660,25616,    0,    0,
+    0,    0,  891,    0,    0,  665,  852,    0, 8597, 2554,
+    0,25005,  692,    0,  149,  233,  233,  233,  233,  233,
+    0,    0,  233,    0,    0,    0,    0,  817,    0,24675,
+   28,  516,  517,  894,  895,27113,  665,    0,  896,24169,
+  190,    0,  209,    0, 2501, 8597,    0,    0,    0,    0,
+  662,  879,  898,  900,  902,    0,  903,25188, 7757,24813,
+25188,    0,    0,  904,    0,  190,    0,25053, 8597,    0,
+    0,  852,    0,    0, 8597,    0,    0,  184,  184,  906,
+  491,  677,    0,    0,  573,    0,  917,    0,    0,    0,
+    0,    0,25188,    0,    0,  801,  909, 8597,    0,25188,
+    0,    0,    0,    0, 8597,25188,    0, 8177,25188,    0,
+  927,    0,    0,  911,    0,  557,  559,27166,    0,27187,
+ 8597,25188, 8597,    0,    0,25188,    0,    0,25188,25188,
+ 8597, 8597, 8597,27272,25188, 8597,
+};
+short fortranrindex[] = {                                      0,
+ 5433,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  223,23906,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,23602,
+  560,  560,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,22995,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  560, 3577,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,   25,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+18370,  579,    0,    0,    0,    0,    4,  -15,   52,    0,
+23145,    0,    0,    0,    0,23906,    0,    0,    0, 5953,
+13515,    0,    0,    0,    0,    0,    0,    0,18586,13666,
+  580,    0,   11,    0,    0,    0,    0,    0,23298,    0,
+    0,    0,    0,    0,    0,18739,18890,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,16959,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0, 1107, 2724,
+ 1277,    0,    0, 1646,    0, 2894,    0, 1816,    0,    0,
+  125,    0,    0,    0,    0,19043,    0,19194,    0,    0,
+    0,13884,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,19347,    0,    0,    0,    0,    0,
+    0,19498,    0,    0,   29,    0,    0,    0,    0,    0,
+    0,19651,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,   24,  223,23906,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,19802,    0,    0,    0,14035,
+    0,  954,  580,    0,  908,14035,    0,   30,    0,    0,
+    0,  908,    0,14191,    0,    0,    0,    0,  960,    0,
+    0,    0,19955,    0,    0,    0,    0,    0,20106,23449,
+20259,    0,    0,    0,    0,    0,    0,  987,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0, 9631,
+    0,10472,10208, 5640,    0,20410,    0,10627,    0,23753,
+    0,    0,20563,    0, 6171,    0,  673,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0, 4668,    0,17110,17263, 3263,    0,    0,
+25786,    0,    0,  972,    0,    0,    0,    0, 3433,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0, 5271,    0,    0,
+    0,    0,    0,    0,    0,    0,  674,    0,    0,    0,
+    0,    0,20714,20867,    0,    0,    0,  165,    0,  510,
+  995,  679,    0,    0, 6497,  869, 9017,  526,  995,    0,
+    0,    0,21018,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,21171,    0,    0,
+    0,  680,    0,    0,    0,    0,14404,    0,    0,  127,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,21322,    0,    0,    0,   40,    0,    0,
+    0,   24,    0,    0,    0,    0,21322,    0,    0,    0,
+  580,    0,14555,  356,    0,    0,    0,    0,  356,    0,
+    0,    0,  580,14404,    0,14711,    0,    0,    0,    0,
+ 5618, 1012,  708,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,21475,21626,    0,    0,    0,  709,
+    0, 1013,    0,    0,    0,   63,    0,    0, 1014,    0,
+    0,12251,12465,12620,12834,    0, 1014,25857,17479, 4299,
+14924,    0,21779,    0,14924, 5802,    0,    0,    0,    0,
+    0,    0,10891,    0,    0,    0,    0,    0,    0,21930,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,27019,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+ 1021, 2185,    0,    0,    0,11727, 9782,10051, 9111, 9262,
+ 6322, 6591, 6742, 7011, 7162, 7431, 7582, 4838, 5101, 3696,
+    0,    0,    0,11882, 3866,    0, 7851,    0, 8002,  164,
+  212,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+ 1025,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,17632,    0,    0,
+    0,    0,    0,    0,12989,    0,    0,  710,    0,    0,
+    0,  720,    0,    0,    0,15080,    0,    0,    0,14035,
+    0,    0,  795,    0,    0,    0,   16,    0,    0,    0,
+17632,    0,    0,    0, 1012,    0,    0,    0,    0,    0,
+    0,22083,    0,  995,  995,    0,   24,    0,    0,    0,
+    0,    0,    0,  729,    0,    0,    0,    0,13203,  698,
+    0,    0,15293,15449, 5802,15662,22234,13358,11046,11309,
+11464,12096,    0,    0,    0,    0,    0,  730,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,15818,    0,15974,    0,16130,    0,27293,
+ 1028,    0,  737,    0, 1030,    0,  738, 2355, 8271, 8422,
+ 4129, 8691, 8842,  674,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  742,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,12989,16286,    0,  744,    0,
+    0,  749,16437,    0,  467,  356,  356,  356,  356,  356,
+    0,    0,  356,    0,    0,    0,    0, 1012,    0,    0,
+    0,    0,    0,    0,    0,    0,   24,    0,    0,    0,
+    0,    0,  750,    0,25857,14924,    0,    0,    0,    0,
+    0,  590,    0,    0,    0,    0,    0,    0,  751,    0,
+  768,    0,    0,    0,    0,    0,    0,    0,17848,    0,
+    0,16286,16655,    0,  720,    0,    0,   93,  146,   31,
+   44,    0,    0,    0,18001,    0,22387,    0,    0,    0,
+    0,    0,    0,    0,    0,  777,    0,16806,    0,    0,
+    0,    0,    0,    0,  778,    0,    0,  779,    0,    0,
+    0,16655,    0,    0,    0,    0,    0,22538,    0,    0,
+  783,    0,22691,    0,    0,    0,    0,    0,    0,    0,
+  788,18217,22842, 1031,    0, 1036,
+};
+short fortrangindex[] = {                                      0,
+    0,    0,    0,  813,  303, -401,    0,  126,    0,  211,
+ -255,    0,  232,  565,  285,   -2,    0,  -23,    0,    0,
+    0,    0,    0,    0,    0,    0, -120,    7,    0,    0,
+ -328,    0,    0,  815, -135,    0, -305,  339, -152,  181,
+ -137,    0,  766,  736, -326, -686, -234, -220,    0,  718,
+  221,  438,  371, -189,    0,  -26, -371, -495,    0,    0,
+ -169,  -24,  273, -397,    0,  -98,    0,    0, 1117,    0,
+    0,    0,  -39,  -56, 1119,  865,    0,   53,    0,    0,
+    0,    0,    0,    0,    0,    0,   65,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0, 1065,  452,  458,  716,    0,    0,    0,  -30,  627,
+    0, -277,    0,    0,    0, -667,    0, -281,  620,    0,
+  654,    0,  194,    0,    0,    0,    0,  608, -649,    0,
+    0,  457,    0,    0,    0, 1032,  612, -392,  613,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0, -230,
+    0,    0,    0,    0,    0,    0,  602,    0,    0,    0,
+    0,    0,  412,  607,    0,  219,    0,    0,    0,    0,
+    0,    0,    0,    0, -408,    0,    0,    0,    0, -317,
+  414, 1033, -335, -688,    0, -522,    0, -226,    0,    0,
+    0,    0,
+};
+#define YYTABLESIZE 27711
+short fortrantable[] = {                                     201,
+  442,  206,  343,  546,  400,  212,  218,  388,  206,  450,
+  440,  592,  522,  569,  226,  440,  147,   99,  531,  342,
+  230,  536,  639,  577,  384,  234,  224,  525,  202,  539,
+  285,  593,  528,  729,   71,  391,  221,  926,  108,  530,
+  595,  383,  202,  191,  249,  250,  535,  191,  597,  595,
+  890,  595,  257,  740,  183,  630,  688,  394,  764,  127,
+  236,  191,  766,  866,  236,  243,  281,  236,  183,  266,
+  267,  268,  133,  133,  133,  133,  888,  324,  259,  589,
+  291,  447,   71,  205,  236,  869,  351,  134,  433,  299,
+  301,  433,  260,  439,  829,  526,  217,  205,  439,  338,
+  214,  322,  704,  338,  309,  321,  338,  420,  326,  421,
+  206,  310,  433,  894,  895,  715,  216,  142,  434,  240,
+  241,  238,  239,  354,  355,  417,  415,  145,  416,  288,
+    9,  417,  362,  246,  317,  131,  131,  131,   89,  453,
+  758,  589,  333,  420,  334,  421,  376,  247,  213,  420,
+  148,  421,  389,  240,  241,  425,  278,  203,  423,  282,
+  240,  241,  701,  392,  213,  402,  227,  399,  402,  761,
+  236,  673,  424,  271,  581,  270,  702,  767,  426,  913,
+  388,  762,  402,  762,  236,  430,  207,  762,  132,  132,
+  132,  741,  210,  343,  435,  721,  888,  384,  937,  436,
+  721,  314,  219,  343,  403,  433,  580,  403,  433,  389,
+  342,  343,  388,  427,  383,  840,  841,  842,  923,  482,
+  342,  403,   30,  579,  516,  859,  253,  254,  342,  628,
+  860,  698,   30,  592,  699,  735,  514,  438,  229,  739,
+  446,  592,  448,  451,  952,  508,  383,  231,  481,  755,
+  589,  333,  404,  334,  236,  404,  714,  592,  213,  524,
+  529,  504,  527,  642,  307,   89,  306,  202,  237,  404,
+  768,  769,  770,  771,  772,  150,  603,  151,  731,  602,
+  517,   99,  543,  244,  543,  248,  191,  127,  551,  240,
+  241,  589,  333,  183,  334,  398,  685,  555,  556,  295,
+  165,  165,  133,  560,  532,  803,  302,  805,  807,  590,
+  591,  572,  573,  574,  575,  134,  251,  261,  442,  486,
+  419,  607,  205,  450,  602,  389,  552,  258,  440,  440,
+  557,  269,  515,  338,  338,  606,  361,  273,  363,  610,
+  611,  612,  613,  614,  615,  616,  617,  618,  619,  620,
+  621,  874,  875,  275,  391,  418,  419,  631,  344,  350,
+  917,  418,  419,  938,  131,  887,  887,  922,  887,  212,
+  588,  590,  591,  760,  589,  333,    2,  334,  646,  647,
+  648,  649,  650,  651,  652,  653,  654,  655,  656,  657,
+  658,  659,  660,  664,  665,  667,  669,  236,  670,  671,
+  279,  202,  232,  296,    3,    4,  303,  284,  581,  233,
+  223,  439,  439,  538,  323,  596,  581,  132,  283,  592,
+  191,    5,    6,  393,  596,  433,  596,  183,  868,  343,
+  288,  290,  592,  592,  592,  592,  592,  853,  883,  897,
+  580,   71,  854,  220,  925,  108,  342,  298,  580,  847,
+  343,  343,  343,  343,  343,  830,  205,  579,  292,  312,
+  832,  440,  697,  327,  328,  579,  440,  342,  342,  342,
+  342,  342,  803,  805,  807,  330,  331,  319,   30,  588,
+  590,  591,  392,  352,  810,  358,  712,  359,  762,  360,
+  719,  877,  720,  716,  364,  365,  383,   30,  383,  383,
+  725,  609,  730,   28,  602,  366,   30,   30,  130,  130,
+  130,  130,    7,  130,  543,  675,  543,  367,  674,  368,
+  543,  590,  591,   30,   30,  369,  370,  721,  721,  721,
+  721,  721,  859,  857,  721,  858,  371,  860,  604,  605,
+  887,  754,  372,  373,  439,    8,  315,  592,  374,  439,
+  555,  759,  375,  555,  377,  438,  448,  623,  624,  625,
+  626,  627,  314,  378,  924,  397,  554,  379,  903,  554,
+  636,  380,  381,  521,  777,  523,  206,  778,  390,  417,
+  415,  398,  416,  533,  882,  589,  333,  394,  334,  401,
+  912,  859,  857,  856,  858,  581,  860,  420,  403,  421,
+  391,  855,  402,  588,  590,  591,   89,  804,  690,  806,
+  808,  689,  389,  429,   30,  431,  817,  694,  343,  819,
+  693,  934,  918,  919,  920,  921,  338,  580,  902,  338,
+  338,  338,  338,  338,  338,  342,  820,  821,  432,  717,
+  480,  822,  520,  823,  579,  757,  810,   30,  756,  338,
+  936,  338,  484,  485,  774,  827,  817,  773,  779,  780,
+  501,  602,  602,  383,  383,  383,  794,  881,  836,  602,
+  482,  487,  417,  415,  795,  416,  796,  602,  797,  602,
+  824,  602,  798,  849,  809,  602,  851,  602,  448,  850,
+  420,  403,  421,  448,  502,  834,  886,  475,  905,  885,
+  907,  900,  939,  693,  511,  773,  506,  475,  518,  543,
+  178,  179,  284,  277,  236,  581,  277,  236,  520,  552,
+  106,  876,  552,  106,  295,  560,  181,  182,  880,  534,
+  183,  184,  185,  186,  302,  537,  865,  475,  130,  475,
+  475,  475,  475,  547,  187,  135,  135,  580,  211,  449,
+  241,  211,  449,  241,  548,  391,  549,  475,  475,  475,
+  246,  135,  135,  246,  579,  135,  135,  135,  135,  486,
+  278,  550,  486,  278,  804,  806,  808,  337,  329,  135,
+  337,  329,  107,  558,  243,  107,  212,  243,  899,  242,
+  483,  335,  242,  483,  335,  404,  405,  406,  407,  408,
+  576,  409,  410,  411,  412,  413,  414,  586,  336,  418,
+  419,  336,  600,  909,  588,  590,  591,  487,  334,  331,
+  487,  334,  331,  333,  632,  712,  333,  915,  332,  634,
+  633,  332,  635,  637,  678,  681,  682,  324,  684,  686,
+  687,  695,  692,  691,  696,  543,  700,  338,  338,  338,
+  338,  338,  705,  338,  338,  338,  338,  338,  338,  707,
+  736,  338,  338,  726,  738,  727,  746,  749,  223,  750,
+  591,  765,  775,  945,  799,  817,  948,  800,  801,  811,
+  812,  818,  826,  392,  825,  831,  833,  317,  404,  405,
+  406,  407,  408,  838,  409,  410,  411,  412,  413,  414,
+  845,  846,  418,  419,  848,  314,  861,  236,  958,  525,
+  314,  314,  950,  314,  863,  960,  864,  236,  867,  871,
+  872,  961,  870,  873,  963,  896,  900,  906,  314,  314,
+  314,  911,  929,  741,  931,  932,  935,  971,  941,  940,
+  942,  972,  943,  944,  973,  974,  956,  949,  955,  959,
+  976,  236,  860,  475,  397,  475,  475,  475,  475,  475,
+  957,  475,  475,  475,  475,  475,  475,  964,  500,  475,
+  475,  966,  475,  967,  475,  925,  108,  475,  475,  475,
+  475,  475,  475,  475,  475,  475,  475,  475,  475,  475,
+  475,  475,  475,  475,  475,  215,  164,  127,  475,  475,
+  209,  475,  475,  475,  475,  475,  475,  475,  475,  475,
+  475,  475,  475,  475,  475,  475,  475,  475,  475,  475,
+  475,  475,  475,  475,  475,  475,  475,  443,  475,  354,
+  475,  475,  475,  475,  475,  562,  475,  475,  475,  475,
+  475,  475,  475,  475,  475,  475,  475,  475,  475,  475,
+  475,  475,  213,  444,  475,  475,  475,  483,  475,  475,
+  475,  325,  475,  475,  475,  317,  118,  475,  354,  475,
+  326,  544,  475,  475,  475,  475,  545,  891,  475,  475,
+  475,  914,  968,  930,  718,  510,  475,  475,  475,  475,
+  475,  475,  475,  475,  475,  475,  475,  519,  475,  475,
+  475,  475,  475,  475,  475,  475,  351,  475,  475,  475,
+  475,  889,  475,  475,  475,  594,  351,  629,  828,  643,
+  947,  475,  475,  879,  916,   15,  314,  314,  314,  314,
+  314,  144,  314,  314,  314,  314,  314,  314,  256,  513,
+  314,  314,  835,  351,  676,  965,  733,  351,  351,  351,
+  351,  351,  837,  351,  728,  703,  732,  844,  747,  318,
+  744,  878,  745,  236,  351,  748,  351,  351,  351,  884,
+    0,    0,  348,    0,    0,    0,    0,    0,  236,  236,
+    0,    0,  236,    0,  236,    0,    0,  236,  236,  236,
+  236,  236,  236,  236,    0,    0,  236,  236,  236,    0,
+    0,    0,    0,  236,  236,    0,    0,    0,  236,  236,
+    0,    0,    0,    0,    0,    0,    0,    0,  236,    0,
+    0,    0,  236,  236,    0,    0,    0,  236,    0,    0,
+    0,    0,    0,  236,    0,  236,  236,    0,  236,    0,
+  236,  236,  236,  236,  236,    0,  236,  236,  236,  236,
+  236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+  236,  236,    0,    0,  236,  236,  236,    0,  236,  236,
+  236,    0,  236,  236,  236,    0,  314,  236,    0,  236,
+    0,    0,  236,  236,  236,  236,  314,    0,  236,  236,
+  236,    0,    0,    0,    0,    0,  236,    0,    0,  236,
+  236,  236,  236,  236,  236,  236,  236,    0,  236,  236,
+  236,  236,  236,  314,    0,  236,    0,  314,  314,  314,
+  314,  314,  236,  236,  236,    0,    0,    0,    0,    0,
+    0,  236,  236,    0,  314,    0,  314,  314,  314,    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,  351,  351,  351,  351,  351,    0,
+  351,  351,  351,  351,  351,  351,    0,  351,  351,  351,
+    0,  351,    0,  351,    0,    0,  351,  351,  351,  351,
+  351,  351,  351,    0,    0,  351,  351,  351,    0,    0,
+    0,    0,  351,  351,    0,    0,    0,  351,  351,    0,
+    0,    0,    0,    0,    0,    0,    0,  351,    0,    0,
+    0,  351,  351,    0,    0,    0,  351,    0,    0,    0,
+    0,    0,  351,    0,  351,  351,    0,  351,    0,  351,
+  351,  351,  351,  351,    0,  351,  351,  351,  351,  351,
+  351,  351,  351,  351,  351,  351,  351,  351,  351,  351,
+  351,    0,  578,  351,  351,  351,    0,  351,  351,  351,
+    0,  351,  351,  351,    0,    0,  351,    0,  351,    0,
+    0,  351,  351,  351,  351,  204,  351,  351,  351,  351,
+    0,    0,    0,    0,    0,  351,    0,    0,  351,  351,
+  351,  351,  351,  351,  351,  351,    0,  351,  351,  351,
+  351,  351,    0,    0,  351,  188,    0,    0,  150,    0,
+  151,  351,  351,  351,    0,    0,    0,    0,    0,    0,
+  351,  351,  314,    0,  314,  314,  314,  314,  314,    0,
+  314,  314,  314,  314,  314,  314,    0,  314,  314,  314,
+    0,  314,    0,  314,    0,    0,  314,  314,  314,  314,
+  314,  314,  314,    0,    0,  314,  314,  314,    0,    0,
+    0,    0,  314,  314,    0,    0,    0,  314,  314,    0,
+    0,    0,    0,    0,    0,    0,    0,  314,    0,    0,
+    0,  314,  314,    0,    0,    0,  314,    0,    0,    0,
+    0,    0,  314,    0,  314,  314,    0,  314,    0,  314,
+  314,  314,  314,  314,    0,  314,  314,  314,  314,  314,
+  314,  314,  314,  314,  314,  314,  314,  314,  314,  314,
+  314,    0,    0,  314,  314,  314,    0,  314,  314,  314,
+    0,  314,  314,  314,    0,  318,  314,    0,  314,    0,
+    0,  314,  314,  314,  314,  318,  314,  314,  314,  314,
+    0,    0,    0,    0,    0,  314,    0,    0,  314,  314,
+  314,  314,  314,  314,  314,  314,    0,  314,  314,  314,
+  314,  314,  318,    0,  314,    0,  318,  318,  318,  318,
+  318,  314,  314,  314,    0,    0,    0,    0,    0,    0,
+  314,  314,    0,  318,    0,  318,  318,  318,    0,  152,
+  153,    0,    0,    0,  154,  155,  156,  157,    0,    0,
+    0,    0,    0,    0,    0,    0,  158,  159,  160,  161,
+  162,  163,  164,    0,  165,  166,  167,    0,  149,  168,
+  169,  170,    0,  171,  172,  173,  174,  175,    0,  176,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  152,  153,    0,    0,    0,  154,  155,  156,
+  157,    0,    0,    0,    0,    0,    0,    0,    0,  158,
+  159,  160,  161,  162,  163,  164,    0,  165,  166,  167,
+    0,    0,  168,  169,  170,    0,  171,  172,  173,  174,
+  175,    0,  176,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  178,  179,    0,  315,    0,    0,  180,    0,
+    0,    0,    0,    0,    0,  315,    0,    0,  181,  182,
+    0,    0,  183,  184,  185,  186,    0,    0,    0,   89,
+    0,    0,    0,    0,    0,    0,  187,    0,    0,    0,
+    0,    0,  315,    0,  177,    0,  315,  315,  315,  315,
+  315,    0,    0,    0,    0,  178,  179,    0,    0,    0,
+    0,  180,    0,  315,    0,  315,  315,  315,    0,    0,
+    0,  181,  182,    0,    0,  183,  184,  185,  186,    0,
+    0,    0,   89,    0,    0,    0,    0,    0,    0,  187,
+    0,  318,    0,  318,  318,  318,  318,  318,    0,  318,
+  318,  318,  318,  318,  318,    0,  318,  318,  318,    0,
+  318,    0,  318,    0,    0,  318,  318,  318,  318,  318,
+  318,  318,    0,    0,  318,  318,  318,    0,    0,    0,
+    0,  318,  318,    0,    0,    0,  318,  318,    0,    0,
+    0,    0,    0,    0,    0,    0,  318,    0,    0,    0,
+  318,  318,    0,    0,    0,  318,    0,    0,    0,    0,
+    0,  318,    0,  318,  318,    0,  318,    0,  318,  318,
+  318,  318,  318,    0,  318,  318,  318,  318,  318,  318,
+  318,  318,  318,  318,  318,  318,  318,  318,  318,  318,
+    0,    0,  318,  318,  318,    0,  318,  318,  318,    0,
+  318,  318,  318,    0,    0,  318,    0,  318,    0,    0,
+  318,  318,  318,  318,    0,  318,  318,  318,  318,    0,
+    0,    0,    0,    0,  318,    0,    0,  318,  318,  318,
+  318,  318,  318,  318,  318,    0,  318,  318,  318,  318,
+  318,  188,    0,  318,  150,    0,  151,    0,    0,    0,
+  318,  318,  318,    0,    0,    0,    0,    0,    0,  318,
+  318,  315,  661,  315,  315,  315,  315,  315,    0,  315,
+  315,  315,  315,  315,  315,    0,  315,  315,  315,    0,
+  315,    0,  315,    0,    0,  315,  315,  315,  315,  315,
+  315,  315,    0,    0,  315,  315,  315,    0,    0,    0,
+    0,  315,  315,    0,    0,    0,  315,  315,    0,    0,
+    0,    0,  417,  415,    0,  416,  315,    0,    0,    0,
+  315,  315,    0,    0,    0,  315,    0,    0,    0,    0,
+  420,  315,  421,  315,  315,    0,  315,    0,  315,  315,
+  315,  315,  315,    0,  315,  315,  315,  315,  315,  315,
+  315,  315,  315,  315,  315,  315,  315,  315,  315,  315,
+    0,    0,  315,  315,  315,    0,  315,  315,  315,    0,
+  315,  315,  315,    0,  323,  315,    0,  315,    0,    0,
+  315,  315,  315,  315,  323,  315,  315,  315,  315,    0,
+    0,    0,    0,    0,  315,    0,  488,  315,  315,  315,
+  315,  315,  315,  315,  315,    0,  315,  315,  315,  315,
+  315,    0,    0,  315,  323,  323,  323,  323,  323,  323,
+  315,  315,  315,    0,    0,    0,    0,    0,    0,  315,
+  315,    0,  323,    0,  323,  323,  323,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  253,  254,  489,
+    0,    0,    0,    0,    0,    0,    0,  417,  415,    0,
+  416,    0,    0,    0,  149,    0,    0,    0,    0,    0,
+    0,    0,    0,  662,    0,  420,  490,  421,  491,  492,
+  493,    0,    0,  494,  495,    0,  496,  497,  152,  153,
+    0,    0,    0,  154,  155,  156,  157,    0,    0,    0,
+    0,    0,    0,    0,    0,  158,  159,  160,  161,  162,
+  163,  164,    0,  165,  166,  167,    0,    0,  168,  169,
+  170,    0,  171,  172,  173,  174,  175,    0,  176,    0,
+  406,  407,  408,    0,  409,  410,  411,  412,  413,  414,
+    0,    0,  418,  419,  320,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,  320,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  177,  320,    0,    0,    0,  320,  320,  320,  320,  320,
+    0,  178,  179,    0,    0,    0,    0,  180,    0,    0,
+    0,    0,  320,    0,  320,  320,  320,  181,  182,    0,
+    0,  183,  184,  185,  186,    0,    0,    0,   89,    0,
+    0,    0,    0,    0,    0,  187,    0,    0,    0,    0,
+  323,    0,  323,  323,  323,  323,  323,    0,  323,  323,
+  323,  323,  323,  323,    0,  323,  323,  323,    0,  323,
+    0,  323,    0,    0,  323,  323,  323,  323,  323,  323,
+  323,    0,    0,  323,  323,  323,    0,    0,    0,    0,
+  323,  323,    0,    0,    0,  323,  323,  408,    0,  409,
+  410,  411,  412,  413,  414,  323,    0,  418,  419,  323,
+  323,    0,    0,    0,  323,    0,    0,    0,    0,    0,
+  323,    0,  323,  323,    0,  323,    0,  323,  323,  323,
+  323,  323,    0,  323,  323,  323,  323,  323,  323,  323,
+  323,  323,  323,  323,  323,  323,  323,  323,  323,    0,
+  578,  323,  323,  323,    0,  323,  323,  323,    0,  323,
+  323,  323,    0,    0,  323,    0,  323,    0,    0,  323,
+  323,  323,  323,    0,  323,  323,  323,  323,    0,    0,
+    0,    0,    0,  323,    0,    0,  323,  323,  323,  323,
+  323,  323,  323,  323,    0,  323,  323,  323,  323,  323,
+    0,    0,  323,  188,    0,  709,  150,    0,  151,  323,
+  323,  323,    0,    0,    0,    0,    0,    0,  323,  323,
+  320,  708,  320,  320,  320,  320,  320,    0,  320,  320,
+  320,  320,  320,  320,    0,  320,  320,  320,    0,  320,
+    0,  320,    0,    0,  320,  320,  320,  320,  320,  320,
+  320,    0,    0,  320,  320,  320,    0,    0,    0,    0,
+  320,  320,    0,    0,    0,  320,  320,    0,    0,    0,
+    0,    0,    0,    0,    0,  320,    0,    0,    0,  320,
+  320,    0,    0,    0,  320,    0,    0,    0,    0,    0,
+  320,    0,  320,  320,    0,  320,    0,  320,  320,  320,
+  320,  320,    0,  320,  320,  320,  320,  320,  320,  320,
+  320,  320,  320,  320,  320,  320,  320,  320,  320,    0,
+    0,  320,  320,  320,    0,  320,  320,  320,    0,  320,
+  320,  320,    0,  280,  320,    0,  320,    0,    0,  320,
+  320,  320,  320,  280,  320,  320,  320,  320,    0,    0,
+    0,    0,    0,  320,    0,    0,  320,  320,  320,  320,
+  320,  320,  320,  320,    0,  320,  320,  320,  320,  320,
+  280,    0,  320,    0,  280,  280,  280,  280,  280,  320,
+  320,  320,    0,    0,    0,    0,    0,    0,  320,  320,
+    0,  280,    0,  280,  280,  280,    0,  152,  153,    0,
+    0,    0,  154,  155,  156,  157,    0,    0,    0,    0,
+    0,    0,    0,    0,  158,  159,  160,  161,  162,  163,
+  164,    0,  165,  166,  167,    0,  149,  168,  169,  170,
+    0,  171,  172,  173,  174,  175,    0,  176,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  152,  153,    0,    0,    0,  154,  155,  156,  157,    0,
+    0,    0,    0,    0,    0,    0,    0,  158,  159,  160,
+  161,  162,  163,  164,    0,  165,  166,  167,    0,    0,
+  168,  169,  170,    0,  171,  172,  173,  174,  175,    0,
+  176,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  178,  179,    0,  279,    0,    0,  180,    0,    0,    0,
+    0,    0,    0,  279,    0,    0,  181,  182,    0,    0,
+  183,  184,  185,  186,    0,    0,    0,  892,    0,    0,
+    0,    0,    0,    0,  187,    0,    0,    0,    0,    0,
+    0,    0,  177,    0,  279,  279,  279,  279,  279,    0,
+    0,    0,    0,  178,  179,    0,    0,    0,    0,  180,
+    0,  279,    0,  279,  279,  279,    0,    0,    0,  181,
+  182,    0,    0,  183,  184,  185,  186,    0,    0,    0,
+   89,    0,    0,    0,    0,    0,    0,  187,    0,  280,
+    0,  280,  280,  280,  280,  280,    0,  280,  280,  280,
+  280,  280,  280,    0,  280,  280,  280,    0,  280,    0,
+  280,    0,    0,  280,  280,  280,  280,  280,  280,  280,
+    0,    0,  280,  280,  280,    0,    0,    0,    0,  280,
+  280,    0,    0,    0,  280,  280,    0,    0,    0,    0,
+    0,    0,    0,    0,  280,    0,    0,    0,  280,  280,
+    0,    0,    0,  280,    0,    0,    0,    0,    0,  280,
+    0,  280,  280,    0,  280,    0,  280,  280,  280,  280,
+  280,    0,  280,  280,  280,  280,  280,  280,  280,  280,
+  280,  280,  280,  280,  280,  280,  280,  280,    0,    0,
+  280,  280,  280,    0,  280,  280,  280,    0,  280,  280,
+  280,    0,    0,  280,    0,  280,    0,    0,  280,  280,
+  280,  280,    0,  280,  280,  280,  280,    0,    0,    0,
+    0,    0,  280,    0,    0,  280,  280,  280,  280,  280,
+  280,  280,  280,    0,  280,  280,  280,  280,  280,    0,
+    0,  280,  188,    0,  540,  150,    0,  151,  280,  280,
+    0,    0,    0,    0,    0,    0,    0,  280,  280,  279,
+    0,  279,  279,  279,  279,  279,    0,  279,  279,  279,
+  279,  279,  279,    0,  279,  279,  279,    0,  279,    0,
+  279,    0,    0,  279,  279,  279,  279,  279,  279,  279,
+    0,    0,  279,  279,  279,    0,    0,    0,    0,  279,
+  279,    0,    0,    0,  279,  279,    0,    0,  417,  415,
+    0,  416,    0,    0,  279,    0,    0,    0,  279,  279,
+    0,    0,    0,  279,    0,    0,  420,    0,  421,  279,
+    0,  279,  279,    0,  279,    0,  279,  279,  279,  279,
+  279,    0,  279,  279,  279,  279,  279,  279,  279,  279,
+  279,  279,  279,  279,  279,  279,  279,  279,    0,    0,
+  279,  279,  279,    0,  279,  279,  279,    0,  279,  279,
+  279,    0,  538,  279,    0,  279,    0,    0,  279,  279,
+  279,  279,  538,  279,  279,  279,  279,    0,    0,    0,
+    0,    0,  279,    0,    0,  279,  279,  279,  279,  279,
+  279,  279,  279,    0,  279,  279,  279,  279,  279,    0,
+    0,  279,    0,  250,  250,  250,  538,  250,  279,  279,
+  279,    0,    0,    0,    0,    0,    0,  279,  279,    0,
+    0,    0,  250,  250,  250,    0,    0,  454,    0,    0,
+    0,  455,  456,  457,  458,    0,    0,    0,    0,    0,
+    0,    0,    0,  459,  460,  461,  462,  463,  464,  465,
+    0,  466,  467,  468,    0,  149,  469,  470,  471,    0,
+    0,  472,  473,  474,  475,    0,  476,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  152,
+  153,    0,    0,    0,  154,  155,  156,  157,    0,    0,
+    0,    0,    0,    0,    0,    0,  158,  159,  160,  161,
+  162,  163,  164,    0,  165,  166,  167,    0,    0,  168,
+  169,  170,    0,  171,  172,  173,  174,  175,    0,  176,
+  409,  410,  411,  412,  413,  414,    0,    0,  418,  419,
+    0,    0,  283,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  283,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  477,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  283,
+    0,  177,    0,  283,  283,  283,  283,  283,    0,    0,
+    0,    0,  178,  179,    0,    0,    0,    0,  180,    0,
+  283,    0,    0,  283,    0,    0,    0,    0,  181,  182,
+    0,    0,  183,  184,  185,  186,    0,    0,    0,  541,
+    0,    0,    0,    0,    0,    0,  187,    0,  538,    0,
+  250,  250,  250,  250,  250,    0,  250,  250,  250,  250,
+  250,  250,    0,    0,  250,  250,    0,  538,    0,  538,
+    0,    0,  538,  538,  538,  538,  538,  538,  538,    0,
+    0,  538,  538,  538,    0,    0,    0,    0,  538,  538,
+    0,    0,    0,  538,  538,    0,    0,    0,    0,    0,
+    0,    0,    0,  538,    0,    0,    0,  538,  538,    0,
+    0,    0,  538,    0,    0,    0,    0,    0,  538,    0,
+  538,  538,    0,  538,    0,  538,  538,  538,  538,  538,
+    0,  538,  538,  538,  538,  538,  538,  538,  538,  538,
+  538,  538,  538,  538,  538,  538,  538,    0,    0,  538,
+  538,  538,    0,  538,  538,  538,    0,  538,  538,  538,
+    0,    0,  538,    0,  538,    0,    0,  538,  538,  538,
+  538,    0,  538,  538,  538,  538,    0,    0,    0,    0,
+    0,  538,    0,    0,  538,  538,  538,  538,  538,  538,
+  538,  538,    0,  538,  538,  538,  538,  538,    0,    0,
+  538,    0,    0,    0,    0,    0,    0,  538,  538,  538,
+    0,    0,    0,    0,    0,    0,  538,  538,  283,    0,
+  283,  283,  283,  283,  283,  289,  283,  283,  283,  283,
+  283,  283,    0,  283,  283,  289,    0,  283,    0,  283,
+    0,    0,  283,  283,  283,  283,  283,  283,  283,    0,
+    0,  283,  283,  283,    0,    0,    0,    0,  283,  283,
+    0,    0,  289,  283,  283,    0,  289,  289,  289,  289,
+  289,    0,    0,  283,    0,    0,    0,  283,  283,    0,
+    0,    0,  283,  289,    0,    0,  289,    0,  283,    0,
+  283,  283,    0,  283,    0,  283,  283,  283,  283,  283,
+    0,  283,  283,  283,  283,  283,  283,  283,  283,  283,
+  283,  283,  283,  283,  283,  283,  283,    0,    0,  283,
+  283,  283,    0,  283,  283,  283,    0,  283,  283,  283,
+    0,    0,  283,    0,  283,    0,    0,  283,  283,  283,
+  283,    0,  283,  283,  283,  283,    0,    0,    0,    0,
+    0,  283,    0,    0,  283,  283,  283,  283,  283,  283,
+  283,  283,    0,  283,  283,  283,  283,  283,    0,    0,
+  283,    0,    0,    0,    0,    0,    0,  283,  283,  283,
+    0,    0,    0,    0,    0,    0,  283,  283,    0,    0,
+    0,    0,    0,    0,  108,  290,    0,    0,  108,  108,
+  108,  108,    0,    0,    0,  290,    0,    0,    0,    0,
+  108,  108,  108,  108,  108,  108,  108,    0,  108,  108,
+  108,    0,    0,  108,  108,  108,    0,    0,  108,  108,
+  108,  108,  290,  108,    0,    0,  290,  290,  290,  290,
+  290,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  290,    0,    0,  290,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  289,    0,  289,  289,  289,  289,  289,    0,  289,
+  289,  289,  289,  289,  289,    0,  289,  289,    0,    0,
+  289,    0,  289,    0,    0,  289,  289,  289,  289,  289,
+  289,  289,    0,    0,  289,  289,  289,    0,    0,    0,
+    0,  289,  289,  108,    0,    0,  289,  289,    0,    0,
+    0,    0,    0,    0,    0,    0,  289,    0,    0,    0,
+  289,  289,    0,    0,    0,  289,    0,    0,    0,    0,
+    0,  289,    0,  289,  289,    0,  289,    0,  289,  289,
+  289,  289,  289,    0,  289,  289,  289,  289,  289,  289,
+  289,  289,  289,  289,  289,  289,  289,  289,  289,  289,
+    0,    0,  289,  289,  289,    0,  289,  289,  289,    0,
+  289,  289,  289,    0,    0,  289,    0,  289,    0,    0,
+  289,  289,  289,  289,    0,  289,  289,  289,  289,    0,
+    0,    0,    0,    0,  289,    0,    0,  289,  289,  289,
+  289,  289,  289,  289,  289,    0,  289,  289,  289,  289,
+  289,    0,    0,  289,    0,    0,    0,    0,    0,    0,
+  289,  289,  289,    0,    0,    0,    0,    0,    0,  289,
+  289,  290,    0,  290,  290,  290,  290,  290,  311,  290,
+  290,  290,  290,  290,  290,    0,  290,  290,  311,    0,
+  290,    0,  290,    0,    0,  290,  290,  290,  290,  290,
+  290,  290,    0,    0,  290,  290,  290,    0,    0,    0,
+    0,  290,  290,    0,    0,  311,  290,  290,    0,  311,
+  311,  311,  311,  311,    0,    0,  290,    0,    0,    0,
+  290,  290,    0,    0,    0,  290,  311,    0,    0,  311,
+    0,  290,    0,  290,  290,    0,  290,    0,  290,  290,
+  290,  290,  290,    0,  290,  290,  290,  290,  290,  290,
+  290,  290,  290,  290,  290,  290,  290,  290,  290,  290,
+    0,    0,  290,  290,  290,    0,  290,  290,  290,    0,
+  290,  290,  290,    0,    0,  290,    0,  290,    0,    0,
+  290,  290,  290,  290,    0,  290,  290,  290,  290,    0,
+    0,    0,    0,    0,  290,    0,    0,  290,  290,  290,
+  290,  290,  290,  290,  290,    0,  290,  290,  290,  290,
+  290,    0,    0,  290,    0,    0,    0,    0,    0,    0,
+  290,  290,  290,    0,   20,    0,    0,    0,    0,  290,
+  290,    0,    0,    0,    0,    0,    0,    0,  519,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  519,   26,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,   30,    0,    0,    0,    0,   33,
+  314,    0,    0,    0,   37,   38,    0,    0,    0,  519,
+  519,  519,  519,  519,  315,   47,   48,   49,   50,   51,
+   52,  316,    0,    0,    0,    0,    0,    0,  519,  519,
+  519,    0,    0,    0,   62,    0,    0,    0,    0,    0,
+   65,    0,    0,    0,    0,    0,    0,    0,    0,   70,
+    0,   72,    0,    0,  311,    0,  311,  311,  311,  311,
+  311,    0,  311,  311,  311,  311,  311,  311,    0,  311,
+  311,    0,    0,  311,    0,  311,    0,    0,  311,  311,
+  311,  311,  311,  311,  311,   89,    0,  311,  311,  311,
+    0,    0,   90,    0,  311,  311,    0,    0,    0,  311,
+  311,    0,    0,    0,    0,    0,    0,    0,    0,  311,
+    0,    0,    0,  311,  311,    0,    0,    0,  311,    0,
+    0,    0,    0,    0,  311,    0,  311,  311,    0,  311,
+    0,  311,  311,  311,  311,  311,    0,  311,  311,  311,
+  311,  311,  311,  311,  311,  311,  311,  311,  311,  311,
+  311,  311,  311,    0,    0,  311,  311,  311,    0,  311,
+  311,  311,    0,  311,  311,  311,    0,    0,  311,    0,
+  311,    0,    0,  311,  311,  311,  311,    0,  311,  311,
+  311,  311,    0,    0,    0,    0,    0,  311,    0,    0,
+  311,  311,  311,  311,  311,  311,  311,  311,    0,  311,
+  311,  311,  311,  311,    0,    0,  311,  188,    0,  559,
+  150,    0,  151,  311,  311,  311,    0,    0,    0,    0,
+    0,    0,  311,  311,  519,    0,  519,  519,  519,  519,
+  519,    0,  519,  519,  519,  519,  519,  519,    0,    0,
+  519,  519,    0,  519,    0,  519,    0,    0,  519,  519,
+  519,  519,  519,  519,  519,    0,    0,  519,  519,  519,
+    0,    0,    0,    0,  519,  519,    0,    0,    0,  519,
+  519,    0,    0,    0,    0,    0,    0,    0,    0,  519,
+    0,    0,    0,  519,  519,    0,    0,    0,  519,    0,
+    0,    0,    0,    0,  519,    0,  519,  519,    0,  519,
+    0,  519,  519,  519,  519,  519,    0,  519,  519,  519,
+  519,  519,  519,  519,  519,  519,  519,  519,  519,  519,
+  519,  519,  519,    0,    0,  519,  519,  519,    0,  519,
+  519,  519,    0,  519,  519,  519,    0,  528,  519,    0,
+  519,    0,    0,  519,  519,  519,  519,  528,    0,  519,
+  519,  519,    0,    0,    0,    0,    0,  519,    0,    0,
+  519,  519,  519,  519,  519,  519,  519,  519,    0,  519,
+  519,  519,  519,  519,    0,    0,  519,    0,    0,  247,
+  247,    0,  247,  519,  519,  519,    0,    0,    0,    0,
+    0,    0,  519,  519,    0,    0,    0,  247,  247,  247,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  149,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,  152,  153,    0,    0,    0,  154,
+  155,  156,  157,    0,    0,    0,    0,    0,    0,    0,
+    0,  158,  159,  160,  161,  162,  163,  164,    0,  165,
+  166,  167,    0,    0,  168,  169,  170,    0,  171,  172,
+  173,  174,  175,    0,  176,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  287,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  287,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,  287,    0,  177,    0,  287,    0,
+  287,  287,  287,    0,    0,    0,    0,  178,  179,    0,
+    0,    0,    0,  180,    0,  287,    0,    0,  287,    0,
+    0,    0,    0,  181,  182,    0,    0,  183,  184,  185,
+  186,    0,    0,    0,   89,    0,    0,    0,    0,    0,
+    0,  187,    0,  528,    0,  247,  247,  247,  247,  247,
+    0,  247,  247,  247,  247,  247,  247,    0,    0,  247,
+  247,    0,  528,    0,  528,    0,    0,  528,  528,  528,
+  528,  528,  528,  528,    0,    0,  528,  528,  528,    0,
+    0,    0,    0,  528,  528,    0,    0,    0,  528,  528,
+    0,    0,    0,    0,    0,    0,    0,    0,  528,    0,
+    0,    0,  528,  528,    0,    0,    0,  528,    0,    0,
+    0,    0,    0,  528,    0,  528,  528,    0,  528,    0,
+  528,  528,  528,  528,  528,    0,  528,  528,  528,  528,
+  528,  528,  528,  528,  528,  528,  528,  528,  528,  528,
+  528,  528,    0,    0,  528,  528,  528,    0,  528,  528,
+  528,    0,  528,  528,  528,    0,    0,  528,    0,  528,
+    0,    0,  528,  528,  528,  528,    0,  528,  528,  528,
+  528,    0,    0,    0,    0,    0,  528,    0,    0,  528,
+  528,  528,  528,  528,  528,  528,  528,    0,  528,  528,
+  528,  528,  528,    0,    0,  528,    0,    0,    0,    0,
+    0,    0,  528,  528,  528,    0,    0,    0,    0,    0,
+    0,  528,  528,  287,    0,  287,  287,  287,  287,  287,
+  288,  287,  287,  287,  287,  287,  287,    0,  287,    0,
+  288,    0,  287,    0,  287,    0,    0,  287,  287,  287,
+  287,  287,  287,  287,    0,    0,  287,  287,  287,    0,
+    0,    0,    0,  287,  287,    0,    0,  288,  287,  287,
+    0,  288,    0,  288,  288,  288,    0,    0,  287,    0,
+    0,    0,  287,  287,    0,    0,    0,  287,  288,    0,
+    0,  288,    0,  287,    0,  287,  287,    0,  287,    0,
+  287,  287,  287,  287,  287,    0,  287,  287,  287,  287,
+  287,  287,  287,  287,  287,  287,  287,  287,  287,  287,
+  287,  287,    0,    0,  287,  287,  287,    0,  287,  287,
+  287,    0,  287,  287,  287,    0,    0,  287,    0,  287,
+    0,    0,  287,  287,  287,  287,    0,  287,  287,  287,
+  287,    0,    0,    0,    0,    0,  287,    0,    0,  287,
+  287,  287,  287,  287,  287,  287,  287,    0,  287,  287,
+  287,  287,  287,    0,    0,  287,    0,    0,    0,    0,
+    0,    0,  287,  287,  287,    0,    0,    0,    0,    0,
+    0,  287,  287,    0,    0,    0,    0,    0,    0,    0,
+  308,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  308,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  308,    0,    0,
+    0,  308,  308,    0,  308,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  308,    0,
+  308,    0,  308,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  288,    0,  288,  288,
+  288,  288,  288,    0,  288,  288,  288,  288,  288,  288,
+    0,  288,    0,    0,    0,  288,    0,  288,    0,    0,
+  288,  288,  288,  288,  288,  288,  288,    0,    0,  288,
+  288,  288,    0,    0,    0,    0,  288,  288,    0,    0,
+    0,  288,  288,    0,    0,    0,    0,    0,    0,    0,
+    0,  288,    0,    0,    0,  288,  288,    0,    0,    0,
+  288,    0,    0,    0,    0,    0,  288,    0,  288,  288,
+    0,  288,   22,  288,  288,  288,  288,  288,    0,  288,
+  288,  288,  288,  288,  288,  288,  288,  288,  288,  288,
+  288,  288,  288,  288,  288,    0,    0,  288,  288,  288,
+    0,  288,  288,  288,    0,  288,  288,  288,    0,    0,
+  288,    0,  288,    0,    0,  288,  288,  288,  288,    0,
+  288,  288,  288,  288,    0,    0,    0,    0,    0,  288,
+    0,    0,  288,  288,  288,  288,  288,  288,  288,  288,
+    0,  288,  288,  288,  288,  288,    0,    0,  288,    0,
+    0,    0,    0,    0,    0,  288,  288,  288,    0,    0,
+    0,    0,    0,    0,  288,  288,  308,    0,  308,  308,
+  308,  308,  308,    0,  308,  308,  308,  308,  308,  308,
+    0,  308,    0,  308,    0,  308,    0,  308,    0,    0,
+  308,  308,  308,  308,  308,  308,  308,    0,    0,  308,
+  308,  308,    0,    0,    0,    0,  308,  308,    0,    0,
+    0,  308,  308,    0,    0,    0,    0,    0,    0,    0,
+    0,  308,    0,    0,    0,  308,  308,    0,    0,    0,
+  308,    0,    0,    0,    0,    0,  308,    0,  308,  308,
+    0,  308,    0,  308,  308,  308,  308,  308,    0,  308,
+  308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+  308,  308,  308,  308,  308,    0,    0,  308,  308,  308,
+    0,  308,  308,  308,    0,  308,  308,  308,    0,  466,
+  308,    0,  308,    0,    0,  308,  308,  308,  308,  466,
+  308,  308,  308,  308,  338,    0,    0,    0,  338,  308,
+    0,  338,  308,  308,  308,  308,    0,  308,  308,  308,
+    0,  308,  308,  308,  308,  308,    0,  338,  308,  338,
+    0,  518,  518,  518,  518,  308,  308,    0,    0,    0,
+    0,    0,    0,    0,    0,  308,    0,    0,    0,  518,
+  518,  518,    0,    0,    0,    0,    0,   22,    0,   22,
+    0,    0,   22,   22,   22,   22,    0,    0,   22,    0,
+    0,   22,   22,   22,    0,    0,    0,    0,   22,   22,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,   22,    0,    0,    0,   22,   22,    0,
+    0,    0,   22,    0,    0,    0,    0,    0,   22,    0,
+   22,   22,    0,   22,    0,   22,   22,   22,   22,   22,
+    0,   22,   22,   22,   22,   22,   22,   22,   22,   22,
+   22,   22,   22,   22,   22,   22,   22,    0,    0,   22,
+   22,   22,    0,   22,   22,   22,    0,   22,   22,   22,
+    0,  518,   22,    0,   22,    0,    0,   22,   22,   22,
+   22,  518,    0,   22,   22,   22,    0,    0,    0,    0,
+    0,   22,    0,    0,    0,   22,   22,   22,   22,   22,
+   22,   22,    0,   22,   22,   22,   22,   22,    0,    0,
+   22,    0,    0,  518,  518,  518,  518,   22,   22,   22,
+    0,    0,    0,    0,    0,    0,   22,    0,    0,    0,
+    0,  518,  518,  518,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  338,  338,  338,  338,  338,
+    0,  338,  338,  338,  338,  338,  338,    0,    0,  338,
+  338,    0,    0,    0,    0,  466,    0,  518,  518,  518,
+  518,  518,    0,  518,  518,  518,  518,  518,  518,    0,
+    0,  518,  518,    0,  466,    0,  466,    0,    0,  466,
+  466,  466,  466,  466,  466,  466,    0,    0,  466,  466,
+  466,    0,    0,    0,    0,  466,  466,    0,    0,    0,
+  466,  466,    0,    0,    0,    0,    0,    0,    0,    0,
+  466,    0,   56,    0,  466,  466,    0,    0,    0,  466,
+    0,    0,   56,    0,    0,  466,    0,  466,  466,    0,
+  466,    0,  466,  466,  466,  466,  466,    0,  466,  466,
+  466,  466,  466,  466,  466,  466,  466,  466,  466,  466,
+  466,  466,  466,  466,    0,    0,  466,  466,  466,    0,
+  466,  466,  466,    0,  466,  466,  466,    0,    0,  466,
+    0,  466,    0,    0,  466,  466,  466,  466,    0,    0,
+  466,  466,  466,    0,    0,    0,    0,    0,  466,    0,
+    0,  466,  466,  466,  466,    0,  466,  466,  466,    0,
+  466,  466,  466,  466,  466,    0,    0,  466,    0,    0,
+    0,    0,    0,    0,  466,  466,    0,  518,    0,  518,
+  518,  518,  518,  518,  466,  518,  518,  518,  518,  518,
+  518,    0,    0,  518,  518,    0,  518,    0,  518,    0,
+    0,  518,  518,  518,  518,  518,  518,  518,    0,    0,
+  518,  518,  518,    0,    0,    0,    0,  518,  518,    0,
+    0,    0,  518,  518,    0,    0,    0,    0,    0,    0,
+    0,    0,  518,    0,    0,    0,  518,  518,    0,    0,
+    0,  518,    0,    0,    0,    0,    0,  518,    0,  518,
+  518,    0,  518,    0,  518,  518,  518,  518,  518,    0,
+  518,  518,  518,  518,  518,  518,  518,  518,  518,  518,
+  518,  518,  518,  518,  518,  518,    0,    0,  518,  518,
+  518,    0,  518,  518,  518,    0,  518,  518,  518,    0,
+  284,  518,    0,  518,    0,    0,  518,  518,  518,  518,
+  284,    0,  518,  518,  518,    0,    0,    0,    0,    0,
+  518,    0,    0,  518,  518,  518,  518,    0,  518,  518,
+  518,    0,  518,  518,  518,  518,  518,  284,   56,  518,
+    0,  284,    0,    0,  284,    0,  518,  518,    0,    0,
+    0,    0,    0,  164,  164,    0,  518,   56,  284,   56,
+    0,  284,   56,   56,   56,   56,   56,   56,   56,    0,
+    0,   56,   56,   56,    0,    0,    0,    0,   56,   56,
+    0,    0,    0,   56,   56,    0,    0,    0,    0,    0,
+    0,    0,    0,   56,    0,    0,    0,   56,   56,    0,
+    0,    0,   56,    0,    0,    0,    0,    0,   56,    0,
+   56,   56,    0,   56,    0,   56,   56,   56,   56,   56,
+    0,   56,   56,   56,   56,   56,   56,   56,   56,   56,
+   56,   56,   56,   56,   56,   56,   56,    0,    0,   56,
+   56,   56,    0,   56,   56,   56,    0,   56,   56,   56,
+    0,  305,   56,    0,   56,    0,    0,   56,   56,   56,
+   56,  305,    0,   56,   56,   56,    0,    0,    0,    0,
+    0,   56,    0,    0,   56,   56,   56,   56,   56,   56,
+   56,   56,    0,   56,   56,   56,   56,   56,  305,    0,
+   56,    0,  305,    0,    0,  305,    0,   56,   56,   56,
+    0,    0,    0,    0,    0,    0,   56,   56,    0,  305,
+    0,    0,  305,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  284,    0,  284,  284,
+  284,  284,  284,    0,    0,    0,    0,    0,    0,    0,
+    0,  284,    0,    0,    0,  284,    0,  284,    0,    0,
+  284,  284,  284,  284,  284,  284,  284,    0,    0,  284,
+  284,  284,    0,    0,    0,    0,  284,  284,    0,    0,
+    0,  284,  284,    0,    0,    0,    0,    0,    0,    0,
+    0,  284,    0,    0,    0,  284,  284,    0,    0,    0,
+  284,    0,    0,    0,    0,    0,  284,    0,  284,  284,
+    0,  284,    0,  284,  284,  284,  284,  284,    0,  284,
+  284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
+  284,  284,  284,  284,  284,    0,    0,  284,  284,  284,
+    0,  284,  284,  284,    0,  284,  284,  284,  341,  341,
+  284,  341,  284,    0,    0,  284,  284,  284,  284,    0,
+  284,  284,  284,  284,    0,    0,  341,  341,  341,  284,
+    0,    0,  284,  284,  284,  284,  284,  284,  284,  284,
+    0,  284,  284,  284,  284,  284,    0,  305,  284,  305,
+  305,  305,  305,  305,    0,  284,  284,  284,    0,    0,
+  295,    0,  305,    0,  284,  284,  305,    0,  305,    0,
+  295,  305,  305,  305,  305,  305,  305,  305,    0,    0,
+  305,  305,  305,    0,    0,    0,    0,  305,  305,    0,
+    0,    0,  305,  305,    0,    0,    0,  295,    0,    0,
+    0,  295,  305,    0,  295,    0,  305,  305,    0,    0,
+    0,  305,    0,    0,    0,    0,    0,  305,  295,  305,
+  305,  295,  305,    0,  305,  305,  305,  305,  305,    0,
+  305,  305,  305,  305,  305,  305,  305,  305,  305,  305,
+  305,  305,  305,  305,  305,  305,    0,    0,  305,  305,
+  305,    0,  305,  305,  305,    0,  305,  305,  305,    0,
+    0,  305,    0,  305,    0,    0,  305,  305,  305,  305,
+    0,  305,  305,  305,  305,    0,    0,    0,    0,    0,
+  305,    0,    0,  305,  305,  305,  305,  305,  305,  305,
+  305,    0,  305,  305,  305,  305,  305,    0,    0,  305,
+    0,    0,    0,    0,    0,    0,  305,  305,  305,    0,
+    0,  293,    0,    0,    0,  305,  305,    0,    0,    0,
+    0,  293,    0,    0,  341,  341,  341,  341,  341,    0,
+  341,  341,  341,  341,  341,  341,    0,    0,  341,  341,
+    0,    0,    0,    0,    0,    0,    0,    0,  293,    0,
+    0,    0,  293,    0,    0,  293,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  293,
+    0,    0,  293,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  295,    0,  295,  295,
+  295,  295,  295,    0,    0,    0,    0,    0,    0,    0,
+    0,  295,    0,    0,    0,  295,    0,  295,    0,    0,
+  295,  295,  295,  295,  295,  295,  295,    0,    0,  295,
+  295,  295,    0,    0,    0,    0,  295,  295,    0,    0,
+    0,  295,  295,    0,    0,    0,    0,    0,    0,    0,
+    0,  295,    0,    0,    0,  295,  295,    0,    0,    0,
+  295,    0,    0,  341,    0,    0,  295,    0,  295,  295,
+    0,  295,    0,  295,  295,  295,  295,  295,    0,  295,
+  295,  295,  295,  295,  295,  295,  295,  295,  295,  295,
+  295,  295,  295,  295,  295,    0,    0,  295,  295,  295,
+    0,  295,  295,  295,    0,  295,  295,  295,  417,  415,
+  295,  416,  295,    0,    0,  295,  295,  295,  295,    0,
+  295,  295,  295,  295,  852,    0,  420,  403,  421,  295,
+    0,    0,  295,  295,  295,  295,  295,  295,  295,  295,
+    0,  295,  295,  295,  295,  295,    0,  293,  295,  293,
+  293,  293,  293,  293,    0,  295,  295,  295,    0,    0,
+  299,    0,  293,    0,  295,  295,  293,    0,  293,    0,
+  299,  293,  293,  293,  293,  293,  293,  293,    0,    0,
+  293,  293,  293,    0,    0,    0,    0,  293,  293,    0,
+    0,    0,  293,  293,    0,    0,    0,  299,    0,    0,
+    0,  299,  293,    0,  299,    0,  293,  293,    0,    0,
+    0,  293,    0,    0,    0,    0,    0,  293,  299,  293,
+  293,  299,  293,    0,  293,  293,  293,  293,  293,    0,
+  293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
+  293,  293,  293,  293,  293,  293,    0,    0,  293,  293,
+  293,    0,  293,  293,  293,    0,  293,  293,  293,    0,
+    0,  293,    0,  293,    0,    0,  293,  293,  293,  293,
+    0,  293,  293,  293,  293,    0,    0,    0,    0,    0,
+  293,    0,    0,  293,  293,  293,  293,  293,  293,  293,
+  293,    0,  293,  293,  293,  293,  293,    0,    0,  293,
+    0,    0,    0,    0,    0,    0,  293,  293,  293,    0,
+    0,  297,    0,    0,    0,  293,  293,    0,    0,    0,
+    0,  297,    0,    0,  404,  405,  406,  407,  408,    0,
+  409,  410,  411,  412,  413,  414,    0,    0,  418,  419,
+    0,    0,    0,    0,    0,    0,    0,    0,  297,    0,
+    0,    0,  297,    0,    0,  297,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  297,
+    0,    0,  297,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  299,    0,  299,  299,
+  299,  299,  299,    0,    0,    0,    0,    0,    0,    0,
+    0,  299,    0,    0,    0,  299,    0,  299,    0,    0,
+  299,  299,  299,  299,  299,  299,  299,    0,    0,  299,
+  299,  299,    0,    0,    0,    0,  299,  299,    0,    0,
+    0,  299,  299,    0,    0,    0,    0,    0,    0,    0,
+    0,  299,    0,    0,    0,  299,  299,    0,    0,    0,
+  299,    0,    0,    0,    0,    0,  299,    0,  299,  299,
+    0,  299,    0,  299,  299,  299,  299,  299,    0,  299,
+  299,  299,  299,  299,  299,  299,  299,  299,  299,  299,
+  299,  299,  299,  299,  299,    0,    0,  299,  299,  299,
+    0,  299,  299,  299,    0,  299,  299,  299,  417,  415,
+  299,  416,  299,    0,    0,  299,  299,  299,  299,    0,
+  299,  299,  299,  299,  901,    0,  420,  403,  421,  299,
+    0,    0,  299,  299,  299,  299,  299,  299,  299,  299,
+    0,  299,  299,  299,  299,  299,    0,  297,  299,  297,
+  297,  297,  297,  297,    0,  299,  299,  299,    0,    0,
+  291,    0,  297,    0,  299,  299,  297,    0,  297,    0,
+  291,  297,  297,  297,  297,  297,  297,  297,    0,    0,
+  297,  297,  297,    0,    0,    0,    0,  297,  297,    0,
+    0,    0,  297,  297,    0,    0,    0,  291,    0,    0,
+    0,  291,  297,    0,  291,    0,  297,  297,    0,    0,
+    0,  297,    0,    0,    0,    0,    0,  297,  291,  297,
+  297,  291,  297,    0,  297,  297,  297,  297,  297,    0,
+  297,  297,  297,  297,  297,  297,  297,  297,  297,  297,
+  297,  297,  297,  297,  297,  297,    0,    0,  297,  297,
+  297,    0,  297,  297,  297,    0,  297,  297,  297,    0,
+    0,  297,    0,  297,    0,    0,  297,  297,  297,  297,
+    0,  297,  297,  297,  297,    0,    0,    0,    0,    0,
+  297,    0,    0,  297,  297,  297,  297,  297,  297,  297,
+  297,    0,  297,  297,  297,  297,  297,    0,    0,  297,
+    0,    0,    0,    0,    0,    0,  297,  297,  297,    0,
+    0,  301,    0,    0,    0,  297,  297,    0,    0,    0,
+    0,  301,    0,    0,  404,  405,  406,  407,  408,    0,
+  409,  410,  411,  412,  413,  414,    0,    0,  418,  419,
+    0,    0,    0,    0,    0,    0,    0,    0,  301,    0,
+    0,    0,  301,    0,    0,  301,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  301,
+    0,    0,  301,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  291,    0,  291,  291,
+  291,  291,  291,    0,    0,    0,    0,    0,    0,    0,
+    0,  291,    0,    0,    0,  291,    0,  291,    0,    0,
+  291,  291,  291,  291,  291,  291,  291,    0,    0,  291,
+  291,  291,    0,    0,    0,    0,  291,  291,    0,    0,
+    0,  291,  291,    0,    0,    0,    0,    0,    0,    0,
+    0,  291,    0,    0,    0,  291,  291,    0,    0,    0,
+  291,    0,    0,    0,    0,    0,  291,    0,  291,  291,
+    0,  291,    0,  291,  291,  291,  291,  291,    0,  291,
+  291,  291,  291,  291,  291,  291,  291,  291,  291,  291,
+  291,  291,  291,  291,  291,    0,    0,  291,  291,  291,
+    0,  291,  291,  291,    0,  291,  291,  291,  417,  415,
+  291,  416,  291,    0,    0,  291,  291,  291,  291,    0,
+  291,  291,  291,  291,  946,    0,  420,  403,  421,  291,
+    0,    0,  291,  291,  291,  291,  291,  291,  291,  291,
+    0,  291,  291,  291,  291,  291,    0,  301,  291,  301,
+  301,  301,  301,  301,    0,  291,  291,  291,    0,    0,
+  296,    0,  301,    0,  291,  291,  301,    0,  301,    0,
+  296,  301,  301,  301,  301,  301,  301,  301,    0,    0,
+  301,  301,  301,    0,    0,    0,    0,  301,  301,    0,
+    0,    0,  301,  301,    0,    0,    0,  296,    0,    0,
+    0,  296,  301,    0,  296,    0,  301,  301,    0,    0,
+    0,  301,    0,    0,    0,    0,    0,  301,  296,  301,
+  301,  296,  301,    0,  301,  301,  301,  301,  301,    0,
+  301,  301,  301,  301,  301,  301,  301,  301,  301,  301,
+  301,  301,  301,  301,  301,  301,    0,    0,  301,  301,
+  301,    0,  301,  301,  301,    0,  301,  301,  301,    0,
+    0,  301,    0,  301,    0,    0,  301,  301,  301,  301,
+    0,  301,  301,  301,  301,    0,    0,    0,    0,    0,
+  301,    0,    0,  301,  301,  301,  301,  301,  301,  301,
+  301,    0,  301,  301,  301,  301,  301,    0,    0,  301,
+    0,    0,    0,    0,    0,    0,  301,  301,  301,    0,
+    0,  294,    0,    0,    0,  301,  301,    0,    0,    0,
+    0,  294,    0,    0,  404,  405,  406,  407,  408,    0,
+  409,  410,  411,  412,  413,  414,    0,    0,  418,  419,
+    0,    0,    0,    0,    0,    0,    0,    0,  294,    0,
+    0,    0,  294,    0,    0,  294,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  294,
+    0,    0,  294,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  296,    0,  296,  296,
+  296,  296,  296,    0,    0,    0,    0,    0,    0,    0,
+    0,  296,    0,    0,    0,  296,    0,  296,    0,    0,
+  296,  296,  296,  296,  296,  296,  296,    0,    0,  296,
+  296,  296,    0,    0,    0,    0,  296,  296,    0,    0,
+    0,  296,  296,    0,    0,    0,    0,    0,    0,    0,
+    0,  296,    0,    0,    0,  296,  296,    0,    0,    0,
+  296,    0,    0,    0,    0,    0,  296,    0,  296,  296,
+    0,  296,    0,  296,  296,  296,  296,  296,    0,  296,
+  296,  296,  296,  296,  296,  296,  296,  296,  296,  296,
+  296,  296,  296,  296,  296,    0,    0,  296,  296,  296,
+    0,  296,  296,  296,    0,  296,  296,  296,  417,  415,
+  296,  416,  296,    0,    0,  296,  296,  296,  296,    0,
+  296,  296,  296,  296,  962,    0,  420,  403,  421,  296,
+    0,    0,  296,  296,  296,  296,  296,  296,  296,  296,
+    0,  296,  296,  296,  296,  296,    0,  294,  296,  294,
+  294,  294,  294,  294,    0,  296,  296,  296,    0,    0,
+  312,    0,  294,    0,  296,  296,  294,    0,  294,    0,
+  312,  294,  294,  294,  294,  294,  294,  294,    0,    0,
+  294,  294,  294,    0,    0,    0,    0,  294,  294,    0,
+    0,    0,  294,  294,    0,    0,    0,  312,    0,    0,
+    0,  312,  294,    0,  312,    0,  294,  294,    0,    0,
+    0,  294,    0,    0,    0,    0,    0,  294,  312,  294,
+  294,  312,  294,    0,  294,  294,  294,  294,  294,    0,
+  294,  294,  294,  294,  294,  294,  294,  294,  294,  294,
+  294,  294,  294,  294,  294,  294,    0,    0,  294,  294,
+  294,    0,  294,  294,  294,    0,  294,  294,  294,    0,
+    0,  294,    0,  294,    0,    0,  294,  294,  294,  294,
+    0,  294,  294,  294,  294,    0,    0,    0,    0,    0,
+  294,    0,    0,  294,  294,  294,  294,  294,  294,  294,
+  294,    0,  294,  294,  294,  294,  294,    0,    0,  294,
+    0,    0,    0,    0,    0,    0,  294,  294,  294,    0,
+    0,  310,    0,    0,    0,  294,  294,    0,    0,    0,
+    0,  310,    0,    0,  404,  405,  406,  407,  408,    0,
+  409,  410,  411,  412,  413,  414,    0,    0,  418,  419,
+    0,    0,    0,    0,    0,    0,    0,    0,  310,    0,
+    0,    0,  310,    0,    0,  310,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  310,
+    0,    0,  310,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  312,    0,  312,  312,
+  312,  312,  312,    0,    0,    0,    0,    0,    0,    0,
+    0,  312,    0,    0,    0,  312,    0,  312,    0,    0,
+  312,  312,  312,  312,  312,  312,  312,    0,    0,  312,
+  312,  312,    0,    0,    0,    0,  312,  312,    0,    0,
+    0,  312,  312,    0,    0,    0,    0,    0,    0,    0,
+    0,  312,    0,    0,    0,  312,  312,    0,    0,    0,
+  312,    0,    0,    0,    0,    0,  312,    0,  312,  312,
+    0,  312,    0,  312,  312,  312,  312,  312,    0,  312,
+  312,  312,  312,  312,  312,  312,  312,  312,  312,  312,
+  312,  312,  312,  312,  312,    0,    0,  312,  312,  312,
+    0,  312,  312,  312,    0,  312,  312,  312,  417,  415,
+  312,  416,  312,    0,    0,  312,  312,  312,  312,    0,
+  312,  312,  312,  312,    0,    0,  420,  403,  421,  312,
+    0,    0,  312,  312,  312,  312,  312,  312,  312,  312,
+    0,  312,  312,  312,  312,  312,    0,  310,  312,  310,
+  310,  310,  310,  310,    0,  312,  312,  312,    0,    0,
+  300,    0,  310,    0,  312,  312,  310,    0,  310,    0,
+  300,  310,  310,  310,  310,  310,  310,  310,    0,    0,
+  310,  310,  310,    0,    0,    0,    0,  310,  310,    0,
+    0,    0,  310,  310,    0,    0,    0,  300,    0,    0,
+    0,  300,  310,    0,  300,    0,  310,  310,    0,    0,
+    0,  310,    0,    0,    0,    0,    0,  310,  300,  310,
+  310,  300,  310,    0,  310,  310,  310,  310,  310,    0,
+  310,  310,  310,  310,  310,  310,  310,  310,  310,  310,
+  310,  310,  310,  310,  310,  310,    0,    0,  310,  310,
+  310,    0,  310,  310,  310,    0,  310,  310,  310,    0,
+    0,  310,    0,  310,    0,    0,  310,  310,  310,  310,
+    0,  310,  310,  310,  310,    0,    0,    0,    0,    0,
+  310,    0,    0,  310,  310,  310,  310,  310,  310,  310,
+  310,    0,  310,  310,  310,  310,  310,    0,    0,  310,
+    0,    0,    0,    0,    0,    0,  310,  310,  310,    0,
+    0,  298,    0,    0,    0,  310,  310,    0,    0,    0,
+    0,  298,    0,    0,  404,  405,  406,  407,  408,    0,
+  409,  410,  411,  412,  413,  414,    0,    0,  418,  419,
+    0,    0,    0,    0,    0,    0,    0,    0,  298,    0,
+    0,    0,  298,    0,    0,  298,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  298,
+    0,    0,  298,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  300,    0,  300,  300,
+  300,  300,  300,    0,    0,    0,    0,    0,    0,    0,
+    0,  300,    0,    0,    0,  300,    0,  300,    0,    0,
+  300,  300,  300,  300,  300,  300,  300,    0,    0,  300,
+  300,  300,    0,    0,    0,    0,  300,  300,    0,    0,
+    0,  300,  300,    0,    0,    0,    0,    0,    0,    0,
+    0,  300,    0,    0,    0,  300,  300,    0,    0,    0,
+  300,    0,    0,    0,    0,    0,  300,    0,  300,  300,
+    0,  300,    0,  300,  300,  300,  300,  300,    0,  300,
+  300,  300,  300,  300,  300,  300,  300,  300,  300,  300,
+  300,  300,  300,  300,  300,    0,    0,  300,  300,  300,
+    0,  300,  300,  300,    0,  300,  300,  300,  247,  247,
+  300,  247,  300,    0,    0,  300,  300,  300,  300,    0,
+  300,  300,  300,  300,    0,    0,  247,  247,  247,  300,
+    0,    0,  300,  300,  300,  300,  300,  300,  300,  300,
+    0,  300,  300,  300,  300,  300,    0,  298,  300,  298,
+  298,  298,  298,  298,    0,  300,  300,  300,    0,    0,
+  304,    0,  298,    0,  300,  300,  298,    0,  298,    0,
+  304,  298,  298,  298,  298,  298,  298,  298,    0,    0,
+  298,  298,  298,    0,    0,    0,    0,  298,  298,    0,
+    0,    0,  298,  298,    0,    0,    0,  304,    0,    0,
+    0,  304,  298,    0,  304,    0,  298,  298,    0,    0,
+    0,  298,    0,    0,    0,    0,    0,  298,  304,  298,
+  298,  304,  298,    0,  298,  298,  298,  298,  298,    0,
+  298,  298,  298,  298,  298,  298,  298,  298,  298,  298,
+  298,  298,  298,  298,  298,  298,    0,    0,  298,  298,
+  298,    0,  298,  298,  298,    0,  298,  298,  298,    0,
+    0,  298,    0,  298,    0,    0,  298,  298,  298,  298,
+    0,  298,  298,  298,  298,    0,    0,    0,    0,    0,
+  298,    0,    0,  298,  298,  298,  298,  298,  298,  298,
+  298,    0,  298,  298,  298,  298,  298,    0,    0,  298,
+    0,    0,    0,    0,    0,    0,  298,  298,  298,    0,
+    0,  303,    0,    0,    0,  298,  298,    0,    0,    0,
+    0,  303,    0,    0,  247,  247,  247,  247,  247,    0,
+  247,  247,  247,  247,  247,  247,    0,    0,  247,  247,
+    0,    0,    0,    0,    0,    0,    0,    0,  303,    0,
+    0,    0,  303,    0,    0,  303,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  303,
+    0,    0,  303,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  304,    0,  304,  304,
+  304,  304,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  304,    0,    0,    0,  304,    0,  304,    0,    0,
+  304,  304,  304,  304,  304,  304,  304,    0,    0,  304,
+  304,  304,    0,    0,    0,    0,  304,  304,    0,    0,
+    0,  304,  304,    0,    0,    0,    0,    0,    0,    0,
+    0,  304,    0,    0,    0,  304,  304,    0,    0,    0,
+  304,    0,    0,    0,    0,    0,  304,  567,  304,  304,
+  333,  304,  334,  304,  304,  304,  304,  304,    0,  304,
+  304,  304,  304,  304,  304,  304,  304,  304,  304,  304,
+  304,  304,  304,  304,  304,    0,    0,  304,  304,  304,
+    0,  304,  304,  304,    0,  304,  304,  304,    0,    0,
+  304,    0,  304,    0,    0,  304,  304,  304,  304,    0,
+  304,  304,  304,  304,    0,  753,    0,  751,  150,  304,
+  151,    0,  304,  304,  304,  304,  304,  304,  304,  304,
+    0,  304,  304,  304,  304,  304,  576,  303,  304,  303,
+  303,  303,  303,    0,    0,  304,  304,  304,    0,    0,
+    0,    0,  303,    0,  304,  304,  303,    0,  303,    0,
+    0,  303,  303,  303,  303,  303,  303,  303,    0,    0,
+  303,  303,  303,    0,    0,    0,    0,  303,  303,    0,
+    0,    0,  303,  303,    0,    0,    0,    0,    0,    0,
+    0,    0,  303,    0,    0,    0,  303,  303,    0,    0,
+    0,  303,    0,    0,    0,    0,    0,  303,    0,  303,
+  303,    0,  303,    0,  303,  303,  303,  303,  303,    0,
+  303,  303,  303,  303,  303,  303,  303,  303,  303,  303,
+  303,  303,  303,  303,  303,  303,    0,    0,  303,  303,
+  303,    0,  303,  303,  303,    0,  303,  303,  303,    0,
+  338,  303,    0,  303,    0,    0,  303,  303,  303,  303,
+  338,  303,  303,  303,  303,    0,    0,    0,    0,    0,
+  303,    0,    0,  303,  303,  303,  303,  303,  303,  303,
+  303,    0,  303,  303,  303,  303,  303,  338,    0,  303,
+  338,  338,  338,  338,  338,  338,  303,  303,  303,    0,
+    0,    0,    0,    0,    0,  303,  303,    0,    0,    0,
+    0,    0,    0,    0,    0,  336,  337,  338,    0,    0,
+  339,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  149,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  752,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  152,  153,    0,    0,    0,  154,  155,  156,
+  157,    0,    0,    0,    0,    0,    0,    0,    0,  158,
+  159,  160,  161,  162,  163,  164,    0,  165,  166,  167,
+    0,    0,  168,  169,  170,    0,  171,  172,  173,  174,
+  175,  292,  176,    0,    0,    0,    0,  178,  179,    0,
+    0,  292,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  181,  182,    0,    0,  183,  184,  185,
+  186,    0,    0,    0,  340,    0,    0,    0,  292,    0,
+    0,  187,  292,    0,    0,  292,    0,    0,    0,    0,
+    0,    0,    0,    0,  177,    0,    0,    0,    0,  292,
+    0,    0,  292,    0,    0,  178,  179,    0,    0,    0,
+    0,  180,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  181,  182,    0,    0,  183,  184,  185,  186,    0,
+    0,    0,   89,    0,    0,    0,    0,    0,    0,  187,
+    0,    0,    0,    0,    0,    0,  338,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  338,  338,  338,    0,  338,    0,  338,    0,    0,
+  338,  338,  338,  338,  338,  338,  338,    0,    0,  338,
+  338,  338,    0,    0,    0,    0,  338,  338,    0,    0,
+    0,  338,  338,    0,    0,    0,    0,    0,    0,    0,
+    0,  338,    0,    0,    0,  338,  338,    0,    0,    0,
+  338,    0,    0,    0,    0,    0,  338,    0,  338,  338,
+    0,  338,    0,  338,  338,  338,  338,  338,    0,  338,
+  338,  338,  338,  338,  338,  338,  338,  338,  338,  338,
+  338,  338,  338,  338,  338,    0,    0,  338,  338,  338,
+    0,  338,  338,  338,    0,  338,  338,  338,    0,    0,
+  338,    0,  338,    0,    0,  338,  338,  338,  338,    0,
+    0,  338,  338,  338,    0,    0,    0,    0,    0,  338,
+    0,    0,  338,  338,  338,  338,  338,  338,  338,  338,
+    0,  338,  338,  338,  338,  338,    0,  292,  338,  292,
+  292,    0,    0,    0,    0,  338,  338,  338,    0,    0,
+  302,    0,  292,    0,  338,  338,  292,    0,  292,    0,
+  302,  292,  292,  292,  292,  292,  292,  292,    0,    0,
+  292,  292,  292,    0,    0,    0,    0,  292,  292,    0,
+    0,    0,  292,  292,    0,    0,    0,  302,    0,    0,
+    0,  302,  292,    0,  302,    0,  292,  292,    0,    0,
+    0,  292,    0,    0,    0,    0,    0,  292,  302,  292,
+  292,  302,  292,    0,  292,  292,  292,  292,  292,    0,
+  292,  292,  292,  292,  292,  292,  292,  292,  292,  292,
+  292,  292,  292,  292,  292,  292,    0,    0,  292,  292,
+  292,    0,  292,  292,  292,    0,  292,  292,  292,    0,
+    0,  292,    0,  292,    0,    0,  292,  292,  292,  292,
+    0,  292,  292,  292,  292,    0,    0,    0,    0,    0,
+  292,    0,    0,  292,  292,  292,  292,  292,  292,  292,
+  292,    0,  292,  292,  292,  292,  292,    0,    0,  292,
+    0,    0,    0,    0,    0,    0,  292,  292,  292,    0,
+    0,    0,    0,    0,    0,  292,  292,  501,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  501,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  501,  501,
+  501,  501,  501,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  302,    0,  302,  302,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  302,    0,    0,    0,  302,    0,  302,    0,    0,
+  302,  302,  302,  302,  302,  302,  302,    0,    0,  302,
+  302,  302,    0,    0,    0,    0,  302,  302,    0,    0,
+    0,  302,  302,    0,    0,    0,    0,    0,    0,    0,
+    0,  302,    0,    0,    0,  302,  302,    0,    0,    0,
+  302,    0,    0,    0,    0,    0,  302,    0,  302,  302,
+    0,  302,    0,  302,  302,  302,  302,  302,    0,  302,
+  302,  302,  302,  302,  302,  302,  302,  302,  302,  302,
+  302,  302,  302,  302,  302,    0,    0,  302,  302,  302,
+    0,  302,  302,  302,    0,  302,  302,  302,    0,    0,
+  302,    0,  302,    0,    0,  302,  302,  302,  302,    0,
+  302,  302,  302,  302,    0,    0,    0,    0,    0,  302,
+    0,    0,  302,  302,  302,  302,  302,  302,  302,  302,
+    0,  302,  302,  302,  302,  302,    0,    0,  302,    0,
+    0,    0,    0,  501,    0,  302,  302,  302,    0,    0,
+    0,  502,    0,    0,  302,  302,    0,    0,  501,  501,
+  501,  502,  501,    0,  501,    0,    0,  501,  501,  501,
+  501,  501,  501,  501,    0,    0,  501,  501,  501,    0,
+    0,    0,    0,  501,  501,    0,    0,    0,  501,  501,
+    0,    0,  502,  502,  502,  502,  502,    0,  501,    0,
+    0,    0,  501,  501,    0,    0,    0,  501,    0,    0,
+    0,    0,    0,  501,    0,  501,  501,    0,  501,    0,
+  501,  501,  501,  501,  501,    0,  501,  501,  501,  501,
+  501,  501,  501,  501,  501,  501,  501,  501,  501,  501,
+  501,  501,    0,    0,  501,  501,  501,    0,  501,  501,
+  501,    0,  501,  501,  501,    0,    0,  501,    0,  501,
+    0,    0,  501,  501,  501,  501,    0,    0,  501,  501,
+  501,    0,    0,    0,    0,    0,  501,    0,    0,  501,
+  501,  501,  501,  501,  501,  501,  501,    0,  501,  501,
+  501,  501,  501,    0,    0,  501,    0,    0,    0,    0,
+    0,    0,  501,  501,  501,    0,  493,    0,    0,    0,
+    0,  501,  501,    0,    0,    0,  493,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  499,  499,
+  493,  499,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  502,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  502,  502,  502,    0,  502,    0,  502,    0,
+    0,  502,  502,  502,  502,  502,  502,  502,    0,    0,
+  502,  502,  502,    0,    0,    0,    0,  502,  502,    0,
+    0,    0,  502,  502,    0,    0,    0,    0,    0,    0,
+    0,    0,  502,    0,    0,    0,  502,  502,    0,    0,
+    0,  502,    0,    0,    0,    0,    0,  502,    0,  502,
+  502,    0,  502,    0,  502,  502,  502,  502,  502,    0,
+  502,  502,  502,  502,  502,  502,  502,  502,  502,  502,
+  502,  502,  502,  502,  502,  502,    0,    0,  502,  502,
+  502,    0,  502,  502,  502,    0,  502,  502,  502,    0,
+    0,  502,    0,  502,    0,    0,  502,  502,  502,  502,
+    0,    0,  502,  502,  502,    0,    0,    0,    0,    0,
+  502,    0,    0,  502,  502,  502,  502,  502,  502,  502,
+  502,    0,  502,  502,  502,  502,  502,    0,    0,  502,
+    0,    0,  493,    0,    0,    0,  502,  502,    0,    0,
+  507,    0,    0,    0,    0,  502,  502,  499,  499,  499,
+  507,  493,    0,  493,    0,    0,  493,  493,  493,  493,
+  493,  493,  493,    0,    0,  493,  493,  493,    0,    0,
+    0,    0,  493,  493,    0,    0,    0,  493,  493,    0,
+    0,  507,  507,  507,  507,  507,    0,  493,    0,    0,
+    0,  493,  493,    0,    0,    0,  493,    0,    0,    0,
+    0,    0,  493,    0,  493,  493,    0,  493,    0,  493,
+  493,  493,  493,  493,    0,  493,  493,  493,  493,  493,
+  493,  493,  493,  493,  493,  493,  493,  493,  493,  493,
+  493,    0,    0,  493,  493,  493,    0,  493,  493,  493,
+    0,  493,  493,  493,    0,    0,  493,    0,  493,    0,
+    0,  493,  493,  493,  493,    0,    0,  493,  493,  493,
+    0,    0,    0,    0,    0,  493,    0,    0,  493,  493,
+  493,  493,  493,  493,  493,  493,    0,  493,  493,  493,
+  493,  493,    0,    0,  493,    0,    0,    0,    0,    0,
+    0,  493,  493,  493,    0,  504,    0,    0,    0,    0,
+  493,  493,    0,    0,    0,  504,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  504,  504,  504,  504,
+  504,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  507,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  507,  507,    0,    0,  507,    0,  507,    0,    0,
+  507,  507,  507,  507,  507,  507,  507,    0,    0,  507,
+  507,  507,    0,    0,    0,    0,  507,  507,    0,    0,
+    0,  507,  507,    0,    0,    0,    0,    0,    0,    0,
+    0,  507,    0,    0,    0,  507,  507,    0,    0,    0,
+  507,    0,    0,    0,    0,    0,  507,    0,  507,  507,
+    0,  507,    0,  507,  507,  507,  507,  507,    0,  507,
+  507,  507,  507,  507,  507,  507,  507,  507,  507,  507,
+  507,  507,  507,  507,  507,    0,    0,  507,  507,  507,
+    0,  507,  507,  507,    0,  507,  507,  507,    0,    0,
+  507,    0,  507,    0,    0,  507,  507,  507,  507,    0,
+    0,  507,  507,  507,    0,    0,    0,    0,    0,  507,
+    0,    0,  507,  507,  507,  507,  507,  507,  507,  507,
+    0,  507,  507,  507,  507,  507,    0,    0,  507,    0,
+    0,  504,    0,    0,    0,  507,  507,  507,  505,    0,
+    0,    0,    0,    0,  507,  507,  504,  504,  505,    0,
+  504,    0,  504,    0,    0,  504,  504,  504,  504,  504,
+  504,  504,    0,    0,  504,  504,  504,    0,    0,    0,
+    0,  504,  504,    0,    0,    0,  504,  504,    0,  505,
+  505,  505,  505,  505,    0,    0,  504,    0,    0,    0,
+  504,  504,    0,    0,    0,  504,    0,    0,    0,    0,
+    0,  504,    0,  504,  504,    0,  504,    0,  504,  504,
+  504,  504,  504,    0,  504,  504,  504,  504,  504,  504,
+  504,  504,  504,  504,  504,  504,  504,  504,  504,  504,
+    0,    0,  504,  504,  504,    0,  504,  504,  504,    0,
+  504,  504,  504,    0,    0,  504,    0,  504,    0,    0,
+  504,  504,  504,  504,    0,    0,  504,  504,  504,    0,
+    0,    0,    0,    0,  504,    0,    0,  504,  504,  504,
+  504,  504,  504,  504,  504,    0,  504,  504,  504,  504,
+  504,    0,    0,  504,    0,    0,    0,    0,    0,    0,
+  504,  504,  504,  506,    0,    0,    0,    0,    0,  504,
+  504,    0,    0,  506,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,  506,  506,  506,  506,  506,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,  505,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  505,
+  505,    0,    0,  505,    0,  505,    0,    0,  505,  505,
+  505,  505,  505,  505,  505,    0,    0,  505,  505,  505,
+    0,    0,    0,    0,  505,  505,    0,    0,    0,  505,
+  505,    0,    0,    0,    0,    0,    0,    0,    0,  505,
+    0,    0,    0,  505,  505,    0,    0,    0,  505,    0,
+    0,    0,    0,    0,  505,    0,  505,  505,    0,  505,
+    0,  505,  505,  505,  505,  505,    0,  505,  505,  505,
+  505,  505,  505,  505,  505,  505,  505,  505,  505,  505,
+  505,  505,  505,    0,    0,  505,  505,  505,    0,  505,
+  505,  505,    0,  505,  505,  505,    0,    0,  505,    0,
+  505,    0,    0,  505,  505,  505,  505,    0,    0,  505,
+  505,  505,    0,    0,    0,    0,    0,  505,    0,    0,
+  505,  505,  505,  505,  505,  505,  505,  505,    0,  505,
+  505,  505,  505,  505,    0,    0,  505,    0,    0,  506,
+    0,    0,    0,  505,  505,  505,  313,    0,    0,    0,
+    0,    0,  505,  505,  506,  506,  313,    0,  506,    0,
+  506,    0,    0,  506,  506,  506,  506,  506,  506,  506,
+    0,    0,  506,  506,  506,    0,    0,    0,    0,  506,
+  506,    0,    0,  313,  506,  506,    0,  313,    0,    0,
+  313,    0,    0,    0,  506,    0,    0,    0,  506,  506,
+    0,    0,    0,  506,  313,    0,    0,    0,    0,  506,
+    0,  506,  506,    0,  506,    0,  506,  506,  506,  506,
+  506,    0,  506,  506,  506,  506,  506,  506,  506,  506,
+  506,  506,  506,  506,  506,  506,  506,  506,    0,    0,
+  506,  506,  506,    0,  506,  506,  506,    0,  506,  506,
+  506,    0,    0,  506,    0,  506,    0,    0,  506,  506,
+  506,  506,    0,    0,  506,  506,  506,    0,    0,    0,
+    0,    0,  506,    0,    0,  506,  506,  506,  506,  506,
+  506,  506,  506,    0,  506,  506,  506,  506,  506,    0,
+    0,  506,    0,    0,    0,    0,    0,    0,  506,  506,
+  506,  309,    0,    0,    0,    0,    0,  506,  506,    0,
+    0,  309,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  309,    0,
+    0,    0,  309,    0,    0,  309,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  309,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  313,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  313,    0,    0,
+    0,  313,    0,  313,    0,    0,  313,  313,  313,  313,
+  313,  313,  313,    0,    0,  313,  313,  313,    0,    0,
+    0,    0,  313,  313,    0,    0,    0,  313,  313,    0,
+    0,    0,    0,    0,    0,    0,    0,  313,    0,    0,
+    0,  313,  313,    0,    0,    0,  313,    0,    0,    0,
+    0,    0,  313,    0,  313,  313,    0,  313,    0,  313,
+  313,  313,  313,  313,    0,  313,  313,  313,  313,  313,
+  313,  313,  313,  313,  313,  313,  313,  313,  313,  313,
+  313,    0,    0,  313,  313,  313,    0,  313,  313,  313,
+    0,  313,  313,  313,    0,  503,  313,    0,  313,    0,
+    0,  313,  313,  313,  313,  503,  313,  313,  313,  313,
+    0,    0,    0,    0,    0,  313,    0,    0,  313,  313,
+  313,  313,  313,  313,  313,  313,    0,  313,  313,  313,
+  313,  313,    0,    0,  313,    0,  503,  309,  503,  503,
+  503,  313,  313,  313,    0,    0,    0,    0,    0,    0,
+  313,  313,  309,    0,    0,    0,  309,    0,  309,    0,
+    0,  309,  309,  309,  309,  309,  309,  309,    0,    0,
+  309,  309,  309,    0,    0,    0,    0,  309,  309,    0,
+    0,    0,  309,  309,    0,    0,    0,    0,    0,    0,
+    0,    0,  309,    0,    0,    0,  309,  309,    0,    0,
+    0,  309,    0,    0,    0,    0,    0,  309,    0,  309,
+  309,    0,  309,    0,  309,  309,  309,  309,  309,    0,
+  309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
+  309,  309,  309,  309,  309,  309,    0,    0,  309,  309,
+  309,    0,  309,  309,  309,    0,  309,  309,  309,    0,
+  509,  309,    0,  309,    0,    0,  309,  309,  309,  309,
+  509,  309,  309,  309,  309,    0,    0,    0,    0,    0,
+  309,    0,    0,  309,  309,  309,  309,  309,  309,  309,
+  309,    0,  309,  309,  309,  309,  309,    0,    0,  309,
+    0,  509,    0,    0,  509,    0,  309,  309,  309,    0,
+    0,    0,    0,    0,    0,  309,  309,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  503,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  503,    0,    0,    0,
+  503,    0,  503,    0,    0,  503,  503,  503,  503,  503,
+  503,  503,    0,    0,  503,  503,  503,    0,    0,    0,
+    0,  503,  503,    0,    0,    0,  503,  503,    0,    0,
+    0,    0,    0,    0,    0,    0,  503,    0,    0,    0,
+  503,  503,    0,    0,    0,  503,    0,    0,    0,    0,
+    0,  503,    0,  503,  503,    0,  503,    0,  503,  503,
+  503,  503,  503,    0,  503,  503,  503,  503,  503,  503,
+  503,  503,  503,  503,  503,  503,  503,  503,  503,  503,
+    0,    0,  503,  503,  503,    0,  503,  503,  503,    0,
+  503,  503,  503,    0,  512,  503,    0,  503,    0,    0,
+  503,  503,  503,  503,  512,    0,  503,  503,  503,    0,
+    0,    0,    0,    0,  503,    0,    0,  503,  503,  503,
+  503,  503,  503,  503,  503,    0,  503,  503,  503,  503,
+  503,    0,    0,  503,    0,  512,  509,    0,  512,    0,
+  503,  503,  503,    0,    0,    0,    0,    0,    0,  503,
+  503,  509,    0,    0,    0,  509,    0,  509,    0,    0,
+  509,  509,  509,  509,  509,  509,  509,    0,    0,  509,
+  509,  509,    0,    0,    0,    0,  509,  509,    0,    0,
+    0,  509,  509,    0,    0,    0,    0,    0,    0,    0,
+    0,  509,    0,    0,    0,  509,  509,    0,    0,    0,
+  509,    0,    0,    0,    0,    0,  509,    0,  509,  509,
+    0,  509,    0,  509,  509,  509,  509,  509,    0,  509,
+  509,  509,  509,  509,  509,  509,  509,  509,  509,  509,
+  509,  509,  509,  509,  509,    0,    0,  509,  509,  509,
+    0,  509,  509,  509,    0,  509,  509,  509,    0,  511,
+  509,    0,  509,    0,    0,  509,  509,  509,  509,  511,
+    0,  509,  509,  509,    0,    0,    0,    0,    0,  509,
+    0,    0,  509,  509,  509,  509,  509,  509,  509,  509,
+    0,  509,  509,  509,  509,  509,    0,    0,  509,    0,
+  511,    0,    0,  511,    0,  509,  509,  509,    0,    0,
+    0,    0,    0,    0,  509,  509,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  512,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  512,    0,    0,    0,  512,
+    0,  512,    0,    0,  512,  512,  512,  512,  512,  512,
+  512,    0,    0,  512,  512,  512,    0,    0,    0,    0,
+  512,  512,    0,    0,    0,  512,  512,    0,    0,    0,
+    0,    0,    0,    0,    0,  512,    0,    0,    0,  512,
+  512,    0,    0,    0,  512,    0,    0,    0,    0,    0,
+  512,    0,  512,  512,    0,  512,    0,  512,  512,  512,
+  512,  512,    0,  512,  512,  512,  512,  512,  512,  512,
+  512,  512,  512,  512,  512,  512,  512,  512,  512,    0,
+    0,  512,  512,  512,    0,  512,  512,  512,    0,  512,
+  512,  512,    0,  510,  512,    0,  512,    0,    0,  512,
+  512,  512,  512,  510,    0,  512,  512,  512,    0,    0,
+    0,    0,    0,  512,    0,    0,  512,  512,  512,  512,
+  512,  512,  512,  512,    0,  512,  512,  512,  512,  512,
+    0,    0,  512,    0,  510,  511,    0,  510,    0,  512,
+  512,  512,    0,    0,    0,    0,    0,    0,  512,  512,
+  511,    0,    0,    0,  511,    0,  511,    0,    0,  511,
+  511,  511,  511,  511,  511,  511,    0,    0,  511,  511,
+  511,    0,    0,    0,    0,  511,  511,    0,    0,    0,
+  511,  511,    0,    0,    0,    0,    0,    0,    0,    0,
+  511,    0,    0,    0,  511,  511,    0,    0,    0,  511,
+    0,    0,    0,    0,    0,  511,    0,  511,  511,    0,
+  511,    0,  511,  511,  511,  511,  511,    0,  511,  511,
+  511,  511,  511,  511,  511,  511,  511,  511,  511,  511,
+  511,  511,  511,  511,    0,    0,  511,  511,  511,    0,
+  511,  511,  511,    0,  511,  511,  511,    0,  236,  511,
+    0,  511,    0,    0,  511,  511,  511,  511,  236,    0,
+  511,  511,  511,    0,    0,    0,    0,    0,  511,    0,
+    0,  511,  511,  511,  511,  511,  511,  511,  511,    0,
+  511,  511,  511,  511,  511,    0,    0,  511,    0,    0,
+  236,    0,  236,    0,  511,  511,  511,    0,    0,    0,
+    0,    0,    0,  511,  511,    0,    0,    0,    0,  236,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  510,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,  510,    0,    0,    0,  510,    0,
+  510,    0,    0,  510,  510,  510,  510,  510,  510,  510,
+    0,    0,  510,  510,  510,    0,    0,    0,    0,  510,
+  510,    0,    0,    0,  510,  510,    0,    0,    0,    0,
+    0,    0,    0,    0,  510,    0,    0,    0,  510,  510,
+    0,    0,    0,  510,    0,    0,    0,    0,    0,  510,
+    0,  510,  510,    0,  510,    0,  510,  510,  510,  510,
+  510,    0,  510,  510,  510,  510,  510,  510,  510,  510,
+  510,  510,  510,  510,  510,  510,  510,  510,    0,    0,
+  510,  510,  510,    0,  510,  510,  510,    0,  510,  510,
+  510,    0,  513,  510,    0,  510,    0,    0,  510,  510,
+  510,  510,  513,    0,  510,  510,  510,    0,    0,    0,
+    0,    0,  510,    0,    0,  510,  510,  510,  510,  510,
+  510,  510,  510,    0,  510,  510,  510,  510,  510,    0,
+    0,  510,    0,  513,  236,    0,  513,    0,  510,  510,
+  510,    0,    0,    0,    0,    0,    0,  510,  510,    0,
+    0,    0,    0,  236,    0,  236,    0,    0,  236,  236,
+  236,  236,  236,  236,  236,    0,    0,  236,  236,  236,
+    0,    0,    0,    0,  236,  236,    0,    0,    0,  236,
+  236,    0,    0,    0,    0,    0,    0,    0,    0,  236,
+    0,    0,    0,  236,  236,    0,    0,    0,  236,    0,
+    0,    0,    0,    0,  236,    0,  236,  236,    0,  236,
+    0,  236,  236,  236,  236,  236,    0,  236,  236,  236,
+  236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
+  236,  236,  236,    0,    0,  236,  236,  236,    0,  236,
+  236,  236,    0,  236,  236,  236,    0,  508,  236,    0,
+  236,    0,    0,  236,  236,  236,  236,  508,    0,  236,
+  236,  236,    0,    0,    0,    0,    0,  236,    0,    0,
+  236,  236,  236,  236,  236,  236,  236,  236,    0,  236,
+  236,  236,  236,  236,    0,    0,  236,    0,  508,    0,
+    0,  508,    0,  236,  236,  236,    0,    0,    0,    0,
+    0,    0,  236,  236,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  513,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  513,    0,    0,    0,  513,    0,  513,
+    0,    0,  513,  513,  513,  513,  513,  513,  513,    0,
+    0,  513,  513,  513,    0,    0,    0,    0,  513,  513,
+    0,    0,    0,  513,  513,    0,    0,    0,    0,    0,
+    0,    0,    0,  513,   57,    0,    0,  513,  513,    0,
+    0,    0,  513,    0,   57,    0,    0,    0,  513,    0,
+  513,  513,    0,  513,    0,  513,  513,  513,  513,  513,
+    0,  513,  513,  513,  513,  513,  513,  513,  513,  513,
+  513,  513,  513,  513,  513,  513,  513,    0,    0,  513,
+  513,  513,    0,  513,  513,  513,    0,  513,  513,  513,
+    0,    0,  513,    0,  513,    0,    0,  513,  513,  513,
+  513,    0,    0,  513,  513,  513,    0,    0,    0,    0,
+    0,  513,    0,    0,  513,  513,  513,  513,  513,  513,
+  513,  513,    0,  513,  513,  513,  513,  513,    0,    0,
+  513,    0,    0,  508,    0,    0,    0,  513,  513,  513,
+    0,    0,    0,    0,    0,    0,  513,  513,  508,    0,
+    0,    0,  508,    0,  508,    0,    0,  508,  508,  508,
+  508,  508,  508,  508,    0,    0,  508,  508,  508,    0,
+    0,    0,    0,  508,  508,    0,    0,    0,  508,  508,
+    0,    0,    0,    0,    0,  142,    0,    0,  508,    0,
+    0,    0,  508,  508,    0,  142,    0,  508,    0,    0,
+    0,    0,    0,  508,    0,  508,  508,    0,  508,    0,
+  508,  508,  508,  508,  508,    0,  508,  508,  508,  508,
+  508,  508,  508,  508,  508,  508,  508,  508,  508,  508,
+  508,  508,    0,    0,  508,  508,  508,    0,  508,  508,
+  508,    0,  508,  508,  508,    0,    0,  508,    0,  508,
+    0,    0,  508,  508,  508,  508,    0,    0,  508,  508,
+  508,    0,    0,    0,    0,    0,  508,    0,    0,  508,
+  508,  508,  508,  508,  508,  508,  508,    0,  508,  508,
+  508,  508,  508,    0,    0,  508,    0,    0,    0,    0,
+   57,    0,  508,  508,  508,    0,    0,    0,    0,    0,
+    0,  508,  508,    0,    0,  164,  164,    0,    0,   57,
+    0,   57,    0,    0,   57,   57,   57,   57,   57,   57,
+   57,    0,    0,   57,   57,   57,    0,    0,    0,    0,
+   57,   57,    0,    0,    0,   57,   57,    0,    0,    0,
+    0,    0,    0,    0,    0,   57,    0,    0,    0,   57,
+   57,    0,    0,    0,   57,    0,    0,    0,    0,    0,
+   57,    0,   57,   57,    0,   57,    0,   57,   57,   57,
+   57,   57,    0,   57,   57,   57,   57,   57,   57,   57,
+   57,   57,   57,   57,   57,   57,   57,   57,   57,    0,
+    0,   57,   57,   57,    0,   57,   57,   57,    0,   57,
+   57,   57,    0,  355,   57,    0,   57,    0,    0,   57,
+   57,   57,   57,  355,    0,   57,   57,   57,    0,    0,
+    0,    0,    0,   57,    0,    0,   57,   57,   57,   57,
+   57,   57,   57,   57,    0,   57,   57,   57,   57,   57,
+    0,  142,   57,    0,  355,    0,    0,    0,    0,   57,
+   57,   57,    0,    0,    0,    0,  164,  164,   57,   57,
+  142,  355,  142,    0,    0,  142,  142,  142,  142,  142,
+  142,  142,    0,    0,  142,  142,  142,    0,    0,    0,
+    0,  142,  142,    0,    0,    0,  142,  142,    0,    0,
+    0,    0,    0,    0,    0,    0,  142,    0,    0,    0,
+  142,  142,    0,    0,    0,  142,    0,    0,    0,    0,
+    0,  142,    0,  142,  142,    0,  142,    0,  142,  142,
+  142,  142,  142,    0,  142,  142,  142,  142,  142,  142,
+  142,  142,  142,  142,  142,  142,  142,  142,  142,  142,
+    0,    0,  142,  142,  142,    0,  142,  142,  142,    0,
+  142,  142,  142,    0,  125,  142,    0,  142,    0,    0,
+  142,  142,  142,  142,  125,    0,  142,  142,  142,    0,
+    0,    0,    0,    0,  142,    0,    0,  142,  142,  142,
+  142,  142,  142,  142,  142,    0,  142,  142,  142,  142,
+  142,    0,    0,  142,    0,    0,    0,    0,  125,    0,
+  142,  142,  142,    0,    0,    0,    0,    0,    0,  142,
+  142,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  355,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  355,    0,
+  355,    0,    0,  355,  355,  355,  355,  355,  355,  355,
+    0,    0,  355,  355,  355,    0,    0,    0,    0,  355,
+  355,    0,    0,    0,  355,  355,    0,    0,    0,    0,
+  154,    0,    0,    0,  355,    0,    0,    0,  355,  355,
+  154,    0,    0,  355,    0,    0,    0,    0,    0,  355,
+    0,  355,  355,    0,  355,    0,  355,  355,  355,  355,
+  355,    0,  355,  355,  355,  355,  355,  355,  355,  355,
+  355,  355,  355,  355,  355,  355,  355,  355,    0,    0,
+  355,  355,  355,    0,  355,  355,  355,    0,  355,  355,
+  355,    0,    0,  355,    0,  355,    0,    0,  355,  355,
+  355,  355,    0,    0,  355,  355,  355,    0,    0,    0,
+    0,    0,  355,    0,    0,  355,  355,  355,  355,  355,
+  355,  355,  355,    0,  355,  355,  355,  355,  355,    0,
+  125,  355,    0,    0,    0,    0,    0,    0,  355,  355,
+  355,    0,    0,    0,    0,  125,  125,  355,  355,  125,
+    0,  125,    0,    0,  125,  125,  125,  125,  125,  125,
+  125,    0,    0,  125,  125,  125,    0,    0,    0,    0,
+  125,  125,    0,    0,    0,  125,  125,    0,    0,    0,
+    0,    0,    0,    0,    0,  125,    0,    0,    0,  125,
+  125,    0,    0,    0,  125,    0,    0,    0,    0,    0,
+  125,    0,  125,  125,    0,  125,    0,  125,  125,  125,
+  125,  125,    0,  125,  125,  125,  125,  125,  125,  125,
+  125,  125,  125,  125,  125,  125,  125,  125,  125,    0,
+    0,  125,  125,  125,    0,  125,  125,  125,    0,  125,
+  125,  125,    0,  236,  125,    0,  125,    0,    0,  125,
+  125,  125,  125,  236,    0,  125,  125,  125,    0,    0,
+    0,    0,    0,  125,    0,    0,  125,  125,  125,  125,
+  125,  125,  125,  125,    0,  125,  125,  125,  125,  125,
+    0,    0,  125,    0,    0,  236,  154,  236,    0,  125,
+  125,    0,    0,    0,    0,    0,    0,    0,  125,  125,
+    0,  154,  154,    0,    0,  154,    0,  154,    0,    0,
+  154,  154,  154,  154,  154,  154,  154,    0,    0,  154,
+  154,  154,    0,    0,    0,    0,  154,  154,    0,    0,
+    0,  154,  154,    0,    0,    0,    0,    0,    0,    0,
+    0,  154,    0,    0,    0,  154,  154,    0,    0,    0,
+  154,    0,    0,    0,    0,    0,  154,    0,  154,  154,
+    0,  154,    0,  154,  154,  154,  154,  154,    0,  154,
+  154,  154,  154,  154,  154,  154,  154,  154,  154,  154,
+  154,  154,  154,  154,  154,    0,    0,  154,  154,  154,
+    0,  154,  154,  154,  164,  154,  154,  154,    0,    0,
+  154,    0,  154,    0,  164,  154,  154,  154,  154,    0,
+    0,  154,  154,  154,    0,    0,    0,    0,    0,  154,
+    0,    0,  154,  154,  154,  154,  154,  154,  154,  154,
+    0,  154,  154,  154,  154,  154,    0,    0,  154,    0,
+    0,    0,    0,    0,    0,  154,  154,  154,    0,    0,
+    0,    0,    0,    0,  154,  154,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  236,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  236,    0,
+  236,    0,    0,  236,  236,  236,  236,  236,  236,  236,
+    0,    0,  236,  236,  236,    0,    0,    0,    0,  236,
+  236,    0,    0,    0,  236,  236,    0,    0,    0,    0,
+  155,    0,    0,    0,  236,    0,    0,    0,  236,  236,
+  155,    0,    0,  236,    0,    0,    0,    0,    0,  236,
+    0,  236,  236,    0,  236,    0,  236,  236,  236,  236,
+  236,    0,  236,  236,  236,  236,  236,  236,  236,  236,
+  236,  236,  236,  236,  236,  236,  236,  236,    0,    0,
+  236,  236,  236,    0,  236,  236,  236,    0,  236,  236,
+  236,    0,    0,  236,    0,  236,    0,    0,  236,  236,
+  236,  236,    0,    0,  236,  236,  236,    0,    0,    0,
+    0,    0,  236,    0,    0,  236,  236,  236,  236,  236,
+  236,  236,  236,    0,  236,  236,  236,  236,  236,    0,
+  164,  236,    0,    0,    0,    0,    0,    0,  236,  236,
+  236,    0,    0,    0,    0,  164,  164,  236,  236,  164,
+    0,  164,    0,    0,  164,  164,  164,  164,  164,  164,
+  164,    0,    0,  164,  164,  164,    0,    0,    0,    0,
+  164,  164,    0,    0,    0,  164,  164,    0,    0,    0,
+    0,    0,    0,    0,    0,  164,    0,    0,    0,  164,
+  164,    0,    0,    0,  164,    0,    0,    0,    0,    0,
+  164,    0,  164,  164,    0,  164,    0,  164,  164,  164,
+  164,  164,    0,  164,  164,  164,  164,  164,  164,  164,
+  164,  164,  164,  164,  164,  164,  164,  164,  164,    0,
+    0,  164,  164,  164,    0,  164,  164,  164,    0,  164,
+  164,  164,    0,  525,  164,    0,  164,    0,    0,  164,
+  164,  164,  164,  525,    0,  164,  164,  164,    0,    0,
+    0,    0,    0,  164,    0,    0,  164,  164,  164,  164,
+  164,  164,  164,  164,    0,  164,  164,  164,  164,  164,
+    0,    0,  164,    0,  525,    0,  155,  525,    0,  164,
+  164,  164,    0,    0,    0,    0,    0,    0,  164,  164,
+    0,  155,  155,    0,    0,  155,    0,  155,    0,    0,
+  155,  155,  155,  155,  155,  155,  155,    0,    0,  155,
+  155,  155,    0,    0,    0,    0,  155,  155,    0,    0,
+    0,  155,  155,    0,    0,    0,    0,    0,    0,    0,
+    0,  155,    0,    0,    0,  155,  155,    0,    0,    0,
+  155,    0,    0,    0,    0,    0,  155,    0,  155,  155,
+    0,  155,    0,  155,  155,  155,  155,  155,    0,  155,
+  155,  155,  155,  155,  155,  155,  155,  155,  155,  155,
+  155,  155,  155,  155,  155,    0,    0,  155,  155,  155,
+    0,  155,  155,  155,    0,  155,  155,  155,    0,  168,
+  155,    0,  155,    0,    0,  155,  155,  155,  155,  168,
+    0,  155,  155,  155,    0,    0,    0,    0,    0,  155,
+    0,    0,  155,  155,  155,  155,  155,  155,  155,  155,
+    0,  155,  155,  155,  155,  155,    0,    0,  155,    0,
+  168,    0,    0,  168,    0,  155,  155,  155,    0,    0,
+    0,    0,    0,    0,  155,  155,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  525,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  525,    0,
+  525,    0,    0,  525,  525,  525,  525,  525,  525,  525,
+    0,    0,  525,  525,  525,    0,    0,    0,    0,  525,
+  525,    0,    0,    0,  525,  525,    0,    0,    0,    0,
+    0,    0,    0,    0,  525,    0,    0,    0,  525,  525,
+    0,    0,    0,  525,    0,    0,    0,    0,    0,  525,
+    0,  525,  525,    0,  525,    0,  525,  525,  525,  525,
+  525,    0,  525,  525,  525,  525,  525,  525,  525,  525,
+  525,  525,  525,  525,  525,  525,  525,  525,    0,    0,
+  525,  525,  525,    0,  525,  525,  525,    0,  525,  525,
+  525,    0,  523,  525,    0,  525,    0,    0,  525,  525,
+  525,  525,  523,    0,  525,  525,  525,    0,    0,    0,
+    0,    0,  525,    0,    0,  525,  525,  525,  525,  525,
+  525,  525,  525,    0,  525,  525,  525,  525,  525,    0,
+    0,  525,    0,  523,    0,  168,  523,    0,  525,  525,
+  525,    0,    0,    0,    0,    0,    0,  525,  525,    0,
+    0,    0,    0,    0,  168,    0,  168,    0,    0,  168,
+  168,  168,  168,  168,  168,  168,    0,    0,  168,  168,
+  168,    0,    0,    0,    0,  168,  168,    0,    0,    0,
+  168,  168,    0,    0,    0,    0,    0,    0,    0,    0,
+  168,    0,    0,    0,  168,  168,    0,    0,    0,  168,
+    0,    0,    0,    0,    0,  168,    0,  168,  168,    0,
+  168,    0,  168,  168,  168,  168,  168,    0,  168,  168,
+  168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
+  168,  168,  168,  168,    0,    0,  168,  168,  168,    0,
+  168,  168,  168,    0,  168,  168,  168,    0,  522,  168,
+    0,  168,    0,    0,  168,  168,  168,  168,  522,    0,
+  168,  168,  168,    0,    0,    0,    0,    0,  168,    0,
+    0,  168,  168,  168,  168,  168,  168,  168,  168,    0,
+  168,  168,  168,  168,  168,    0,    0,  168,    0,  522,
+    0,    0,  522,    0,  168,  168,  168,    0,    0,    0,
+    0,    0,    0,  168,  168,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  523,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  523,    0,  523,
+    0,    0,  523,  523,  523,  523,  523,  523,  523,    0,
+    0,  523,  523,  523,    0,    0,    0,    0,  523,  523,
+    0,    0,    0,  523,  523,    0,    0,    0,    0,    0,
+    0,    0,    0,  523,    0,    0,    0,  523,  523,    0,
+    0,    0,  523,    0,    0,    0,    0,    0,  523,    0,
+  523,  523,    0,  523,    0,  523,  523,  523,  523,  523,
+    0,  523,  523,  523,  523,  523,  523,  523,  523,  523,
+  523,  523,  523,  523,  523,  523,  523,    0,    0,  523,
+  523,  523,    0,  523,  523,  523,    0,  523,  523,  523,
+    0,  520,  523,    0,  523,    0,    0,  523,  523,  523,
+  523,  520,    0,  523,  523,  523,    0,    0,    0,    0,
+    0,  523,    0,    0,  523,  523,  523,  523,  523,  523,
+  523,  523,    0,  523,  523,  523,  523,  523,    0,    0,
+  523,    0,  520,    0,  522,  520,    0,  523,  523,  523,
+    0,    0,    0,    0,    0,    0,  523,  523,    0,    0,
+    0,    0,    0,  522,    0,  522,    0,    0,  522,  522,
+  522,  522,  522,  522,  522,    0,    0,  522,  522,  522,
+    0,    0,    0,    0,  522,  522,    0,    0,    0,  522,
+  522,    0,    0,    0,    0,    0,    0,    0,    0,  522,
+    0,    0,    0,  522,  522,    0,    0,    0,  522,    0,
+    0,    0,    0,    0,  522,    0,  522,  522,    0,  522,
+    0,  522,  522,  522,  522,  522,    0,  522,  522,  522,
+  522,  522,  522,  522,  522,  522,  522,  522,  522,  522,
+  522,  522,  522,    0,    0,  522,  522,  522,    0,  522,
+  522,  522,    0,  522,  522,  522,    0,  531,  522,    0,
+  522,    0,    0,  522,  522,  522,  522,  531,    0,  522,
+  522,  522,    0,    0,    0,    0,    0,  522,    0,    0,
+  522,  522,  522,  522,  522,  522,  522,  522,    0,  522,
+  522,  522,  522,  522,    0,    0,  522,    0,    0,    0,
+    0,  531,    0,  522,  522,  522,    0,    0,    0,    0,
+    0,    0,  522,  522,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  520,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  520,    0,  520,    0,
+    0,  520,  520,  520,  520,  520,  520,  520,    0,    0,
+  520,  520,  520,    0,    0,    0,    0,  520,  520,    0,
+    0,    0,  520,  520,    0,    0,    0,    0,    0,    0,
+    0,    0,  520,  535,    0,    0,  520,  520,    0,    0,
+    0,  520,    0,  535,    0,    0,    0,  520,    0,  520,
+  520,    0,  520,    0,  520,  520,  520,  520,  520,    0,
+  520,  520,  520,  520,  520,  520,  520,  520,  520,  520,
+  520,  520,  520,  520,  520,  520,    0,  535,  520,  520,
+  520,    0,  520,  520,  520,    0,  520,  520,  520,    0,
+    0,  520,    0,  520,    0,    0,  520,  520,  520,  520,
+    0,    0,  520,  520,  520,    0,    0,    0,    0,    0,
+  520,    0,    0,  520,  520,  520,  520,  520,  520,  520,
+  520,    0,  520,  520,  520,  520,  520,    0,    0,  520,
+    0,    0,    0,  531,    0,    0,  520,  520,  520,    0,
+    0,    0,    0,    0,    0,  520,  520,    0,    0,    0,
+    0,    0,  531,    0,  531,    0,    0,  531,  531,  531,
+  531,  531,  531,  531,    0,    0,  531,  531,  531,    0,
+    0,    0,    0,  531,  531,    0,    0,    0,  531,  531,
+    0,    0,    0,    0,    0,    0,    0,    0,  531,  533,
+    0,    0,  531,  531,    0,    0,    0,  531,    0,  533,
+    0,    0,    0,  531,    0,  531,  531,    0,  531,    0,
+  531,  531,  531,  531,  531,    0,  531,  531,  531,  531,
+  531,  531,  531,  531,  531,  531,  531,  531,  531,  531,
+  531,  531,    0,  533,  531,  531,  531,    0,  531,  531,
+  531,    0,  531,  531,  531,    0,    0,  531,    0,  531,
+    0,    0,  531,  531,  531,  531,    0,  531,  531,  531,
+  531,    0,    0,    0,    0,    0,  531,    0,    0,  531,
+  531,  531,  531,  531,  531,  531,  531,    0,  531,  531,
+  531,  531,  531,    0,    0,  531,    0,    0,    0,  535,
+    0,    0,  531,  531,  531,    0,    0,    0,    0,    0,
+    0,  531,  531,    0,    0,    0,    0,    0,  535,    0,
+  535,    0,    0,  535,  535,  535,  535,  535,  535,  535,
+    0,    0,  535,  535,  535,    0,    0,    0,    0,  535,
+  535,    0,    0,    0,  535,  535,    0,    0,    0,    0,
+    0,    0,    0,    0,  535,  198,    0,    0,  535,  535,
+    0,    0,    0,  535,    0,  198,    0,    0,    0,  535,
+    0,  535,  535,    0,  535,    0,  535,  535,  535,  535,
+  535,    0,  535,  535,  535,  535,  535,  535,  535,  535,
+  535,  535,  535,  535,  535,  535,  535,  535,    0,  198,
+  535,  535,  535,    0,  535,  535,  535,    0,  535,  535,
+  535,    0,    0,  535,    0,  535,  198,    0,  535,  535,
+  535,  535,    0,  535,  535,  535,  535,    0,    0,    0,
+    0,    0,  535,    0,    0,  535,  535,  535,  535,  535,
+  535,  535,  535,    0,  535,  535,  535,  535,  535,    0,
+    0,  535,    0,    0,    0,  533,    0,    0,  535,  535,
+  535,    0,    0,    0,    0,    0,    0,  535,  535,    0,
+    0,    0,    0,    0,  533,    0,  533,    0,    0,  533,
+  533,  533,  533,  533,  533,  533,    0,    0,  533,  533,
+  533,    0,    0,    0,    0,  533,  533,    0,    0,    0,
+  533,  533,    0,    0,    0,    0,  156,    0,    0,    0,
+  533,    0,    0,    0,  533,  533,  156,    0,    0,  533,
+    0,    0,    0,    0,    0,  533,    0,  533,  533,    0,
+  533,    0,  533,  533,  533,  533,  533,    0,  533,  533,
+  533,  533,  533,  533,  533,  533,  533,  533,  533,  533,
+  533,  533,  533,  533,    0,    0,  533,  533,  533,    0,
+  533,  533,  533,    0,  533,  533,  533,    0,    0,  533,
+    0,  533,    0,    0,  533,  533,  533,  533,    0,  533,
+  533,  533,  533,    0,    0,    0,    0,    0,  533,    0,
+    0,  533,  533,  533,  533,  533,  533,  533,  533,    0,
+  533,  533,  533,  533,  533,    0,    0,  533,    0,    0,
+    0,  198,    0,    0,  533,  533,  533,    0,    0,    0,
+    0,    0,    0,  533,  533,    0,    0,    0,    0,    0,
+  198,    0,  198,    0,    0,  198,  198,  198,  198,  198,
+  198,  198,    0,    0,  198,  198,  198,    0,    0,    0,
+    0,  198,  198,    0,    0,    0,  198,  198,    0,    0,
+    0,    0,    0,    0,    0,    0,  198,    0,    0,    0,
+  198,  198,    0,    0,    0,  198,    0,    0,    0,    0,
+    0,  198,    0,  198,  198,    0,  198,    0,  198,  198,
+  198,  198,  198,    0,  198,  198,  198,  198,  198,  198,
+  198,  198,  198,  198,  198,  198,  198,  198,  198,  198,
+    0,    0,  198,  198,  198,    0,  198,  198,  198,    0,
+  198,  198,  198,    0,  358,  198,    0,  198,    0,    0,
+  198,  198,  198,  198,  358,    0,  198,  198,  198,    0,
+    0,    0,    0,    0,  198,    0,    0,  198,  198,  198,
+  198,  198,  198,  198,  198,    0,  198,  198,  198,  198,
+  198,    0,  156,  198,    0,    0,    0,    0,  358,    0,
+  198,  198,  198,    0,    0,    0,    0,  156,  156,  198,
+  198,  156,    0,  156,    0,  360,  156,  156,  156,  156,
+  156,  156,  156,    0,    0,  156,  156,  156,    0,    0,
+    0,    0,  156,  156,    0,    0,    0,  156,  156,    0,
+    0,    0,    0,    0,    0,    0,    0,  156,    0,    0,
+    0,  156,  156,    0,    0,    0,  156,    0,    0,    0,
+    0,    0,  156,    0,  156,  156,    0,  156,    0,  156,
+  156,  156,  156,  156,    0,  156,  156,  156,  156,  156,
+  156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
+  156,    0,    0,  156,  156,  156,    0,  156,  156,  156,
+    0,  156,  156,  156,    0,  521,  156,    0,  156,    0,
+    0,  156,  156,  156,  156,  521,    0,  156,  156,  156,
+    0,    0,    0,    0,    0,  156,    0,    0,  156,  156,
+  156,  156,  156,  156,  156,  156,    0,  156,  156,  156,
+  156,  156,    0,    0,  156,    0,  521,    0,    0,  521,
+    0,  156,  156,  156,    0,    0,    0,    0,    0,    0,
+  156,  156,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  358,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  358,
+    0,  358,    0,    0,  358,  358,  358,  358,  358,  358,
+  358,    0,    0,  358,  358,  358,    0,    0,    0,    0,
+  358,  358,    0,    0,    0,  358,  358,    0,   40,    0,
+    0,    0,    0,    0,    0,  358,    0,    0,   40,  358,
+  358,    0,    0,    0,  358,    0,    0,    0,    0,    0,
+  358,    0,  358,  358,    0,  358,    0,  358,  358,  358,
+  358,  358,    0,  358,  358,  358,  358,  358,  358,  358,
+  358,  358,  358,  358,  358,  358,  358,  358,  358,    0,
+    0,  358,  358,  358,    0,  358,  358,  358,    0,  358,
+  358,  358,    0,    0,  358,    0,  358,    0,    0,  358,
+  358,  358,  358,    0,    0,  358,  358,  358,    0,    0,
+    0,    0,    0,  358,    0,    0,  358,  358,  358,  358,
+  358,  358,  358,  358,    0,  358,  358,  358,  358,  358,
+    0,  521,  358,    0,    0,    0,    0,    0,    0,  358,
+  358,  358,    0,    0,    0,    0,    0,    0,  358,  358,
+  521,    0,  521,    0,    0,  521,  521,  521,  521,  521,
+  521,  521,    0,    0,  521,  521,  521,    0,    0,    0,
+    0,  521,  521,    0,    0,    0,  521,  521,    0,  530,
+    0,    0,    0,    0,    0,    0,  521,    0,    0,  530,
+  521,  521,    0,    0,    0,  521,    0,    0,    0,    0,
+    0,  521,    0,  521,  521,    0,  521,    0,  521,  521,
+  521,  521,  521,    0,  521,  521,  521,  521,  521,  521,
+  521,  521,  521,  521,  521,  521,  521,  521,  521,  521,
+    0,    0,  521,  521,  521,    0,  521,  521,  521,    0,
+  521,  521,  521,    0,    0,  521,    0,  521,    0,    0,
+  521,  521,  521,  521,    0,    0,  521,  521,  521,    0,
+    0,    0,    0,    0,  521,    0,    0,  521,  521,  521,
+  521,  521,  521,  521,  521,    0,  521,  521,  521,  521,
+  521,    0,    0,  521,   40,    0,    0,    0,    0,    0,
+  521,  521,  521,    0,    0,    0,    0,    0,    0,  521,
+  521,    0,    0,   40,    0,   40,   40,    0,   40,   40,
+   40,   40,   40,   40,   40,    0,    0,   40,   40,   40,
+    0,    0,    0,    0,   40,   40,    0,    0,    0,   40,
+   40,    0,  529,    0,    0,    0,    0,    0,    0,   40,
+    0,    0,  529,   40,   40,    0,    0,    0,   40,    0,
+    0,    0,    0,    0,   40,    0,   40,   40,    0,   40,
+    0,   40,   40,   40,   40,   40,    0,   40,   40,   40,
+   40,   40,   40,   40,   40,   40,   40,   40,   40,   40,
+   40,   40,   40,    0,    0,   40,   40,   40,    0,   40,
+   40,   40,    0,   40,   40,   40,    0,    0,   40,    0,
+   40,    0,    0,   40,   40,   40,   40,    0,    0,   40,
+   40,   40,    0,    0,    0,    0,    0,   40,    0,    0,
+   40,   40,   40,   40,   40,   40,   40,   40,    0,   40,
+   40,   40,   40,   40,    0,  530,   40,    0,    0,    0,
+    0,    0,    0,   40,   40,   40,    0,    0,    0,    0,
+    0,    0,   40,   40,  530,    0,  530,    0,    0,  530,
+  530,  530,  530,  530,  530,  530,    0,    0,  530,  530,
+  530,    0,    0,    0,    0,  530,  530,    0,    0,    0,
+  530,  530,    0,    0,    0,    0,    0,    0,    0,    0,
+  530,    0,    0,    0,  530,  530,    0,    0,    0,  530,
+    0,    0,    0,    0,    0,  530,    0,  530,  530,    0,
+  530,    0,  530,  530,  530,  530,  530,    0,  530,  530,
+  530,  530,  530,  530,  530,  530,  530,  530,  530,  530,
+  530,  530,  530,  530,    0,    0,  530,  530,  530,    0,
+  530,  530,  530,    0,  530,  530,  530,    0,  525,  530,
+    0,  530,    0,    0,  530,  530,  530,  530,  525,  530,
+  530,  530,  530,    0,    0,    0,    0,    0,  530,    0,
+    0,  530,  530,  530,  530,  530,  530,  530,  530,    0,
+  530,  530,  530,  530,  530,    0,    0,  530,  529,  525,
+    0,    0,  525,    0,  530,  530,  530,    0,    0,    0,
+    0,    0,    0,  530,  530,    0,    0,  529,    0,  529,
+    0,    0,  529,  529,  529,  529,  529,  529,  529,    0,
+    0,  529,  529,  529,    0,    0,    0,    0,  529,  529,
+    0,    0,    0,  529,  529,    0,    0,    0,    0,    0,
+    0,    0,    0,  529,    0,    0,    0,  529,  529,    0,
+    0,    0,  529,    0,    0,    0,    0,    0,  529,    0,
+  529,  529,    0,  529,    0,  529,  529,  529,  529,  529,
+    0,  529,  529,  529,  529,  529,  529,  529,  529,  529,
+  529,  529,  529,  529,  529,  529,  529,    0,    0,  529,
+  529,  529,    0,  529,  529,  529,    0,  529,  529,  529,
+    0,  198,  529,    0,  529,    0,    0,  529,  529,  529,
+  529,  198,  529,  529,  529,  529,    0,    0,    0,    0,
+    0,  529,    0,    0,  529,  529,  529,  529,  529,  529,
+  529,  529,    0,  529,  529,  529,  529,  529,    0,    0,
+  529,    0,    0,    0,    0,  198,    0,  529,  529,  529,
+    0,    0,    0,    0,    0,    0,  529,  529,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,  525,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  525,    0,  525,    0,    0,  525,  525,
+  525,  525,  525,  525,  525,    0,    0,  525,  525,  525,
+    0,    0,    0,    0,  525,  525,    0,    0,    0,  525,
+  525,    0,    0,    0,    0,    0,    0,    0,    0,  525,
+    0,    0,    0,  525,  525,    0,    0,    0,  525,    0,
+    0,    0,    0,    0,  525,    0,  525,  525,    0,  525,
+    0,  525,  525,  525,  525,  525,    0,  525,  525,  525,
+  525,  525,  525,  525,  525,  525,  525,  525,  525,  525,
+  525,  525,  525,    0,    0,  525,  525,  525,    0,  525,
+  525,  525,    0,  525,  525,  525,    0,  200,  525,    0,
+  525,    0,    0,  525,  525,  525,  525,  200,    0,  525,
+  525,  525,    0,    0,    0,    0,    0,  525,    0,    0,
+  525,  525,  525,  525,  525,  525,  525,  525,    0,  525,
+  525,  525,  525,  525,    0,    0,  525,  198,    0,    0,
+    0,  200,    0,  525,  525,    0,    0,    0,    0,    0,
+    0,    0,  525,  525,    0,    0,  198,    0,  198,    0,
+    0,  198,  198,  198,  198,  198,  198,  198,    0,    0,
+  198,  198,  198,    0,    0,    0,    0,  198,  198,    0,
+    0,    0,  198,  198,    0,    0,    0,    0,    0,    0,
+    0,    0,  198,    0,    0,    0,  198,  198,    0,    0,
+    0,  198,    0,    0,    0,    0,    0,  198,    0,  198,
+  198,    0,  198,    0,  198,  198,  198,  198,  198,    0,
+  198,  198,  198,  198,  198,  198,  198,  198,  198,  198,
+  198,  198,  198,  198,  198,  198,    0,    0,  198,  198,
+  198,    0,  198,  198,  198,    0,  198,  198,  198,    0,
+  374,  198,    0,  198,    0,    0,  198,  198,  198,  198,
+  374,    0,  198,  198,  198,    0,    0,    0,    0,    0,
+  198,    0,    0,  198,  198,  198,  198,  198,  198,  198,
+  198,    0,  198,  198,  198,  198,  198,    0,    0,  198,
+    0,    0,    0,    0,  374,    0,  198,  198,  198,    0,
+    0,    0,    0,    0,    0,  198,  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,  200,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  200,    0,  200,    0,    0,  200,  200,  200,
+  200,  200,  200,  200,    0,    0,  200,  200,  200,    0,
+    0,    0,    0,  200,  200,    0,    0,    0,  200,  200,
+    0,    0,    0,    0,    0,    0,    0,    0,  200,    0,
+    0,    0,  200,  200,    0,    0,    0,  200,    0,    0,
+    0,    0,    0,  200,    0,  200,  200,    0,  200,    0,
+  200,  200,  200,  200,  200,    0,  200,  200,  200,  200,
+  200,  200,  200,  200,  200,  200,  200,  200,  200,  200,
+  200,  200,    0,    0,  200,  200,  200,    0,  200,  200,
+  200,    0,  200,  200,  200,    0,  359,  200,    0,  200,
+    0,    0,  200,  200,  200,  200,  359,    0,  200,  200,
+  200,    0,    0,    0,    0,    0,  200,    0,    0,  200,
+  200,  200,  200,  200,  200,  200,  200,    0,  200,  200,
+  200,  200,  200,    0,    0,  200,  374,    0,    0,    0,
+  359,    0,  200,  200,  200,    0,    0,    0,    0,    0,
+    0,  200,  200,    0,    0,  374,    0,  374,    0,    0,
+  374,  374,  374,  374,  374,  374,  374,    0,    0,  374,
+  374,  374,    0,    0,    0,    0,  374,  374,    0,    0,
+    0,  374,  374,    0,    0,    0,    0,    0,    0,    0,
+    0,  374,    0,    0,    0,  374,  374,    0,    0,    0,
+  374,    0,    0,    0,    0,    0,  374,    0,  374,  374,
+    0,  374,    0,  374,  374,  374,  374,  374,    0,  374,
+  374,  374,  374,  374,  374,  374,  374,  374,  374,  374,
+  374,  374,  374,  374,  374,    0,    0,  374,  374,  374,
+    0,  374,  374,  374,    0,  374,  374,  374,    0,   59,
+  374,    0,  374,    0,    0,  374,  374,  374,  374,   59,
+    0,  374,  374,  374,    0,    0,    0,    0,    0,  374,
+    0,    0,  374,  374,  374,  374,  374,  374,  374,  374,
+    0,  374,  374,  374,  374,  374,    0,    0,  374,    0,
+    0,    0,    0,    0,    0,  374,  374,  374,    0,    0,
+    0,    0,    0,    0,  374,  374,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  359,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  359,    0,  359,    0,    0,  359,  359,  359,  359,
+  359,  359,  359,    0,    0,  359,  359,  359,    0,    0,
+    0,    0,  359,  359,    0,    0,    0,  359,  359,    0,
+    0,    0,    0,    0,    0,    0,    0,  359,    0,    0,
+    0,  359,  359,    0,    0,    0,  359,    0,    0,    0,
+    0,    0,  359,    0,  359,  359,    0,  359,    0,  359,
+  359,  359,  359,  359,    0,  359,  359,  359,  359,  359,
+  359,  359,  359,  359,  359,  359,  359,  359,  359,  359,
+  359,    0,    0,  359,  359,  359,    0,  359,  359,  359,
+    0,  359,  359,  359,    0,  125,  359,    0,  359,    0,
+    0,  359,  359,  359,  359,  125,    0,  359,  359,  359,
+    0,    0,    0,    0,    0,  359,    0,    0,  359,  359,
+  359,  359,  359,  359,  359,  359,    0,  359,  359,  359,
+  359,  359,    0,    0,  359,   59,    0,    0,    0,  125,
+    0,  359,  359,  359,    0,    0,    0,    0,    0,    0,
+  359,  359,    0,    0,   59,    0,   59,    0,    0,   59,
+   59,   59,   59,   59,   59,   59,    0,    0,   59,   59,
+   59,    0,    0,    0,    0,   59,   59,    0,    0,    0,
+   59,   59,    0,    0,    0,    0,    0,    0,    0,    0,
+   59,    0,    0,    0,   59,   59,    0,    0,    0,   59,
+    0,    0,    0,    0,    0,   59,    0,   59,   59,    0,
+   59,    0,   59,   59,   59,   59,   59,    0,   59,   59,
+   59,   59,   59,   59,   59,   59,   59,   59,   59,   59,
+   59,   59,   59,   59,    0,    0,   59,   59,   59,    0,
+   59,   59,   59,    0,   59,   59,   59,    0,  432,   59,
+    0,   59,    0,    0,   59,   59,   59,   59,  432,    0,
+   59,   59,   59,    0,    0,    0,    0,    0,   59,    0,
+    0,   59,   59,   59,   59,   59,   59,   59,   59,    0,
+   59,   59,   59,   59,   59,    0,    0,   59,    0,    0,
+    0,    0,    0,    0,   59,   59,   59,    0,    0,    0,
+    0,    0,    0,   59,   59,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  125,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  125,    0,  125,    0,    0,  125,  125,  125,  125,  125,
+  125,  125,    0,    0,  125,  125,  125,    0,    0,    0,
+    0,  125,  125,    0,    0,    0,  125,  125,    0,  441,
+    0,    0,    0,    0,    0,    0,  125,    0,    0,  441,
+  125,  125,    0,    0,    0,  125,    0,    0,    0,    0,
+    0,  125,    0,  125,  125,    0,  125,    0,  125,  125,
+  125,  125,  125,    0,  125,  125,  125,  125,  125,  125,
+  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,
+    0,    0,  125,  125,  125,    0,  125,  125,  125,    0,
+  125,  125,  125,    0,    0,  125,    0,  125,    0,    0,
+  125,  125,  125,  125,    0,    0,  125,  125,  125,    0,
+    0,    0,    0,    0,  125,    0,    0,  125,  125,  125,
+  125,  125,  125,  125,  125,    0,  125,  125,  125,  125,
+  125,    0,    0,  125,  432,    0,    0,    0,    0,    0,
+  125,  125,    0,    0,    0,    0,    0,    0,    0,  125,
+  125,    0,    0,  432,    0,  432,    0,    0,  432,  432,
+  432,  432,  432,  432,  432,    0,    0,  432,  432,  432,
+    0,    0,    0,    0,  432,  432,    0,    0,    0,  432,
+  432,    0,  357,    0,    0,    0,    0,    0,    0,  432,
+    0,    0,  357,  432,  432,    0,    0,    0,  432,    0,
+    0,    0,    0,    0,  432,    0,  432,  432,    0,  432,
+    0,  432,  432,  432,  432,  432,    0,  432,  432,  432,
+  432,  432,  432,  432,  432,  432,  432,  432,  432,  432,
+  432,  432,  432,    0,    0,  432,  432,  432,    0,  432,
+  432,  432,    0,  432,  432,  432,    0,    0,  432,    0,
+  432,    0,    0,  432,  432,  432,  432,    0,    0,  432,
+  432,  432,    0,    0,    0,    0,    0,  432,    0,    0,
+  432,  432,  432,  432,  432,  432,  432,  432,    0,  432,
+  432,  432,  432,  432,    0,  441,  432,    0,    0,    0,
+    0,    0,    0,  432,  432,  432,    0,    0,    0,    0,
+    0,    0,  432,  432,  441,    0,  441,    0,    0,  441,
+  441,  441,  441,  441,  441,  441,    0,    0,  441,  441,
+  441,    0,    0,    0,    0,  441,  441,    0,    0,    0,
+  441,  441,    0,   69,    0,    0,    0,    0,    0,    0,
+  441,    0,    0,   69,  441,  441,    0,    0,    0,  441,
+    0,    0,    0,    0,    0,  441,    0,  441,  441,    0,
+  441,    0,  441,  441,  441,  441,  441,    0,  441,  441,
+  441,  441,  441,  441,  441,  441,  441,  441,  441,  441,
+  441,  441,  441,  441,    0,    0,  441,  441,  441,    0,
+  441,  441,  441,    0,  441,  441,  441,    0,    0,  441,
+    0,  441,    0,    0,  441,  441,  441,  441,    0,    0,
+  441,  441,  441,    0,    0,    0,    0,    0,  441,    0,
+    0,  441,  441,  441,  441,  441,  441,  441,  441,    0,
+  441,  441,  441,  441,  441,    0,    0,  441,  357,    0,
+    0,    0,    0,    0,  441,  441,  441,    0,    0,    0,
+    0,    0,    0,  441,  441,    0,    0,  357,    0,  357,
+    0,    0,  357,  357,  357,  357,  357,  357,  357,    0,
+    0,  357,  357,  357,    0,    0,    0,    0,  357,  357,
+    0,    0,    0,  357,  357,    0,   53,    0,    0,    0,
+    0,    0,    0,  357,    0,    0,   53,  357,  357,    0,
+    0,    0,  357,    0,    0,    0,    0,    0,  357,    0,
+  357,  357,    0,  357,    0,  357,  357,  357,  357,  357,
+    0,  357,  357,  357,  357,  357,  357,  357,  357,  357,
+  357,  357,  357,  357,  357,  357,  357,    0,    0,  357,
+  357,  357,    0,  357,  357,  357,    0,  357,  357,  357,
+    0,    0,  357,    0,  357,    0,    0,  357,  357,  357,
+  357,    0,    0,  357,  357,  357,    0,    0,    0,    0,
+    0,  357,    0,    0,  357,  357,  357,  357,  357,  357,
+  357,  357,    0,  357,  357,  357,  357,  357,    0,   69,
+  357,    0,    0,    0,    0,    0,    0,  357,  357,  357,
+    0,    0,    0,    0,    0,    0,  357,  357,   69,    0,
+   69,    0,    0,   69,   69,   69,   69,   69,   69,   69,
+    0,    0,   69,   69,   69,    0,    0,    0,    0,   69,
+   69,    0,    0,    0,   69,   69,    0,  169,    0,    0,
+    0,    0,    0,    0,   69,    0,    0,  169,   69,   69,
+    0,    0,    0,   69,    0,    0,    0,    0,    0,   69,
+    0,   69,   69,    0,   69,    0,   69,   69,   69,   69,
+   69,    0,   69,   69,   69,   69,   69,   69,   69,   69,
+   69,   69,   69,   69,   69,   69,   69,   69,    0,    0,
+   69,   69,   69,    0,   69,   69,   69,    0,   69,   69,
+   69,    0,    0,   69,    0,   69,    0,    0,   69,   69,
+   69,   69,    0,    0,   69,   69,   69,    0,    0,    0,
+    0,    0,   69,    0,    0,   69,   69,   69,   69,   69,
+   69,   69,   69,    0,   69,   69,   69,   69,   69,    0,
+    0,   69,   53,    0,    0,    0,    0,    0,   69,   69,
+   69,    0,    0,    0,    0,    0,    0,   69,   69,    0,
+    0,   53,    0,   53,    0,    0,   53,   53,   53,   53,
+   53,   53,   53,    0,    0,   53,   53,   53,    0,    0,
+    0,    0,   53,   53,    0,    0,    0,   53,   53,    0,
+  177,    0,    0,    0,    0,    0,    0,   53,    0,    0,
+  177,   53,   53,    0,    0,    0,   53,    0,    0,    0,
+    0,    0,   53,    0,   53,   53,    0,   53,    0,   53,
+   53,   53,   53,   53,    0,   53,   53,   53,   53,   53,
+   53,   53,   53,   53,   53,   53,   53,   53,   53,   53,
+   53,    0,    0,   53,   53,   53,    0,   53,   53,   53,
+    0,   53,   53,   53,    0,    0,   53,    0,   53,    0,
+    0,   53,   53,   53,   53,    0,    0,   53,   53,   53,
+    0,    0,    0,    0,    0,   53,    0,    0,   53,   53,
+   53,   53,   53,   53,   53,   53,    0,   53,   53,   53,
+   53,   53,    0,  169,   53,    0,    0,    0,    0,    0,
+    0,   53,   53,   53,    0,    0,    0,    0,    0,    0,
+   53,   53,  169,    0,  169,    0,    0,  169,  169,  169,
+  169,  169,  169,  169,    0,    0,  169,  169,  169,    0,
+    0,    0,    0,  169,  169,    0,    0,    0,  169,  169,
+    0,   55,    0,    0,    0,    0,    0,    0,  169,    0,
+    0,   55,  169,  169,    0,    0,    0,  169,    0,    0,
+    0,    0,    0,  169,    0,  169,  169,    0,  169,    0,
+  169,  169,  169,  169,  169,    0,  169,  169,  169,  169,
+  169,  169,  169,  169,  169,  169,  169,  169,  169,  169,
+  169,  169,    0,    0,  169,  169,  169,    0,  169,  169,
+  169,    0,  169,  169,  169,    0,    0,  169,    0,  169,
+    0,    0,  169,  169,  169,  169,    0,    0,  169,  169,
+  169,    0,    0,    0,    0,    0,  169,    0,    0,  169,
+  169,  169,  169,  169,  169,  169,  169,    0,  169,  169,
+  169,  169,  169,    0,    0,  169,  177,    0,    0,    0,
+    0,    0,  169,  169,  169,    0,    0,    0,    0,    0,
+    0,  169,  169,    0,    0,  177,    0,  177,    0,    0,
+  177,  177,  177,  177,  177,  177,  177,    0,    0,  177,
+  177,  177,    0,    0,    0,    0,  177,  177,    0,    0,
+    0,  177,  177,    0,  362,    0,    0,    0,    0,    0,
+    0,  177,    0,    0,  362,  177,  177,    0,    0,    0,
+  177,    0,    0,    0,    0,    0,  177,    0,  177,  177,
+    0,  177,    0,  177,  177,  177,  177,  177,    0,  177,
+  177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+  177,  177,  177,  177,  177,    0,    0,  177,  177,  177,
+    0,  177,  177,  177,    0,  177,  177,  177,    0,    0,
+  177,    0,  177,    0,    0,  177,  177,  177,  177,    0,
+    0,  177,  177,  177,    0,    0,    0,    0,    0,  177,
+    0,    0,  177,  177,  177,  177,  177,  177,  177,  177,
+    0,  177,  177,  177,  177,  177,    0,   55,  177,    0,
+    0,    0,    0,    0,    0,  177,  177,  177,    0,    0,
+    0,    0,    0,    0,  177,  177,   55,    0,   55,    0,
+    0,   55,   55,   55,   55,   55,   55,   55,    0,    0,
+   55,   55,   55,    0,    0,    0,    0,   55,   55,    0,
+    0,    0,   55,   55,    0,  164,    0,    0,    0,    0,
+    0,    0,   55,    0,    0,  164,   55,   55,    0,    0,
+    0,   55,    0,    0,    0,    0,    0,   55,    0,   55,
+   55,    0,   55,    0,   55,   55,   55,   55,   55,    0,
+   55,   55,   55,   55,   55,   55,   55,   55,   55,   55,
+   55,   55,   55,   55,   55,   55,    0,    0,   55,   55,
+   55,    0,   55,   55,   55,    0,   55,   55,   55,    0,
+    0,   55,    0,   55,    0,    0,   55,   55,   55,   55,
+    0,    0,   55,   55,   55,    0,    0,    0,    0,    0,
+   55,    0,    0,   55,   55,   55,   55,   55,   55,   55,
+   55,    0,   55,   55,   55,   55,   55,    0,    0,   55,
+  362,    0,    0,    0,    0,    0,   55,   55,   55,    0,
+    0,    0,    0,    0,    0,   55,   55,    0,    0,  362,
+    0,  362,    0,    0,  362,  362,  362,  362,  362,  362,
+  362,    0,    0,  362,  362,  362,    0,    0,    0,    0,
+  362,  362,    0,    0,    0,  362,  362,    0,  406,    0,
+    0,    0,    0,    0,    0,  362,    0,    0,  406,  362,
+  362,    0,    0,    0,  362,    0,    0,    0,    0,    0,
+  362,    0,  362,  362,    0,  362,    0,  362,  362,  362,
+  362,  362,    0,  362,  362,  362,  362,  362,  362,  362,
+  362,  362,  362,  362,  362,  362,  362,  362,  362,    0,
+    0,  362,  362,  362,    0,  362,  362,  362,    0,  362,
+  362,  362,    0,    0,  362,    0,  362,    0,    0,  362,
+  362,  362,  362,    0,    0,  362,  362,  362,    0,    0,
+    0,    0,    0,  362,    0,    0,  362,  362,  362,  362,
+  362,  362,  362,  362,    0,  362,  362,  362,  362,  362,
+    0,  164,  362,    0,    0,    0,    0,    0,    0,  362,
+  362,  362,    0,    0,    0,    0,    0,    0,  362,  362,
+  164,    0,  164,    0,    0,  164,  164,  164,  164,  164,
+  164,  164,    0,    0,  164,  164,  164,    0,    0,    0,
+    0,  164,  164,    0,    0,    0,  164,  164,    0,  472,
+    0,    0,    0,    0,    0,    0,  164,    0,    0,  472,
+  164,  164,    0,    0,    0,  164,    0,    0,    0,    0,
+    0,  164,    0,  164,  164,    0,  164,    0,  164,  164,
+  164,  164,  164,    0,  164,  164,  164,  164,  164,  164,
+  164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
+    0,    0,  164,  164,  164,    0,  164,  164,  164,    0,
+  164,  164,  164,    0,    0,  164,    0,  164,    0,    0,
+  164,  164,  164,  164,    0,    0,  164,  164,  164,    0,
+    0,    0,    0,    0,  164,    0,    0,  164,  164,  164,
+  164,  164,  164,  164,  164,    0,  164,  164,  164,  164,
+  164,    0,    0,  164,  406,    0,    0,    0,    0,    0,
+  164,  164,  164,    0,    0,    0,    0,    0,    0,  164,
+  164,    0,    0,  406,    0,  406,    0,    0,  406,  406,
+  406,  406,  406,  406,  406,    0,    0,  406,  406,  406,
+    0,    0,    0,    0,  406,  406,    0,    0,    0,  406,
+  406,    0,   34,    0,    0,    0,    0,    0,    0,  406,
+    0,    0,   34,  406,  406,    0,    0,    0,  406,    0,
+    0,    0,    0,    0,  406,    0,  406,  406,    0,  406,
+    0,  406,  406,  406,  406,  406,    0,  406,  406,  406,
+  406,  406,  406,  406,  406,  406,  406,  406,  406,  406,
+  406,  406,  406,    0,    0,  406,  406,  406,    0,  406,
+  406,  406,    0,  406,  406,  406,    0,    0,  406,    0,
+  406,    0,    0,  406,  406,  406,  406,    0,    0,  406,
+  406,  406,    0,    0,    0,    0,    0,  406,    0,    0,
+  406,  406,  406,  406,  406,  406,  406,  406,    0,  406,
+  406,  406,  406,  406,    0,  472,  406,    0,    0,    0,
+    0,    0,    0,  406,  406,  406,    0,    0,    0,    0,
+    0,    0,  406,  406,  472,    0,  472,    0,    0,  472,
+  472,  472,  472,  472,  472,  472,    0,    0,  472,  472,
+  472,    0,    0,    0,    0,  472,  472,    0,    0,    0,
+  472,  472,    0,  151,    0,    0,    0,    0,    0,    0,
+  472,    0,    0,  151,  472,  472,    0,    0,    0,  472,
+    0,    0,    0,    0,    0,  472,    0,  472,  472,    0,
+  472,    0,  472,  472,  472,  472,  472,    0,  472,  472,
+  472,  472,  472,  472,  472,  472,  472,  472,  472,  472,
+  472,  472,  472,  472,    0,    0,  472,  472,  472,    0,
+  472,  472,  472,    0,  472,  472,  472,    0,    0,  472,
+    0,  472,    0,    0,  472,  472,  472,  472,    0,    0,
+  472,  472,  472,    0,    0,    0,    0,    0,  472,    0,
+    0,  472,  472,  472,  472,  472,  472,  472,  472,    0,
+  472,  472,  472,  472,  472,    0,    0,  472,   34,    0,
+    0,    0,    0,    0,  472,  472,  472,    0,    0,    0,
+    0,    0,    0,  472,  472,    0,    0,   34,    0,   34,
+    0,    0,   34,   34,   34,   34,   34,   34,   34,    0,
+    0,   34,   34,   34,    0,    0,    0,    0,   34,   34,
+    0,    0,    0,   34,   34,    0,  149,    0,    0,    0,
+    0,    0,    0,   34,    0,    0,  149,   34,   34,    0,
+    0,    0,   34,    0,    0,    0,    0,    0,   34,    0,
+   34,   34,    0,   34,    0,   34,   34,   34,   34,   34,
+    0,   34,   34,   34,   34,   34,   34,   34,   34,   34,
+   34,   34,   34,   34,   34,   34,   34,    0,    0,   34,
+   34,   34,    0,   34,   34,   34,    0,   34,   34,   34,
+    0,    0,   34,    0,   34,    0,    0,   34,   34,   34,
+   34,    0,    0,   34,   34,   34,    0,    0,    0,    0,
+    0,   34,    0,    0,   34,   34,   34,   34,   34,   34,
+   34,   34,    0,   34,   34,   34,   34,   34,    0,  151,
+   34,    0,    0,    0,    0,    0,    0,   34,   34,   34,
+    0,    0,    0,    0,    0,    0,   34,   34,  151,    0,
+  151,    0,    0,  151,  151,  151,  151,  151,  151,  151,
+    0,    0,  151,  151,  151,    0,    0,    0,    0,  151,
+  151,    0,    0,    0,  151,  151,    0,   67,    0,    0,
+    0,    0,    0,    0,  151,    0,    0,   67,  151,  151,
+    0,    0,    0,  151,    0,    0,    0,    0,    0,  151,
+    0,  151,  151,    0,  151,    0,  151,  151,  151,  151,
+  151,    0,  151,  151,  151,  151,  151,  151,  151,  151,
+  151,  151,  151,  151,  151,  151,  151,  151,    0,    0,
+  151,  151,  151,    0,  151,  151,  151,    0,  151,  151,
+  151,    0,    0,  151,    0,  151,    0,    0,  151,  151,
+  151,  151,    0,    0,  151,  151,  151,    0,    0,    0,
+    0,    0,  151,    0,    0,  151,  151,  151,  151,  151,
+  151,  151,  151,    0,  151,  151,  151,  151,  151,    0,
+    0,  151,  149,    0,    0,    0,    0,    0,  151,  151,
+  151,    0,    0,    0,    0,    0,    0,  151,  151,    0,
+    0,  149,    0,  149,    0,    0,  149,  149,  149,  149,
+  149,  149,  149,    0,    0,  149,  149,  149,    0,    0,
+    0,    0,  149,  149,    0,    0,    0,  149,  149,    0,
+   68,    0,    0,    0,    0,    0,    0,  149,    0,    0,
+   68,  149,  149,    0,    0,    0,  149,    0,    0,    0,
+    0,    0,  149,    0,  149,  149,    0,  149,    0,  149,
+  149,  149,  149,  149,    0,  149,  149,  149,  149,  149,
+  149,  149,  149,  149,  149,  149,  149,  149,  149,  149,
+  149,    0,    0,  149,  149,  149,    0,  149,  149,  149,
+    0,  149,  149,  149,    0,    0,  149,    0,  149,    0,
+    0,  149,  149,  149,  149,    0,    0,  149,  149,  149,
+    0,    0,    0,    0,    0,  149,    0,    0,  149,  149,
+  149,  149,  149,  149,  149,  149,    0,  149,  149,  149,
+  149,  149,    0,   67,  149,    0,    0,    0,    0,    0,
+    0,  149,  149,  149,    0,    0,    0,    0,    0,    0,
+  149,  149,   67,    0,   67,    0,    0,   67,   67,   67,
+   67,   67,   67,   67,    0,    0,   67,   67,   67,    0,
+    0,    0,    0,   67,   67,    0,    0,    0,   67,   67,
+    0,   40,    0,    0,    0,    0,    0,    0,   67,    0,
+    0,   40,   67,   67,    0,    0,    0,   67,    0,    0,
+    0,    0,    0,   67,    0,   67,   67,    0,   67,    0,
+   67,   67,   67,   67,   67,    0,   67,   67,   67,   67,
+   67,   67,   67,   67,   67,   67,   67,   67,   67,   67,
+   67,   67,    0,    0,   67,   67,   67,    0,   67,   67,
+   67,    0,   67,   67,   67,    0,    0,   67,    0,   67,
+    0,    0,   67,   67,   67,   67,    0,    0,   67,   67,
+   67,    0,    0,    0,    0,    0,   67,    0,    0,   67,
+   67,   67,   67,   67,   67,   67,   67,    0,   67,   67,
+   67,   67,   67,    0,    0,   67,   68,    0,    0,    0,
+    0,    0,   67,   67,   67,    0,    0,    0,    0,    0,
+    0,   67,   67,    0,    0,   68,    0,   68,    0,    0,
+   68,   68,   68,   68,   68,   68,   68,    0,    0,   68,
+   68,   68,    0,    0,    0,    0,   68,   68,    0,    0,
+    0,   68,   68,    0,  438,    0,    0,    0,    0,    0,
+    0,   68,    0,    0,  438,   68,   68,    0,    0,    0,
+   68,    0,    0,    0,    0,    0,   68,    0,   68,   68,
+    0,   68,    0,   68,   68,   68,   68,   68,    0,   68,
+   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,
+   68,   68,   68,   68,   68,    0,    0,   68,   68,   68,
+    0,   68,   68,   68,    0,   68,   68,   68,    0,    0,
+   68,    0,   68,    0,    0,   68,   68,   68,   68,    0,
+    0,   68,   68,   68,    0,    0,    0,    0,    0,   68,
+    0,    0,   68,   68,   68,   68,   68,   68,   68,   68,
+    0,   68,   68,   68,   68,   68,    0,   40,   68,    0,
+    0,    0,    0,    0,    0,   68,   68,   68,    0,    0,
+    0,    0,    0,    0,   68,   68,   40,    0,   40,    0,
+    0,   40,   40,   40,   40,   40,   40,   40,    0,    0,
+   40,   40,   40,    0,    0,    0,    0,   40,   40,    0,
+    0,    0,   40,   40,    0,  439,    0,    0,    0,    0,
+    0,    0,   40,    0,    0,  439,   40,   40,    0,    0,
+    0,   40,    0,    0,    0,    0,    0,   40,    0,   40,
+   40,    0,   40,    0,   40,   40,   40,   40,   40,    0,
+   40,   40,   40,   40,   40,   40,   40,   40,   40,   40,
+   40,   40,   40,   40,   40,   40,    0,    0,   40,   40,
+   40,    0,   40,   40,   40,    0,   40,   40,   40,    0,
+    0,   40,    0,   40,    0,    0,   40,   40,   40,   40,
+    0,    0,   40,   40,   40,    0,    0,    0,    0,    0,
+   40,    0,    0,   40,   40,   40,   40,   40,   40,   40,
+   40,    0,   40,   40,   40,   40,   40,    0,    0,   40,
+  438,    0,    0,    0,    0,    0,   40,   40,   40,    0,
+    0,    0,    0,    0,    0,   40,   40,    0,    0,  438,
+    0,  438,    0,    0,  438,  438,  438,  438,  438,  438,
+  438,    0,    0,  438,  438,  438,    0,    0,    0,    0,
+  438,  438,    0,    0,    0,  438,  438,    0,  467,    0,
+    0,    0,    0,    0,    0,  438,    0,    0,  467,  438,
+  438,    0,    0,    0,  438,    0,    0,    0,    0,    0,
+  438,    0,  438,  438,    0,  438,    0,  438,  438,  438,
+  438,  438,    0,  438,  438,  438,  438,  438,  438,  438,
+  438,  438,  438,  438,  438,  438,  438,  438,  438,    0,
+    0,  438,  438,  438,    0,  438,  438,  438,    0,  438,
+  438,  438,    0,    0,  438,    0,  438,    0,    0,  438,
+  438,  438,  438,    0,    0,  438,  438,  438,    0,    0,
+    0,    0,    0,  438,    0,    0,  438,  438,  438,  438,
+  438,  438,  438,  438,    0,  438,  438,  438,  438,  438,
+    0,  439,  438,    0,    0,    0,    0,    0,    0,  438,
+  438,  438,    0,    0,    0,    0,    0,    0,  438,  438,
+  439,    0,  439,    0,    0,  439,  439,  439,  439,  439,
+  439,  439,    0,    0,  439,  439,  439,    0,    0,    0,
+    0,  439,  439,    0,    0,    0,  439,  439,    0,   43,
+    0,    0,    0,    0,    0,    0,  439,    0,    0,   43,
+  439,  439,    0,    0,    0,  439,    0,    0,    0,    0,
+    0,  439,    0,  439,  439,    0,  439,    0,  439,  439,
+  439,  439,  439,    0,  439,  439,  439,  439,  439,  439,
+  439,  439,  439,  439,  439,  439,  439,  439,  439,  439,
+    0,    0,  439,  439,  439,    0,  439,  439,  439,    0,
+  439,  439,  439,    0,    0,  439,    0,  439,    0,    0,
+  439,  439,  439,  439,    0,    0,  439,  439,  439,    0,
+    0,    0,    0,    0,  439,    0,    0,  439,  439,  439,
+  439,  439,  439,  439,  439,    0,  439,  439,  439,  439,
+  439,    0,    0,  439,  467,    0,    0,    0,    0,    0,
+  439,  439,  439,    0,    0,    0,    0,    0,    0,  439,
+  439,    0,    0,  467,    0,  467,    0,    0,  467,  467,
+  467,  467,  467,  467,  467,    0,    0,  467,  467,  467,
+    0,    0,    0,    0,  467,  467,    0,    0,    0,  467,
+  467,    0,  363,    0,    0,    0,    0,    0,    0,  467,
+    0,    0,  363,  467,  467,    0,    0,    0,  467,    0,
+    0,    0,    0,    0,  467,    0,  467,  467,    0,  467,
+    0,  467,  467,  467,  467,  467,    0,  467,  467,  467,
+  467,  467,  467,  467,  467,  467,  467,  467,  467,  467,
+  467,  467,  467,    0,    0,  467,  467,  467,    0,  467,
+  467,  467,    0,  467,  467,  467,    0,    0,  467,    0,
+  467,    0,    0,  467,  467,  467,  467,    0,    0,  467,
+  467,  467,    0,    0,    0,    0,    0,  467,    0,    0,
+  467,  467,  467,  467,  467,  467,  467,  467,    0,  467,
+  467,  467,  467,  467,    0,   43,  467,    0,    0,    0,
+    0,    0,    0,  467,  467,  467,    0,    0,    0,    0,
+    0,    0,  467,  467,   43,    0,   43,    0,    0,   43,
+   43,   43,   43,   43,   43,   43,    0,    0,   43,   43,
+   43,    0,    0,    0,    0,   43,   43,    0,    0,    0,
+   43,   43,    0,  473,    0,    0,    0,    0,    0,    0,
+   43,    0,    0,  473,   43,   43,    0,    0,    0,   43,
+    0,    0,    0,    0,    0,   43,    0,   43,   43,    0,
+   43,    0,   43,   43,   43,   43,   43,    0,   43,   43,
+   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
+   43,   43,   43,   43,    0,    0,   43,   43,   43,    0,
+   43,   43,   43,    0,   43,   43,   43,    0,    0,   43,
+    0,   43,    0,    0,   43,   43,   43,   43,    0,    0,
+   43,   43,   43,    0,    0,    0,    0,    0,   43,    0,
+    0,   43,   43,   43,   43,   43,   43,   43,   43,    0,
+   43,   43,   43,   43,   43,    0,    0,   43,  363,    0,
+    0,    0,    0,    0,   43,   43,   43,    0,    0,    0,
+    0,    0,    0,   43,   43,    0,    0,  363,    0,  363,
+    0,    0,  363,  363,  363,  363,  363,  363,  363,    0,
+    0,  363,  363,  363,    0,    0,    0,    0,  363,  363,
+    0,    0,    0,  363,  363,    0,  365,    0,    0,    0,
+    0,    0,    0,  363,    0,    0,  365,  363,  363,    0,
+    0,    0,  363,    0,    0,    0,    0,    0,  363,    0,
+  363,  363,    0,  363,    0,  363,  363,  363,  363,  363,
+    0,  363,  363,  363,  363,  363,  363,  363,  363,  363,
+  363,  363,  363,  363,  363,  363,  363,    0,    0,  363,
+  363,  363,    0,  363,  363,  363,    0,  363,  363,  363,
+    0,    0,  363,    0,  363,    0,    0,  363,  363,  363,
+  363,    0,    0,  363,  363,  363,    0,    0,    0,    0,
+    0,  363,    0,    0,  363,  363,  363,  363,  363,  363,
+  363,  363,    0,  363,  363,  363,  363,  363,    0,  473,
+  363,    0,    0,    0,    0,    0,    0,  363,  363,  363,
+    0,    0,    0,    0,    0,    0,  363,  363,  473,    0,
+  473,    0,    0,  473,  473,  473,  473,  473,  473,  473,
+    0,    0,  473,  473,  473,    0,    0,    0,    0,  473,
+  473,    0,    0,    0,  473,  473,    0,  409,    0,    0,
+    0,    0,    0,    0,  473,    0,    0,  409,  473,  473,
+    0,    0,    0,  473,    0,    0,    0,    0,    0,  473,
+    0,  473,  473,    0,  473,    0,  473,  473,  473,  473,
+  473,    0,  473,  473,  473,  473,  473,  473,  473,  473,
+  473,  473,  473,  473,  473,  473,  473,  473,    0,    0,
+  473,  473,  473,    0,  473,  473,  473,    0,  473,  473,
+  473,    0,    0,  473,    0,  473,    0,    0,  473,  473,
+  473,  473,    0,    0,  473,  473,  473,    0,    0,    0,
+    0,    0,  473,    0,    0,  473,  473,  473,  473,  473,
+  473,  473,  473,    0,  473,  473,  473,  473,  473,    0,
+    0,  473,  365,    0,    0,    0,    0,    0,  473,  473,
+  473,    0,    0,    0,    0,    0,    0,  473,  473,    0,
+    0,  365,    0,  365,    0,    0,  365,  365,  365,  365,
+  365,  365,  365,    0,    0,  365,  365,  365,    0,    0,
+    0,    0,  365,  365,    0,    0,    0,  365,  365,    0,
+  549,    0,    0,    0,    0,    0,    0,  365,    0,    0,
+  549,  365,  365,    0,    0,    0,  365,    0,    0,    0,
+    0,    0,  365,    0,  365,  365,    0,  365,    0,  365,
+  365,  365,  365,  365,    0,  365,  365,  365,  365,  365,
+  365,  365,  365,  365,  365,  365,  365,  365,  365,  365,
+  365,    0,    0,  365,  365,  365,    0,  365,  365,  365,
+    0,  365,  365,  365,    0,    0,  365,    0,  365,    0,
+    0,  365,  365,  365,  365,    0,    0,  365,  365,  365,
+    0,    0,    0,    0,    0,  365,    0,    0,  365,  365,
+  365,  365,  365,  365,  365,  365,    0,  365,  365,  365,
+  365,  365,    0,  409,  365,    0,    0,    0,    0,    0,
+    0,  365,  365,  365,    0,    0,    0,    0,    0,    0,
+  365,  365,  409,    0,  409,    0,    0,  409,  409,  409,
+  409,  409,  409,  409,    0,    0,  409,  409,  409,    0,
+    0,    0,    0,  409,  409,    0,    0,    0,  409,  409,
+    0,  410,    0,    0,    0,    0,    0,    0,  409,    0,
+    0,  410,  409,  409,    0,    0,    0,  409,    0,    0,
+    0,    0,    0,  409,    0,  409,  409,    0,  409,    0,
+  409,  409,  409,  409,  409,    0,  409,  409,  409,  409,
+  409,  409,  409,  409,  409,  409,  409,  409,  409,  409,
+  409,  409,    0,    0,  409,  409,  409,    0,  409,  409,
+  409,    0,  409,  409,  409,    0,    0,  409,    0,  409,
+    0,    0,  409,  409,  409,  409,    0,    0,  409,  409,
+  409,    0,    0,    0,    0,    0,  409,    0,    0,  409,
+  409,  409,  409,  409,  409,  409,  409,    0,  409,  409,
+  409,  409,  409,    0,    0,  409,  549,    0,    0,    0,
+    0,    0,  409,  409,  409,    0,    0,    0,    0,    0,
+    0,  409,  409,    0,    0,  549,    0,  549,    0,    0,
+  549,  549,  549,  549,  549,  549,  549,    0,    0,  549,
+  549,  549,    0,    0,    0,    0,  549,  549,    0,    0,
+    0,  549,  549,    0,  415,    0,    0,    0,    0,    0,
+    0,  549,    0,    0,  415,  549,  549,    0,    0,    0,
+  549,    0,    0,    0,    0,    0,  549,    0,  549,  549,
+    0,  549,    0,  549,  549,  549,  549,  549,    0,  549,
+  549,  549,  549,  549,  549,  549,  549,  549,  549,  549,
+  549,  549,  549,  549,  549,    0,    0,  549,  549,  549,
+    0,  549,  549,  549,    0,  549,  549,  549,    0,    0,
+  549,    0,  549,    0,    0,  549,  549,  549,  549,    0,
+    0,  549,  549,  549,    0,    0,    0,    0,    0,  549,
+    0,    0,  549,  549,  549,  549,  549,  549,  549,  549,
+    0,  549,  549,  549,  549,  549,    0,  410,  549,    0,
+    0,    0,    0,    0,    0,  549,  549,  549,    0,    0,
+    0,    0,    0,    0,  549,  549,  410,    0,  410,    0,
+    0,  410,  410,  410,  410,  410,  410,  410,    0,    0,
+  410,  410,  410,    0,    0,    0,    0,  410,  410,    0,
+    0,    0,  410,  410,    4,    0,    0,    0,    0,    0,
+    0,    0,  410,    0,    4,    0,  410,  410,    0,    0,
+    0,  410,    0,    0,    0,    0,    0,  410,    0,  410,
+  410,    0,  410,    0,  410,  410,  410,  410,  410,    0,
+  410,  410,  410,  410,  410,  410,  410,  410,  410,  410,
+  410,  410,  410,  410,  410,  410,    0,    0,  410,  410,
+  410,    0,  410,  410,  410,    0,  410,  410,  410,    0,
+    0,  410,    0,  410,    0,    0,  410,  410,  410,  410,
+    0,    0,  410,  410,  410,    0,    0,    0,    0,    0,
+  410,    0,    0,  410,  410,  410,  410,  410,  410,  410,
+  410,    0,  410,  410,  410,  410,  410,    0,    0,  410,
+  415,    0,    0,    0,    0,    0,  410,  410,  410,    0,
+    0,    0,    0,    0,    0,  410,  410,    0,    0,  415,
+    0,  415,    0,    0,  415,  415,  415,  415,  415,  415,
+  415,    0,    0,  415,  415,  415,    0,    0,    0,    0,
+  415,  415,    0,    0,    0,  415,  415,  411,    0,    0,
+    0,    0,    0,    0,    0,  415,    0,  411,    0,  415,
+  415,    0,    0,    0,  415,    0,    0,    0,    0,    0,
+  415,    0,  415,  415,    0,  415,    0,  415,  415,  415,
+  415,  415,    0,  415,  415,  415,  415,  415,  415,  415,
+  415,  415,  415,  415,  415,  415,  415,  415,  415,    0,
+    0,  415,  415,  415,    0,  415,  415,  415,    0,  415,
+  415,  415,    0,    0,  415,    0,  415,    0,    0,  415,
+  415,  415,  415,    0,    0,  415,  415,  415,    0,    0,
+    0,    0,    0,  415,    0,    0,  415,  415,  415,  415,
+  415,  415,  415,  415,    0,  415,  415,  415,  415,  415,
+    4,    0,  415,    0,    0,    0,    0,    0,    0,  415,
+  415,    0,    0,    0,    0,    0,    0,    0,  415,  415,
+    0,    4,    0,    0,    4,    4,    4,    4,    4,    4,
+    4,    0,    0,    4,    4,    4,    0,    0,    0,    0,
+    4,    4,    0,    0,    0,    4,    4,    0,  408,    0,
+    0,    0,    0,    0,    0,    4,    0,    0,  408,    4,
+    4,    0,    0,    0,    4,    0,    0,    0,    0,    0,
+    4,    0,    4,    4,    0,    4,    0,    4,    4,    4,
+    4,    4,    0,    4,    4,    4,    4,    4,    4,    4,
+    4,    4,    4,    4,    4,    4,    4,    4,    4,    0,
+    0,    4,    4,    4,    0,    4,    4,    4,    0,    4,
+    4,    4,    0,    0,    4,    0,    4,    0,    0,    4,
+    4,    4,    4,    0,    0,    4,    4,    4,    0,    0,
+    0,    0,    0,    4,    0,    0,    4,    4,    4,    4,
+    4,    4,    4,    4,    0,    4,    4,    4,    4,    4,
+    0,    0,    4,  411,    0,    0,    0,    0,    0,    4,
+    4,    4,    0,    0,    0,    0,    0,    0,    4,    4,
+    0,    0,  411,    0,  411,    0,    0,  411,  411,  411,
+  411,  411,  411,  411,    0,    0,  411,  411,  411,    0,
+    0,    0,    0,  411,  411,    0,    0,    0,  411,  411,
+    0,  354,    0,    0,    0,    0,    0,    0,  411,    0,
+    0,  354,  411,  411,    0,    0,    0,  411,    0,    0,
+    0,    0,    0,  411,    0,  411,  411,    0,  411,    0,
+  411,  411,  411,  411,  411,    0,  411,  411,  411,  411,
+  411,  411,  411,  411,  411,  411,  411,  411,  411,  411,
+  411,  411,    0,    0,  411,  411,  411,    0,  411,  411,
+  411,    0,  411,  411,  411,    0,    0,  411,    0,  411,
+    0,    0,  411,  411,  411,  411,    0,    0,  411,  411,
+  411,    0,    0,    0,    0,    0,  411,    0,    0,  411,
+  411,  411,  411,  411,  411,  411,  411,    0,  411,  411,
+  411,  411,  411,    0,  408,  411,    0,    0,    0,    0,
+    0,    0,  411,  411,  411,    0,    0,    0,    0,    0,
+    0,    0,  411,  408,    0,  408,    0,    0,  408,  408,
+  408,  408,  408,  408,  408,    0,    0,  408,  408,  408,
+    0,    0,    0,    0,  408,  408,    0,    0,    0,  408,
+  408,    0,  455,    0,    0,    0,    0,    0,    0,  408,
+    0,    0,  455,  408,  408,    0,    0,    0,  408,    0,
+    0,    0,    0,    0,  408,    0,  408,  408,    0,  408,
+    0,  408,  408,  408,  408,  408,    0,  408,  408,  408,
+  408,  408,  408,  408,  408,  408,  408,  408,  408,  408,
+  408,  408,  408,    0,    0,  408,  408,  408,    0,  408,
+  408,  408,    0,  408,  408,  408,    0,    0,  408,    0,
+  408,    0,    0,  408,  408,  408,  408,    0,    0,  408,
+  408,  408,    0,    0,    0,    0,    0,  408,    0,    0,
+  408,  408,  408,  408,  408,  408,  408,  408,    0,  408,
+  408,  408,  408,  408,    0,    0,  408,  354,    0,    0,
+    0,    0,    0,  408,  408,    0,    0,    0,    0,    0,
+    0,    0,  408,  408,    0,    0,  354,    0,  354,    0,
+    0,  354,  354,  354,  354,  354,  354,  354,    0,    0,
+  354,  354,  354,    0,    0,    0,    0,  354,  354,    0,
+    0,    0,  354,  354,    0,   24,    0,    0,    0,    0,
+    0,    0,  354,    0,    0,   24,  354,  354,    0,    0,
+    0,  354,    0,    0,    0,    0,    0,  354,    0,  354,
+  354,    0,  354,    0,  354,  354,  354,  354,  354,    0,
+  354,  354,  354,  354,  354,  354,  354,  354,  354,  354,
+  354,  354,  354,  354,  354,  354,    0,    0,  354,  354,
+  354,    0,  354,  354,  354,    0,  354,  354,  354,    0,
+    0,  354,    0,  354,    0,    0,  354,  354,  354,  354,
+    0,    0,  354,  354,  354,    0,    0,    0,    0,    0,
+  354,    0,    0,  354,  354,  354,  354,    0,  354,  354,
+  354,    0,  354,  354,  354,  354,  354,    0,  455,  354,
+    0,    0,    0,    0,    0,    0,  354,  354,    0,    0,
+    0,    0,    0,    0,    0,    0,  354,  455,    0,  455,
+    0,    0,  455,  455,  455,  455,  455,  455,  455,    0,
+    0,  455,  455,  455,    0,    0,    0,    0,  455,  455,
+    0,    0,    0,  455,  455,    0,    0,    0,    0,    0,
+    0,    0,    0,  455,    0,    0,    0,  455,  455,    0,
+    0,    0,  455,    0,    0,    0,    0,    0,  455,    0,
+  455,  455,    0,  455,    0,  455,  455,  455,  455,  455,
+    0,  455,  455,  455,  455,  455,  455,  455,  455,  455,
+  455,  455,  455,  455,  455,  455,  455,    0,    0,  455,
+  455,  455,    0,  455,  455,  455,    0,  455,  455,  455,
+    0,    0,  455,    0,  455,    0,    0,  455,  455,  455,
+  455,    0,    0,  455,  455,  455,    0,  188,    0,  540,
+  150,  455,  151,    0,  455,  455,  455,  455,    0,  455,
+  455,  455,    0,  455,  455,  455,  455,  455,  545,    0,
+  455,   24,    0,    0,    0,    0,    0,  455,  455,    0,
+    0,    0,    0,    0,    0,    0,    0,  455,    0,    0,
+   24,    0,   24,    0,    0,   24,   24,   24,   24,   24,
+   24,   24,    0,    0,   24,   24,   24,    0,    0,    0,
+    0,   24,   24,    0,    0,    0,   24,   24,    0,  638,
+  417,  415,    0,  416,    0,    0,   24,    0,    0,    0,
+   24,   24,    0,    0,    0,   24,  901,    0,  420,  403,
+  421,   24,    0,   24,   24,    0,   24,    0,   24,   24,
+   24,   24,   24,    0,   24,   24,   24,   24,   24,   24,
+   24,   24,   24,   24,   24,   24,   24,   24,   24,   24,
+    0,    0,   24,   24,   24,    0,   24,   24,   24,    0,
+   24,   24,   24,    0,    0,   24,    0,   24,    0,    0,
+   24,   24,   24,   24,    0,    0,   24,   24,   24,    0,
+  188,    0,  540,  150,   24,  151,    0,   24,   24,   24,
+   24,   24,   24,   24,   24,    0,   24,   24,   24,   24,
+   24,  734,    0,   24,    0,    0,    0,    0,    0,    0,
+   24,   24,   24,    0,    0,    0,    0,    0,    0,   24,
+    0,    0,    0,    0,    0,    0,    0,    0,  188,    0,
+    0,  150,    0,  151,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  644,
+  149,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,  152,  153,    0,    0,    0,  154,
+  155,  156,  157,    0,    0,    0,    0,    0,    0,    0,
+    0,  158,  159,  160,  161,  162,  163,  164,    0,  165,
+  166,  167,    0,    0,  168,  169,  170,    0,  171,  172,
+  173,  174,  175,    0,  176,    0,  404,  405,  406,  407,
+  408,    0,  409,  410,  411,  412,  413,  414,    0,    0,
+  418,  419,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  177,  188,    0,    0,
+  150,    0,  151,    0,    0,    0,    0,  178,  179,    0,
+    0,    0,    0,  180,    0,    0,    0,    0,  666,    0,
+    0,    0,    0,  181,  182,    0,    0,  183,  184,  185,
+  186,    0,    0,  149,   89,    0,    0,    0,    0,    0,
+    0,  187,    0,    0,    0,  188,    0,    0,  150,    0,
+  151,    0,    0,    0,    0,    0,    0,  152,  153,    0,
+    0,    0,  154,  155,  156,  157,  668,    0,    0,    0,
+    0,    0,    0,    0,  158,  159,  160,  161,  162,  163,
+  164,  149,  165,  166,  167,    0,    0,  168,  169,  170,
+    0,  171,  172,  173,  174,  175,    0,  176,    0,    0,
+    0,    0,    0,    0,    0,  152,  153,    0,    0,    0,
+  154,  155,  156,  157,    0,    0,    0,    0,    0,    0,
+    0,    0,  158,  159,  160,  161,  162,  163,  164,    0,
+  165,  166,  167,    0,    0,  168,  169,  170,    0,  171,
+  172,  173,  174,  175,    0,  176,    0,    0,    0,  177,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  178,  179,    0,    0,    0,    0,  180,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  181,  182,    0,    0,
+  183,  184,  185,  186,    0,    0,  188,   89,  706,  150,
+    0,  151,    0,    0,  187,    0,    0,  177,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  178,  179,
+    0,    0,    0,    0,  180,    0,    0,    0,    0,    0,
+  149,    0,    0,    0,  181,  182,    0,    0,  183,  184,
+  185,  186,    0,    0,  188,   89,  540,  150,    0,  151,
+    0,    0,  187,    0,  152,  153,    0,    0,    0,  154,
+  155,  156,  157,    0,    0,    0,    0,    0,    0,    0,
+    0,  158,  159,  160,  161,  162,  163,  164,  149,  165,
+  166,  167,    0,    0,  168,  169,  170,    0,  171,  172,
+  173,  174,  175,    0,  176,    0,    0,    0,    0,    0,
+    0,    0,  152,  153,    0,    0,    0,  154,  155,  156,
+  157,    0,    0,    0,    0,    0,    0,    0,    0,  158,
+  159,  160,  161,  162,  163,  164,    0,  165,  166,  167,
+    0,    0,  168,  169,  170,    0,  171,  172,  173,  174,
+  175,    0,  176,    0,    0,    0,  177,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  178,  179,    0,
+    0,    0,    0,  180,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  181,  182,    0,    0,  183,  184,  185,
+  186,    0,  188,    0,   89,  150,    0,  151,    0,    0,
+    0,  187,    0,    0,  177,    0,    0,    0,    0,    0,
+  813,    0,    0,    0,    0,  178,  179,    0,    0,    0,
+    0,  180,    0,    0,    0,    0,    0,    0,    0,  149,
+    0,  181,  182,    0,    0,  183,  184,  185,  186,    0,
+    0,    0,   89,    0,    0,  188,    0,    0,  150,  187,
+  151,    0,    0,  152,  153,    0,    0,    0,  154,  155,
+  156,  157,    0,  898,    0,    0,    0,    0,    0,    0,
+  158,  159,  160,  161,  162,  163,  164,  149,  165,  166,
+  167,    0,    0,  168,  169,  170,    0,  171,  172,  173,
+  174,  175,    0,  176,    0,    0,    0,    0,    0,    0,
+    0,  152,  153,    0,    0,    0,  154,  155,  156,  157,
+    0,    0,    0,    0,    0,    0,    0,    0,  158,  159,
+  160,  161,  162,  163,  164,    0,  165,  166,  167,    0,
+    0,  168,  169,  170,    0,  171,  172,  173,  174,  175,
+    0,  176,    0,    0,    0,  177,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  178,  179,    0,    0,
+    0,    0,  180,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  181,  182,    0,    0,  183,  184,  185,  186,
+    0,    0,    0,   89,  188,    0,  709,  150,    0,  151,
+  187,    0,    0,  177,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,  178,  179,    0,    0,    0,    0,
+  180,    0,    0,    0,    0,  149,    0,    0,    0,    0,
+  181,  182,    0,    0,  183,  184,  185,  186,    0,    0,
+    0,   89,  188,    0,  951,  150,    0,  151,  187,  152,
+  153,    0,    0,    0,  154,  155,  156,  157,    0,    0,
+    0,    0,    0,    0,    0,    0,  158,  159,  160,  161,
+  162,  163,  164,    0,  165,  166,  167,    0,  149,  168,
+  169,  170,    0,  171,  172,  173,  174,  175,    0,  176,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  152,  153,    0,    0,    0,  154,  155,  156,
+  157,    0,    0,    0,    0,    0,    0,    0,    0,  158,
+  159,  160,  161,  162,  163,  164,    0,  165,  166,  167,
+    0,    0,  168,  169,  170,    0,  171,  172,  173,  174,
+  175,  177,  176,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  178,  179,    0,    0,    0,    0,  180,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  181,  182,
+    0,    0,  183,  184,  185,  186,    0,  188,    0,   89,
+  150,    0,  151,    0,    0,    0,  187,    0,    0,    0,
+    0,    0,    0,    0,  177,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  178,  179,    0,    0,    0,
+    0,  180,    0,    0,    0,    0,    0,  149,    0,    0,
+    0,  181,  182,    0,    0,  183,  184,  185,  186,    0,
+  382,    0,   89,  150,    0,  151,    0,    0,    0,  187,
+    0,  152,  153,    0,    0,    0,  154,  155,  156,  157,
+    0,    0,    0,    0,    0,    0,    0,    0,  158,  159,
+  160,  161,  162,  163,  164,  149,  165,  166,  167,    0,
+    0,  168,  169,  170,    0,  171,  172,  173,  174,  175,
+    0,  176,    0,    0,    0,    0,    0,    0,    0,  152,
+  153,    0,    0,    0,  154,  155,  156,  157,    0,    0,
+    0,    0,    0,    0,    0,    0,  158,  159,  160,  161,
+  162,  163,  164,    0,  165,  166,  167,    0,    0,  168,
+  169,  170,    0,  171,  172,  173,  174,  175,    0,  176,
+    0,    0,    0,  177,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,  178,  179,    0,    0,    0,    0,
+  180,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  181,  182,    0,    0,  183,  184,  185,  186,    0,  188,
+    0,   89,  150,    0,  151,    0,    0,    0,  187,    0,
+    0,  177,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  178,  179,    0,    0,    0,    0,  180,    0,
+  149,    0,    0,    0,    0,    0,    0,    0,  181,  182,
+    0,    0,  183,  184,  185,  186,    0,  507,    0,   89,
+  150,    0,  151,    0,  152,  153,  187,    0,    0,  154,
+  155,  156,  157,    0,    0,    0,    0,    0,    0,    0,
+    0,  158,  159,  160,  161,  162,  163,  164,    0,  165,
+  166,  167,    0,  149,  168,  169,  170,    0,  171,  172,
+  173,  174,  175,    0,  176,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  152,  153,    0,
+    0,    0,  154,  155,  156,  157,    0,    0,    0,    0,
+    0,    0,    0,    0,  158,  159,  160,  161,  162,  163,
+  164,    0,  165,  166,  167,    0,    0,  168,  169,  170,
+    0,  171,  172,  173,  174,  175,  177,  176,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  178,  179,    0,
+    0,    0,    0,  180,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  181,  182,    0,    0,  183,  184,  185,
+  186,    0,  382,    0,   89,  150,    0,  151,    0,    0,
+    0,  187,    0,    0,    0,    0,    0,    0,    0,  177,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  178,  179,    0,    0,    0,    0,  180,    0,    0,    0,
+    0,    0,  149,    0,    0,    0,  181,  182,    0,    0,
+  183,  184,  185,  186,    0,  908,    0,   89,  150,    0,
+  151,    0,    0,    0,  187,    0,  152,  153,    0,    0,
+    0,  154,  155,  156,  157,    0,    0,    0,    0,    0,
+    0,    0,    0,  158,  159,  160,  161,  162,  163,  164,
+  149,  165,  166,  167,    0,    0,  168,  169,  170,    0,
+  171,  172,  173,  174,  175,    0,  176,    0,    0,    0,
+    0,    0,    0,    0,  152,  153,    0,    0,    0,  154,
+  155,  156,  157,    0,  567,    0,  564,  333,    0,  334,
+    0,  158,  159,  160,  161,  162,  163,  164,    0,  165,
+  166,  167,    0,    0,  168,  169,  170,    0,  171,  172,
+  173,  174,  175,    0,  176,    0,    0,    0,  177,    0,
+  341,    0,  335,  333,    0,  334,    0,    0,    0,  178,
+  179,    0,    0,    0,    0,  180,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  181,  182,    0,    0,  183,
+  184,  185,  186,    0,    0,    0,   89,    0,    0,    0,
+    0,    0,    0,  445,    0,    0,  177,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  178,  179,    0,
+    0,    0,    0,  180,    0,  149,  247,  247,  247,    0,
+  247,    0,    0,  181,  182,    0,    0,  183,  184,  185,
+  186,    0,    0,  247,   89,  247,  247,  247,    0,  152,
+  153,  187,    0,    0,  154,  155,  156,  157,    0,    0,
+    0,    0,    0,    0,    0,    0,  158,  159,  160,  161,
+  162,  163,  164,    0,  165,  166,  167,    0,  149,  168,
+  169,  170,    0,  171,  172,  173,  174,  175,    0,  176,
+    0,    0,    0,    0,    0,    0,    0,  518,  518,  518,
+  518,  518,  152,  153,    0,    0,    0,  154,  155,  156,
+  157,    0,    0,    0,    0,    0,  518,  518,  518,  158,
+  159,  160,  161,  162,  163,  164,    0,  165,  166,  167,
+    0,    0,  168,  169,  170,    0,  171,  172,  173,  174,
+  175,  177,  176,  437,  417,  415,    0,  416,    0,    0,
+    0,    0,  178,  179,    0,    0,    0,  565,  180,    0,
+    0,    0,  420,  403,  421,    0,    0,    0,  181,  182,
+    0,    0,  183,  184,  185,  186,  601,  417,  415,  892,
+  416,    0,  336,  337,  338,    0,  187,  339,    0,    0,
+    0,    0,    0,    0,  177,  420,  403,  421,    0,    0,
+    0,    0,    0,    0,    0,  178,  179,    0,    0,    0,
+    0,  180,    0,    0,    0,    0,    0,    0,  336,  337,
+  338,  181,  182,  339,    0,  183,  184,  185,  186,    0,
+    0,    0,   89,    0,    0,    0,    0,    0,    0,  187,
+    0,    0,    0,  247,  247,  247,  247,  247,    0,  247,
+  247,  247,  247,  247,  247,    0,    0,  247,  247,  608,
+  417,  415,    0,  416,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,  178,  179,    0,    0,  420,  403,
+  421,    0,    0,  622,  417,  415,    0,  416,    0,    0,
+  181,  182,    0,    0,  183,  184,  185,  186,    0,    0,
+    0,  566,  420,  403,  421,    0,    0,    0,  187,    0,
+  178,  179,    0,    0,  518,  518,  518,  518,  518,    0,
+  518,  518,  518,  518,  518,  518,  181,  182,  518,  518,
+  183,  184,  185,  186,  638,  417,  415,  340,  416,    0,
+    0,    0,    0,    0,  187,    0,    0,    0,    0,    0,
+    0,    0,    0,  420,  403,  421,    0,    0,    0,    0,
+  404,  405,  406,  407,  408,    0,  409,  410,  411,  412,
+  413,  414,    0,    0,  418,  419,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  404,  405,  406,  407,  408,    0,  409,
+  410,  411,  412,  413,  414,    0,    0,  418,  419,  672,
+  417,  415,    0,  416,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  420,  403,
+  421,  677,  417,  415,    0,  416,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  420,  403,  421,  679,  417,  415,    0,  416,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  420,  403,  421,    0,  404,  405,  406,  407,
+  408,    0,  409,  410,  411,  412,  413,  414,    0,    0,
+  418,  419,    0,    0,    0,    0,    0,    0,    0,    0,
+  404,  405,  406,  407,  408,    0,  409,  410,  411,  412,
+  413,  414,    0,    0,  418,  419,  781,  417,  415,    0,
+  416,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  420,  403,  421,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  404,  405,  406,  407,  408,    0,  409,  410,  411,
+  412,  413,  414,    0,    0,  418,  419,  782,  417,  415,
+    0,  416,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  420,  403,  421,  783,
+  417,  415,    0,  416,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  420,  403,
+  421,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  404,  405,  406,  407,
+  408,    0,  409,  410,  411,  412,  413,  414,    0,    0,
+  418,  419,    0,    0,    0,    0,    0,    0,  404,  405,
+  406,  407,  408,    0,  409,  410,  411,  412,  413,  414,
+    0,    0,  418,  419,    0,    0,    0,    0,    0,    0,
+  404,  405,  406,  407,  408,    0,  409,  410,  411,  412,
+  413,  414,    0,    0,  418,  419,  784,  417,  415,    0,
+  416,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  420,  403,  421,  785,  417,
+  415,    0,  416,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  420,  403,  421,
+    0,    0,    0,  404,  405,  406,  407,  408,    0,  409,
+  410,  411,  412,  413,  414,    0,    0,  418,  419,  786,
+  417,  415,    0,  416,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  420,  403,
+  421,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,  404,  405,  406,  407,  408,    0,
+  409,  410,  411,  412,  413,  414,    0,    0,  418,  419,
+    0,    0,    0,    0,    0,    0,  404,  405,  406,  407,
+  408,    0,  409,  410,  411,  412,  413,  414,    0,    0,
+  418,  419,  787,  417,  415,    0,  416,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  420,  403,  421,  788,  417,  415,    0,  416,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  420,  403,  421,  789,  417,  415,    0,
+  416,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  420,  403,  421,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  404,  405,  406,  407,  408,    0,  409,
+  410,  411,  412,  413,  414,    0,    0,  418,  419,    0,
+    0,    0,    0,    0,    0,  404,  405,  406,  407,  408,
+    0,  409,  410,  411,  412,  413,  414,    0,    0,  418,
+  419,  790,  417,  415,    0,  416,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  420,  403,  421,    0,    0,    0,  404,  405,  406,  407,
+  408,    0,  409,  410,  411,  412,  413,  414,    0,    0,
+  418,  419,  791,  417,  415,    0,  416,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  420,  403,  421,  792,  417,  415,    0,  416,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  420,  403,  421,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  404,
+  405,  406,  407,  408,    0,  409,  410,  411,  412,  413,
+  414,    0,    0,  418,  419,    0,    0,    0,    0,    0,
+    0,  404,  405,  406,  407,  408,    0,  409,  410,  411,
+  412,  413,  414,    0,    0,  418,  419,    0,    0,    0,
+    0,    0,    0,  404,  405,  406,  407,  408,    0,  409,
+  410,  411,  412,  413,  414,    0,    0,  418,  419,  793,
+  417,  415,    0,  416,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  420,  403,
+  421,  802,  417,  415,    0,  416,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  420,  403,  421,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  404,  405,
+  406,  407,  408,    0,  409,  410,  411,  412,  413,  414,
+    0,    0,  418,  419,  862,  417,  415,    0,  416,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  420,  403,  421,    0,    0,    0,  404,
+  405,  406,  407,  408,    0,  409,  410,  411,  412,  413,
+  414,    0,    0,  418,  419,    0,    0,    0,    0,    0,
+    0,  404,  405,  406,  407,  408,    0,  409,  410,  411,
+  412,  413,  414,    0,    0,  418,  419,  904,  417,  415,
+    0,  416,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  420,  403,  421,  247,
+  247,  247,    0,  247,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  247,  247,
+  247,  417,  415,  680,  416,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  420,
+  403,  421,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  404,  405,  406,  407,
+  408,    0,  409,  410,  411,  412,  413,  414,    0,    0,
+  418,  419,    0,    0,    0,    0,    0,    0,  404,  405,
+  406,  407,  408,    0,  409,  410,  411,  412,  413,  414,
+    0,    0,  418,  419,  417,  415,  933,  416,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  420,  403,  421,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  404,  405,  406,  407,  408,    0,  409,  410,  411,
+  412,  413,  414,    0,    0,  418,  419,  417,  415,  969,
+  416,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  420,  403,  421,  417,  415,
+  970,  416,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  420,  403,  421,    0,
+    0,    0,    0,    0,  404,  405,  406,  407,  408,    0,
+  409,  410,  411,  412,  413,  414,    0,    0,  418,  419,
+    0,    0,    0,    0,    0,    0,  247,  247,  247,  247,
+  247,    0,  247,  247,  247,  247,  247,  247,    0,    0,
+  247,  247,    0,    0,    0,    0,    0,  404,  405,  406,
+  407,  408,    0,  409,  410,  411,  412,  413,  414,    0,
+    0,  418,  419,  417,  415,  975,  416,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,  420,  403,  421,  247,  247,  247,  247,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  247,  247,  247,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  404,  405,  406,  407,  408,    0,  409,  410,  411,  412,
+  413,  414,    0,    0,  418,  419,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  404,  405,  406,  407,  408,    0,  409,
+  410,  411,  412,  413,  414,    0,    0,  418,  419,    0,
+    0,    0,    0,    0,  404,  405,  406,  407,  408,    0,
+  409,  410,  411,  412,  413,  414,    0,    0,  418,  419,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  404,
+  405,  406,  407,  408,    0,  409,  410,  411,  412,  413,
+  414,    0,    0,  418,  419,    0,    0,    0,    0,    0,
+  247,  247,  247,  247,  247,    0,  247,  247,  247,  247,
+  247,  247,    0,   16,  247,  247,   17,    0,   18,   19,
+    0,    0,   20,    0,    0,   21,   22,   23,    0,    0,
+    0,    0,   24,   25,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,   26,    0,    0,
+    0,   27,   28,    0,    0,    0,   29,    0,    0,    0,
+    0,    0,   30,    0,   31,   32,    0,   33,    0,   34,
+   35,   36,   37,   38,    0,   39,   40,   41,   42,   43,
+   44,   45,   46,   47,   48,   49,   50,   51,   52,   53,
+   54,    0,    0,   55,   56,   57,    0,   58,   59,   60,
+    0,   61,   62,   63,    0,    0,   64,    0,   65,    0,
+    0,   66,   67,   68,   69,    0,    0,   70,   71,   72,
+    0,    0,    0,    0,    0,   73,    0,    0,    0,   74,
+   75,   76,   77,   78,   79,   80,    0,   81,   82,   83,
+   84,   85,    0,    0,   86,    0,    0,    0,    0,    0,
+    0,   87,   88,   89,    0,    0,    0,    0,    0,    0,
+   90,
+};
+short fortrancheck[] = {                                      24,
+  231,   26,  140,  309,  194,   30,   33,  177,   33,  236,
+  231,  347,  290,  331,   39,  236,   19,   11,  296,  140,
+   44,  303,  394,  341,  177,   40,   40,   40,   44,   40,
+   40,  349,   44,  529,   10,  188,   10,   10,   10,  295,
+   42,  177,   58,   40,   68,   69,  302,   44,   41,   42,
+   41,   42,   76,  279,   44,  382,  449,   40,  581,   44,
+   37,   58,  585,  731,   41,   59,  106,   44,   58,   93,
+   94,   95,   42,   43,   44,   45,  765,   37,   44,   42,
+  111,  234,   58,   44,   61,  735,  143,   44,   37,  120,
+  121,   40,   58,  231,  373,   10,   32,   58,  236,   37,
+   10,   61,  504,   41,  417,  130,   44,   60,  135,   62,
+  135,  424,   61,  800,  801,  517,   10,  425,  217,  271,
+  272,   57,   58,  148,  149,   42,   43,  417,   45,   44,
+   10,   42,  157,  371,  128,   43,   44,   45,  417,  238,
+   41,   42,   43,   60,   45,   62,  171,  385,   58,   60,
+   40,   62,  177,  271,  272,   41,  104,   40,   44,  107,
+  271,  272,   44,  188,   58,   41,  417,  192,   44,  578,
+   44,  427,   58,   40,  344,   42,   58,  586,  203,  847,
+  350,  579,   58,  581,   58,  210,   40,  585,   43,   44,
+   45,  417,   40,  331,  219,  524,  885,  350,  885,  224,
+  529,   37,   40,  341,   41,   41,  344,   44,   44,  234,
+  331,  349,  382,  207,  350,  386,  387,  388,  868,  244,
+  341,   58,    0,  344,  281,   42,  328,  329,  349,  382,
+   47,  487,   10,  569,  490,  541,  276,  231,  417,  545,
+  234,  577,  236,  237,  912,  270,  382,   40,  242,  567,
+   42,   43,   41,   45,   40,   44,  512,  593,   58,  272,
+  272,  264,  293,  401,   40,  417,   42,  283,   40,   58,
+  588,  589,  590,  591,  592,   43,   41,   45,  534,   44,
+  283,  275,  307,   40,  309,  375,  283,  272,  319,  271,
+  272,   42,   43,  283,   45,   40,   41,  322,  323,  417,
+  271,  272,  272,  328,  298,  632,  417,  634,  635,  272,
+  273,  336,  337,  338,  339,  272,  417,  283,  549,  255,
+  273,   41,  283,  550,   44,  350,  320,   44,  549,  550,
+  324,   42,  280,  271,  272,  360,  156,   58,  158,  364,
+  365,  366,  367,  368,  369,  370,  371,  372,  373,  374,
+  375,  744,  745,  275,  507,  272,  273,  382,  140,  141,
+  856,  272,  273,  886,  272,  763,  764,  863,  766,  394,
+  271,  272,  273,   41,   42,   43,  256,   45,  403,  404,
+  405,  406,  407,  408,  409,  410,  411,  412,  413,  414,
+  415,  416,  417,  418,  419,  420,  421,  374,  423,  424,
+  406,  417,  417,  119,  284,  285,  122,  417,  578,  424,
+  424,  549,  550,  424,  374,  417,  586,  272,  281,  755,
+  417,  301,  302,  406,  417,  374,  417,  417,  734,  567,
+   44,   44,  768,  769,  770,  771,  772,  719,  756,  811,
+  578,  417,  720,  417,  417,  417,  567,   44,  586,  705,
+  588,  589,  590,  591,  592,  682,  417,  578,  417,  417,
+  687,  682,  486,   44,   40,  586,  687,  588,  589,  590,
+  591,  592,  799,  800,  801,  417,   40,  424,  256,  271,
+  272,  273,  507,   40,  637,   40,  511,   40,  886,   40,
+  521,  747,  523,  518,   40,   40,  632,  275,  634,  635,
+  525,   41,  533,  281,   44,   40,  284,  285,   42,   43,
+   44,   45,  392,   47,  539,   41,  541,   40,   44,   40,
+  545,  272,  273,  301,  302,   40,   40,  856,  857,  858,
+  859,  860,   42,   43,  863,   45,   40,   47,  358,  359,
+  938,  566,   40,   40,  682,  425,   37,  883,   40,  687,
+   41,  576,   40,   44,   40,  549,  550,  377,  378,  379,
+  380,  381,   37,   40,  870,  417,   41,   40,  824,   44,
+  390,   40,   40,  289,  601,  291,  601,  602,   40,   42,
+   43,   40,   45,  299,   41,   42,   43,   40,   45,   37,
+  846,   42,   43,   44,   45,  765,   47,   60,   61,   62,
+  753,  722,   40,  271,  272,  273,  417,  632,   41,  634,
+  635,   44,  637,   44,  392,   58,  641,   41,  756,  644,
+   44,  877,  857,  858,  859,  860,   37,  765,  818,   40,
+   41,   42,   43,   44,   45,  756,  661,  662,  417,   41,
+  417,  666,   44,  668,  765,   41,  799,  425,   44,   60,
+  881,   62,   44,   44,   41,  680,  681,   44,   41,   41,
+   58,   44,   44,  799,  800,  801,   41,   37,  693,   44,
+  695,  417,   42,   43,   41,   45,   41,   44,   41,   44,
+  674,   44,   41,  708,   41,   44,   41,   44,  682,   44,
+   60,   61,   62,  687,   44,  689,   41,    0,   41,   44,
+   41,   44,   41,   44,   40,   44,  424,   10,   61,  734,
+  390,  391,  417,   41,   41,  885,   44,   44,   44,   41,
+   41,  746,   44,   44,  417,  750,  406,  407,  753,  417,
+  410,  411,  412,  413,  417,   44,  730,   40,  272,   42,
+   43,   44,   45,   41,  424,  390,  391,  885,   41,   41,
+   41,   44,   44,   44,   44,  908,   40,   60,   61,   62,
+   41,  406,  407,   44,  885,  410,  411,  412,  413,   41,
+   41,   40,   44,   44,  799,  800,  801,   41,   41,  424,
+   44,   44,   41,  424,   41,   44,  811,   44,  813,   41,
+   41,   41,   44,   44,   44,  258,  259,  260,  261,  262,
+   61,  264,  265,  266,  267,  268,  269,   44,   41,  272,
+  273,   44,  278,  838,  271,  272,  273,   41,   41,   41,
+   44,   44,   44,   41,   44,  850,   44,  852,   41,   44,
+  380,   44,   44,   44,   44,   40,   44,   37,   41,   41,
+   44,   40,  272,   44,  417,  870,   40,  258,  259,  260,
+  261,  262,  417,  264,  265,  266,  267,  268,  269,   41,
+   44,  272,  273,  417,   41,  417,   61,   41,  424,   44,
+  273,   44,   40,  898,   44,  900,  901,   44,   44,   58,
+   41,   41,  332,  908,  417,   41,   41,  881,  258,  259,
+  260,  261,  262,   42,  264,  265,  266,  267,  268,  269,
+   58,  417,  272,  273,   41,   37,  272,    0,  933,   40,
+   42,   43,  906,   45,  272,  940,  272,   10,   41,   58,
+  374,  946,  417,   44,  949,   41,   44,   61,   60,   61,
+   62,   41,  417,  417,   41,   41,   41,  962,   41,   61,
+   41,  966,   41,   41,  969,  970,  374,   44,  272,   41,
+  975,   44,   47,  256,  417,  258,  259,  260,  261,  262,
+   44,  264,  265,  266,  267,  268,  269,   41,  271,  272,
+  273,   61,  275,  417,  277,  417,  417,  280,  281,  282,
+  283,  284,  285,  286,  287,  288,  289,  290,  291,  292,
+  293,  294,  295,  296,  297,  417,  417,   44,  301,  302,
+   41,  304,  305,  306,  307,  308,  309,  310,  311,  312,
+  313,  314,  315,  316,  317,  318,  319,  320,  321,  322,
+  323,  324,  325,  326,  327,  328,  329,   41,  331,   58,
+  333,  334,  335,  336,  337,   41,  339,  340,  341,  342,
+  343,  344,  345,  346,  347,  348,  349,  350,  351,  352,
+  353,  354,   41,   41,  357,  358,  359,   44,  361,  362,
+  363,   41,  365,  366,  367,   41,  272,  370,   41,  372,
+   41,   41,  375,  376,  377,  378,   41,  775,  381,  382,
+  383,  850,  957,  873,  520,  271,  389,  390,  391,  392,
+  393,  394,  395,  396,  397,  398,  399,  285,  401,  402,
+  403,  404,  405,  406,  407,  408,    0,  410,  411,  412,
+  413,  773,  415,  416,  417,  350,   10,  382,  681,  402,
+  900,  424,  425,  753,  852,    9,  258,  259,  260,  261,
+  262,   13,  264,  265,  266,  267,  268,  269,   74,  275,
+  272,  273,  691,   37,  429,  952,  539,   41,   42,   43,
+   44,   45,  695,   47,  528,  502,  537,  701,  557,  128,
+  549,  750,  550,  256,   58,  559,   60,   61,   62,  756,
+   -1,   -1,  140,   -1,   -1,   -1,   -1,   -1,  271,  272,
+   -1,   -1,  275,   -1,  277,   -1,   -1,  280,  281,  282,
+  283,  284,  285,  286,   -1,   -1,  289,  290,  291,   -1,
+   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,  301,  302,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,
+   -1,   -1,  315,  316,   -1,   -1,   -1,  320,   -1,   -1,
+   -1,   -1,   -1,  326,   -1,  328,  329,   -1,  331,   -1,
+  333,  334,  335,  336,  337,   -1,  339,  340,  341,  342,
+  343,  344,  345,  346,  347,  348,  349,  350,  351,  352,
+  353,  354,   -1,   -1,  357,  358,  359,   -1,  361,  362,
+  363,   -1,  365,  366,  367,   -1,    0,  370,   -1,  372,
+   -1,   -1,  375,  376,  377,  378,   10,   -1,  381,  382,
+  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,
+  393,  394,  395,  396,  397,  398,  399,   -1,  401,  402,
+  403,  404,  405,   37,   -1,  408,   -1,   41,   42,   43,
+   44,   45,  415,  416,  417,   -1,   -1,   -1,   -1,   -1,
+   -1,  424,  425,   -1,   58,   -1,   60,   61,   62,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  256,   -1,  258,  259,  260,  261,  262,   -1,
+  264,  265,  266,  267,  268,  269,   -1,  271,  272,  273,
+   -1,  275,   -1,  277,   -1,   -1,  280,  281,  282,  283,
+  284,  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,
+   -1,   -1,  296,  297,   -1,   -1,   -1,  301,  302,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,
+   -1,  315,  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,
+   -1,   -1,  326,   -1,  328,  329,   -1,  331,   -1,  333,
+  334,  335,  336,  337,   -1,  339,  340,  341,  342,  343,
+  344,  345,  346,  347,  348,  349,  350,  351,  352,  353,
+  354,   -1,   40,  357,  358,  359,   -1,  361,  362,  363,
+   -1,  365,  366,  367,   -1,   -1,  370,   -1,  372,   -1,
+   -1,  375,  376,  377,  378,   10,  380,  381,  382,  383,
+   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,  393,
+  394,  395,  396,  397,  398,  399,   -1,  401,  402,  403,
+  404,  405,   -1,   -1,  408,   40,   -1,   -1,   43,   -1,
+   45,  415,  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,
+  424,  425,  256,   -1,  258,  259,  260,  261,  262,   -1,
+  264,  265,  266,  267,  268,  269,   -1,  271,  272,  273,
+   -1,  275,   -1,  277,   -1,   -1,  280,  281,  282,  283,
+  284,  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,
+   -1,   -1,  296,  297,   -1,   -1,   -1,  301,  302,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,
+   -1,  315,  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,
+   -1,   -1,  326,   -1,  328,  329,   -1,  331,   -1,  333,
+  334,  335,  336,  337,   -1,  339,  340,  341,  342,  343,
+  344,  345,  346,  347,  348,  349,  350,  351,  352,  353,
+  354,   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,
+   -1,  365,  366,  367,   -1,    0,  370,   -1,  372,   -1,
+   -1,  375,  376,  377,  378,   10,  380,  381,  382,  383,
+   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,  393,
+  394,  395,  396,  397,  398,  399,   -1,  401,  402,  403,
+  404,  405,   37,   -1,  408,   -1,   41,   42,   43,   44,
+   45,  415,  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,
+  424,  425,   -1,   58,   -1,   60,   61,   62,   -1,  287,
+  288,   -1,   -1,   -1,  292,  293,  294,  295,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  304,  305,  306,  307,
+  308,  309,  310,   -1,  312,  313,  314,   -1,  263,  317,
+  318,  319,   -1,  321,  322,  323,  324,  325,   -1,  327,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  287,  288,   -1,   -1,   -1,  292,  293,  294,
+  295,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  304,
+  305,  306,  307,  308,  309,  310,   -1,  312,  313,  314,
+   -1,   -1,  317,  318,  319,   -1,  321,  322,  323,  324,
+  325,   -1,  327,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  390,  391,   -1,    0,   -1,   -1,  396,   -1,
+   -1,   -1,   -1,   -1,   -1,   10,   -1,   -1,  406,  407,
+   -1,   -1,  410,  411,  412,  413,   -1,   -1,   -1,  417,
+   -1,   -1,   -1,   -1,   -1,   -1,  424,   -1,   -1,   -1,
+   -1,   -1,   37,   -1,  379,   -1,   41,   42,   43,   44,
+   45,   -1,   -1,   -1,   -1,  390,  391,   -1,   -1,   -1,
+   -1,  396,   -1,   58,   -1,   60,   61,   62,   -1,   -1,
+   -1,  406,  407,   -1,   -1,  410,  411,  412,  413,   -1,
+   -1,   -1,  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,
+   -1,  256,   -1,  258,  259,  260,  261,  262,   -1,  264,
+  265,  266,  267,  268,  269,   -1,  271,  272,  273,   -1,
+  275,   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,
+  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,
+   -1,  296,  297,   -1,   -1,   -1,  301,  302,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,   -1,
+  315,  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,
+   -1,  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,
+  335,  336,  337,   -1,  339,  340,  341,  342,  343,  344,
+  345,  346,  347,  348,  349,  350,  351,  352,  353,  354,
+   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,
+  365,  366,  367,   -1,   -1,  370,   -1,  372,   -1,   -1,
+  375,  376,  377,  378,   -1,  380,  381,  382,  383,   -1,
+   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,
+  395,  396,  397,  398,  399,   -1,  401,  402,  403,  404,
+  405,   40,   -1,  408,   43,   -1,   45,   -1,   -1,   -1,
+  415,  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,
+  425,  256,   61,  258,  259,  260,  261,  262,   -1,  264,
+  265,  266,  267,  268,  269,   -1,  271,  272,  273,   -1,
+  275,   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,
+  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,
+   -1,  296,  297,   -1,   -1,   -1,  301,  302,   -1,   -1,
+   -1,   -1,   42,   43,   -1,   45,  311,   -1,   -1,   -1,
+  315,  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,
+   60,  326,   62,  328,  329,   -1,  331,   -1,  333,  334,
+  335,  336,  337,   -1,  339,  340,  341,  342,  343,  344,
+  345,  346,  347,  348,  349,  350,  351,  352,  353,  354,
+   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,
+  365,  366,  367,   -1,    0,  370,   -1,  372,   -1,   -1,
+  375,  376,  377,  378,   10,  380,  381,  382,  383,   -1,
+   -1,   -1,   -1,   -1,  389,   -1,  277,  392,  393,  394,
+  395,  396,  397,  398,  399,   -1,  401,  402,  403,  404,
+  405,   -1,   -1,  408,   40,   41,   42,   43,   44,   45,
+  415,  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,
+  425,   -1,   58,   -1,   60,   61,   62,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  328,  329,  330,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   42,   43,   -1,
+   45,   -1,   -1,   -1,  263,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  272,   -1,   60,  357,   62,  359,  360,
+  361,   -1,   -1,  364,  365,   -1,  367,  368,  287,  288,
+   -1,   -1,   -1,  292,  293,  294,  295,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  304,  305,  306,  307,  308,
+  309,  310,   -1,  312,  313,  314,   -1,   -1,  317,  318,
+  319,   -1,  321,  322,  323,  324,  325,   -1,  327,   -1,
+  260,  261,  262,   -1,  264,  265,  266,  267,  268,  269,
+   -1,   -1,  272,  273,    0,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   10,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  379,   37,   -1,   -1,   -1,   41,   42,   43,   44,   45,
+   -1,  390,  391,   -1,   -1,   -1,   -1,  396,   -1,   -1,
+   -1,   -1,   58,   -1,   60,   61,   62,  406,  407,   -1,
+   -1,  410,  411,  412,  413,   -1,   -1,   -1,  417,   -1,
+   -1,   -1,   -1,   -1,   -1,  424,   -1,   -1,   -1,   -1,
+  256,   -1,  258,  259,  260,  261,  262,   -1,  264,  265,
+  266,  267,  268,  269,   -1,  271,  272,  273,   -1,  275,
+   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,  285,
+  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,
+  296,  297,   -1,   -1,   -1,  301,  302,  262,   -1,  264,
+  265,  266,  267,  268,  269,  311,   -1,  272,  273,  315,
+  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,
+  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,
+  336,  337,   -1,  339,  340,  341,  342,  343,  344,  345,
+  346,  347,  348,  349,  350,  351,  352,  353,  354,   -1,
+   40,  357,  358,  359,   -1,  361,  362,  363,   -1,  365,
+  366,  367,   -1,   -1,  370,   -1,  372,   -1,   -1,  375,
+  376,  377,  378,   -1,  380,  381,  382,  383,   -1,   -1,
+   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,
+  396,  397,  398,  399,   -1,  401,  402,  403,  404,  405,
+   -1,   -1,  408,   40,   -1,   42,   43,   -1,   45,  415,
+  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,
+  256,   58,  258,  259,  260,  261,  262,   -1,  264,  265,
+  266,  267,  268,  269,   -1,  271,  272,  273,   -1,  275,
+   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,  285,
+  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,
+  296,  297,   -1,   -1,   -1,  301,  302,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,   -1,  315,
+  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,
+  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,
+  336,  337,   -1,  339,  340,  341,  342,  343,  344,  345,
+  346,  347,  348,  349,  350,  351,  352,  353,  354,   -1,
+   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,  365,
+  366,  367,   -1,    0,  370,   -1,  372,   -1,   -1,  375,
+  376,  377,  378,   10,  380,  381,  382,  383,   -1,   -1,
+   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,
+  396,  397,  398,  399,   -1,  401,  402,  403,  404,  405,
+   37,   -1,  408,   -1,   41,   42,   43,   44,   45,  415,
+  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,
+   -1,   58,   -1,   60,   61,   62,   -1,  287,  288,   -1,
+   -1,   -1,  292,  293,  294,  295,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  304,  305,  306,  307,  308,  309,
+  310,   -1,  312,  313,  314,   -1,  263,  317,  318,  319,
+   -1,  321,  322,  323,  324,  325,   -1,  327,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  287,  288,   -1,   -1,   -1,  292,  293,  294,  295,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  304,  305,  306,
+  307,  308,  309,  310,   -1,  312,  313,  314,   -1,   -1,
+  317,  318,  319,   -1,  321,  322,  323,  324,  325,   -1,
+  327,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  390,  391,   -1,    0,   -1,   -1,  396,   -1,   -1,   -1,
+   -1,   -1,   -1,   10,   -1,   -1,  406,  407,   -1,   -1,
+  410,  411,  412,  413,   -1,   -1,   -1,  417,   -1,   -1,
+   -1,   -1,   -1,   -1,  424,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  379,   -1,   41,   42,   43,   44,   45,   -1,
+   -1,   -1,   -1,  390,  391,   -1,   -1,   -1,   -1,  396,
+   -1,   58,   -1,   60,   61,   62,   -1,   -1,   -1,  406,
+  407,   -1,   -1,  410,  411,  412,  413,   -1,   -1,   -1,
+  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,   -1,  256,
+   -1,  258,  259,  260,  261,  262,   -1,  264,  265,  266,
+  267,  268,  269,   -1,  271,  272,  273,   -1,  275,   -1,
+  277,   -1,   -1,  280,  281,  282,  283,  284,  285,  286,
+   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,
+  297,   -1,   -1,   -1,  301,  302,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  311,   -1,   -1,   -1,  315,  316,
+   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,
+   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,  336,
+  337,   -1,  339,  340,  341,  342,  343,  344,  345,  346,
+  347,  348,  349,  350,  351,  352,  353,  354,   -1,   -1,
+  357,  358,  359,   -1,  361,  362,  363,   -1,  365,  366,
+  367,   -1,   -1,  370,   -1,  372,   -1,   -1,  375,  376,
+  377,  378,   -1,  380,  381,  382,  383,   -1,   -1,   -1,
+   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,  396,
+  397,  398,  399,   -1,  401,  402,  403,  404,  405,   -1,
+   -1,  408,   40,   -1,   42,   43,   -1,   45,  415,  416,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,  256,
+   -1,  258,  259,  260,  261,  262,   -1,  264,  265,  266,
+  267,  268,  269,   -1,  271,  272,  273,   -1,  275,   -1,
+  277,   -1,   -1,  280,  281,  282,  283,  284,  285,  286,
+   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,
+  297,   -1,   -1,   -1,  301,  302,   -1,   -1,   42,   43,
+   -1,   45,   -1,   -1,  311,   -1,   -1,   -1,  315,  316,
+   -1,   -1,   -1,  320,   -1,   -1,   60,   -1,   62,  326,
+   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,  336,
+  337,   -1,  339,  340,  341,  342,  343,  344,  345,  346,
+  347,  348,  349,  350,  351,  352,  353,  354,   -1,   -1,
+  357,  358,  359,   -1,  361,  362,  363,   -1,  365,  366,
+  367,   -1,    0,  370,   -1,  372,   -1,   -1,  375,  376,
+  377,  378,   10,  380,  381,  382,  383,   -1,   -1,   -1,
+   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,  396,
+  397,  398,  399,   -1,  401,  402,  403,  404,  405,   -1,
+   -1,  408,   -1,   41,   42,   43,   44,   45,  415,  416,
+  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,   -1,
+   -1,   -1,   60,   61,   62,   -1,   -1,  288,   -1,   -1,
+   -1,  292,  293,  294,  295,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  304,  305,  306,  307,  308,  309,  310,
+   -1,  312,  313,  314,   -1,  263,  317,  318,  319,   -1,
+   -1,  322,  323,  324,  325,   -1,  327,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  287,
+  288,   -1,   -1,   -1,  292,  293,  294,  295,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  304,  305,  306,  307,
+  308,  309,  310,   -1,  312,  313,  314,   -1,   -1,  317,
+  318,  319,   -1,  321,  322,  323,  324,  325,   -1,  327,
+  264,  265,  266,  267,  268,  269,   -1,   -1,  272,  273,
+   -1,   -1,    0,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   10,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  417,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   37,
+   -1,  379,   -1,   41,   42,   43,   44,   45,   -1,   -1,
+   -1,   -1,  390,  391,   -1,   -1,   -1,   -1,  396,   -1,
+   58,   -1,   -1,   61,   -1,   -1,   -1,   -1,  406,  407,
+   -1,   -1,  410,  411,  412,  413,   -1,   -1,   -1,  417,
+   -1,   -1,   -1,   -1,   -1,   -1,  424,   -1,  256,   -1,
+  258,  259,  260,  261,  262,   -1,  264,  265,  266,  267,
+  268,  269,   -1,   -1,  272,  273,   -1,  275,   -1,  277,
+   -1,   -1,  280,  281,  282,  283,  284,  285,  286,   -1,
+   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,
+   -1,   -1,   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  311,   -1,   -1,   -1,  315,  316,   -1,
+   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,
+  328,  329,   -1,  331,   -1,  333,  334,  335,  336,  337,
+   -1,  339,  340,  341,  342,  343,  344,  345,  346,  347,
+  348,  349,  350,  351,  352,  353,  354,   -1,   -1,  357,
+  358,  359,   -1,  361,  362,  363,   -1,  365,  366,  367,
+   -1,   -1,  370,   -1,  372,   -1,   -1,  375,  376,  377,
+  378,   -1,  380,  381,  382,  383,   -1,   -1,   -1,   -1,
+   -1,  389,   -1,   -1,  392,  393,  394,  395,  396,  397,
+  398,  399,   -1,  401,  402,  403,  404,  405,   -1,   -1,
+  408,   -1,   -1,   -1,   -1,   -1,   -1,  415,  416,  417,
+   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,  256,   -1,
+  258,  259,  260,  261,  262,    0,  264,  265,  266,  267,
+  268,  269,   -1,  271,  272,   10,   -1,  275,   -1,  277,
+   -1,   -1,  280,  281,  282,  283,  284,  285,  286,   -1,
+   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,
+   -1,   -1,   37,  301,  302,   -1,   41,   42,   43,   44,
+   45,   -1,   -1,  311,   -1,   -1,   -1,  315,  316,   -1,
+   -1,   -1,  320,   58,   -1,   -1,   61,   -1,  326,   -1,
+  328,  329,   -1,  331,   -1,  333,  334,  335,  336,  337,
+   -1,  339,  340,  341,  342,  343,  344,  345,  346,  347,
+  348,  349,  350,  351,  352,  353,  354,   -1,   -1,  357,
+  358,  359,   -1,  361,  362,  363,   -1,  365,  366,  367,
+   -1,   -1,  370,   -1,  372,   -1,   -1,  375,  376,  377,
+  378,   -1,  380,  381,  382,  383,   -1,   -1,   -1,   -1,
+   -1,  389,   -1,   -1,  392,  393,  394,  395,  396,  397,
+  398,  399,   -1,  401,  402,  403,  404,  405,   -1,   -1,
+  408,   -1,   -1,   -1,   -1,   -1,   -1,  415,  416,  417,
+   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,   -1,   -1,
+   -1,   -1,   -1,   -1,  288,    0,   -1,   -1,  292,  293,
+  294,  295,   -1,   -1,   -1,   10,   -1,   -1,   -1,   -1,
+  304,  305,  306,  307,  308,  309,  310,   -1,  312,  313,
+  314,   -1,   -1,  317,  318,  319,   -1,   -1,  322,  323,
+  324,  325,   37,  327,   -1,   -1,   41,   42,   43,   44,
+   45,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   58,   -1,   -1,   61,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  256,   -1,  258,  259,  260,  261,  262,   -1,  264,
+  265,  266,  267,  268,  269,   -1,  271,  272,   -1,   -1,
+  275,   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,
+  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,
+   -1,  296,  297,  417,   -1,   -1,  301,  302,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,   -1,
+  315,  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,
+   -1,  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,
+  335,  336,  337,   -1,  339,  340,  341,  342,  343,  344,
+  345,  346,  347,  348,  349,  350,  351,  352,  353,  354,
+   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,
+  365,  366,  367,   -1,   -1,  370,   -1,  372,   -1,   -1,
+  375,  376,  377,  378,   -1,  380,  381,  382,  383,   -1,
+   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,
+  395,  396,  397,  398,  399,   -1,  401,  402,  403,  404,
+  405,   -1,   -1,  408,   -1,   -1,   -1,   -1,   -1,   -1,
+  415,  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,
+  425,  256,   -1,  258,  259,  260,  261,  262,    0,  264,
+  265,  266,  267,  268,  269,   -1,  271,  272,   10,   -1,
+  275,   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,
+  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,
+   -1,  296,  297,   -1,   -1,   37,  301,  302,   -1,   41,
+   42,   43,   44,   45,   -1,   -1,  311,   -1,   -1,   -1,
+  315,  316,   -1,   -1,   -1,  320,   58,   -1,   -1,   61,
+   -1,  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,
+  335,  336,  337,   -1,  339,  340,  341,  342,  343,  344,
+  345,  346,  347,  348,  349,  350,  351,  352,  353,  354,
+   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,
+  365,  366,  367,   -1,   -1,  370,   -1,  372,   -1,   -1,
+  375,  376,  377,  378,   -1,  380,  381,  382,  383,   -1,
+   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,
+  395,  396,  397,  398,  399,   -1,  401,  402,  403,  404,
+  405,   -1,   -1,  408,   -1,   -1,   -1,   -1,   -1,   -1,
+  415,  416,  417,   -1,  286,   -1,   -1,   -1,   -1,  424,
+  425,   -1,   -1,   -1,   -1,   -1,   -1,   -1,    0,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   10,  311,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  326,   -1,   -1,   -1,   -1,  331,
+  332,   -1,   -1,   -1,  336,  337,   -1,   -1,   -1,   41,
+   42,   43,   44,   45,  346,  347,  348,  349,  350,  351,
+  352,  353,   -1,   -1,   -1,   -1,   -1,   -1,   60,   61,
+   62,   -1,   -1,   -1,  366,   -1,   -1,   -1,   -1,   -1,
+  372,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  381,
+   -1,  383,   -1,   -1,  256,   -1,  258,  259,  260,  261,
+  262,   -1,  264,  265,  266,  267,  268,  269,   -1,  271,
+  272,   -1,   -1,  275,   -1,  277,   -1,   -1,  280,  281,
+  282,  283,  284,  285,  286,  417,   -1,  289,  290,  291,
+   -1,   -1,  424,   -1,  296,  297,   -1,   -1,   -1,  301,
+  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  311,
+   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,  320,   -1,
+   -1,   -1,   -1,   -1,  326,   -1,  328,  329,   -1,  331,
+   -1,  333,  334,  335,  336,  337,   -1,  339,  340,  341,
+  342,  343,  344,  345,  346,  347,  348,  349,  350,  351,
+  352,  353,  354,   -1,   -1,  357,  358,  359,   -1,  361,
+  362,  363,   -1,  365,  366,  367,   -1,   -1,  370,   -1,
+  372,   -1,   -1,  375,  376,  377,  378,   -1,  380,  381,
+  382,  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,
+  392,  393,  394,  395,  396,  397,  398,  399,   -1,  401,
+  402,  403,  404,  405,   -1,   -1,  408,   40,   -1,   42,
+   43,   -1,   45,  415,  416,  417,   -1,   -1,   -1,   -1,
+   -1,   -1,  424,  425,  256,   -1,  258,  259,  260,  261,
+  262,   -1,  264,  265,  266,  267,  268,  269,   -1,   -1,
+  272,  273,   -1,  275,   -1,  277,   -1,   -1,  280,  281,
+  282,  283,  284,  285,  286,   -1,   -1,  289,  290,  291,
+   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,  301,
+  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  311,
+   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,  320,   -1,
+   -1,   -1,   -1,   -1,  326,   -1,  328,  329,   -1,  331,
+   -1,  333,  334,  335,  336,  337,   -1,  339,  340,  341,
+  342,  343,  344,  345,  346,  347,  348,  349,  350,  351,
+  352,  353,  354,   -1,   -1,  357,  358,  359,   -1,  361,
+  362,  363,   -1,  365,  366,  367,   -1,    0,  370,   -1,
+  372,   -1,   -1,  375,  376,  377,  378,   10,   -1,  381,
+  382,  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,
+  392,  393,  394,  395,  396,  397,  398,  399,   -1,  401,
+  402,  403,  404,  405,   -1,   -1,  408,   -1,   -1,   42,
+   43,   -1,   45,  415,  416,  417,   -1,   -1,   -1,   -1,
+   -1,   -1,  424,  425,   -1,   -1,   -1,   60,   61,   62,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  263,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  287,  288,   -1,   -1,   -1,  292,
+  293,  294,  295,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  304,  305,  306,  307,  308,  309,  310,   -1,  312,
+  313,  314,   -1,   -1,  317,  318,  319,   -1,  321,  322,
+  323,  324,  325,   -1,  327,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,    0,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   10,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   37,   -1,  379,   -1,   41,   -1,
+   43,   44,   45,   -1,   -1,   -1,   -1,  390,  391,   -1,
+   -1,   -1,   -1,  396,   -1,   58,   -1,   -1,   61,   -1,
+   -1,   -1,   -1,  406,  407,   -1,   -1,  410,  411,  412,
+  413,   -1,   -1,   -1,  417,   -1,   -1,   -1,   -1,   -1,
+   -1,  424,   -1,  256,   -1,  258,  259,  260,  261,  262,
+   -1,  264,  265,  266,  267,  268,  269,   -1,   -1,  272,
+  273,   -1,  275,   -1,  277,   -1,   -1,  280,  281,  282,
+  283,  284,  285,  286,   -1,   -1,  289,  290,  291,   -1,
+   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,  301,  302,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,
+   -1,   -1,  315,  316,   -1,   -1,   -1,  320,   -1,   -1,
+   -1,   -1,   -1,  326,   -1,  328,  329,   -1,  331,   -1,
+  333,  334,  335,  336,  337,   -1,  339,  340,  341,  342,
+  343,  344,  345,  346,  347,  348,  349,  350,  351,  352,
+  353,  354,   -1,   -1,  357,  358,  359,   -1,  361,  362,
+  363,   -1,  365,  366,  367,   -1,   -1,  370,   -1,  372,
+   -1,   -1,  375,  376,  377,  378,   -1,  380,  381,  382,
+  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,
+  393,  394,  395,  396,  397,  398,  399,   -1,  401,  402,
+  403,  404,  405,   -1,   -1,  408,   -1,   -1,   -1,   -1,
+   -1,   -1,  415,  416,  417,   -1,   -1,   -1,   -1,   -1,
+   -1,  424,  425,  256,   -1,  258,  259,  260,  261,  262,
+    0,  264,  265,  266,  267,  268,  269,   -1,  271,   -1,
+   10,   -1,  275,   -1,  277,   -1,   -1,  280,  281,  282,
+  283,  284,  285,  286,   -1,   -1,  289,  290,  291,   -1,
+   -1,   -1,   -1,  296,  297,   -1,   -1,   37,  301,  302,
+   -1,   41,   -1,   43,   44,   45,   -1,   -1,  311,   -1,
+   -1,   -1,  315,  316,   -1,   -1,   -1,  320,   58,   -1,
+   -1,   61,   -1,  326,   -1,  328,  329,   -1,  331,   -1,
+  333,  334,  335,  336,  337,   -1,  339,  340,  341,  342,
+  343,  344,  345,  346,  347,  348,  349,  350,  351,  352,
+  353,  354,   -1,   -1,  357,  358,  359,   -1,  361,  362,
+  363,   -1,  365,  366,  367,   -1,   -1,  370,   -1,  372,
+   -1,   -1,  375,  376,  377,  378,   -1,  380,  381,  382,
+  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,
+  393,  394,  395,  396,  397,  398,  399,   -1,  401,  402,
+  403,  404,  405,   -1,   -1,  408,   -1,   -1,   -1,   -1,
+   -1,   -1,  415,  416,  417,   -1,   -1,   -1,   -1,   -1,
+   -1,  424,  425,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+    0,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   10,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   37,   -1,   -1,
+   -1,   41,   42,   -1,   44,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   58,   -1,
+   60,   -1,   62,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  256,   -1,  258,  259,
+  260,  261,  262,   -1,  264,  265,  266,  267,  268,  269,
+   -1,  271,   -1,   -1,   -1,  275,   -1,  277,   -1,   -1,
+  280,  281,  282,  283,  284,  285,  286,   -1,   -1,  289,
+  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,
+   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,
+  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,
+   -1,  331,    0,  333,  334,  335,  336,  337,   -1,  339,
+  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
+  350,  351,  352,  353,  354,   -1,   -1,  357,  358,  359,
+   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,   -1,
+  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,   -1,
+  380,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,  389,
+   -1,   -1,  392,  393,  394,  395,  396,  397,  398,  399,
+   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,   -1,
+   -1,   -1,   -1,   -1,   -1,  415,  416,  417,   -1,   -1,
+   -1,   -1,   -1,   -1,  424,  425,  256,   -1,  258,  259,
+  260,  261,  262,   -1,  264,  265,  266,  267,  268,  269,
+   -1,  271,   -1,  273,   -1,  275,   -1,  277,   -1,   -1,
+  280,  281,  282,  283,  284,  285,  286,   -1,   -1,  289,
+  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,
+   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,
+  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,
+   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,  339,
+  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
+  350,  351,  352,  353,  354,   -1,   -1,  357,  358,  359,
+   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,    0,
+  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,   10,
+  380,  381,  382,  383,   37,   -1,   -1,   -1,   41,  389,
+   -1,   44,  392,  393,  394,  395,   -1,  397,  398,  399,
+   -1,  401,  402,  403,  404,  405,   -1,   60,  408,   62,
+   -1,   42,   43,   44,   45,  415,  416,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  425,   -1,   -1,   -1,   60,
+   61,   62,   -1,   -1,   -1,   -1,   -1,  275,   -1,  277,
+   -1,   -1,  280,  281,  282,  283,   -1,   -1,  286,   -1,
+   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  311,   -1,   -1,   -1,  315,  316,   -1,
+   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,
+  328,  329,   -1,  331,   -1,  333,  334,  335,  336,  337,
+   -1,  339,  340,  341,  342,  343,  344,  345,  346,  347,
+  348,  349,  350,  351,  352,  353,  354,   -1,   -1,  357,
+  358,  359,   -1,  361,  362,  363,   -1,  365,  366,  367,
+   -1,    0,  370,   -1,  372,   -1,   -1,  375,  376,  377,
+  378,   10,   -1,  381,  382,  383,   -1,   -1,   -1,   -1,
+   -1,  389,   -1,   -1,   -1,  393,  394,  395,  396,  397,
+  398,  399,   -1,  401,  402,  403,  404,  405,   -1,   -1,
+  408,   -1,   -1,   42,   43,   44,   45,  415,  416,  417,
+   -1,   -1,   -1,   -1,   -1,   -1,  424,   -1,   -1,   -1,
+   -1,   60,   61,   62,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  258,  259,  260,  261,  262,
+   -1,  264,  265,  266,  267,  268,  269,   -1,   -1,  272,
+  273,   -1,   -1,   -1,   -1,  256,   -1,  258,  259,  260,
+  261,  262,   -1,  264,  265,  266,  267,  268,  269,   -1,
+   -1,  272,  273,   -1,  275,   -1,  277,   -1,   -1,  280,
+  281,  282,  283,  284,  285,  286,   -1,   -1,  289,  290,
+  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,
+  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  311,   -1,    0,   -1,  315,  316,   -1,   -1,   -1,  320,
+   -1,   -1,   10,   -1,   -1,  326,   -1,  328,  329,   -1,
+  331,   -1,  333,  334,  335,  336,  337,   -1,  339,  340,
+  341,  342,  343,  344,  345,  346,  347,  348,  349,  350,
+  351,  352,  353,  354,   -1,   -1,  357,  358,  359,   -1,
+  361,  362,  363,   -1,  365,  366,  367,   -1,   -1,  370,
+   -1,  372,   -1,   -1,  375,  376,  377,  378,   -1,   -1,
+  381,  382,  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,
+   -1,  392,  393,  394,  395,   -1,  397,  398,  399,   -1,
+  401,  402,  403,  404,  405,   -1,   -1,  408,   -1,   -1,
+   -1,   -1,   -1,   -1,  415,  416,   -1,  256,   -1,  258,
+  259,  260,  261,  262,  425,  264,  265,  266,  267,  268,
+  269,   -1,   -1,  272,  273,   -1,  275,   -1,  277,   -1,
+   -1,  280,  281,  282,  283,  284,  285,  286,   -1,   -1,
+  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,
+   -1,   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,
+   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,
+  329,   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,
+  339,  340,  341,  342,  343,  344,  345,  346,  347,  348,
+  349,  350,  351,  352,  353,  354,   -1,   -1,  357,  358,
+  359,   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,
+    0,  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,
+   10,   -1,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,
+  389,   -1,   -1,  392,  393,  394,  395,   -1,  397,  398,
+  399,   -1,  401,  402,  403,  404,  405,   37,  256,  408,
+   -1,   41,   -1,   -1,   44,   -1,  415,  416,   -1,   -1,
+   -1,   -1,   -1,  271,  272,   -1,  425,  275,   58,  277,
+   -1,   61,  280,  281,  282,  283,  284,  285,  286,   -1,
+   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,
+   -1,   -1,   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  311,   -1,   -1,   -1,  315,  316,   -1,
+   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,
+  328,  329,   -1,  331,   -1,  333,  334,  335,  336,  337,
+   -1,  339,  340,  341,  342,  343,  344,  345,  346,  347,
+  348,  349,  350,  351,  352,  353,  354,   -1,   -1,  357,
+  358,  359,   -1,  361,  362,  363,   -1,  365,  366,  367,
+   -1,    0,  370,   -1,  372,   -1,   -1,  375,  376,  377,
+  378,   10,   -1,  381,  382,  383,   -1,   -1,   -1,   -1,
+   -1,  389,   -1,   -1,  392,  393,  394,  395,  396,  397,
+  398,  399,   -1,  401,  402,  403,  404,  405,   37,   -1,
+  408,   -1,   41,   -1,   -1,   44,   -1,  415,  416,  417,
+   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,   -1,   58,
+   -1,   -1,   61,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  256,   -1,  258,  259,
+  260,  261,  262,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  271,   -1,   -1,   -1,  275,   -1,  277,   -1,   -1,
+  280,  281,  282,  283,  284,  285,  286,   -1,   -1,  289,
+  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,
+   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,
+  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,
+   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,  339,
+  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
+  350,  351,  352,  353,  354,   -1,   -1,  357,  358,  359,
+   -1,  361,  362,  363,   -1,  365,  366,  367,   42,   43,
+  370,   45,  372,   -1,   -1,  375,  376,  377,  378,   -1,
+  380,  381,  382,  383,   -1,   -1,   60,   61,   62,  389,
+   -1,   -1,  392,  393,  394,  395,  396,  397,  398,  399,
+   -1,  401,  402,  403,  404,  405,   -1,  256,  408,  258,
+  259,  260,  261,  262,   -1,  415,  416,  417,   -1,   -1,
+    0,   -1,  271,   -1,  424,  425,  275,   -1,  277,   -1,
+   10,  280,  281,  282,  283,  284,  285,  286,   -1,   -1,
+  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,
+   -1,   -1,  301,  302,   -1,   -1,   -1,   37,   -1,   -1,
+   -1,   41,  311,   -1,   44,   -1,  315,  316,   -1,   -1,
+   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   58,  328,
+  329,   61,  331,   -1,  333,  334,  335,  336,  337,   -1,
+  339,  340,  341,  342,  343,  344,  345,  346,  347,  348,
+  349,  350,  351,  352,  353,  354,   -1,   -1,  357,  358,
+  359,   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,
+   -1,  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,
+   -1,  380,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,
+  389,   -1,   -1,  392,  393,  394,  395,  396,  397,  398,
+  399,   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,
+   -1,   -1,   -1,   -1,   -1,   -1,  415,  416,  417,   -1,
+   -1,    0,   -1,   -1,   -1,  424,  425,   -1,   -1,   -1,
+   -1,   10,   -1,   -1,  258,  259,  260,  261,  262,   -1,
+  264,  265,  266,  267,  268,  269,   -1,   -1,  272,  273,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   37,   -1,
+   -1,   -1,   41,   -1,   -1,   44,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   58,
+   -1,   -1,   61,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  256,   -1,  258,  259,
+  260,  261,  262,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  271,   -1,   -1,   -1,  275,   -1,  277,   -1,   -1,
+  280,  281,  282,  283,  284,  285,  286,   -1,   -1,  289,
+  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,
+   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,
+  320,   -1,   -1,  417,   -1,   -1,  326,   -1,  328,  329,
+   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,  339,
+  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
+  350,  351,  352,  353,  354,   -1,   -1,  357,  358,  359,
+   -1,  361,  362,  363,   -1,  365,  366,  367,   42,   43,
+  370,   45,  372,   -1,   -1,  375,  376,  377,  378,   -1,
+  380,  381,  382,  383,   58,   -1,   60,   61,   62,  389,
+   -1,   -1,  392,  393,  394,  395,  396,  397,  398,  399,
+   -1,  401,  402,  403,  404,  405,   -1,  256,  408,  258,
+  259,  260,  261,  262,   -1,  415,  416,  417,   -1,   -1,
+    0,   -1,  271,   -1,  424,  425,  275,   -1,  277,   -1,
+   10,  280,  281,  282,  283,  284,  285,  286,   -1,   -1,
+  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,
+   -1,   -1,  301,  302,   -1,   -1,   -1,   37,   -1,   -1,
+   -1,   41,  311,   -1,   44,   -1,  315,  316,   -1,   -1,
+   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   58,  328,
+  329,   61,  331,   -1,  333,  334,  335,  336,  337,   -1,
+  339,  340,  341,  342,  343,  344,  345,  346,  347,  348,
+  349,  350,  351,  352,  353,  354,   -1,   -1,  357,  358,
+  359,   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,
+   -1,  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,
+   -1,  380,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,
+  389,   -1,   -1,  392,  393,  394,  395,  396,  397,  398,
+  399,   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,
+   -1,   -1,   -1,   -1,   -1,   -1,  415,  416,  417,   -1,
+   -1,    0,   -1,   -1,   -1,  424,  425,   -1,   -1,   -1,
+   -1,   10,   -1,   -1,  258,  259,  260,  261,  262,   -1,
+  264,  265,  266,  267,  268,  269,   -1,   -1,  272,  273,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   37,   -1,
+   -1,   -1,   41,   -1,   -1,   44,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   58,
+   -1,   -1,   61,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  256,   -1,  258,  259,
+  260,  261,  262,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  271,   -1,   -1,   -1,  275,   -1,  277,   -1,   -1,
+  280,  281,  282,  283,  284,  285,  286,   -1,   -1,  289,
+  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,
+   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,
+  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,
+   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,  339,
+  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
+  350,  351,  352,  353,  354,   -1,   -1,  357,  358,  359,
+   -1,  361,  362,  363,   -1,  365,  366,  367,   42,   43,
+  370,   45,  372,   -1,   -1,  375,  376,  377,  378,   -1,
+  380,  381,  382,  383,   58,   -1,   60,   61,   62,  389,
+   -1,   -1,  392,  393,  394,  395,  396,  397,  398,  399,
+   -1,  401,  402,  403,  404,  405,   -1,  256,  408,  258,
+  259,  260,  261,  262,   -1,  415,  416,  417,   -1,   -1,
+    0,   -1,  271,   -1,  424,  425,  275,   -1,  277,   -1,
+   10,  280,  281,  282,  283,  284,  285,  286,   -1,   -1,
+  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,
+   -1,   -1,  301,  302,   -1,   -1,   -1,   37,   -1,   -1,
+   -1,   41,  311,   -1,   44,   -1,  315,  316,   -1,   -1,
+   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   58,  328,
+  329,   61,  331,   -1,  333,  334,  335,  336,  337,   -1,
+  339,  340,  341,  342,  343,  344,  345,  346,  347,  348,
+  349,  350,  351,  352,  353,  354,   -1,   -1,  357,  358,
+  359,   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,
+   -1,  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,
+   -1,  380,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,
+  389,   -1,   -1,  392,  393,  394,  395,  396,  397,  398,
+  399,   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,
+   -1,   -1,   -1,   -1,   -1,   -1,  415,  416,  417,   -1,
+   -1,    0,   -1,   -1,   -1,  424,  425,   -1,   -1,   -1,
+   -1,   10,   -1,   -1,  258,  259,  260,  261,  262,   -1,
+  264,  265,  266,  267,  268,  269,   -1,   -1,  272,  273,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   37,   -1,
+   -1,   -1,   41,   -1,   -1,   44,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   58,
+   -1,   -1,   61,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  256,   -1,  258,  259,
+  260,  261,  262,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  271,   -1,   -1,   -1,  275,   -1,  277,   -1,   -1,
+  280,  281,  282,  283,  284,  285,  286,   -1,   -1,  289,
+  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,
+   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,
+  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,
+   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,  339,
+  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
+  350,  351,  352,  353,  354,   -1,   -1,  357,  358,  359,
+   -1,  361,  362,  363,   -1,  365,  366,  367,   42,   43,
+  370,   45,  372,   -1,   -1,  375,  376,  377,  378,   -1,
+  380,  381,  382,  383,   58,   -1,   60,   61,   62,  389,
+   -1,   -1,  392,  393,  394,  395,  396,  397,  398,  399,
+   -1,  401,  402,  403,  404,  405,   -1,  256,  408,  258,
+  259,  260,  261,  262,   -1,  415,  416,  417,   -1,   -1,
+    0,   -1,  271,   -1,  424,  425,  275,   -1,  277,   -1,
+   10,  280,  281,  282,  283,  284,  285,  286,   -1,   -1,
+  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,
+   -1,   -1,  301,  302,   -1,   -1,   -1,   37,   -1,   -1,
+   -1,   41,  311,   -1,   44,   -1,  315,  316,   -1,   -1,
+   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   58,  328,
+  329,   61,  331,   -1,  333,  334,  335,  336,  337,   -1,
+  339,  340,  341,  342,  343,  344,  345,  346,  347,  348,
+  349,  350,  351,  352,  353,  354,   -1,   -1,  357,  358,
+  359,   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,
+   -1,  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,
+   -1,  380,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,
+  389,   -1,   -1,  392,  393,  394,  395,  396,  397,  398,
+  399,   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,
+   -1,   -1,   -1,   -1,   -1,   -1,  415,  416,  417,   -1,
+   -1,    0,   -1,   -1,   -1,  424,  425,   -1,   -1,   -1,
+   -1,   10,   -1,   -1,  258,  259,  260,  261,  262,   -1,
+  264,  265,  266,  267,  268,  269,   -1,   -1,  272,  273,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   37,   -1,
+   -1,   -1,   41,   -1,   -1,   44,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   58,
+   -1,   -1,   61,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  256,   -1,  258,  259,
+  260,  261,  262,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  271,   -1,   -1,   -1,  275,   -1,  277,   -1,   -1,
+  280,  281,  282,  283,  284,  285,  286,   -1,   -1,  289,
+  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,
+   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,
+  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,
+   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,  339,
+  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
+  350,  351,  352,  353,  354,   -1,   -1,  357,  358,  359,
+   -1,  361,  362,  363,   -1,  365,  366,  367,   42,   43,
+  370,   45,  372,   -1,   -1,  375,  376,  377,  378,   -1,
+  380,  381,  382,  383,   58,   -1,   60,   61,   62,  389,
+   -1,   -1,  392,  393,  394,  395,  396,  397,  398,  399,
+   -1,  401,  402,  403,  404,  405,   -1,  256,  408,  258,
+  259,  260,  261,  262,   -1,  415,  416,  417,   -1,   -1,
+    0,   -1,  271,   -1,  424,  425,  275,   -1,  277,   -1,
+   10,  280,  281,  282,  283,  284,  285,  286,   -1,   -1,
+  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,
+   -1,   -1,  301,  302,   -1,   -1,   -1,   37,   -1,   -1,
+   -1,   41,  311,   -1,   44,   -1,  315,  316,   -1,   -1,
+   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   58,  328,
+  329,   61,  331,   -1,  333,  334,  335,  336,  337,   -1,
+  339,  340,  341,  342,  343,  344,  345,  346,  347,  348,
+  349,  350,  351,  352,  353,  354,   -1,   -1,  357,  358,
+  359,   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,
+   -1,  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,
+   -1,  380,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,
+  389,   -1,   -1,  392,  393,  394,  395,  396,  397,  398,
+  399,   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,
+   -1,   -1,   -1,   -1,   -1,   -1,  415,  416,  417,   -1,
+   -1,    0,   -1,   -1,   -1,  424,  425,   -1,   -1,   -1,
+   -1,   10,   -1,   -1,  258,  259,  260,  261,  262,   -1,
+  264,  265,  266,  267,  268,  269,   -1,   -1,  272,  273,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   37,   -1,
+   -1,   -1,   41,   -1,   -1,   44,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   58,
+   -1,   -1,   61,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  256,   -1,  258,  259,
+  260,  261,  262,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  271,   -1,   -1,   -1,  275,   -1,  277,   -1,   -1,
+  280,  281,  282,  283,  284,  285,  286,   -1,   -1,  289,
+  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,
+   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,
+  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,
+   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,  339,
+  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
+  350,  351,  352,  353,  354,   -1,   -1,  357,  358,  359,
+   -1,  361,  362,  363,   -1,  365,  366,  367,   42,   43,
+  370,   45,  372,   -1,   -1,  375,  376,  377,  378,   -1,
+  380,  381,  382,  383,   -1,   -1,   60,   61,   62,  389,
+   -1,   -1,  392,  393,  394,  395,  396,  397,  398,  399,
+   -1,  401,  402,  403,  404,  405,   -1,  256,  408,  258,
+  259,  260,  261,  262,   -1,  415,  416,  417,   -1,   -1,
+    0,   -1,  271,   -1,  424,  425,  275,   -1,  277,   -1,
+   10,  280,  281,  282,  283,  284,  285,  286,   -1,   -1,
+  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,
+   -1,   -1,  301,  302,   -1,   -1,   -1,   37,   -1,   -1,
+   -1,   41,  311,   -1,   44,   -1,  315,  316,   -1,   -1,
+   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   58,  328,
+  329,   61,  331,   -1,  333,  334,  335,  336,  337,   -1,
+  339,  340,  341,  342,  343,  344,  345,  346,  347,  348,
+  349,  350,  351,  352,  353,  354,   -1,   -1,  357,  358,
+  359,   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,
+   -1,  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,
+   -1,  380,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,
+  389,   -1,   -1,  392,  393,  394,  395,  396,  397,  398,
+  399,   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,
+   -1,   -1,   -1,   -1,   -1,   -1,  415,  416,  417,   -1,
+   -1,    0,   -1,   -1,   -1,  424,  425,   -1,   -1,   -1,
+   -1,   10,   -1,   -1,  258,  259,  260,  261,  262,   -1,
+  264,  265,  266,  267,  268,  269,   -1,   -1,  272,  273,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   37,   -1,
+   -1,   -1,   41,   -1,   -1,   44,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   58,
+   -1,   -1,   61,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  256,   -1,  258,  259,
+  260,  261,  262,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  271,   -1,   -1,   -1,  275,   -1,  277,   -1,   -1,
+  280,  281,  282,  283,  284,  285,  286,   -1,   -1,  289,
+  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,
+   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,
+  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,
+   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,  339,
+  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
+  350,  351,  352,  353,  354,   -1,   -1,  357,  358,  359,
+   -1,  361,  362,  363,   -1,  365,  366,  367,   42,   43,
+  370,   45,  372,   -1,   -1,  375,  376,  377,  378,   -1,
+  380,  381,  382,  383,   -1,   -1,   60,   61,   62,  389,
+   -1,   -1,  392,  393,  394,  395,  396,  397,  398,  399,
+   -1,  401,  402,  403,  404,  405,   -1,  256,  408,  258,
+  259,  260,  261,  262,   -1,  415,  416,  417,   -1,   -1,
+    0,   -1,  271,   -1,  424,  425,  275,   -1,  277,   -1,
+   10,  280,  281,  282,  283,  284,  285,  286,   -1,   -1,
+  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,
+   -1,   -1,  301,  302,   -1,   -1,   -1,   37,   -1,   -1,
+   -1,   41,  311,   -1,   44,   -1,  315,  316,   -1,   -1,
+   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   58,  328,
+  329,   61,  331,   -1,  333,  334,  335,  336,  337,   -1,
+  339,  340,  341,  342,  343,  344,  345,  346,  347,  348,
+  349,  350,  351,  352,  353,  354,   -1,   -1,  357,  358,
+  359,   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,
+   -1,  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,
+   -1,  380,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,
+  389,   -1,   -1,  392,  393,  394,  395,  396,  397,  398,
+  399,   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,
+   -1,   -1,   -1,   -1,   -1,   -1,  415,  416,  417,   -1,
+   -1,    0,   -1,   -1,   -1,  424,  425,   -1,   -1,   -1,
+   -1,   10,   -1,   -1,  258,  259,  260,  261,  262,   -1,
+  264,  265,  266,  267,  268,  269,   -1,   -1,  272,  273,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   37,   -1,
+   -1,   -1,   41,   -1,   -1,   44,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   58,
+   -1,   -1,   61,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  256,   -1,  258,  259,
+  260,  261,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  271,   -1,   -1,   -1,  275,   -1,  277,   -1,   -1,
+  280,  281,  282,  283,  284,  285,  286,   -1,   -1,  289,
+  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,
+   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,
+  320,   -1,   -1,   -1,   -1,   -1,  326,   40,  328,  329,
+   43,  331,   45,  333,  334,  335,  336,  337,   -1,  339,
+  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
+  350,  351,  352,  353,  354,   -1,   -1,  357,  358,  359,
+   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,   -1,
+  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,   -1,
+  380,  381,  382,  383,   -1,   40,   -1,   42,   43,  389,
+   45,   -1,  392,  393,  394,  395,  396,  397,  398,  399,
+   -1,  401,  402,  403,  404,  405,   61,  256,  408,  258,
+  259,  260,  261,   -1,   -1,  415,  416,  417,   -1,   -1,
+   -1,   -1,  271,   -1,  424,  425,  275,   -1,  277,   -1,
+   -1,  280,  281,  282,  283,  284,  285,  286,   -1,   -1,
+  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,
+   -1,   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,
+   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,
+  329,   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,
+  339,  340,  341,  342,  343,  344,  345,  346,  347,  348,
+  349,  350,  351,  352,  353,  354,   -1,   -1,  357,  358,
+  359,   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,
+    0,  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,
+   10,  380,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,
+  389,   -1,   -1,  392,  393,  394,  395,  396,  397,  398,
+  399,   -1,  401,  402,  403,  404,  405,   37,   -1,  408,
+   40,   41,   42,   43,   44,   45,  415,  416,  417,   -1,
+   -1,   -1,   -1,   -1,   -1,  424,  425,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  298,  299,  300,   -1,   -1,
+  303,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  263,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  273,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  287,  288,   -1,   -1,   -1,  292,  293,  294,
+  295,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  304,
+  305,  306,  307,  308,  309,  310,   -1,  312,  313,  314,
+   -1,   -1,  317,  318,  319,   -1,  321,  322,  323,  324,
+  325,    0,  327,   -1,   -1,   -1,   -1,  390,  391,   -1,
+   -1,   10,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  406,  407,   -1,   -1,  410,  411,  412,
+  413,   -1,   -1,   -1,  417,   -1,   -1,   -1,   37,   -1,
+   -1,  424,   41,   -1,   -1,   44,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  379,   -1,   -1,   -1,   -1,   58,
+   -1,   -1,   61,   -1,   -1,  390,  391,   -1,   -1,   -1,
+   -1,  396,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  406,  407,   -1,   -1,  410,  411,  412,  413,   -1,
+   -1,   -1,  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,
+   -1,   -1,   -1,   -1,   -1,   -1,  256,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  271,  272,  273,   -1,  275,   -1,  277,   -1,   -1,
+  280,  281,  282,  283,  284,  285,  286,   -1,   -1,  289,
+  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,
+   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,
+  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,
+   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,  339,
+  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
+  350,  351,  352,  353,  354,   -1,   -1,  357,  358,  359,
+   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,   -1,
+  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,   -1,
+   -1,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,  389,
+   -1,   -1,  392,  393,  394,  395,  396,  397,  398,  399,
+   -1,  401,  402,  403,  404,  405,   -1,  256,  408,  258,
+  259,   -1,   -1,   -1,   -1,  415,  416,  417,   -1,   -1,
+    0,   -1,  271,   -1,  424,  425,  275,   -1,  277,   -1,
+   10,  280,  281,  282,  283,  284,  285,  286,   -1,   -1,
+  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,
+   -1,   -1,  301,  302,   -1,   -1,   -1,   37,   -1,   -1,
+   -1,   41,  311,   -1,   44,   -1,  315,  316,   -1,   -1,
+   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   58,  328,
+  329,   61,  331,   -1,  333,  334,  335,  336,  337,   -1,
+  339,  340,  341,  342,  343,  344,  345,  346,  347,  348,
+  349,  350,  351,  352,  353,  354,   -1,   -1,  357,  358,
+  359,   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,
+   -1,  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,
+   -1,  380,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,
+  389,   -1,   -1,  392,  393,  394,  395,  396,  397,  398,
+  399,   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,
+   -1,   -1,   -1,   -1,   -1,   -1,  415,  416,  417,   -1,
+   -1,   -1,   -1,   -1,   -1,  424,  425,    0,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   10,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   41,   42,
+   43,   44,   45,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  256,   -1,  258,  259,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  271,   -1,   -1,   -1,  275,   -1,  277,   -1,   -1,
+  280,  281,  282,  283,  284,  285,  286,   -1,   -1,  289,
+  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,
+   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,
+  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,
+   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,  339,
+  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
+  350,  351,  352,  353,  354,   -1,   -1,  357,  358,  359,
+   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,   -1,
+  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,   -1,
+  380,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,  389,
+   -1,   -1,  392,  393,  394,  395,  396,  397,  398,  399,
+   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,   -1,
+   -1,   -1,   -1,  256,   -1,  415,  416,  417,   -1,   -1,
+   -1,    0,   -1,   -1,  424,  425,   -1,   -1,  271,  272,
+  273,   10,  275,   -1,  277,   -1,   -1,  280,  281,  282,
+  283,  284,  285,  286,   -1,   -1,  289,  290,  291,   -1,
+   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,  301,  302,
+   -1,   -1,   41,   42,   43,   44,   45,   -1,  311,   -1,
+   -1,   -1,  315,  316,   -1,   -1,   -1,  320,   -1,   -1,
+   -1,   -1,   -1,  326,   -1,  328,  329,   -1,  331,   -1,
+  333,  334,  335,  336,  337,   -1,  339,  340,  341,  342,
+  343,  344,  345,  346,  347,  348,  349,  350,  351,  352,
+  353,  354,   -1,   -1,  357,  358,  359,   -1,  361,  362,
+  363,   -1,  365,  366,  367,   -1,   -1,  370,   -1,  372,
+   -1,   -1,  375,  376,  377,  378,   -1,   -1,  381,  382,
+  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,
+  393,  394,  395,  396,  397,  398,  399,   -1,  401,  402,
+  403,  404,  405,   -1,   -1,  408,   -1,   -1,   -1,   -1,
+   -1,   -1,  415,  416,  417,   -1,    0,   -1,   -1,   -1,
+   -1,  424,  425,   -1,   -1,   -1,   10,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   42,   43,
+   44,   45,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  256,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  271,  272,  273,   -1,  275,   -1,  277,   -1,
+   -1,  280,  281,  282,  283,  284,  285,  286,   -1,   -1,
+  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,
+   -1,   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,
+   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,
+  329,   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,
+  339,  340,  341,  342,  343,  344,  345,  346,  347,  348,
+  349,  350,  351,  352,  353,  354,   -1,   -1,  357,  358,
+  359,   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,
+   -1,  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,
+   -1,   -1,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,
+  389,   -1,   -1,  392,  393,  394,  395,  396,  397,  398,
+  399,   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,
+   -1,   -1,  256,   -1,   -1,   -1,  415,  416,   -1,   -1,
+    0,   -1,   -1,   -1,   -1,  424,  425,  271,  272,  273,
+   10,  275,   -1,  277,   -1,   -1,  280,  281,  282,  283,
+  284,  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,
+   -1,   -1,  296,  297,   -1,   -1,   -1,  301,  302,   -1,
+   -1,   41,   42,   43,   44,   45,   -1,  311,   -1,   -1,
+   -1,  315,  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,
+   -1,   -1,  326,   -1,  328,  329,   -1,  331,   -1,  333,
+  334,  335,  336,  337,   -1,  339,  340,  341,  342,  343,
+  344,  345,  346,  347,  348,  349,  350,  351,  352,  353,
+  354,   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,
+   -1,  365,  366,  367,   -1,   -1,  370,   -1,  372,   -1,
+   -1,  375,  376,  377,  378,   -1,   -1,  381,  382,  383,
+   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,  393,
+  394,  395,  396,  397,  398,  399,   -1,  401,  402,  403,
+  404,  405,   -1,   -1,  408,   -1,   -1,   -1,   -1,   -1,
+   -1,  415,  416,  417,   -1,    0,   -1,   -1,   -1,   -1,
+  424,  425,   -1,   -1,   -1,   10,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   41,   42,   43,   44,
+   45,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  256,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  271,  272,   -1,   -1,  275,   -1,  277,   -1,   -1,
+  280,  281,  282,  283,  284,  285,  286,   -1,   -1,  289,
+  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,
+   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,
+  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,
+   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,  339,
+  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
+  350,  351,  352,  353,  354,   -1,   -1,  357,  358,  359,
+   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,   -1,
+  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,   -1,
+   -1,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,  389,
+   -1,   -1,  392,  393,  394,  395,  396,  397,  398,  399,
+   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,   -1,
+   -1,  256,   -1,   -1,   -1,  415,  416,  417,    0,   -1,
+   -1,   -1,   -1,   -1,  424,  425,  271,  272,   10,   -1,
+  275,   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,
+  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,
+   -1,  296,  297,   -1,   -1,   -1,  301,  302,   -1,   41,
+   42,   43,   44,   45,   -1,   -1,  311,   -1,   -1,   -1,
+  315,  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,
+   -1,  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,
+  335,  336,  337,   -1,  339,  340,  341,  342,  343,  344,
+  345,  346,  347,  348,  349,  350,  351,  352,  353,  354,
+   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,
+  365,  366,  367,   -1,   -1,  370,   -1,  372,   -1,   -1,
+  375,  376,  377,  378,   -1,   -1,  381,  382,  383,   -1,
+   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,
+  395,  396,  397,  398,  399,   -1,  401,  402,  403,  404,
+  405,   -1,   -1,  408,   -1,   -1,   -1,   -1,   -1,   -1,
+  415,  416,  417,    0,   -1,   -1,   -1,   -1,   -1,  424,
+  425,   -1,   -1,   10,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   41,   42,   43,   44,   45,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  256,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  271,
+  272,   -1,   -1,  275,   -1,  277,   -1,   -1,  280,  281,
+  282,  283,  284,  285,  286,   -1,   -1,  289,  290,  291,
+   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,  301,
+  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  311,
+   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,  320,   -1,
+   -1,   -1,   -1,   -1,  326,   -1,  328,  329,   -1,  331,
+   -1,  333,  334,  335,  336,  337,   -1,  339,  340,  341,
+  342,  343,  344,  345,  346,  347,  348,  349,  350,  351,
+  352,  353,  354,   -1,   -1,  357,  358,  359,   -1,  361,
+  362,  363,   -1,  365,  366,  367,   -1,   -1,  370,   -1,
+  372,   -1,   -1,  375,  376,  377,  378,   -1,   -1,  381,
+  382,  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,
+  392,  393,  394,  395,  396,  397,  398,  399,   -1,  401,
+  402,  403,  404,  405,   -1,   -1,  408,   -1,   -1,  256,
+   -1,   -1,   -1,  415,  416,  417,    0,   -1,   -1,   -1,
+   -1,   -1,  424,  425,  271,  272,   10,   -1,  275,   -1,
+  277,   -1,   -1,  280,  281,  282,  283,  284,  285,  286,
+   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,
+  297,   -1,   -1,   37,  301,  302,   -1,   41,   -1,   -1,
+   44,   -1,   -1,   -1,  311,   -1,   -1,   -1,  315,  316,
+   -1,   -1,   -1,  320,   58,   -1,   -1,   -1,   -1,  326,
+   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,  336,
+  337,   -1,  339,  340,  341,  342,  343,  344,  345,  346,
+  347,  348,  349,  350,  351,  352,  353,  354,   -1,   -1,
+  357,  358,  359,   -1,  361,  362,  363,   -1,  365,  366,
+  367,   -1,   -1,  370,   -1,  372,   -1,   -1,  375,  376,
+  377,  378,   -1,   -1,  381,  382,  383,   -1,   -1,   -1,
+   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,  396,
+  397,  398,  399,   -1,  401,  402,  403,  404,  405,   -1,
+   -1,  408,   -1,   -1,   -1,   -1,   -1,   -1,  415,  416,
+  417,    0,   -1,   -1,   -1,   -1,   -1,  424,  425,   -1,
+   -1,   10,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   37,   -1,
+   -1,   -1,   41,   -1,   -1,   44,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   58,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  256,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  271,   -1,   -1,
+   -1,  275,   -1,  277,   -1,   -1,  280,  281,  282,  283,
+  284,  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,
+   -1,   -1,  296,  297,   -1,   -1,   -1,  301,  302,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,
+   -1,  315,  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,
+   -1,   -1,  326,   -1,  328,  329,   -1,  331,   -1,  333,
+  334,  335,  336,  337,   -1,  339,  340,  341,  342,  343,
+  344,  345,  346,  347,  348,  349,  350,  351,  352,  353,
+  354,   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,
+   -1,  365,  366,  367,   -1,    0,  370,   -1,  372,   -1,
+   -1,  375,  376,  377,  378,   10,  380,  381,  382,  383,
+   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,  393,
+  394,  395,  396,  397,  398,  399,   -1,  401,  402,  403,
+  404,  405,   -1,   -1,  408,   -1,   41,  256,   43,   44,
+   45,  415,  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,
+  424,  425,  271,   -1,   -1,   -1,  275,   -1,  277,   -1,
+   -1,  280,  281,  282,  283,  284,  285,  286,   -1,   -1,
+  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,
+   -1,   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,
+   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,
+  329,   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,
+  339,  340,  341,  342,  343,  344,  345,  346,  347,  348,
+  349,  350,  351,  352,  353,  354,   -1,   -1,  357,  358,
+  359,   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,
+    0,  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,
+   10,  380,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,
+  389,   -1,   -1,  392,  393,  394,  395,  396,  397,  398,
+  399,   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,
+   -1,   41,   -1,   -1,   44,   -1,  415,  416,  417,   -1,
+   -1,   -1,   -1,   -1,   -1,  424,  425,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  256,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  271,   -1,   -1,   -1,
+  275,   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,
+  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,
+   -1,  296,  297,   -1,   -1,   -1,  301,  302,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,   -1,
+  315,  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,
+   -1,  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,
+  335,  336,  337,   -1,  339,  340,  341,  342,  343,  344,
+  345,  346,  347,  348,  349,  350,  351,  352,  353,  354,
+   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,
+  365,  366,  367,   -1,    0,  370,   -1,  372,   -1,   -1,
+  375,  376,  377,  378,   10,   -1,  381,  382,  383,   -1,
+   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,
+  395,  396,  397,  398,  399,   -1,  401,  402,  403,  404,
+  405,   -1,   -1,  408,   -1,   41,  256,   -1,   44,   -1,
+  415,  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,
+  425,  271,   -1,   -1,   -1,  275,   -1,  277,   -1,   -1,
+  280,  281,  282,  283,  284,  285,  286,   -1,   -1,  289,
+  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,
+   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,
+  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,
+   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,  339,
+  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
+  350,  351,  352,  353,  354,   -1,   -1,  357,  358,  359,
+   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,    0,
+  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,   10,
+   -1,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,  389,
+   -1,   -1,  392,  393,  394,  395,  396,  397,  398,  399,
+   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,   -1,
+   41,   -1,   -1,   44,   -1,  415,  416,  417,   -1,   -1,
+   -1,   -1,   -1,   -1,  424,  425,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  256,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  271,   -1,   -1,   -1,  275,
+   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,  285,
+  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,
+  296,  297,   -1,   -1,   -1,  301,  302,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,   -1,  315,
+  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,
+  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,
+  336,  337,   -1,  339,  340,  341,  342,  343,  344,  345,
+  346,  347,  348,  349,  350,  351,  352,  353,  354,   -1,
+   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,  365,
+  366,  367,   -1,    0,  370,   -1,  372,   -1,   -1,  375,
+  376,  377,  378,   10,   -1,  381,  382,  383,   -1,   -1,
+   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,
+  396,  397,  398,  399,   -1,  401,  402,  403,  404,  405,
+   -1,   -1,  408,   -1,   41,  256,   -1,   44,   -1,  415,
+  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,
+  271,   -1,   -1,   -1,  275,   -1,  277,   -1,   -1,  280,
+  281,  282,  283,  284,  285,  286,   -1,   -1,  289,  290,
+  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,
+  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  311,   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,  320,
+   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,   -1,
+  331,   -1,  333,  334,  335,  336,  337,   -1,  339,  340,
+  341,  342,  343,  344,  345,  346,  347,  348,  349,  350,
+  351,  352,  353,  354,   -1,   -1,  357,  358,  359,   -1,
+  361,  362,  363,   -1,  365,  366,  367,   -1,    0,  370,
+   -1,  372,   -1,   -1,  375,  376,  377,  378,   10,   -1,
+  381,  382,  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,
+   -1,  392,  393,  394,  395,  396,  397,  398,  399,   -1,
+  401,  402,  403,  404,  405,   -1,   -1,  408,   -1,   -1,
+   42,   -1,   44,   -1,  415,  416,  417,   -1,   -1,   -1,
+   -1,   -1,   -1,  424,  425,   -1,   -1,   -1,   -1,   61,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  256,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  271,   -1,   -1,   -1,  275,   -1,
+  277,   -1,   -1,  280,  281,  282,  283,  284,  285,  286,
+   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,
+  297,   -1,   -1,   -1,  301,  302,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  311,   -1,   -1,   -1,  315,  316,
+   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,
+   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,  336,
+  337,   -1,  339,  340,  341,  342,  343,  344,  345,  346,
+  347,  348,  349,  350,  351,  352,  353,  354,   -1,   -1,
+  357,  358,  359,   -1,  361,  362,  363,   -1,  365,  366,
+  367,   -1,    0,  370,   -1,  372,   -1,   -1,  375,  376,
+  377,  378,   10,   -1,  381,  382,  383,   -1,   -1,   -1,
+   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,  396,
+  397,  398,  399,   -1,  401,  402,  403,  404,  405,   -1,
+   -1,  408,   -1,   41,  256,   -1,   44,   -1,  415,  416,
+  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,   -1,
+   -1,   -1,   -1,  275,   -1,  277,   -1,   -1,  280,  281,
+  282,  283,  284,  285,  286,   -1,   -1,  289,  290,  291,
+   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,  301,
+  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  311,
+   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,  320,   -1,
+   -1,   -1,   -1,   -1,  326,   -1,  328,  329,   -1,  331,
+   -1,  333,  334,  335,  336,  337,   -1,  339,  340,  341,
+  342,  343,  344,  345,  346,  347,  348,  349,  350,  351,
+  352,  353,  354,   -1,   -1,  357,  358,  359,   -1,  361,
+  362,  363,   -1,  365,  366,  367,   -1,    0,  370,   -1,
+  372,   -1,   -1,  375,  376,  377,  378,   10,   -1,  381,
+  382,  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,
+  392,  393,  394,  395,  396,  397,  398,  399,   -1,  401,
+  402,  403,  404,  405,   -1,   -1,  408,   -1,   41,   -1,
+   -1,   44,   -1,  415,  416,  417,   -1,   -1,   -1,   -1,
+   -1,   -1,  424,  425,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  256,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  271,   -1,   -1,   -1,  275,   -1,  277,
+   -1,   -1,  280,  281,  282,  283,  284,  285,  286,   -1,
+   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,
+   -1,   -1,   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  311,    0,   -1,   -1,  315,  316,   -1,
+   -1,   -1,  320,   -1,   10,   -1,   -1,   -1,  326,   -1,
+  328,  329,   -1,  331,   -1,  333,  334,  335,  336,  337,
+   -1,  339,  340,  341,  342,  343,  344,  345,  346,  347,
+  348,  349,  350,  351,  352,  353,  354,   -1,   -1,  357,
+  358,  359,   -1,  361,  362,  363,   -1,  365,  366,  367,
+   -1,   -1,  370,   -1,  372,   -1,   -1,  375,  376,  377,
+  378,   -1,   -1,  381,  382,  383,   -1,   -1,   -1,   -1,
+   -1,  389,   -1,   -1,  392,  393,  394,  395,  396,  397,
+  398,  399,   -1,  401,  402,  403,  404,  405,   -1,   -1,
+  408,   -1,   -1,  256,   -1,   -1,   -1,  415,  416,  417,
+   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,  271,   -1,
+   -1,   -1,  275,   -1,  277,   -1,   -1,  280,  281,  282,
+  283,  284,  285,  286,   -1,   -1,  289,  290,  291,   -1,
+   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,  301,  302,
+   -1,   -1,   -1,   -1,   -1,    0,   -1,   -1,  311,   -1,
+   -1,   -1,  315,  316,   -1,   10,   -1,  320,   -1,   -1,
+   -1,   -1,   -1,  326,   -1,  328,  329,   -1,  331,   -1,
+  333,  334,  335,  336,  337,   -1,  339,  340,  341,  342,
+  343,  344,  345,  346,  347,  348,  349,  350,  351,  352,
+  353,  354,   -1,   -1,  357,  358,  359,   -1,  361,  362,
+  363,   -1,  365,  366,  367,   -1,   -1,  370,   -1,  372,
+   -1,   -1,  375,  376,  377,  378,   -1,   -1,  381,  382,
+  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,
+  393,  394,  395,  396,  397,  398,  399,   -1,  401,  402,
+  403,  404,  405,   -1,   -1,  408,   -1,   -1,   -1,   -1,
+  256,   -1,  415,  416,  417,   -1,   -1,   -1,   -1,   -1,
+   -1,  424,  425,   -1,   -1,  271,  272,   -1,   -1,  275,
+   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,  285,
+  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,
+  296,  297,   -1,   -1,   -1,  301,  302,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,   -1,  315,
+  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,
+  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,
+  336,  337,   -1,  339,  340,  341,  342,  343,  344,  345,
+  346,  347,  348,  349,  350,  351,  352,  353,  354,   -1,
+   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,  365,
+  366,  367,   -1,    0,  370,   -1,  372,   -1,   -1,  375,
+  376,  377,  378,   10,   -1,  381,  382,  383,   -1,   -1,
+   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,
+  396,  397,  398,  399,   -1,  401,  402,  403,  404,  405,
+   -1,  256,  408,   -1,   41,   -1,   -1,   -1,   -1,  415,
+  416,  417,   -1,   -1,   -1,   -1,  271,  272,  424,  425,
+  275,   58,  277,   -1,   -1,  280,  281,  282,  283,  284,
+  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,
+   -1,  296,  297,   -1,   -1,   -1,  301,  302,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,   -1,
+  315,  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,
+   -1,  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,
+  335,  336,  337,   -1,  339,  340,  341,  342,  343,  344,
+  345,  346,  347,  348,  349,  350,  351,  352,  353,  354,
+   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,
+  365,  366,  367,   -1,    0,  370,   -1,  372,   -1,   -1,
+  375,  376,  377,  378,   10,   -1,  381,  382,  383,   -1,
+   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,
+  395,  396,  397,  398,  399,   -1,  401,  402,  403,  404,
+  405,   -1,   -1,  408,   -1,   -1,   -1,   -1,   44,   -1,
+  415,  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,
+  425,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  256,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  275,   -1,
+  277,   -1,   -1,  280,  281,  282,  283,  284,  285,  286,
+   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,
+  297,   -1,   -1,   -1,  301,  302,   -1,   -1,   -1,   -1,
+    0,   -1,   -1,   -1,  311,   -1,   -1,   -1,  315,  316,
+   10,   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,
+   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,  336,
+  337,   -1,  339,  340,  341,  342,  343,  344,  345,  346,
+  347,  348,  349,  350,  351,  352,  353,  354,   -1,   -1,
+  357,  358,  359,   -1,  361,  362,  363,   -1,  365,  366,
+  367,   -1,   -1,  370,   -1,  372,   -1,   -1,  375,  376,
+  377,  378,   -1,   -1,  381,  382,  383,   -1,   -1,   -1,
+   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,  396,
+  397,  398,  399,   -1,  401,  402,  403,  404,  405,   -1,
+  256,  408,   -1,   -1,   -1,   -1,   -1,   -1,  415,  416,
+  417,   -1,   -1,   -1,   -1,  271,  272,  424,  425,  275,
+   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,  285,
+  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,
+  296,  297,   -1,   -1,   -1,  301,  302,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,   -1,  315,
+  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,
+  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,
+  336,  337,   -1,  339,  340,  341,  342,  343,  344,  345,
+  346,  347,  348,  349,  350,  351,  352,  353,  354,   -1,
+   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,  365,
+  366,  367,   -1,    0,  370,   -1,  372,   -1,   -1,  375,
+  376,  377,  378,   10,   -1,  381,  382,  383,   -1,   -1,
+   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,
+  396,  397,  398,  399,   -1,  401,  402,  403,  404,  405,
+   -1,   -1,  408,   -1,   -1,   42,  256,   44,   -1,  415,
+  416,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,
+   -1,  271,  272,   -1,   -1,  275,   -1,  277,   -1,   -1,
+  280,  281,  282,  283,  284,  285,  286,   -1,   -1,  289,
+  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,
+   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,
+  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,
+   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,  339,
+  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
+  350,  351,  352,  353,  354,   -1,   -1,  357,  358,  359,
+   -1,  361,  362,  363,    0,  365,  366,  367,   -1,   -1,
+  370,   -1,  372,   -1,   10,  375,  376,  377,  378,   -1,
+   -1,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,  389,
+   -1,   -1,  392,  393,  394,  395,  396,  397,  398,  399,
+   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,   -1,
+   -1,   -1,   -1,   -1,   -1,  415,  416,  417,   -1,   -1,
+   -1,   -1,   -1,   -1,  424,  425,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  256,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  275,   -1,
+  277,   -1,   -1,  280,  281,  282,  283,  284,  285,  286,
+   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,
+  297,   -1,   -1,   -1,  301,  302,   -1,   -1,   -1,   -1,
+    0,   -1,   -1,   -1,  311,   -1,   -1,   -1,  315,  316,
+   10,   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,
+   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,  336,
+  337,   -1,  339,  340,  341,  342,  343,  344,  345,  346,
+  347,  348,  349,  350,  351,  352,  353,  354,   -1,   -1,
+  357,  358,  359,   -1,  361,  362,  363,   -1,  365,  366,
+  367,   -1,   -1,  370,   -1,  372,   -1,   -1,  375,  376,
+  377,  378,   -1,   -1,  381,  382,  383,   -1,   -1,   -1,
+   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,  396,
+  397,  398,  399,   -1,  401,  402,  403,  404,  405,   -1,
+  256,  408,   -1,   -1,   -1,   -1,   -1,   -1,  415,  416,
+  417,   -1,   -1,   -1,   -1,  271,  272,  424,  425,  275,
+   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,  285,
+  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,
+  296,  297,   -1,   -1,   -1,  301,  302,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,   -1,  315,
+  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,
+  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,
+  336,  337,   -1,  339,  340,  341,  342,  343,  344,  345,
+  346,  347,  348,  349,  350,  351,  352,  353,  354,   -1,
+   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,  365,
+  366,  367,   -1,    0,  370,   -1,  372,   -1,   -1,  375,
+  376,  377,  378,   10,   -1,  381,  382,  383,   -1,   -1,
+   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,
+  396,  397,  398,  399,   -1,  401,  402,  403,  404,  405,
+   -1,   -1,  408,   -1,   41,   -1,  256,   44,   -1,  415,
+  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,
+   -1,  271,  272,   -1,   -1,  275,   -1,  277,   -1,   -1,
+  280,  281,  282,  283,  284,  285,  286,   -1,   -1,  289,
+  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,
+   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,
+  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,
+   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,  339,
+  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
+  350,  351,  352,  353,  354,   -1,   -1,  357,  358,  359,
+   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,    0,
+  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,   10,
+   -1,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,  389,
+   -1,   -1,  392,  393,  394,  395,  396,  397,  398,  399,
+   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,   -1,
+   41,   -1,   -1,   44,   -1,  415,  416,  417,   -1,   -1,
+   -1,   -1,   -1,   -1,  424,  425,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  256,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  275,   -1,
+  277,   -1,   -1,  280,  281,  282,  283,  284,  285,  286,
+   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,
+  297,   -1,   -1,   -1,  301,  302,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  311,   -1,   -1,   -1,  315,  316,
+   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,
+   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,  336,
+  337,   -1,  339,  340,  341,  342,  343,  344,  345,  346,
+  347,  348,  349,  350,  351,  352,  353,  354,   -1,   -1,
+  357,  358,  359,   -1,  361,  362,  363,   -1,  365,  366,
+  367,   -1,    0,  370,   -1,  372,   -1,   -1,  375,  376,
+  377,  378,   10,   -1,  381,  382,  383,   -1,   -1,   -1,
+   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,  396,
+  397,  398,  399,   -1,  401,  402,  403,  404,  405,   -1,
+   -1,  408,   -1,   41,   -1,  256,   44,   -1,  415,  416,
+  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,   -1,
+   -1,   -1,   -1,   -1,  275,   -1,  277,   -1,   -1,  280,
+  281,  282,  283,  284,  285,  286,   -1,   -1,  289,  290,
+  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,
+  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  311,   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,  320,
+   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,   -1,
+  331,   -1,  333,  334,  335,  336,  337,   -1,  339,  340,
+  341,  342,  343,  344,  345,  346,  347,  348,  349,  350,
+  351,  352,  353,  354,   -1,   -1,  357,  358,  359,   -1,
+  361,  362,  363,   -1,  365,  366,  367,   -1,    0,  370,
+   -1,  372,   -1,   -1,  375,  376,  377,  378,   10,   -1,
+  381,  382,  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,
+   -1,  392,  393,  394,  395,  396,  397,  398,  399,   -1,
+  401,  402,  403,  404,  405,   -1,   -1,  408,   -1,   41,
+   -1,   -1,   44,   -1,  415,  416,  417,   -1,   -1,   -1,
+   -1,   -1,   -1,  424,  425,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  256,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  275,   -1,  277,
+   -1,   -1,  280,  281,  282,  283,  284,  285,  286,   -1,
+   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,
+   -1,   -1,   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  311,   -1,   -1,   -1,  315,  316,   -1,
+   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,
+  328,  329,   -1,  331,   -1,  333,  334,  335,  336,  337,
+   -1,  339,  340,  341,  342,  343,  344,  345,  346,  347,
+  348,  349,  350,  351,  352,  353,  354,   -1,   -1,  357,
+  358,  359,   -1,  361,  362,  363,   -1,  365,  366,  367,
+   -1,    0,  370,   -1,  372,   -1,   -1,  375,  376,  377,
+  378,   10,   -1,  381,  382,  383,   -1,   -1,   -1,   -1,
+   -1,  389,   -1,   -1,  392,  393,  394,  395,  396,  397,
+  398,  399,   -1,  401,  402,  403,  404,  405,   -1,   -1,
+  408,   -1,   41,   -1,  256,   44,   -1,  415,  416,  417,
+   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,   -1,   -1,
+   -1,   -1,   -1,  275,   -1,  277,   -1,   -1,  280,  281,
+  282,  283,  284,  285,  286,   -1,   -1,  289,  290,  291,
+   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,  301,
+  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  311,
+   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,  320,   -1,
+   -1,   -1,   -1,   -1,  326,   -1,  328,  329,   -1,  331,
+   -1,  333,  334,  335,  336,  337,   -1,  339,  340,  341,
+  342,  343,  344,  345,  346,  347,  348,  349,  350,  351,
+  352,  353,  354,   -1,   -1,  357,  358,  359,   -1,  361,
+  362,  363,   -1,  365,  366,  367,   -1,    0,  370,   -1,
+  372,   -1,   -1,  375,  376,  377,  378,   10,   -1,  381,
+  382,  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,
+  392,  393,  394,  395,  396,  397,  398,  399,   -1,  401,
+  402,  403,  404,  405,   -1,   -1,  408,   -1,   -1,   -1,
+   -1,   44,   -1,  415,  416,  417,   -1,   -1,   -1,   -1,
+   -1,   -1,  424,  425,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  256,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  275,   -1,  277,   -1,
+   -1,  280,  281,  282,  283,  284,  285,  286,   -1,   -1,
+  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,
+   -1,   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  311,    0,   -1,   -1,  315,  316,   -1,   -1,
+   -1,  320,   -1,   10,   -1,   -1,   -1,  326,   -1,  328,
+  329,   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,
+  339,  340,  341,  342,  343,  344,  345,  346,  347,  348,
+  349,  350,  351,  352,  353,  354,   -1,   44,  357,  358,
+  359,   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,
+   -1,  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,
+   -1,   -1,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,
+  389,   -1,   -1,  392,  393,  394,  395,  396,  397,  398,
+  399,   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,
+   -1,   -1,   -1,  256,   -1,   -1,  415,  416,  417,   -1,
+   -1,   -1,   -1,   -1,   -1,  424,  425,   -1,   -1,   -1,
+   -1,   -1,  275,   -1,  277,   -1,   -1,  280,  281,  282,
+  283,  284,  285,  286,   -1,   -1,  289,  290,  291,   -1,
+   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,  301,  302,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  311,    0,
+   -1,   -1,  315,  316,   -1,   -1,   -1,  320,   -1,   10,
+   -1,   -1,   -1,  326,   -1,  328,  329,   -1,  331,   -1,
+  333,  334,  335,  336,  337,   -1,  339,  340,  341,  342,
+  343,  344,  345,  346,  347,  348,  349,  350,  351,  352,
+  353,  354,   -1,   44,  357,  358,  359,   -1,  361,  362,
+  363,   -1,  365,  366,  367,   -1,   -1,  370,   -1,  372,
+   -1,   -1,  375,  376,  377,  378,   -1,  380,  381,  382,
+  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,
+  393,  394,  395,  396,  397,  398,  399,   -1,  401,  402,
+  403,  404,  405,   -1,   -1,  408,   -1,   -1,   -1,  256,
+   -1,   -1,  415,  416,  417,   -1,   -1,   -1,   -1,   -1,
+   -1,  424,  425,   -1,   -1,   -1,   -1,   -1,  275,   -1,
+  277,   -1,   -1,  280,  281,  282,  283,  284,  285,  286,
+   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,
+  297,   -1,   -1,   -1,  301,  302,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  311,    0,   -1,   -1,  315,  316,
+   -1,   -1,   -1,  320,   -1,   10,   -1,   -1,   -1,  326,
+   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,  336,
+  337,   -1,  339,  340,  341,  342,  343,  344,  345,  346,
+  347,  348,  349,  350,  351,  352,  353,  354,   -1,   44,
+  357,  358,  359,   -1,  361,  362,  363,   -1,  365,  366,
+  367,   -1,   -1,  370,   -1,  372,   61,   -1,  375,  376,
+  377,  378,   -1,  380,  381,  382,  383,   -1,   -1,   -1,
+   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,  396,
+  397,  398,  399,   -1,  401,  402,  403,  404,  405,   -1,
+   -1,  408,   -1,   -1,   -1,  256,   -1,   -1,  415,  416,
+  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,   -1,
+   -1,   -1,   -1,   -1,  275,   -1,  277,   -1,   -1,  280,
+  281,  282,  283,  284,  285,  286,   -1,   -1,  289,  290,
+  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,
+  301,  302,   -1,   -1,   -1,   -1,    0,   -1,   -1,   -1,
+  311,   -1,   -1,   -1,  315,  316,   10,   -1,   -1,  320,
+   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,   -1,
+  331,   -1,  333,  334,  335,  336,  337,   -1,  339,  340,
+  341,  342,  343,  344,  345,  346,  347,  348,  349,  350,
+  351,  352,  353,  354,   -1,   -1,  357,  358,  359,   -1,
+  361,  362,  363,   -1,  365,  366,  367,   -1,   -1,  370,
+   -1,  372,   -1,   -1,  375,  376,  377,  378,   -1,  380,
+  381,  382,  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,
+   -1,  392,  393,  394,  395,  396,  397,  398,  399,   -1,
+  401,  402,  403,  404,  405,   -1,   -1,  408,   -1,   -1,
+   -1,  256,   -1,   -1,  415,  416,  417,   -1,   -1,   -1,
+   -1,   -1,   -1,  424,  425,   -1,   -1,   -1,   -1,   -1,
+  275,   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,
+  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,
+   -1,  296,  297,   -1,   -1,   -1,  301,  302,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,   -1,
+  315,  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,
+   -1,  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,
+  335,  336,  337,   -1,  339,  340,  341,  342,  343,  344,
+  345,  346,  347,  348,  349,  350,  351,  352,  353,  354,
+   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,
+  365,  366,  367,   -1,    0,  370,   -1,  372,   -1,   -1,
+  375,  376,  377,  378,   10,   -1,  381,  382,  383,   -1,
+   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,
+  395,  396,  397,  398,  399,   -1,  401,  402,  403,  404,
+  405,   -1,  256,  408,   -1,   -1,   -1,   -1,   44,   -1,
+  415,  416,  417,   -1,   -1,   -1,   -1,  271,  272,  424,
+  425,  275,   -1,  277,   -1,   61,  280,  281,  282,  283,
+  284,  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,
+   -1,   -1,  296,  297,   -1,   -1,   -1,  301,  302,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,
+   -1,  315,  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,
+   -1,   -1,  326,   -1,  328,  329,   -1,  331,   -1,  333,
+  334,  335,  336,  337,   -1,  339,  340,  341,  342,  343,
+  344,  345,  346,  347,  348,  349,  350,  351,  352,  353,
+  354,   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,
+   -1,  365,  366,  367,   -1,    0,  370,   -1,  372,   -1,
+   -1,  375,  376,  377,  378,   10,   -1,  381,  382,  383,
+   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,  393,
+  394,  395,  396,  397,  398,  399,   -1,  401,  402,  403,
+  404,  405,   -1,   -1,  408,   -1,   41,   -1,   -1,   44,
+   -1,  415,  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,
+  424,  425,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  256,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  275,
+   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,  285,
+  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,
+  296,  297,   -1,   -1,   -1,  301,  302,   -1,    0,   -1,
+   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,   10,  315,
+  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,
+  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,
+  336,  337,   -1,  339,  340,  341,  342,  343,  344,  345,
+  346,  347,  348,  349,  350,  351,  352,  353,  354,   -1,
+   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,  365,
+  366,  367,   -1,   -1,  370,   -1,  372,   -1,   -1,  375,
+  376,  377,  378,   -1,   -1,  381,  382,  383,   -1,   -1,
+   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,
+  396,  397,  398,  399,   -1,  401,  402,  403,  404,  405,
+   -1,  256,  408,   -1,   -1,   -1,   -1,   -1,   -1,  415,
+  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,
+  275,   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,
+  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,
+   -1,  296,  297,   -1,   -1,   -1,  301,  302,   -1,    0,
+   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,   10,
+  315,  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,
+   -1,  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,
+  335,  336,  337,   -1,  339,  340,  341,  342,  343,  344,
+  345,  346,  347,  348,  349,  350,  351,  352,  353,  354,
+   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,
+  365,  366,  367,   -1,   -1,  370,   -1,  372,   -1,   -1,
+  375,  376,  377,  378,   -1,   -1,  381,  382,  383,   -1,
+   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,
+  395,  396,  397,  398,  399,   -1,  401,  402,  403,  404,
+  405,   -1,   -1,  408,  256,   -1,   -1,   -1,   -1,   -1,
+  415,  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,
+  425,   -1,   -1,  275,   -1,  277,  278,   -1,  280,  281,
+  282,  283,  284,  285,  286,   -1,   -1,  289,  290,  291,
+   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,  301,
+  302,   -1,    0,   -1,   -1,   -1,   -1,   -1,   -1,  311,
+   -1,   -1,   10,  315,  316,   -1,   -1,   -1,  320,   -1,
+   -1,   -1,   -1,   -1,  326,   -1,  328,  329,   -1,  331,
+   -1,  333,  334,  335,  336,  337,   -1,  339,  340,  341,
+  342,  343,  344,  345,  346,  347,  348,  349,  350,  351,
+  352,  353,  354,   -1,   -1,  357,  358,  359,   -1,  361,
+  362,  363,   -1,  365,  366,  367,   -1,   -1,  370,   -1,
+  372,   -1,   -1,  375,  376,  377,  378,   -1,   -1,  381,
+  382,  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,
+  392,  393,  394,  395,  396,  397,  398,  399,   -1,  401,
+  402,  403,  404,  405,   -1,  256,  408,   -1,   -1,   -1,
+   -1,   -1,   -1,  415,  416,  417,   -1,   -1,   -1,   -1,
+   -1,   -1,  424,  425,  275,   -1,  277,   -1,   -1,  280,
+  281,  282,  283,  284,  285,  286,   -1,   -1,  289,  290,
+  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,
+  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  311,   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,  320,
+   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,   -1,
+  331,   -1,  333,  334,  335,  336,  337,   -1,  339,  340,
+  341,  342,  343,  344,  345,  346,  347,  348,  349,  350,
+  351,  352,  353,  354,   -1,   -1,  357,  358,  359,   -1,
+  361,  362,  363,   -1,  365,  366,  367,   -1,    0,  370,
+   -1,  372,   -1,   -1,  375,  376,  377,  378,   10,  380,
+  381,  382,  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,
+   -1,  392,  393,  394,  395,  396,  397,  398,  399,   -1,
+  401,  402,  403,  404,  405,   -1,   -1,  408,  256,   41,
+   -1,   -1,   44,   -1,  415,  416,  417,   -1,   -1,   -1,
+   -1,   -1,   -1,  424,  425,   -1,   -1,  275,   -1,  277,
+   -1,   -1,  280,  281,  282,  283,  284,  285,  286,   -1,
+   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,
+   -1,   -1,   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  311,   -1,   -1,   -1,  315,  316,   -1,
+   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,
+  328,  329,   -1,  331,   -1,  333,  334,  335,  336,  337,
+   -1,  339,  340,  341,  342,  343,  344,  345,  346,  347,
+  348,  349,  350,  351,  352,  353,  354,   -1,   -1,  357,
+  358,  359,   -1,  361,  362,  363,   -1,  365,  366,  367,
+   -1,    0,  370,   -1,  372,   -1,   -1,  375,  376,  377,
+  378,   10,  380,  381,  382,  383,   -1,   -1,   -1,   -1,
+   -1,  389,   -1,   -1,  392,  393,  394,  395,  396,  397,
+  398,  399,   -1,  401,  402,  403,  404,  405,   -1,   -1,
+  408,   -1,   -1,   -1,   -1,   44,   -1,  415,  416,  417,
+   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  256,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  275,   -1,  277,   -1,   -1,  280,  281,
+  282,  283,  284,  285,  286,   -1,   -1,  289,  290,  291,
+   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,  301,
+  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  311,
+   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,  320,   -1,
+   -1,   -1,   -1,   -1,  326,   -1,  328,  329,   -1,  331,
+   -1,  333,  334,  335,  336,  337,   -1,  339,  340,  341,
+  342,  343,  344,  345,  346,  347,  348,  349,  350,  351,
+  352,  353,  354,   -1,   -1,  357,  358,  359,   -1,  361,
+  362,  363,   -1,  365,  366,  367,   -1,    0,  370,   -1,
+  372,   -1,   -1,  375,  376,  377,  378,   10,   -1,  381,
+  382,  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,
+  392,  393,  394,  395,  396,  397,  398,  399,   -1,  401,
+  402,  403,  404,  405,   -1,   -1,  408,  256,   -1,   -1,
+   -1,   44,   -1,  415,  416,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  424,  425,   -1,   -1,  275,   -1,  277,   -1,
+   -1,  280,  281,  282,  283,  284,  285,  286,   -1,   -1,
+  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,
+   -1,   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,
+   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,
+  329,   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,
+  339,  340,  341,  342,  343,  344,  345,  346,  347,  348,
+  349,  350,  351,  352,  353,  354,   -1,   -1,  357,  358,
+  359,   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,
+    0,  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,
+   10,   -1,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,
+  389,   -1,   -1,  392,  393,  394,  395,  396,  397,  398,
+  399,   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,
+   -1,   -1,   -1,   -1,   44,   -1,  415,  416,  417,   -1,
+   -1,   -1,   -1,   -1,   -1,  424,  425,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  256,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  275,   -1,  277,   -1,   -1,  280,  281,  282,
+  283,  284,  285,  286,   -1,   -1,  289,  290,  291,   -1,
+   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,  301,  302,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,
+   -1,   -1,  315,  316,   -1,   -1,   -1,  320,   -1,   -1,
+   -1,   -1,   -1,  326,   -1,  328,  329,   -1,  331,   -1,
+  333,  334,  335,  336,  337,   -1,  339,  340,  341,  342,
+  343,  344,  345,  346,  347,  348,  349,  350,  351,  352,
+  353,  354,   -1,   -1,  357,  358,  359,   -1,  361,  362,
+  363,   -1,  365,  366,  367,   -1,    0,  370,   -1,  372,
+   -1,   -1,  375,  376,  377,  378,   10,   -1,  381,  382,
+  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,
+  393,  394,  395,  396,  397,  398,  399,   -1,  401,  402,
+  403,  404,  405,   -1,   -1,  408,  256,   -1,   -1,   -1,
+   44,   -1,  415,  416,  417,   -1,   -1,   -1,   -1,   -1,
+   -1,  424,  425,   -1,   -1,  275,   -1,  277,   -1,   -1,
+  280,  281,  282,  283,  284,  285,  286,   -1,   -1,  289,
+  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,
+   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  311,   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,
+  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,
+   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,  339,
+  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
+  350,  351,  352,  353,  354,   -1,   -1,  357,  358,  359,
+   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,    0,
+  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,   10,
+   -1,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,  389,
+   -1,   -1,  392,  393,  394,  395,  396,  397,  398,  399,
+   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,   -1,
+   -1,   -1,   -1,   -1,   -1,  415,  416,  417,   -1,   -1,
+   -1,   -1,   -1,   -1,  424,  425,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  256,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  275,   -1,  277,   -1,   -1,  280,  281,  282,  283,
+  284,  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,
+   -1,   -1,  296,  297,   -1,   -1,   -1,  301,  302,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,
+   -1,  315,  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,
+   -1,   -1,  326,   -1,  328,  329,   -1,  331,   -1,  333,
+  334,  335,  336,  337,   -1,  339,  340,  341,  342,  343,
+  344,  345,  346,  347,  348,  349,  350,  351,  352,  353,
+  354,   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,
+   -1,  365,  366,  367,   -1,    0,  370,   -1,  372,   -1,
+   -1,  375,  376,  377,  378,   10,   -1,  381,  382,  383,
+   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,  393,
+  394,  395,  396,  397,  398,  399,   -1,  401,  402,  403,
+  404,  405,   -1,   -1,  408,  256,   -1,   -1,   -1,   44,
+   -1,  415,  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,
+  424,  425,   -1,   -1,  275,   -1,  277,   -1,   -1,  280,
+  281,  282,  283,  284,  285,  286,   -1,   -1,  289,  290,
+  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,
+  301,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  311,   -1,   -1,   -1,  315,  316,   -1,   -1,   -1,  320,
+   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,   -1,
+  331,   -1,  333,  334,  335,  336,  337,   -1,  339,  340,
+  341,  342,  343,  344,  345,  346,  347,  348,  349,  350,
+  351,  352,  353,  354,   -1,   -1,  357,  358,  359,   -1,
+  361,  362,  363,   -1,  365,  366,  367,   -1,    0,  370,
+   -1,  372,   -1,   -1,  375,  376,  377,  378,   10,   -1,
+  381,  382,  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,
+   -1,  392,  393,  394,  395,  396,  397,  398,  399,   -1,
+  401,  402,  403,  404,  405,   -1,   -1,  408,   -1,   -1,
+   -1,   -1,   -1,   -1,  415,  416,  417,   -1,   -1,   -1,
+   -1,   -1,   -1,  424,  425,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  256,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  275,   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,
+  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,
+   -1,  296,  297,   -1,   -1,   -1,  301,  302,   -1,    0,
+   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,   10,
+  315,  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,
+   -1,  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,
+  335,  336,  337,   -1,  339,  340,  341,  342,  343,  344,
+  345,  346,  347,  348,  349,  350,  351,  352,  353,  354,
+   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,
+  365,  366,  367,   -1,   -1,  370,   -1,  372,   -1,   -1,
+  375,  376,  377,  378,   -1,   -1,  381,  382,  383,   -1,
+   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,
+  395,  396,  397,  398,  399,   -1,  401,  402,  403,  404,
+  405,   -1,   -1,  408,  256,   -1,   -1,   -1,   -1,   -1,
+  415,  416,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  424,
+  425,   -1,   -1,  275,   -1,  277,   -1,   -1,  280,  281,
+  282,  283,  284,  285,  286,   -1,   -1,  289,  290,  291,
+   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,  301,
+  302,   -1,    0,   -1,   -1,   -1,   -1,   -1,   -1,  311,
+   -1,   -1,   10,  315,  316,   -1,   -1,   -1,  320,   -1,
+   -1,   -1,   -1,   -1,  326,   -1,  328,  329,   -1,  331,
+   -1,  333,  334,  335,  336,  337,   -1,  339,  340,  341,
+  342,  343,  344,  345,  346,  347,  348,  349,  350,  351,
+  352,  353,  354,   -1,   -1,  357,  358,  359,   -1,  361,
+  362,  363,   -1,  365,  366,  367,   -1,   -1,  370,   -1,
+  372,   -1,   -1,  375,  376,  377,  378,   -1,   -1,  381,
+  382,  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,
+  392,  393,  394,  395,  396,  397,  398,  399,   -1,  401,
+  402,  403,  404,  405,   -1,  256,  408,   -1,   -1,   -1,
+   -1,   -1,   -1,  415,  416,  417,   -1,   -1,   -1,   -1,
+   -1,   -1,  424,  425,  275,   -1,  277,   -1,   -1,  280,
+  281,  282,  283,  284,  285,  286,   -1,   -1,  289,  290,
+  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,
+  301,  302,   -1,    0,   -1,   -1,   -1,   -1,   -1,   -1,
+  311,   -1,   -1,   10,  315,  316,   -1,   -1,   -1,  320,
+   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,   -1,
+  331,   -1,  333,  334,  335,  336,  337,   -1,  339,  340,
+  341,  342,  343,  344,  345,  346,  347,  348,  349,  350,
+  351,  352,  353,  354,   -1,   -1,  357,  358,  359,   -1,
+  361,  362,  363,   -1,  365,  366,  367,   -1,   -1,  370,
+   -1,  372,   -1,   -1,  375,  376,  377,  378,   -1,   -1,
+  381,  382,  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,
+   -1,  392,  393,  394,  395,  396,  397,  398,  399,   -1,
+  401,  402,  403,  404,  405,   -1,   -1,  408,  256,   -1,
+   -1,   -1,   -1,   -1,  415,  416,  417,   -1,   -1,   -1,
+   -1,   -1,   -1,  424,  425,   -1,   -1,  275,   -1,  277,
+   -1,   -1,  280,  281,  282,  283,  284,  285,  286,   -1,
+   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,
+   -1,   -1,   -1,  301,  302,   -1,    0,   -1,   -1,   -1,
+   -1,   -1,   -1,  311,   -1,   -1,   10,  315,  316,   -1,
+   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,
+  328,  329,   -1,  331,   -1,  333,  334,  335,  336,  337,
+   -1,  339,  340,  341,  342,  343,  344,  345,  346,  347,
+  348,  349,  350,  351,  352,  353,  354,   -1,   -1,  357,
+  358,  359,   -1,  361,  362,  363,   -1,  365,  366,  367,
+   -1,   -1,  370,   -1,  372,   -1,   -1,  375,  376,  377,
+  378,   -1,   -1,  381,  382,  383,   -1,   -1,   -1,   -1,
+   -1,  389,   -1,   -1,  392,  393,  394,  395,  396,  397,
+  398,  399,   -1,  401,  402,  403,  404,  405,   -1,  256,
+  408,   -1,   -1,   -1,   -1,   -1,   -1,  415,  416,  417,
+   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,  275,   -1,
+  277,   -1,   -1,  280,  281,  282,  283,  284,  285,  286,
+   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,
+  297,   -1,   -1,   -1,  301,  302,   -1,    0,   -1,   -1,
+   -1,   -1,   -1,   -1,  311,   -1,   -1,   10,  315,  316,
+   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,
+   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,  336,
+  337,   -1,  339,  340,  341,  342,  343,  344,  345,  346,
+  347,  348,  349,  350,  351,  352,  353,  354,   -1,   -1,
+  357,  358,  359,   -1,  361,  362,  363,   -1,  365,  366,
+  367,   -1,   -1,  370,   -1,  372,   -1,   -1,  375,  376,
+  377,  378,   -1,   -1,  381,  382,  383,   -1,   -1,   -1,
+   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,  396,
+  397,  398,  399,   -1,  401,  402,  403,  404,  405,   -1,
+   -1,  408,  256,   -1,   -1,   -1,   -1,   -1,  415,  416,
+  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,   -1,
+   -1,  275,   -1,  277,   -1,   -1,  280,  281,  282,  283,
+  284,  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,
+   -1,   -1,  296,  297,   -1,   -1,   -1,  301,  302,   -1,
+    0,   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,
+   10,  315,  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,
+   -1,   -1,  326,   -1,  328,  329,   -1,  331,   -1,  333,
+  334,  335,  336,  337,   -1,  339,  340,  341,  342,  343,
+  344,  345,  346,  347,  348,  349,  350,  351,  352,  353,
+  354,   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,
+   -1,  365,  366,  367,   -1,   -1,  370,   -1,  372,   -1,
+   -1,  375,  376,  377,  378,   -1,   -1,  381,  382,  383,
+   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,  393,
+  394,  395,  396,  397,  398,  399,   -1,  401,  402,  403,
+  404,  405,   -1,  256,  408,   -1,   -1,   -1,   -1,   -1,
+   -1,  415,  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,
+  424,  425,  275,   -1,  277,   -1,   -1,  280,  281,  282,
+  283,  284,  285,  286,   -1,   -1,  289,  290,  291,   -1,
+   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,  301,  302,
+   -1,    0,   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,
+   -1,   10,  315,  316,   -1,   -1,   -1,  320,   -1,   -1,
+   -1,   -1,   -1,  326,   -1,  328,  329,   -1,  331,   -1,
+  333,  334,  335,  336,  337,   -1,  339,  340,  341,  342,
+  343,  344,  345,  346,  347,  348,  349,  350,  351,  352,
+  353,  354,   -1,   -1,  357,  358,  359,   -1,  361,  362,
+  363,   -1,  365,  366,  367,   -1,   -1,  370,   -1,  372,
+   -1,   -1,  375,  376,  377,  378,   -1,   -1,  381,  382,
+  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,
+  393,  394,  395,  396,  397,  398,  399,   -1,  401,  402,
+  403,  404,  405,   -1,   -1,  408,  256,   -1,   -1,   -1,
+   -1,   -1,  415,  416,  417,   -1,   -1,   -1,   -1,   -1,
+   -1,  424,  425,   -1,   -1,  275,   -1,  277,   -1,   -1,
+  280,  281,  282,  283,  284,  285,  286,   -1,   -1,  289,
+  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,
+   -1,  301,  302,   -1,    0,   -1,   -1,   -1,   -1,   -1,
+   -1,  311,   -1,   -1,   10,  315,  316,   -1,   -1,   -1,
+  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,
+   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,  339,
+  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
+  350,  351,  352,  353,  354,   -1,   -1,  357,  358,  359,
+   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,   -1,
+  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,   -1,
+   -1,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,  389,
+   -1,   -1,  392,  393,  394,  395,  396,  397,  398,  399,
+   -1,  401,  402,  403,  404,  405,   -1,  256,  408,   -1,
+   -1,   -1,   -1,   -1,   -1,  415,  416,  417,   -1,   -1,
+   -1,   -1,   -1,   -1,  424,  425,  275,   -1,  277,   -1,
+   -1,  280,  281,  282,  283,  284,  285,  286,   -1,   -1,
+  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,
+   -1,   -1,  301,  302,   -1,    0,   -1,   -1,   -1,   -1,
+   -1,   -1,  311,   -1,   -1,   10,  315,  316,   -1,   -1,
+   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,
+  329,   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,
+  339,  340,  341,  342,  343,  344,  345,  346,  347,  348,
+  349,  350,  351,  352,  353,  354,   -1,   -1,  357,  358,
+  359,   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,
+   -1,  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,
+   -1,   -1,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,
+  389,   -1,   -1,  392,  393,  394,  395,  396,  397,  398,
+  399,   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,
+  256,   -1,   -1,   -1,   -1,   -1,  415,  416,  417,   -1,
+   -1,   -1,   -1,   -1,   -1,  424,  425,   -1,   -1,  275,
+   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,  285,
+  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,
+  296,  297,   -1,   -1,   -1,  301,  302,   -1,    0,   -1,
+   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,   10,  315,
+  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,
+  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,
+  336,  337,   -1,  339,  340,  341,  342,  343,  344,  345,
+  346,  347,  348,  349,  350,  351,  352,  353,  354,   -1,
+   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,  365,
+  366,  367,   -1,   -1,  370,   -1,  372,   -1,   -1,  375,
+  376,  377,  378,   -1,   -1,  381,  382,  383,   -1,   -1,
+   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,
+  396,  397,  398,  399,   -1,  401,  402,  403,  404,  405,
+   -1,  256,  408,   -1,   -1,   -1,   -1,   -1,   -1,  415,
+  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,
+  275,   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,
+  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,
+   -1,  296,  297,   -1,   -1,   -1,  301,  302,   -1,    0,
+   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,   10,
+  315,  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,
+   -1,  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,
+  335,  336,  337,   -1,  339,  340,  341,  342,  343,  344,
+  345,  346,  347,  348,  349,  350,  351,  352,  353,  354,
+   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,
+  365,  366,  367,   -1,   -1,  370,   -1,  372,   -1,   -1,
+  375,  376,  377,  378,   -1,   -1,  381,  382,  383,   -1,
+   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,
+  395,  396,  397,  398,  399,   -1,  401,  402,  403,  404,
+  405,   -1,   -1,  408,  256,   -1,   -1,   -1,   -1,   -1,
+  415,  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,
+  425,   -1,   -1,  275,   -1,  277,   -1,   -1,  280,  281,
+  282,  283,  284,  285,  286,   -1,   -1,  289,  290,  291,
+   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,  301,
+  302,   -1,    0,   -1,   -1,   -1,   -1,   -1,   -1,  311,
+   -1,   -1,   10,  315,  316,   -1,   -1,   -1,  320,   -1,
+   -1,   -1,   -1,   -1,  326,   -1,  328,  329,   -1,  331,
+   -1,  333,  334,  335,  336,  337,   -1,  339,  340,  341,
+  342,  343,  344,  345,  346,  347,  348,  349,  350,  351,
+  352,  353,  354,   -1,   -1,  357,  358,  359,   -1,  361,
+  362,  363,   -1,  365,  366,  367,   -1,   -1,  370,   -1,
+  372,   -1,   -1,  375,  376,  377,  378,   -1,   -1,  381,
+  382,  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,
+  392,  393,  394,  395,  396,  397,  398,  399,   -1,  401,
+  402,  403,  404,  405,   -1,  256,  408,   -1,   -1,   -1,
+   -1,   -1,   -1,  415,  416,  417,   -1,   -1,   -1,   -1,
+   -1,   -1,  424,  425,  275,   -1,  277,   -1,   -1,  280,
+  281,  282,  283,  284,  285,  286,   -1,   -1,  289,  290,
+  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,
+  301,  302,   -1,    0,   -1,   -1,   -1,   -1,   -1,   -1,
+  311,   -1,   -1,   10,  315,  316,   -1,   -1,   -1,  320,
+   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,   -1,
+  331,   -1,  333,  334,  335,  336,  337,   -1,  339,  340,
+  341,  342,  343,  344,  345,  346,  347,  348,  349,  350,
+  351,  352,  353,  354,   -1,   -1,  357,  358,  359,   -1,
+  361,  362,  363,   -1,  365,  366,  367,   -1,   -1,  370,
+   -1,  372,   -1,   -1,  375,  376,  377,  378,   -1,   -1,
+  381,  382,  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,
+   -1,  392,  393,  394,  395,  396,  397,  398,  399,   -1,
+  401,  402,  403,  404,  405,   -1,   -1,  408,  256,   -1,
+   -1,   -1,   -1,   -1,  415,  416,  417,   -1,   -1,   -1,
+   -1,   -1,   -1,  424,  425,   -1,   -1,  275,   -1,  277,
+   -1,   -1,  280,  281,  282,  283,  284,  285,  286,   -1,
+   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,
+   -1,   -1,   -1,  301,  302,   -1,    0,   -1,   -1,   -1,
+   -1,   -1,   -1,  311,   -1,   -1,   10,  315,  316,   -1,
+   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,
+  328,  329,   -1,  331,   -1,  333,  334,  335,  336,  337,
+   -1,  339,  340,  341,  342,  343,  344,  345,  346,  347,
+  348,  349,  350,  351,  352,  353,  354,   -1,   -1,  357,
+  358,  359,   -1,  361,  362,  363,   -1,  365,  366,  367,
+   -1,   -1,  370,   -1,  372,   -1,   -1,  375,  376,  377,
+  378,   -1,   -1,  381,  382,  383,   -1,   -1,   -1,   -1,
+   -1,  389,   -1,   -1,  392,  393,  394,  395,  396,  397,
+  398,  399,   -1,  401,  402,  403,  404,  405,   -1,  256,
+  408,   -1,   -1,   -1,   -1,   -1,   -1,  415,  416,  417,
+   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,  275,   -1,
+  277,   -1,   -1,  280,  281,  282,  283,  284,  285,  286,
+   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,
+  297,   -1,   -1,   -1,  301,  302,   -1,    0,   -1,   -1,
+   -1,   -1,   -1,   -1,  311,   -1,   -1,   10,  315,  316,
+   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,
+   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,  336,
+  337,   -1,  339,  340,  341,  342,  343,  344,  345,  346,
+  347,  348,  349,  350,  351,  352,  353,  354,   -1,   -1,
+  357,  358,  359,   -1,  361,  362,  363,   -1,  365,  366,
+  367,   -1,   -1,  370,   -1,  372,   -1,   -1,  375,  376,
+  377,  378,   -1,   -1,  381,  382,  383,   -1,   -1,   -1,
+   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,  396,
+  397,  398,  399,   -1,  401,  402,  403,  404,  405,   -1,
+   -1,  408,  256,   -1,   -1,   -1,   -1,   -1,  415,  416,
+  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,   -1,
+   -1,  275,   -1,  277,   -1,   -1,  280,  281,  282,  283,
+  284,  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,
+   -1,   -1,  296,  297,   -1,   -1,   -1,  301,  302,   -1,
+    0,   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,
+   10,  315,  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,
+   -1,   -1,  326,   -1,  328,  329,   -1,  331,   -1,  333,
+  334,  335,  336,  337,   -1,  339,  340,  341,  342,  343,
+  344,  345,  346,  347,  348,  349,  350,  351,  352,  353,
+  354,   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,
+   -1,  365,  366,  367,   -1,   -1,  370,   -1,  372,   -1,
+   -1,  375,  376,  377,  378,   -1,   -1,  381,  382,  383,
+   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,  393,
+  394,  395,  396,  397,  398,  399,   -1,  401,  402,  403,
+  404,  405,   -1,  256,  408,   -1,   -1,   -1,   -1,   -1,
+   -1,  415,  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,
+  424,  425,  275,   -1,  277,   -1,   -1,  280,  281,  282,
+  283,  284,  285,  286,   -1,   -1,  289,  290,  291,   -1,
+   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,  301,  302,
+   -1,    0,   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,
+   -1,   10,  315,  316,   -1,   -1,   -1,  320,   -1,   -1,
+   -1,   -1,   -1,  326,   -1,  328,  329,   -1,  331,   -1,
+  333,  334,  335,  336,  337,   -1,  339,  340,  341,  342,
+  343,  344,  345,  346,  347,  348,  349,  350,  351,  352,
+  353,  354,   -1,   -1,  357,  358,  359,   -1,  361,  362,
+  363,   -1,  365,  366,  367,   -1,   -1,  370,   -1,  372,
+   -1,   -1,  375,  376,  377,  378,   -1,   -1,  381,  382,
+  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,
+  393,  394,  395,  396,  397,  398,  399,   -1,  401,  402,
+  403,  404,  405,   -1,   -1,  408,  256,   -1,   -1,   -1,
+   -1,   -1,  415,  416,  417,   -1,   -1,   -1,   -1,   -1,
+   -1,  424,  425,   -1,   -1,  275,   -1,  277,   -1,   -1,
+  280,  281,  282,  283,  284,  285,  286,   -1,   -1,  289,
+  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,
+   -1,  301,  302,   -1,    0,   -1,   -1,   -1,   -1,   -1,
+   -1,  311,   -1,   -1,   10,  315,  316,   -1,   -1,   -1,
+  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,
+   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,  339,
+  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
+  350,  351,  352,  353,  354,   -1,   -1,  357,  358,  359,
+   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,   -1,
+  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,   -1,
+   -1,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,  389,
+   -1,   -1,  392,  393,  394,  395,  396,  397,  398,  399,
+   -1,  401,  402,  403,  404,  405,   -1,  256,  408,   -1,
+   -1,   -1,   -1,   -1,   -1,  415,  416,  417,   -1,   -1,
+   -1,   -1,   -1,   -1,  424,  425,  275,   -1,  277,   -1,
+   -1,  280,  281,  282,  283,  284,  285,  286,   -1,   -1,
+  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,
+   -1,   -1,  301,  302,   -1,    0,   -1,   -1,   -1,   -1,
+   -1,   -1,  311,   -1,   -1,   10,  315,  316,   -1,   -1,
+   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,
+  329,   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,
+  339,  340,  341,  342,  343,  344,  345,  346,  347,  348,
+  349,  350,  351,  352,  353,  354,   -1,   -1,  357,  358,
+  359,   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,
+   -1,  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,
+   -1,   -1,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,
+  389,   -1,   -1,  392,  393,  394,  395,  396,  397,  398,
+  399,   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,
+  256,   -1,   -1,   -1,   -1,   -1,  415,  416,  417,   -1,
+   -1,   -1,   -1,   -1,   -1,  424,  425,   -1,   -1,  275,
+   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,  285,
+  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,
+  296,  297,   -1,   -1,   -1,  301,  302,   -1,    0,   -1,
+   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,   10,  315,
+  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,
+  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,
+  336,  337,   -1,  339,  340,  341,  342,  343,  344,  345,
+  346,  347,  348,  349,  350,  351,  352,  353,  354,   -1,
+   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,  365,
+  366,  367,   -1,   -1,  370,   -1,  372,   -1,   -1,  375,
+  376,  377,  378,   -1,   -1,  381,  382,  383,   -1,   -1,
+   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,
+  396,  397,  398,  399,   -1,  401,  402,  403,  404,  405,
+   -1,  256,  408,   -1,   -1,   -1,   -1,   -1,   -1,  415,
+  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,
+  275,   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,
+  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,
+   -1,  296,  297,   -1,   -1,   -1,  301,  302,   -1,    0,
+   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,   10,
+  315,  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,
+   -1,  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,
+  335,  336,  337,   -1,  339,  340,  341,  342,  343,  344,
+  345,  346,  347,  348,  349,  350,  351,  352,  353,  354,
+   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,
+  365,  366,  367,   -1,   -1,  370,   -1,  372,   -1,   -1,
+  375,  376,  377,  378,   -1,   -1,  381,  382,  383,   -1,
+   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,
+  395,  396,  397,  398,  399,   -1,  401,  402,  403,  404,
+  405,   -1,   -1,  408,  256,   -1,   -1,   -1,   -1,   -1,
+  415,  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,
+  425,   -1,   -1,  275,   -1,  277,   -1,   -1,  280,  281,
+  282,  283,  284,  285,  286,   -1,   -1,  289,  290,  291,
+   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,  301,
+  302,   -1,    0,   -1,   -1,   -1,   -1,   -1,   -1,  311,
+   -1,   -1,   10,  315,  316,   -1,   -1,   -1,  320,   -1,
+   -1,   -1,   -1,   -1,  326,   -1,  328,  329,   -1,  331,
+   -1,  333,  334,  335,  336,  337,   -1,  339,  340,  341,
+  342,  343,  344,  345,  346,  347,  348,  349,  350,  351,
+  352,  353,  354,   -1,   -1,  357,  358,  359,   -1,  361,
+  362,  363,   -1,  365,  366,  367,   -1,   -1,  370,   -1,
+  372,   -1,   -1,  375,  376,  377,  378,   -1,   -1,  381,
+  382,  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,
+  392,  393,  394,  395,  396,  397,  398,  399,   -1,  401,
+  402,  403,  404,  405,   -1,  256,  408,   -1,   -1,   -1,
+   -1,   -1,   -1,  415,  416,  417,   -1,   -1,   -1,   -1,
+   -1,   -1,  424,  425,  275,   -1,  277,   -1,   -1,  280,
+  281,  282,  283,  284,  285,  286,   -1,   -1,  289,  290,
+  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,
+  301,  302,   -1,    0,   -1,   -1,   -1,   -1,   -1,   -1,
+  311,   -1,   -1,   10,  315,  316,   -1,   -1,   -1,  320,
+   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,   -1,
+  331,   -1,  333,  334,  335,  336,  337,   -1,  339,  340,
+  341,  342,  343,  344,  345,  346,  347,  348,  349,  350,
+  351,  352,  353,  354,   -1,   -1,  357,  358,  359,   -1,
+  361,  362,  363,   -1,  365,  366,  367,   -1,   -1,  370,
+   -1,  372,   -1,   -1,  375,  376,  377,  378,   -1,   -1,
+  381,  382,  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,
+   -1,  392,  393,  394,  395,  396,  397,  398,  399,   -1,
+  401,  402,  403,  404,  405,   -1,   -1,  408,  256,   -1,
+   -1,   -1,   -1,   -1,  415,  416,  417,   -1,   -1,   -1,
+   -1,   -1,   -1,  424,  425,   -1,   -1,  275,   -1,  277,
+   -1,   -1,  280,  281,  282,  283,  284,  285,  286,   -1,
+   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,
+   -1,   -1,   -1,  301,  302,   -1,    0,   -1,   -1,   -1,
+   -1,   -1,   -1,  311,   -1,   -1,   10,  315,  316,   -1,
+   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,
+  328,  329,   -1,  331,   -1,  333,  334,  335,  336,  337,
+   -1,  339,  340,  341,  342,  343,  344,  345,  346,  347,
+  348,  349,  350,  351,  352,  353,  354,   -1,   -1,  357,
+  358,  359,   -1,  361,  362,  363,   -1,  365,  366,  367,
+   -1,   -1,  370,   -1,  372,   -1,   -1,  375,  376,  377,
+  378,   -1,   -1,  381,  382,  383,   -1,   -1,   -1,   -1,
+   -1,  389,   -1,   -1,  392,  393,  394,  395,  396,  397,
+  398,  399,   -1,  401,  402,  403,  404,  405,   -1,  256,
+  408,   -1,   -1,   -1,   -1,   -1,   -1,  415,  416,  417,
+   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,  275,   -1,
+  277,   -1,   -1,  280,  281,  282,  283,  284,  285,  286,
+   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,
+  297,   -1,   -1,   -1,  301,  302,   -1,    0,   -1,   -1,
+   -1,   -1,   -1,   -1,  311,   -1,   -1,   10,  315,  316,
+   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,
+   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,  336,
+  337,   -1,  339,  340,  341,  342,  343,  344,  345,  346,
+  347,  348,  349,  350,  351,  352,  353,  354,   -1,   -1,
+  357,  358,  359,   -1,  361,  362,  363,   -1,  365,  366,
+  367,   -1,   -1,  370,   -1,  372,   -1,   -1,  375,  376,
+  377,  378,   -1,   -1,  381,  382,  383,   -1,   -1,   -1,
+   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,  396,
+  397,  398,  399,   -1,  401,  402,  403,  404,  405,   -1,
+   -1,  408,  256,   -1,   -1,   -1,   -1,   -1,  415,  416,
+  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,   -1,
+   -1,  275,   -1,  277,   -1,   -1,  280,  281,  282,  283,
+  284,  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,
+   -1,   -1,  296,  297,   -1,   -1,   -1,  301,  302,   -1,
+    0,   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,
+   10,  315,  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,
+   -1,   -1,  326,   -1,  328,  329,   -1,  331,   -1,  333,
+  334,  335,  336,  337,   -1,  339,  340,  341,  342,  343,
+  344,  345,  346,  347,  348,  349,  350,  351,  352,  353,
+  354,   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,
+   -1,  365,  366,  367,   -1,   -1,  370,   -1,  372,   -1,
+   -1,  375,  376,  377,  378,   -1,   -1,  381,  382,  383,
+   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,  393,
+  394,  395,  396,  397,  398,  399,   -1,  401,  402,  403,
+  404,  405,   -1,  256,  408,   -1,   -1,   -1,   -1,   -1,
+   -1,  415,  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,
+  424,  425,  275,   -1,  277,   -1,   -1,  280,  281,  282,
+  283,  284,  285,  286,   -1,   -1,  289,  290,  291,   -1,
+   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,  301,  302,
+   -1,    0,   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,
+   -1,   10,  315,  316,   -1,   -1,   -1,  320,   -1,   -1,
+   -1,   -1,   -1,  326,   -1,  328,  329,   -1,  331,   -1,
+  333,  334,  335,  336,  337,   -1,  339,  340,  341,  342,
+  343,  344,  345,  346,  347,  348,  349,  350,  351,  352,
+  353,  354,   -1,   -1,  357,  358,  359,   -1,  361,  362,
+  363,   -1,  365,  366,  367,   -1,   -1,  370,   -1,  372,
+   -1,   -1,  375,  376,  377,  378,   -1,   -1,  381,  382,
+  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,
+  393,  394,  395,  396,  397,  398,  399,   -1,  401,  402,
+  403,  404,  405,   -1,   -1,  408,  256,   -1,   -1,   -1,
+   -1,   -1,  415,  416,  417,   -1,   -1,   -1,   -1,   -1,
+   -1,  424,  425,   -1,   -1,  275,   -1,  277,   -1,   -1,
+  280,  281,  282,  283,  284,  285,  286,   -1,   -1,  289,
+  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,
+   -1,  301,  302,   -1,    0,   -1,   -1,   -1,   -1,   -1,
+   -1,  311,   -1,   -1,   10,  315,  316,   -1,   -1,   -1,
+  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,  329,
+   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,  339,
+  340,  341,  342,  343,  344,  345,  346,  347,  348,  349,
+  350,  351,  352,  353,  354,   -1,   -1,  357,  358,  359,
+   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,   -1,
+  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,   -1,
+   -1,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,  389,
+   -1,   -1,  392,  393,  394,  395,  396,  397,  398,  399,
+   -1,  401,  402,  403,  404,  405,   -1,  256,  408,   -1,
+   -1,   -1,   -1,   -1,   -1,  415,  416,  417,   -1,   -1,
+   -1,   -1,   -1,   -1,  424,  425,  275,   -1,  277,   -1,
+   -1,  280,  281,  282,  283,  284,  285,  286,   -1,   -1,
+  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,
+   -1,   -1,  301,  302,    0,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  311,   -1,   10,   -1,  315,  316,   -1,   -1,
+   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,
+  329,   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,
+  339,  340,  341,  342,  343,  344,  345,  346,  347,  348,
+  349,  350,  351,  352,  353,  354,   -1,   -1,  357,  358,
+  359,   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,
+   -1,  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,
+   -1,   -1,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,
+  389,   -1,   -1,  392,  393,  394,  395,  396,  397,  398,
+  399,   -1,  401,  402,  403,  404,  405,   -1,   -1,  408,
+  256,   -1,   -1,   -1,   -1,   -1,  415,  416,  417,   -1,
+   -1,   -1,   -1,   -1,   -1,  424,  425,   -1,   -1,  275,
+   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,  285,
+  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,
+  296,  297,   -1,   -1,   -1,  301,  302,    0,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  311,   -1,   10,   -1,  315,
+  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,
+  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,
+  336,  337,   -1,  339,  340,  341,  342,  343,  344,  345,
+  346,  347,  348,  349,  350,  351,  352,  353,  354,   -1,
+   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,  365,
+  366,  367,   -1,   -1,  370,   -1,  372,   -1,   -1,  375,
+  376,  377,  378,   -1,   -1,  381,  382,  383,   -1,   -1,
+   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,
+  396,  397,  398,  399,   -1,  401,  402,  403,  404,  405,
+  256,   -1,  408,   -1,   -1,   -1,   -1,   -1,   -1,  415,
+  416,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,
+   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,  285,
+  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,   -1,
+  296,  297,   -1,   -1,   -1,  301,  302,   -1,    0,   -1,
+   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,   10,  315,
+  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,
+  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,  335,
+  336,  337,   -1,  339,  340,  341,  342,  343,  344,  345,
+  346,  347,  348,  349,  350,  351,  352,  353,  354,   -1,
+   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,  365,
+  366,  367,   -1,   -1,  370,   -1,  372,   -1,   -1,  375,
+  376,  377,  378,   -1,   -1,  381,  382,  383,   -1,   -1,
+   -1,   -1,   -1,  389,   -1,   -1,  392,  393,  394,  395,
+  396,  397,  398,  399,   -1,  401,  402,  403,  404,  405,
+   -1,   -1,  408,  256,   -1,   -1,   -1,   -1,   -1,  415,
+  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,  425,
+   -1,   -1,  275,   -1,  277,   -1,   -1,  280,  281,  282,
+  283,  284,  285,  286,   -1,   -1,  289,  290,  291,   -1,
+   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,  301,  302,
+   -1,    0,   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,
+   -1,   10,  315,  316,   -1,   -1,   -1,  320,   -1,   -1,
+   -1,   -1,   -1,  326,   -1,  328,  329,   -1,  331,   -1,
+  333,  334,  335,  336,  337,   -1,  339,  340,  341,  342,
+  343,  344,  345,  346,  347,  348,  349,  350,  351,  352,
+  353,  354,   -1,   -1,  357,  358,  359,   -1,  361,  362,
+  363,   -1,  365,  366,  367,   -1,   -1,  370,   -1,  372,
+   -1,   -1,  375,  376,  377,  378,   -1,   -1,  381,  382,
+  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,  392,
+  393,  394,  395,  396,  397,  398,  399,   -1,  401,  402,
+  403,  404,  405,   -1,  256,  408,   -1,   -1,   -1,   -1,
+   -1,   -1,  415,  416,  417,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  425,  275,   -1,  277,   -1,   -1,  280,  281,
+  282,  283,  284,  285,  286,   -1,   -1,  289,  290,  291,
+   -1,   -1,   -1,   -1,  296,  297,   -1,   -1,   -1,  301,
+  302,   -1,    0,   -1,   -1,   -1,   -1,   -1,   -1,  311,
+   -1,   -1,   10,  315,  316,   -1,   -1,   -1,  320,   -1,
+   -1,   -1,   -1,   -1,  326,   -1,  328,  329,   -1,  331,
+   -1,  333,  334,  335,  336,  337,   -1,  339,  340,  341,
+  342,  343,  344,  345,  346,  347,  348,  349,  350,  351,
+  352,  353,  354,   -1,   -1,  357,  358,  359,   -1,  361,
+  362,  363,   -1,  365,  366,  367,   -1,   -1,  370,   -1,
+  372,   -1,   -1,  375,  376,  377,  378,   -1,   -1,  381,
+  382,  383,   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,
+  392,  393,  394,  395,  396,  397,  398,  399,   -1,  401,
+  402,  403,  404,  405,   -1,   -1,  408,  256,   -1,   -1,
+   -1,   -1,   -1,  415,  416,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  424,  425,   -1,   -1,  275,   -1,  277,   -1,
+   -1,  280,  281,  282,  283,  284,  285,  286,   -1,   -1,
+  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,   -1,
+   -1,   -1,  301,  302,   -1,    0,   -1,   -1,   -1,   -1,
+   -1,   -1,  311,   -1,   -1,   10,  315,  316,   -1,   -1,
+   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,  328,
+  329,   -1,  331,   -1,  333,  334,  335,  336,  337,   -1,
+  339,  340,  341,  342,  343,  344,  345,  346,  347,  348,
+  349,  350,  351,  352,  353,  354,   -1,   -1,  357,  358,
+  359,   -1,  361,  362,  363,   -1,  365,  366,  367,   -1,
+   -1,  370,   -1,  372,   -1,   -1,  375,  376,  377,  378,
+   -1,   -1,  381,  382,  383,   -1,   -1,   -1,   -1,   -1,
+  389,   -1,   -1,  392,  393,  394,  395,   -1,  397,  398,
+  399,   -1,  401,  402,  403,  404,  405,   -1,  256,  408,
+   -1,   -1,   -1,   -1,   -1,   -1,  415,  416,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  425,  275,   -1,  277,
+   -1,   -1,  280,  281,  282,  283,  284,  285,  286,   -1,
+   -1,  289,  290,  291,   -1,   -1,   -1,   -1,  296,  297,
+   -1,   -1,   -1,  301,  302,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  311,   -1,   -1,   -1,  315,  316,   -1,
+   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,  326,   -1,
+  328,  329,   -1,  331,   -1,  333,  334,  335,  336,  337,
+   -1,  339,  340,  341,  342,  343,  344,  345,  346,  347,
+  348,  349,  350,  351,  352,  353,  354,   -1,   -1,  357,
+  358,  359,   -1,  361,  362,  363,   -1,  365,  366,  367,
+   -1,   -1,  370,   -1,  372,   -1,   -1,  375,  376,  377,
+  378,   -1,   -1,  381,  382,  383,   -1,   40,   -1,   42,
+   43,  389,   45,   -1,  392,  393,  394,  395,   -1,  397,
+  398,  399,   -1,  401,  402,  403,  404,  405,   61,   -1,
+  408,  256,   -1,   -1,   -1,   -1,   -1,  415,  416,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  425,   -1,   -1,
+  275,   -1,  277,   -1,   -1,  280,  281,  282,  283,  284,
+  285,  286,   -1,   -1,  289,  290,  291,   -1,   -1,   -1,
+   -1,  296,  297,   -1,   -1,   -1,  301,  302,   -1,   41,
+   42,   43,   -1,   45,   -1,   -1,  311,   -1,   -1,   -1,
+  315,  316,   -1,   -1,   -1,  320,   58,   -1,   60,   61,
+   62,  326,   -1,  328,  329,   -1,  331,   -1,  333,  334,
+  335,  336,  337,   -1,  339,  340,  341,  342,  343,  344,
+  345,  346,  347,  348,  349,  350,  351,  352,  353,  354,
+   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,   -1,
+  365,  366,  367,   -1,   -1,  370,   -1,  372,   -1,   -1,
+  375,  376,  377,  378,   -1,   -1,  381,  382,  383,   -1,
+   40,   -1,   42,   43,  389,   45,   -1,  392,  393,  394,
+  395,  396,  397,  398,  399,   -1,  401,  402,  403,  404,
+  405,   61,   -1,  408,   -1,   -1,   -1,   -1,   -1,   -1,
+  415,  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   40,   -1,
+   -1,   43,   -1,   45,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   61,
+  263,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  287,  288,   -1,   -1,   -1,  292,
+  293,  294,  295,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  304,  305,  306,  307,  308,  309,  310,   -1,  312,
+  313,  314,   -1,   -1,  317,  318,  319,   -1,  321,  322,
+  323,  324,  325,   -1,  327,   -1,  258,  259,  260,  261,
+  262,   -1,  264,  265,  266,  267,  268,  269,   -1,   -1,
+  272,  273,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  379,   40,   -1,   -1,
+   43,   -1,   45,   -1,   -1,   -1,   -1,  390,  391,   -1,
+   -1,   -1,   -1,  396,   -1,   -1,   -1,   -1,   61,   -1,
+   -1,   -1,   -1,  406,  407,   -1,   -1,  410,  411,  412,
+  413,   -1,   -1,  263,  417,   -1,   -1,   -1,   -1,   -1,
+   -1,  424,   -1,   -1,   -1,   40,   -1,   -1,   43,   -1,
+   45,   -1,   -1,   -1,   -1,   -1,   -1,  287,  288,   -1,
+   -1,   -1,  292,  293,  294,  295,   61,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  304,  305,  306,  307,  308,  309,
+  310,  263,  312,  313,  314,   -1,   -1,  317,  318,  319,
+   -1,  321,  322,  323,  324,  325,   -1,  327,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  287,  288,   -1,   -1,   -1,
+  292,  293,  294,  295,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  304,  305,  306,  307,  308,  309,  310,   -1,
+  312,  313,  314,   -1,   -1,  317,  318,  319,   -1,  321,
+  322,  323,  324,  325,   -1,  327,   -1,   -1,   -1,  379,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  390,  391,   -1,   -1,   -1,   -1,  396,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  406,  407,   -1,   -1,
+  410,  411,  412,  413,   -1,   -1,   40,  417,   42,   43,
+   -1,   45,   -1,   -1,  424,   -1,   -1,  379,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  390,  391,
+   -1,   -1,   -1,   -1,  396,   -1,   -1,   -1,   -1,   -1,
+  263,   -1,   -1,   -1,  406,  407,   -1,   -1,  410,  411,
+  412,  413,   -1,   -1,   40,  417,   42,   43,   -1,   45,
+   -1,   -1,  424,   -1,  287,  288,   -1,   -1,   -1,  292,
+  293,  294,  295,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  304,  305,  306,  307,  308,  309,  310,  263,  312,
+  313,  314,   -1,   -1,  317,  318,  319,   -1,  321,  322,
+  323,  324,  325,   -1,  327,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  287,  288,   -1,   -1,   -1,  292,  293,  294,
+  295,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  304,
+  305,  306,  307,  308,  309,  310,   -1,  312,  313,  314,
+   -1,   -1,  317,  318,  319,   -1,  321,  322,  323,  324,
+  325,   -1,  327,   -1,   -1,   -1,  379,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  390,  391,   -1,
+   -1,   -1,   -1,  396,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  406,  407,   -1,   -1,  410,  411,  412,
+  413,   -1,   40,   -1,  417,   43,   -1,   45,   -1,   -1,
+   -1,  424,   -1,   -1,  379,   -1,   -1,   -1,   -1,   -1,
+   58,   -1,   -1,   -1,   -1,  390,  391,   -1,   -1,   -1,
+   -1,  396,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  263,
+   -1,  406,  407,   -1,   -1,  410,  411,  412,  413,   -1,
+   -1,   -1,  417,   -1,   -1,   40,   -1,   -1,   43,  424,
+   45,   -1,   -1,  287,  288,   -1,   -1,   -1,  292,  293,
+  294,  295,   -1,   58,   -1,   -1,   -1,   -1,   -1,   -1,
+  304,  305,  306,  307,  308,  309,  310,  263,  312,  313,
+  314,   -1,   -1,  317,  318,  319,   -1,  321,  322,  323,
+  324,  325,   -1,  327,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  287,  288,   -1,   -1,   -1,  292,  293,  294,  295,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  304,  305,
+  306,  307,  308,  309,  310,   -1,  312,  313,  314,   -1,
+   -1,  317,  318,  319,   -1,  321,  322,  323,  324,  325,
+   -1,  327,   -1,   -1,   -1,  379,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  390,  391,   -1,   -1,
+   -1,   -1,  396,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  406,  407,   -1,   -1,  410,  411,  412,  413,
+   -1,   -1,   -1,  417,   40,   -1,   42,   43,   -1,   45,
+  424,   -1,   -1,  379,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  390,  391,   -1,   -1,   -1,   -1,
+  396,   -1,   -1,   -1,   -1,  263,   -1,   -1,   -1,   -1,
+  406,  407,   -1,   -1,  410,  411,  412,  413,   -1,   -1,
+   -1,  417,   40,   -1,   42,   43,   -1,   45,  424,  287,
+  288,   -1,   -1,   -1,  292,  293,  294,  295,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  304,  305,  306,  307,
+  308,  309,  310,   -1,  312,  313,  314,   -1,  263,  317,
+  318,  319,   -1,  321,  322,  323,  324,  325,   -1,  327,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  287,  288,   -1,   -1,   -1,  292,  293,  294,
+  295,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  304,
+  305,  306,  307,  308,  309,  310,   -1,  312,  313,  314,
+   -1,   -1,  317,  318,  319,   -1,  321,  322,  323,  324,
+  325,  379,  327,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  390,  391,   -1,   -1,   -1,   -1,  396,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  406,  407,
+   -1,   -1,  410,  411,  412,  413,   -1,   40,   -1,  417,
+   43,   -1,   45,   -1,   -1,   -1,  424,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  379,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  390,  391,   -1,   -1,   -1,
+   -1,  396,   -1,   -1,   -1,   -1,   -1,  263,   -1,   -1,
+   -1,  406,  407,   -1,   -1,  410,  411,  412,  413,   -1,
+   40,   -1,  417,   43,   -1,   45,   -1,   -1,   -1,  424,
+   -1,  287,  288,   -1,   -1,   -1,  292,  293,  294,  295,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  304,  305,
+  306,  307,  308,  309,  310,  263,  312,  313,  314,   -1,
+   -1,  317,  318,  319,   -1,  321,  322,  323,  324,  325,
+   -1,  327,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  287,
+  288,   -1,   -1,   -1,  292,  293,  294,  295,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  304,  305,  306,  307,
+  308,  309,  310,   -1,  312,  313,  314,   -1,   -1,  317,
+  318,  319,   -1,  321,  322,  323,  324,  325,   -1,  327,
+   -1,   -1,   -1,  379,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  390,  391,   -1,   -1,   -1,   -1,
+  396,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  406,  407,   -1,   -1,  410,  411,  412,  413,   -1,   40,
+   -1,  417,   43,   -1,   45,   -1,   -1,   -1,  424,   -1,
+   -1,  379,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  390,  391,   -1,   -1,   -1,   -1,  396,   -1,
+  263,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  406,  407,
+   -1,   -1,  410,  411,  412,  413,   -1,   40,   -1,  417,
+   43,   -1,   45,   -1,  287,  288,  424,   -1,   -1,  292,
+  293,  294,  295,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  304,  305,  306,  307,  308,  309,  310,   -1,  312,
+  313,  314,   -1,  263,  317,  318,  319,   -1,  321,  322,
+  323,  324,  325,   -1,  327,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  287,  288,   -1,
+   -1,   -1,  292,  293,  294,  295,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  304,  305,  306,  307,  308,  309,
+  310,   -1,  312,  313,  314,   -1,   -1,  317,  318,  319,
+   -1,  321,  322,  323,  324,  325,  379,  327,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  390,  391,   -1,
+   -1,   -1,   -1,  396,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  406,  407,   -1,   -1,  410,  411,  412,
+  413,   -1,   40,   -1,  417,   43,   -1,   45,   -1,   -1,
+   -1,  424,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  379,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  390,  391,   -1,   -1,   -1,   -1,  396,   -1,   -1,   -1,
+   -1,   -1,  263,   -1,   -1,   -1,  406,  407,   -1,   -1,
+  410,  411,  412,  413,   -1,   40,   -1,  417,   43,   -1,
+   45,   -1,   -1,   -1,  424,   -1,  287,  288,   -1,   -1,
+   -1,  292,  293,  294,  295,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  304,  305,  306,  307,  308,  309,  310,
+  263,  312,  313,  314,   -1,   -1,  317,  318,  319,   -1,
+  321,  322,  323,  324,  325,   -1,  327,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  287,  288,   -1,   -1,   -1,  292,
+  293,  294,  295,   -1,   40,   -1,   42,   43,   -1,   45,
+   -1,  304,  305,  306,  307,  308,  309,  310,   -1,  312,
+  313,  314,   -1,   -1,  317,  318,  319,   -1,  321,  322,
+  323,  324,  325,   -1,  327,   -1,   -1,   -1,  379,   -1,
+   40,   -1,   42,   43,   -1,   45,   -1,   -1,   -1,  390,
+  391,   -1,   -1,   -1,   -1,  396,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  406,  407,   -1,   -1,  410,
+  411,  412,  413,   -1,   -1,   -1,  417,   -1,   -1,   -1,
+   -1,   -1,   -1,  424,   -1,   -1,  379,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  390,  391,   -1,
+   -1,   -1,   -1,  396,   -1,  263,   41,   42,   43,   -1,
+   45,   -1,   -1,  406,  407,   -1,   -1,  410,  411,  412,
+  413,   -1,   -1,   58,  417,   60,   61,   62,   -1,  287,
+  288,  424,   -1,   -1,  292,  293,  294,  295,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  304,  305,  306,  307,
+  308,  309,  310,   -1,  312,  313,  314,   -1,  263,  317,
+  318,  319,   -1,  321,  322,  323,  324,  325,   -1,  327,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   41,   42,   43,
+   44,   45,  287,  288,   -1,   -1,   -1,  292,  293,  294,
+  295,   -1,   -1,   -1,   -1,   -1,   60,   61,   62,  304,
+  305,  306,  307,  308,  309,  310,   -1,  312,  313,  314,
+   -1,   -1,  317,  318,  319,   -1,  321,  322,  323,  324,
+  325,  379,  327,   41,   42,   43,   -1,   45,   -1,   -1,
+   -1,   -1,  390,  391,   -1,   -1,   -1,  273,  396,   -1,
+   -1,   -1,   60,   61,   62,   -1,   -1,   -1,  406,  407,
+   -1,   -1,  410,  411,  412,  413,   41,   42,   43,  417,
+   45,   -1,  298,  299,  300,   -1,  424,  303,   -1,   -1,
+   -1,   -1,   -1,   -1,  379,   60,   61,   62,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  390,  391,   -1,   -1,   -1,
+   -1,  396,   -1,   -1,   -1,   -1,   -1,   -1,  298,  299,
+  300,  406,  407,  303,   -1,  410,  411,  412,  413,   -1,
+   -1,   -1,  417,   -1,   -1,   -1,   -1,   -1,   -1,  424,
+   -1,   -1,   -1,  258,  259,  260,  261,  262,   -1,  264,
+  265,  266,  267,  268,  269,   -1,   -1,  272,  273,   41,
+   42,   43,   -1,   45,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  390,  391,   -1,   -1,   60,   61,
+   62,   -1,   -1,   41,   42,   43,   -1,   45,   -1,   -1,
+  406,  407,   -1,   -1,  410,  411,  412,  413,   -1,   -1,
+   -1,  417,   60,   61,   62,   -1,   -1,   -1,  424,   -1,
+  390,  391,   -1,   -1,  258,  259,  260,  261,  262,   -1,
+  264,  265,  266,  267,  268,  269,  406,  407,  272,  273,
+  410,  411,  412,  413,   41,   42,   43,  417,   45,   -1,
+   -1,   -1,   -1,   -1,  424,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   60,   61,   62,   -1,   -1,   -1,   -1,
+  258,  259,  260,  261,  262,   -1,  264,  265,  266,  267,
+  268,  269,   -1,   -1,  272,  273,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  258,  259,  260,  261,  262,   -1,  264,
+  265,  266,  267,  268,  269,   -1,   -1,  272,  273,   41,
+   42,   43,   -1,   45,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   60,   61,
+   62,   41,   42,   43,   -1,   45,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   60,   61,   62,   41,   42,   43,   -1,   45,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   60,   61,   62,   -1,  258,  259,  260,  261,
+  262,   -1,  264,  265,  266,  267,  268,  269,   -1,   -1,
+  272,  273,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  258,  259,  260,  261,  262,   -1,  264,  265,  266,  267,
+  268,  269,   -1,   -1,  272,  273,   41,   42,   43,   -1,
+   45,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   60,   61,   62,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  258,  259,  260,  261,  262,   -1,  264,  265,  266,
+  267,  268,  269,   -1,   -1,  272,  273,   41,   42,   43,
+   -1,   45,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   60,   61,   62,   41,
+   42,   43,   -1,   45,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   60,   61,
+   62,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  258,  259,  260,  261,
+  262,   -1,  264,  265,  266,  267,  268,  269,   -1,   -1,
+  272,  273,   -1,   -1,   -1,   -1,   -1,   -1,  258,  259,
+  260,  261,  262,   -1,  264,  265,  266,  267,  268,  269,
+   -1,   -1,  272,  273,   -1,   -1,   -1,   -1,   -1,   -1,
+  258,  259,  260,  261,  262,   -1,  264,  265,  266,  267,
+  268,  269,   -1,   -1,  272,  273,   41,   42,   43,   -1,
+   45,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   60,   61,   62,   41,   42,
+   43,   -1,   45,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   60,   61,   62,
+   -1,   -1,   -1,  258,  259,  260,  261,  262,   -1,  264,
+  265,  266,  267,  268,  269,   -1,   -1,  272,  273,   41,
+   42,   43,   -1,   45,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   60,   61,
+   62,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  258,  259,  260,  261,  262,   -1,
+  264,  265,  266,  267,  268,  269,   -1,   -1,  272,  273,
+   -1,   -1,   -1,   -1,   -1,   -1,  258,  259,  260,  261,
+  262,   -1,  264,  265,  266,  267,  268,  269,   -1,   -1,
+  272,  273,   41,   42,   43,   -1,   45,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   60,   61,   62,   41,   42,   43,   -1,   45,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   60,   61,   62,   41,   42,   43,   -1,
+   45,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   60,   61,   62,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  258,  259,  260,  261,  262,   -1,  264,
+  265,  266,  267,  268,  269,   -1,   -1,  272,  273,   -1,
+   -1,   -1,   -1,   -1,   -1,  258,  259,  260,  261,  262,
+   -1,  264,  265,  266,  267,  268,  269,   -1,   -1,  272,
+  273,   41,   42,   43,   -1,   45,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   60,   61,   62,   -1,   -1,   -1,  258,  259,  260,  261,
+  262,   -1,  264,  265,  266,  267,  268,  269,   -1,   -1,
+  272,  273,   41,   42,   43,   -1,   45,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   60,   61,   62,   41,   42,   43,   -1,   45,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   60,   61,   62,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  258,
+  259,  260,  261,  262,   -1,  264,  265,  266,  267,  268,
+  269,   -1,   -1,  272,  273,   -1,   -1,   -1,   -1,   -1,
+   -1,  258,  259,  260,  261,  262,   -1,  264,  265,  266,
+  267,  268,  269,   -1,   -1,  272,  273,   -1,   -1,   -1,
+   -1,   -1,   -1,  258,  259,  260,  261,  262,   -1,  264,
+  265,  266,  267,  268,  269,   -1,   -1,  272,  273,   41,
+   42,   43,   -1,   45,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   60,   61,
+   62,   41,   42,   43,   -1,   45,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   60,   61,   62,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  258,  259,
+  260,  261,  262,   -1,  264,  265,  266,  267,  268,  269,
+   -1,   -1,  272,  273,   41,   42,   43,   -1,   45,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   60,   61,   62,   -1,   -1,   -1,  258,
+  259,  260,  261,  262,   -1,  264,  265,  266,  267,  268,
+  269,   -1,   -1,  272,  273,   -1,   -1,   -1,   -1,   -1,
+   -1,  258,  259,  260,  261,  262,   -1,  264,  265,  266,
+  267,  268,  269,   -1,   -1,  272,  273,   41,   42,   43,
+   -1,   45,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   60,   61,   62,   41,
+   42,   43,   -1,   45,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   60,   61,
+   62,   42,   43,   44,   45,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   60,
+   61,   62,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  258,  259,  260,  261,
+  262,   -1,  264,  265,  266,  267,  268,  269,   -1,   -1,
+  272,  273,   -1,   -1,   -1,   -1,   -1,   -1,  258,  259,
+  260,  261,  262,   -1,  264,  265,  266,  267,  268,  269,
+   -1,   -1,  272,  273,   42,   43,   44,   45,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   60,   61,   62,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  258,  259,  260,  261,  262,   -1,  264,  265,  266,
+  267,  268,  269,   -1,   -1,  272,  273,   42,   43,   44,
+   45,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   60,   61,   62,   42,   43,
+   44,   45,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   60,   61,   62,   -1,
+   -1,   -1,   -1,   -1,  258,  259,  260,  261,  262,   -1,
+  264,  265,  266,  267,  268,  269,   -1,   -1,  272,  273,
+   -1,   -1,   -1,   -1,   -1,   -1,  258,  259,  260,  261,
+  262,   -1,  264,  265,  266,  267,  268,  269,   -1,   -1,
+  272,  273,   -1,   -1,   -1,   -1,   -1,  258,  259,  260,
+  261,  262,   -1,  264,  265,  266,  267,  268,  269,   -1,
+   -1,  272,  273,   42,   43,   44,   45,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   60,   61,   62,   42,   43,   44,   45,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   60,   61,   62,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  258,  259,  260,  261,  262,   -1,  264,  265,  266,  267,
+  268,  269,   -1,   -1,  272,  273,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  258,  259,  260,  261,  262,   -1,  264,
+  265,  266,  267,  268,  269,   -1,   -1,  272,  273,   -1,
+   -1,   -1,   -1,   -1,  258,  259,  260,  261,  262,   -1,
+  264,  265,  266,  267,  268,  269,   -1,   -1,  272,  273,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  258,
+  259,  260,  261,  262,   -1,  264,  265,  266,  267,  268,
+  269,   -1,   -1,  272,  273,   -1,   -1,   -1,   -1,   -1,
+  258,  259,  260,  261,  262,   -1,  264,  265,  266,  267,
+  268,  269,   -1,  277,  272,  273,  280,   -1,  282,  283,
+   -1,   -1,  286,   -1,   -1,  289,  290,  291,   -1,   -1,
+   -1,   -1,  296,  297,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  311,   -1,   -1,
+   -1,  315,  316,   -1,   -1,   -1,  320,   -1,   -1,   -1,
+   -1,   -1,  326,   -1,  328,  329,   -1,  331,   -1,  333,
+  334,  335,  336,  337,   -1,  339,  340,  341,  342,  343,
+  344,  345,  346,  347,  348,  349,  350,  351,  352,  353,
+  354,   -1,   -1,  357,  358,  359,   -1,  361,  362,  363,
+   -1,  365,  366,  367,   -1,   -1,  370,   -1,  372,   -1,
+   -1,  375,  376,  377,  378,   -1,   -1,  381,  382,  383,
+   -1,   -1,   -1,   -1,   -1,  389,   -1,   -1,   -1,  393,
+  394,  395,  396,  397,  398,  399,   -1,  401,  402,  403,
+  404,  405,   -1,   -1,  408,   -1,   -1,   -1,   -1,   -1,
+   -1,  415,  416,  417,   -1,   -1,   -1,   -1,   -1,   -1,
+  424,
+};
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 1
+#endif
+#define YYMAXTOKEN 426
+#if YYDEBUG
+char *fortranname[] = {
+"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,"'!'",0,0,0,"'%'",0,0,"'('","')'","'*'","'+'","','","'-'",0,"'/'",0,0,0,0,0,
+0,0,0,0,0,"':'",0,"'<'","'='","'>'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,"'['",0,"']'",0,"'_'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"TOK_BINARY_OP","TOK_EQV","TOK_NEQV",
+"TOK_OR","TOK_XOR","TOK_AND","TOK_NOT","TOK_LT","TOK_GT","TOK_LE","TOK_GE",
+"TOK_EQ","TOK_NE","TOK_UNARY_OP","TOK_DSLASH","TOK_SLASH","TOK_DASTER",
+"TOK_SEP","TOK_SEMICOLON","TOK_NEXTLINE","TOK_PARAMETER","TOK_RESULT",
+"TOK_ONLY","TOK_INCLUDE","TOK_SUBROUTINE","TOK_PROGRAM","TOK_FUNCTION",
+"TOK_OMP","TOK_DOLLAR","TOK_FORMAT","TOK_MAX","TOK_TANH","TOK_WHERE",
+"TOK_ELSEWHERE","TOK_ENDWHERE","TOK_MAXVAL","TOK_TRIM","TOK_SUM","TOK_SQRT",
+"TOK_CASE","TOK_SELECTCASE","TOK_FILE","TOK_END","TOK_ERR","TOK_DONOTTREAT",
+"TOK_ENDDONOTTREAT","TOK_EXIST","TOK_MIN","TOK_FLOAT","TOK_EXP","TOK_COS",
+"TOK_COSH","TOK_ACOS","TOK_NINT","TOK_CYCLE","TOK_SIN","TOK_SINH","TOK_ASIN",
+"TOK_EQUIVALENCE","TOK_BACKSPACE","TOK_LOG","TOK_TAN","TOK_ATAN",
+"TOK_RECURSIVE","TOK_ABS","TOK_MOD","TOK_SIGN","TOK_MINLOC","TOK_MAXLOC",
+"TOK_EXIT","TOK_MINVAL","TOK_PUBLIC","TOK_PRIVATE","TOK_ALLOCATABLE",
+"TOK_RETURN","TOK_THEN","TOK_ELSEIF","TOK_ELSE","TOK_ENDIF","TOK_PRINT",
+"TOK_PLAINGOTO","TOK_CONSTRUCTID","TOK_LOGICALIF","TOK_PLAINDO","TOK_CONTAINS",
+"TOK_ENDDO","TOK_MODULE","TOK_ENDMODULE","TOK_DOWHILE","TOK_ALLOCATE",
+"TOK_OPEN","TOK_CLOSE","TOK_INQUIRE","TOK_WRITE","TOK_READ","TOK_REWIND",
+"TOK_DEALLOCATE","TOK_NULLIFY","TOK_FIN","TOK_DEBUT","TOK_DIMENSION",
+"TOK_ENDSELECT","TOK_EXTERNAL","TOK_INTENT","TOK_INTRINSIC","TOK_NAMELIST",
+"TOK_CASEDEFAULT","TOK_OPTIONAL","TOK_POINTER","TOK_CONTINUE","TOK_SAVE",
+"TOK_TARGET","TOK_QUOTE","TOK_IMPLICIT","TOK_NONE","TOK_CALL","TOK_STAT",
+"TOK_POINT_TO","TOK_COMMON","TOK_GLOBAL","TOK_INTERFACE","TOK_ENDINTERFACE",
+"TOK_LEFTAB","TOK_RIGHTAB","TOK_PAUSE","TOK_PROCEDURE","TOK_STOP","TOK_NAMEEQ",
+"TOK_REAL8","TOK_OUT","TOK_INOUT","TOK_IN","TOK_USE","TOK_TRUE","TOK_FALSE",
+"TOK_LABEL","TOK_TYPE","TOK_TYPEPAR","TOK_ENDTYPE","TOK_REAL","TOK_INTEGER",
+"TOK_LOGICAL","TOK_DOUBLEPRECISION","TOK_DOUBLEREAL","TOK_ENDSUBROUTINE",
+"TOK_ENDFUNCTION","TOK_ENDPROGRAM","TOK_ENDUNIT","TOK_CHARACTER",
+"TOK_CHAR_CONSTANT","TOK_CHAR_CUT","TOK_DATA","TOK_CHAR_INT","TOK_CHAR_MESSAGE",
+"TOK_CSTREAL","TOK_CSTREALDP","TOK_CSTREALQP","TOK_SFREAL","TOK_COMPLEX",
+"TOK_DOUBLECOMPLEX","TOK_NAME","TOK_NAME_CHAR","TOK_PROBTYPE","TOK_INTERPTYPE",
+"TOK_VARTYPE","TOK_BC","TOK_OP","TOK_CSTINT","TOK_COMMENT","TOK_FILENAME",
+};
+char *fortranrule[] = {
+"$accept : input",
+"input :",
+"input : input line",
+"line : '\\n' position",
+"line : thislabel suite_line_list",
+"line : TOK_COMMENT",
+"line : keyword cmnt writedeclar",
+"line : error writedeclar nulcurbuf",
+"suite_line_list : suite_line",
+"suite_line_list : suite_line_list TOK_SEMICOLON suite_line",
+"suite_line : entry fin_line",
+"suite_line : spec fin_line",
+"suite_line : before_include filename fin_line",
+"suite_line : exec cmnt writedeclar",
+"suite_line : instr fin_line",
+"instr : ident ':'",
+"fin_line : position cmnt",
+"keyword : TOK_DONOTTREAT",
+"keyword : TOK_ENDDONOTTREAT",
+"keyword : TOK_OMP",
+"keyword : TOK_DOLLAR",
+"position :",
+"thislabel :",
+"thislabel : TOK_LABEL nulcurbuf",
+"cmnt :",
+"cmnt : TOK_COMMENT",
+"incomment :",
+"nulcurbuf :",
+"opt_recursive :",
+"opt_recursive : TOK_RECURSIVE",
+"entry :",
+"entry : opt_recursive TOK_SUBROUTINE name_routine arglist",
+"entry : TOK_PROGRAM name_routine",
+"entry : TOK_FUNCTION name_routine arglist TOK_RESULT arglist1",
+"entry : TOK_FUNCTION name_routine arglist",
+"entry : TOK_MODULE TOK_NAME",
+"name_routine : TOK_NAME",
+"writedeclar :",
+"before_include : TOK_INCLUDE",
+"filename : TOK_CHAR_CONSTANT",
+"arglist :",
+"arglist : '(' ')'",
+"arglist : '(' args ')'",
+"arglist1 :",
+"arglist1 : '(' ')'",
+"arglist1 : '(' args ')'",
+"args : arg",
+"args : args ',' arg",
+"arg : TOK_NAME",
+"arg : '*'",
+"spec : type after_type",
+"spec : TOK_TYPE opt_spec opt_sep opt_name",
+"spec : TOK_ENDTYPE opt_name",
+"spec : TOK_POINTER list_couple",
+"spec : before_parameter '(' paramlist ')'",
+"spec : before_parameter paramlist",
+"spec : common",
+"spec : save",
+"spec : implicit",
+"spec : dimension",
+"spec : public",
+"spec : private",
+"spec : use_stat",
+"spec : module_proc_stmt",
+"spec : interface",
+"spec : namelist",
+"spec : TOK_BACKSPACE '(' expr ')'",
+"spec : TOK_EXTERNAL opt_sep use_name_list",
+"spec : TOK_INTRINSIC opt_sep use_intrinsic_list",
+"spec : TOK_EQUIVALENCE list_expr_equi",
+"spec : before_data data '\\n'",
+"opt_spec :",
+"opt_spec : access_spec",
+"name_intrinsic : TOK_SUM",
+"name_intrinsic : TOK_TANH",
+"name_intrinsic : TOK_MAXVAL",
+"name_intrinsic : TOK_MIN",
+"name_intrinsic : TOK_MINVAL",
+"name_intrinsic : TOK_TRIM",
+"name_intrinsic : TOK_SQRT",
+"name_intrinsic : TOK_NINT",
+"name_intrinsic : TOK_FLOAT",
+"name_intrinsic : TOK_EXP",
+"name_intrinsic : TOK_COS",
+"name_intrinsic : TOK_COSH",
+"name_intrinsic : TOK_ACOS",
+"name_intrinsic : TOK_SIN",
+"name_intrinsic : TOK_SINH",
+"name_intrinsic : TOK_ASIN",
+"name_intrinsic : TOK_LOG",
+"name_intrinsic : TOK_TAN",
+"name_intrinsic : TOK_ATAN",
+"name_intrinsic : TOK_MOD",
+"name_intrinsic : TOK_SIGN",
+"name_intrinsic : TOK_MINLOC",
+"name_intrinsic : TOK_MAXLOC",
+"name_intrinsic : TOK_NAME",
+"use_intrinsic_list : name_intrinsic",
+"use_intrinsic_list : use_intrinsic_list ',' name_intrinsic",
+"list_couple : '(' list_expr ')'",
+"list_couple : list_couple ',' '(' list_expr ')'",
+"list_expr_equi : expr_equi",
+"list_expr_equi : list_expr_equi ',' expr_equi",
+"expr_equi : '(' list_expr_equi1 ')'",
+"list_expr_equi1 : ident dims",
+"list_expr_equi1 : list_expr_equi1 ',' ident dims",
+"list_expr : expr",
+"list_expr : list_expr ',' expr",
+"opt_sep :",
+"opt_sep : ':' ':'",
+"after_type : dcl nodimsgiven",
+"after_type : before_function name_routine arglist",
+"before_function : TOK_FUNCTION",
+"before_parameter : TOK_PARAMETER",
+"before_data : TOK_DATA",
+"data : TOK_NAME TOK_SLASH datavallist TOK_SLASH",
+"data : data opt_comma TOK_NAME TOK_SLASH datavallist TOK_SLASH",
+"data : datanamelist TOK_SLASH datavallist TOK_SLASH",
+"datavallist : expr_data",
+"datavallist : expr_data ',' datavallist",
+"save : before_save varsave",
+"save : before_save comblock varsave",
+"save : save opt_comma comblock opt_comma varsave",
+"save : save ',' varsave",
+"before_save : TOK_SAVE",
+"varsave :",
+"varsave : TOK_NAME dims",
+"datanamelist : TOK_NAME",
+"datanamelist : TOK_NAME '(' expr ')'",
+"datanamelist : datanamelist ',' datanamelist",
+"expr_data : opt_signe simple_const",
+"expr_data : expr_data '+' expr_data",
+"expr_data : expr_data '-' expr_data",
+"expr_data : expr_data '*' expr_data",
+"expr_data : expr_data '/' expr_data",
+"opt_signe :",
+"opt_signe : signe",
+"namelist : namelist_action after_namelist",
+"namelist_action : TOK_NAMELIST ident",
+"namelist_action : TOK_NAMELIST comblock ident",
+"namelist_action : namelist_action opt_comma comblock opt_comma ident",
+"namelist_action : namelist_action ',' ident",
+"after_namelist :",
+"interface : TOK_INTERFACE opt_name",
+"interface : TOK_ENDINTERFACE opt_name",
+"before_dimension : TOK_DIMENSION",
+"dimension : before_dimension opt_comma TOK_NAME dims lengspec",
+"dimension : dimension ',' TOK_NAME dims lengspec",
+"private : TOK_PRIVATE '\\n'",
+"private : TOK_PRIVATE opt_sep use_name_list",
+"public : TOK_PUBLIC '\\n'",
+"public : TOK_PUBLIC opt_sep use_name_list",
+"use_name_list : TOK_NAME",
+"use_name_list : use_name_list ',' TOK_NAME",
+"common : before_common var_common_list",
+"common : before_common comblock var_common_list",
+"common : common opt_comma comblock opt_comma var_common_list",
+"before_common : TOK_COMMON",
+"before_common : TOK_GLOBAL TOK_COMMON",
+"var_common_list : var_common",
+"var_common_list : var_common_list ',' var_common",
+"var_common : TOK_NAME dims",
+"comblock : TOK_DSLASH",
+"comblock : TOK_SLASH TOK_NAME TOK_SLASH",
+"opt_comma :",
+"opt_comma : ','",
+"paramlist : paramitem",
+"paramlist : paramlist ',' paramitem",
+"paramitem : TOK_NAME '=' expr",
+"module_proc_stmt : TOK_PROCEDURE proc_name_list",
+"proc_name_list : TOK_NAME",
+"proc_name_list : proc_name_list ',' TOK_NAME",
+"implicit : TOK_IMPLICIT TOK_NONE",
+"implicit : TOK_IMPLICIT TOK_REAL8",
+"opt_retour :",
+"dcl : options opt_retour TOK_NAME dims lengspec initial_value",
+"dcl : dcl ',' opt_retour TOK_NAME dims lengspec initial_value",
+"nodimsgiven :",
+"type : typespec selector",
+"type : before_character c_selector",
+"type : typename '*' TOK_CSTINT",
+"type : before_typepar attribute ')'",
+"before_typepar : TOK_TYPEPAR",
+"c_selector :",
+"c_selector : '*' TOK_CSTINT",
+"c_selector : '*' '(' c_attribute ')'",
+"c_selector : '(' c_attribute ')'",
+"c_attribute : TOK_NAME clause opt_clause",
+"c_attribute : TOK_NAME '=' clause opt_clause",
+"c_attribute : clause opt_clause",
+"before_character : TOK_CHARACTER",
+"typespec : typename",
+"typename : TOK_INTEGER",
+"typename : TOK_REAL",
+"typename : TOK_COMPLEX",
+"typename : TOK_DOUBLEPRECISION",
+"typename : TOK_DOUBLECOMPLEX",
+"typename : TOK_LOGICAL",
+"lengspec :",
+"lengspec : '*' proper_lengspec",
+"proper_lengspec : expr",
+"proper_lengspec : '(' '*' ')'",
+"selector :",
+"selector : '*' proper_selector",
+"selector : '(' attribute ')'",
+"proper_selector : expr",
+"proper_selector : '(' '*' ')'",
+"attribute : TOK_NAME clause",
+"attribute : TOK_NAME '=' clause",
+"attribute : TOK_NAME",
+"attribute : TOK_CSTINT",
+"clause : expr",
+"clause : '*'",
+"opt_clause :",
+"opt_clause : ',' TOK_NAME clause",
+"options :",
+"options : ':' ':'",
+"options : ',' attr_spec_list ':' ':'",
+"attr_spec_list : attr_spec",
+"attr_spec_list : attr_spec_list ',' attr_spec",
+"attr_spec : TOK_PARAMETER",
+"attr_spec : access_spec",
+"attr_spec : TOK_ALLOCATABLE",
+"attr_spec : TOK_DIMENSION dims",
+"attr_spec : TOK_EXTERNAL",
+"attr_spec : TOK_INTENT '(' intent_spec ')'",
+"attr_spec : TOK_INTRINSIC",
+"attr_spec : TOK_OPTIONAL",
+"attr_spec : TOK_POINTER",
+"attr_spec : TOK_SAVE",
+"attr_spec : TOK_TARGET",
+"intent_spec : TOK_IN",
+"intent_spec : TOK_OUT",
+"intent_spec : TOK_INOUT",
+"access_spec : TOK_PUBLIC",
+"access_spec : TOK_PRIVATE",
+"dims :",
+"dims : '(' dimlist ')'",
+"dimlist : dim",
+"dimlist : dimlist ',' dim",
+"dim : ubound",
+"dim : ':'",
+"dim : expr ':'",
+"dim : ':' expr",
+"dim : expr ':' ubound",
+"ubound : '*'",
+"ubound : expr",
+"expr : uexpr",
+"expr : '(' expr ')'",
+"expr : complex_const",
+"expr : predefinedfunction",
+"predefinedfunction : TOK_SUM minmaxlist ')'",
+"predefinedfunction : TOK_MAX minmaxlist ')'",
+"predefinedfunction : TOK_TANH '(' minmaxlist ')'",
+"predefinedfunction : TOK_MAXVAL '(' minmaxlist ')'",
+"predefinedfunction : TOK_MIN minmaxlist ')'",
+"predefinedfunction : TOK_MINVAL '(' minmaxlist ')'",
+"predefinedfunction : TOK_TRIM '(' expr ')'",
+"predefinedfunction : TOK_SQRT expr ')'",
+"predefinedfunction : TOK_REAL '(' minmaxlist ')'",
+"predefinedfunction : TOK_NINT '(' expr ')'",
+"predefinedfunction : TOK_FLOAT '(' expr ')'",
+"predefinedfunction : TOK_EXP '(' expr ')'",
+"predefinedfunction : TOK_COS '(' expr ')'",
+"predefinedfunction : TOK_COSH '(' expr ')'",
+"predefinedfunction : TOK_ACOS '(' expr ')'",
+"predefinedfunction : TOK_SIN '(' expr ')'",
+"predefinedfunction : TOK_SINH '(' expr ')'",
+"predefinedfunction : TOK_ASIN '(' expr ')'",
+"predefinedfunction : TOK_LOG '(' expr ')'",
+"predefinedfunction : TOK_TAN '(' expr ')'",
+"predefinedfunction : TOK_ATAN '(' expr ')'",
+"predefinedfunction : TOK_ABS expr ')'",
+"predefinedfunction : TOK_MOD '(' minmaxlist ')'",
+"predefinedfunction : TOK_SIGN '(' minmaxlist ')'",
+"predefinedfunction : TOK_MINLOC '(' minmaxlist ')'",
+"predefinedfunction : TOK_MAXLOC '(' minmaxlist ')'",
+"minmaxlist : expr",
+"minmaxlist : minmaxlist ',' expr",
+"uexpr : lhs",
+"uexpr : simple_const",
+"uexpr : vec",
+"uexpr : expr operation",
+"uexpr : signe expr",
+"uexpr : TOK_NOT expr",
+"signe : '+'",
+"signe : '-'",
+"operation : '+' expr",
+"operation : '-' expr",
+"operation : '*' expr",
+"operation : TOK_DASTER expr",
+"operation : TOK_EQ expr",
+"operation : TOK_EQV expr",
+"operation : TOK_GT expr",
+"operation : '>' expr",
+"operation : TOK_LT expr",
+"operation : '<' expr",
+"operation : TOK_GE expr",
+"operation : '>' '=' expr",
+"operation : TOK_LE expr",
+"operation : '<' '=' expr",
+"operation : TOK_NE expr",
+"operation : TOK_NEQV expr",
+"operation : TOK_XOR expr",
+"operation : TOK_OR expr",
+"operation : TOK_AND expr",
+"operation : TOK_SLASH after_slash",
+"operation : '=' after_equal",
+"after_slash :",
+"after_slash : expr",
+"after_slash : '=' expr",
+"after_slash : TOK_SLASH expr",
+"after_equal : '=' expr",
+"after_equal : expr",
+"lhs : ident",
+"lhs : structure_component",
+"lhs : array_ele_substring_func_ref",
+"beforefunctionuse :",
+"array_ele_substring_func_ref : begin_array",
+"array_ele_substring_func_ref : begin_array substring",
+"array_ele_substring_func_ref : structure_component '(' funarglist ')'",
+"array_ele_substring_func_ref : structure_component '(' funarglist ')' substring",
+"begin_array : ident '(' funarglist ')'",
+"structure_component : lhs '%' lhs",
+"vec : TOK_LEFTAB outlist TOK_RIGHTAB",
+"funarglist : beforefunctionuse",
+"funarglist : beforefunctionuse funargs",
+"funargs : funarg",
+"funargs : funargs ',' funarg",
+"funarg : expr",
+"funarg : triplet",
+"triplet : expr ':' expr",
+"triplet : expr ':' expr ':' expr",
+"triplet : ':' expr ':' expr",
+"triplet : ':' ':' expr",
+"triplet : ':' expr",
+"triplet : expr ':'",
+"triplet : ':'",
+"ident : TOK_NAME",
+"simple_const : TOK_TRUE",
+"simple_const : TOK_FALSE",
+"simple_const : TOK_CSTINT",
+"simple_const : TOK_CSTREAL",
+"simple_const : TOK_CSTREALDP",
+"simple_const : TOK_CSTREALQP",
+"simple_const : simple_const TOK_NAME",
+"simple_const : string_constant opt_substring",
+"string_constant : TOK_CHAR_CONSTANT",
+"string_constant : string_constant TOK_CHAR_CONSTANT",
+"string_constant : TOK_CHAR_MESSAGE",
+"string_constant : TOK_CHAR_CUT",
+"opt_substring :",
+"opt_substring : substring",
+"substring : '(' optexpr ':' optexpr ')'",
+"optexpr :",
+"optexpr : expr",
+"opt_expr : '\\n'",
+"opt_expr : expr",
+"initial_value :",
+"initial_value : before_initial '=' expr",
+"before_initial :",
+"complex_const : '(' uexpr ',' uexpr ')'",
+"use_stat : word_use module_name",
+"use_stat : word_use module_name ',' rename_list",
+"use_stat : word_use module_name ',' TOK_ONLY ':' '\\n'",
+"use_stat : word_use module_name ',' TOK_ONLY ':' only_list",
+"word_use : TOK_USE",
+"module_name : TOK_NAME",
+"rename_list : rename_name",
+"rename_list : rename_list ',' rename_name",
+"rename_name : TOK_NAME TOK_POINT_TO TOK_NAME",
+"only_list : only_name",
+"only_list : only_list ',' only_name",
+"only_name : TOK_NAME TOK_POINT_TO TOK_NAME",
+"only_name : TOK_NAME",
+"exec : iffable",
+"exec : TOK_ALLOCATE '(' allocation_list opt_stat_spec ')'",
+"exec : TOK_DEALLOCATE '(' allocate_object_list opt_stat_spec ')'",
+"exec : TOK_NULLIFY '(' pointer_name_list ')'",
+"exec : word_endunit",
+"exec : word_endprogram opt_name",
+"exec : word_endsubroutine opt_name",
+"exec : word_endfunction opt_name",
+"exec : TOK_ENDMODULE opt_name",
+"exec : boucledo",
+"exec : logif iffable",
+"exec : TOK_WHERE '(' expr ')' opt_expr",
+"exec : TOK_ELSEWHERE",
+"exec : TOK_ENDWHERE",
+"exec : logif TOK_THEN",
+"exec : TOK_ELSEIF '(' expr ')' TOK_THEN",
+"exec : TOK_ELSE",
+"exec : TOK_ENDIF opt_name",
+"exec : TOK_CASE caselist ')'",
+"exec : TOK_SELECTCASE '(' expr ')'",
+"exec : TOK_CASEDEFAULT",
+"exec : TOK_ENDSELECT",
+"exec : TOK_CONTAINS",
+"word_endsubroutine : TOK_ENDSUBROUTINE",
+"word_endunit : TOK_ENDUNIT",
+"word_endprogram : TOK_ENDPROGRAM",
+"word_endfunction : TOK_ENDFUNCTION",
+"caselist : expr",
+"caselist : caselist ',' expr",
+"caselist : caselist ':' expr",
+"boucledo : worddo opt_int do_arg",
+"boucledo : wordwhile expr",
+"boucledo : TOK_ENDDO optname",
+"do_arg :",
+"do_arg : do_var '=' expr ',' expr",
+"do_arg : do_var '=' expr ',' expr ',' expr",
+"opt_int :",
+"opt_int : TOK_CSTINT opt_comma",
+"opt_name : '\\n'",
+"opt_name : TOK_NAME",
+"optname :",
+"optname : TOK_NAME",
+"worddo : TOK_PLAINDO",
+"wordwhile : TOK_DOWHILE",
+"dotarget :",
+"dotarget : TOK_CSTINT",
+"iffable : TOK_CONTINUE",
+"iffable : ident_dims after_ident_dims",
+"iffable : goto",
+"iffable : io",
+"iffable : call",
+"iffable : TOK_ALLOCATE '(' allocation_list opt_stat_spec ')'",
+"iffable : TOK_DEALLOCATE '(' allocate_object_list opt_stat_spec ')'",
+"iffable : TOK_EXIT optexpr",
+"iffable : TOK_RETURN opt_expr",
+"iffable : TOK_CYCLE opt_expr",
+"iffable : stop opt_expr",
+"iffable : int_list",
+"before_dims :",
+"ident_dims : ident before_dims dims dims",
+"ident_dims : ident_dims '%' ident before_dims dims dims",
+"int_list : TOK_CSTINT",
+"int_list : int_list ',' TOK_CSTINT",
+"after_ident_dims : '=' expr",
+"after_ident_dims : TOK_POINT_TO expr",
+"call : keywordcall opt_call",
+"opt_call :",
+"opt_call : '(' opt_callarglist ')'",
+"opt_callarglist :",
+"opt_callarglist : callarglist",
+"keywordcall : before_call TOK_NAME",
+"before_call : TOK_CALL",
+"callarglist : callarg",
+"callarglist : callarglist ',' callarg",
+"callarg : expr",
+"callarg : '*' label",
+"stop : TOK_PAUSE",
+"stop : TOK_STOP",
+"io : iofctl ioctl",
+"io : read option_read",
+"io : write ioctl",
+"io : write ioctl outlist",
+"io : TOK_REWIND after_rewind",
+"io : TOK_FORMAT",
+"opt_CHAR_INT :",
+"opt_CHAR_INT : TOK_CSTINT TOK_NAME",
+"idfile : '*'",
+"idfile : TOK_CSTINT",
+"idfile : ident",
+"option_print :",
+"option_print : ',' outlist",
+"option_inlist :",
+"option_inlist : inlist",
+"option_read : ioctl option_inlist",
+"option_read : infmt opt_inlist",
+"opt_outlist :",
+"opt_outlist : outlist",
+"opt_inlist :",
+"opt_inlist : ',' inlist",
+"ioctl : '(' ctllist ')'",
+"ioctl : '(' fexpr ')'",
+"after_rewind : '(' ident ')'",
+"after_rewind : '(' TOK_CSTINT ')'",
+"after_rewind : TOK_CSTINT",
+"after_rewind : '(' uexpr ')'",
+"after_rewind : TOK_NAME",
+"ctllist : ioclause",
+"ctllist : ctllist ',' ioclause",
+"ioclause : fexpr",
+"ioclause : '*'",
+"ioclause : TOK_DASTER",
+"ioclause : TOK_NAME expr",
+"ioclause : TOK_NAME expr '%' ident_dims",
+"ioclause : TOK_NAME '(' triplet ')'",
+"ioclause : TOK_NAME '*'",
+"ioclause : TOK_NAME TOK_DASTER",
+"iofctl : TOK_OPEN",
+"iofctl : TOK_CLOSE",
+"infmt : unpar_fexpr",
+"infmt : '*'",
+"read : TOK_READ",
+"read : TOK_INQUIRE",
+"read : TOK_PRINT",
+"write : TOK_WRITE",
+"fexpr : unpar_fexpr",
+"fexpr : '(' fexpr ')'",
+"unpar_fexpr : lhs",
+"unpar_fexpr : simple_const",
+"unpar_fexpr : fexpr addop fexpr",
+"unpar_fexpr : fexpr '*' fexpr",
+"unpar_fexpr : fexpr TOK_SLASH fexpr",
+"unpar_fexpr : fexpr TOK_DASTER fexpr",
+"unpar_fexpr : addop fexpr",
+"unpar_fexpr : fexpr TOK_DSLASH fexpr",
+"unpar_fexpr : TOK_FILE expr",
+"unpar_fexpr : TOK_EXIST expr",
+"unpar_fexpr : TOK_ERR expr",
+"unpar_fexpr : TOK_END expr",
+"unpar_fexpr : TOK_NAME '=' expr",
+"addop : '+'",
+"addop : '-'",
+"inlist : inelt",
+"inlist : inlist ',' inelt",
+"opt_lhs :",
+"opt_lhs : lhs",
+"inelt : opt_lhs opt_operation",
+"inelt : '(' inlist ')' opt_operation",
+"inelt : predefinedfunction opt_operation",
+"inelt : simple_const opt_operation",
+"inelt : '(' inlist ',' dospec ')'",
+"opt_operation :",
+"opt_operation : operation",
+"opt_operation : opt_operation operation",
+"outlist : uexpr",
+"outlist : other",
+"outlist : out2",
+"out2 : uexpr ',' expr",
+"out2 : uexpr ',' other",
+"out2 : other ',' expr",
+"out2 : other ',' other",
+"out2 : out2 ',' expr",
+"out2 : out2 ',' other",
+"out2 : uexpr",
+"out2 : predefinedfunction",
+"other : complex_const",
+"other : '(' expr ')'",
+"other : '(' uexpr ',' dospec ')'",
+"other : '(' other ',' dospec ')'",
+"other : '(' out2 ',' dospec ')'",
+"dospec : TOK_NAME '=' expr ',' expr",
+"dospec : TOK_NAME '=' expr ',' expr ',' expr",
+"labellist : label",
+"labellist : labellist ',' label",
+"label : TOK_CSTINT",
+"goto : TOK_PLAINGOTO '(' expr ',' expr ')' ',' expr",
+"goto : TOK_PLAINGOTO label",
+"allocation_list : allocate_object",
+"allocation_list : ident_dims",
+"allocation_list : allocation_list ',' allocate_object",
+"allocate_object : ident",
+"allocate_object : structure_component",
+"allocate_object : array_element",
+"array_element : ident '(' funargs ')'",
+"subscript_list : expr",
+"subscript_list : subscript_list ',' expr",
+"allocate_object_list : allocate_object",
+"allocate_object_list : allocate_object_list ',' allocate_object",
+"opt_stat_spec :",
+"opt_stat_spec : ',' TOK_STAT '=' ident",
+"pointer_name_list : ident",
+"pointer_name_list : pointer_name_list ',' ident",
+"opt_construct_name :",
+"opt_construct_name : TOK_NAME",
+"opt_construct_name_colon :",
+"opt_construct_name_colon : TOK_CONSTRUCTID ':'",
+"logif : TOK_LOGICALIF expr ')'",
+"do_var : ident",
+};
+#endif
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 500
+#define YYMAXDEPTH 500
+#endif
+#endif
+int yydebug;
+int yynerrs;
+int yyerrflag;
+int yychar;
+short *yyssp;
+YYSTYPE *yyvsp;
+YYSTYPE yyval;
+YYSTYPE yylval;
+short yyss[YYSTACKSIZE];
+YYSTYPE yyvs[YYSTACKSIZE];
+#define yystacksize YYSTACKSIZE
+#line 2567 "fortran.y"
+
+void processfortran(char *fichier_entree)
+{
+   extern FILE *fortranin;
+   extern FILE *fortranout;
+   char nomfile[LONG_C];
+   int c;
+   int confirmyes;
+
+   /*fortrandebug = 1;*/
+   if ( mark == 1 ) printf("Firstpass == %d \n",firstpass);
+/******************************************************************************/
+/*  1-  Open input and output files                                           */
+/******************************************************************************/
+   strcpy(nomfile,commondirin);
+   strcat(nomfile,"/");
+   strcat(nomfile,fichier_entree);
+   fortranin=fopen( nomfile,"r");
+   if (! fortranin)
+   {
+      printf("Error : File %s does not exist\n",nomfile);
+      exit(1);
+   }
+
+   strcpy(curfile,nomfile);
+   strcpy(nomfile,commondirout);
+   strcat(nomfile,"/");
+   strcat(nomfile,fichier_entree);
+   strcpy(nomfileoutput,nomfile);
+   Save_Length(nomfileoutput,31);
+   if (firstpass == 1)
+   {
+      if (checkexistcommon == 1)
+      {
+         if (fopen(nomfile,"r"))
+         {
+            printf("Warning : file %s already exist\n",nomfile);
+            confirmyes = 0;
+            while (confirmyes==0)
+            {
+               printf("Override file %s ? [Y/N]\n",nomfile);
+               c=getchar();
+               getchar();
+               if (c==79 || c==110)
+               {
+                  printf("We stop\n");
+                  exit(1);
+               }
+               if (c==89 || c==121)
+               {
+                  confirmyes=1;
+               }
+            }
+         }
+      }
+   }
+
+/******************************************************************************/
+/*  2-  Variables initialization                                              */
+/******************************************************************************/
+
+   line_num_fortran_common=1;
+   line_num_fortran=1;
+   PublicDeclare = 0;
+   PrivateDeclare = 0;
+   ExternalDeclare = 0;
+   SaveDeclare = 0;
+   pointerdeclare = 0;
+   optionaldeclare = 0;
+   incalldeclare = 0;
+   VarType = 0;
+   VarTypepar = 0;
+   Allocatabledeclare = 0 ;
+   strcpy(NamePrecision," ");
+   VariableIsParameter =  0 ;
+   strcpy(NamePrecision,"");
+   c_star = 0 ;
+   functiondeclarationisdone = 0;
+   insubroutinedeclare = 0 ;
+   strcpy(subroutinename," ");
+   InitialValueGiven = 0 ;
+   strcpy(EmptyChar," ");
+   inmoduledeclare = 0;
+   colnum=0;
+   incom=0;
+   couldaddvariable=1;
+   aftercontainsdeclare = 1;
+   strcpy(nameinttypename,"");
+   /* Name of the file without format                                         */
+   tmp = strchr(fichier_entree, '.');
+   strncpy(curfilename,fichier_entree,strlen(fichier_entree)-strlen(tmp));
+   Save_Length(curfilename,30);
+/******************************************************************************/
+/*  3-  Parsing of the input file (1 time)                                    */
+/******************************************************************************/
+   if (firstpass == 0 )
+   {
+      fortranout=fopen(nomfileoutput,"w");
+
+      NewModule_Creation_0();
+   }
+
+   fortranparse();
+
+   strcpy(curfile,mainfile);
+
+   if (firstpass == 0 ) fclose(fortranout);
+}
+#line 7005 "y.tab.c"
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+int
+yyparse()
+{
+    register int yym, yyn, yystate;
+#if YYDEBUG
+    register char *yys;
+    extern char *getenv();
+
+    if (yys = getenv("YYDEBUG"))
+    {
+        yyn = *yys;
+        if (yyn >= '0' && yyn <= '9')
+            yydebug = yyn - '0';
+    }
+#endif
+
+    yynerrs = 0;
+    yyerrflag = 0;
+    yychar = (-1);
+
+    yyssp = yyss;
+    yyvsp = yyvs;
+    *yyssp = yystate = 0;
+
+yyloop:
+    if (yyn = yydefred[yystate]) goto yyreduce;
+    if (yychar < 0)
+    {
+        if ((yychar = yylex()) < 0) yychar = 0;
+#if YYDEBUG
+        if (yydebug)
+        {
+            yys = 0;
+            if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+            if (!yys) yys = "illegal-symbol";
+            printf("%sdebug: state %d, reading %d (%s)\n",
+                    YYPREFIX, yystate, yychar, yys);
+        }
+#endif
+    }
+    if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+    {
+#if YYDEBUG
+        if (yydebug)
+            printf("%sdebug: state %d, shifting to state %d\n",
+                    YYPREFIX, yystate, yytable[yyn]);
+#endif
+        if (yyssp >= yyss + yystacksize - 1)
+        {
+            goto yyoverflow;
+        }
+        *++yyssp = yystate = yytable[yyn];
+        *++yyvsp = yylval;
+        yychar = (-1);
+        if (yyerrflag > 0)  --yyerrflag;
+        goto yyloop;
+    }
+    if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+    {
+        yyn = yytable[yyn];
+        goto yyreduce;
+    }
+    if (yyerrflag) goto yyinrecovery;
+#ifdef lint
+    goto yynewerror;
+#endif
+yynewerror:
+    yyerror("syntax error");
+#ifdef lint
+    goto yyerrlab;
+#endif
+yyerrlab:
+    ++yynerrs;
+yyinrecovery:
+    if (yyerrflag < 3)
+    {
+        yyerrflag = 3;
+        for (;;)
+        {
+            if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&
+                    yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+            {
+#if YYDEBUG
+                if (yydebug)
+                    printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yyssp, yytable[yyn]);
+#endif
+                if (yyssp >= yyss + yystacksize - 1)
+                {
+                    goto yyoverflow;
+                }
+                *++yyssp = yystate = yytable[yyn];
+                *++yyvsp = yylval;
+                goto yyloop;
+            }
+            else
+            {
+#if YYDEBUG
+                if (yydebug)
+                    printf("%sdebug: error recovery discarding state %d\n",
+                            YYPREFIX, *yyssp);
+#endif
+                if (yyssp <= yyss) goto yyabort;
+                --yyssp;
+                --yyvsp;
+            }
+        }
+    }
+    else
+    {
+        if (yychar == 0) goto yyabort;
+#if YYDEBUG
+        if (yydebug)
+        {
+            yys = 0;
+            if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+            if (!yys) yys = "illegal-symbol";
+            printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+                    YYPREFIX, yystate, yychar, yys);
+        }
+#endif
+        yychar = (-1);
+        goto yyloop;
+    }
+yyreduce:
+#if YYDEBUG
+    if (yydebug)
+        printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+                YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+    yym = yylen[yyn];
+    yyval = yyvsp[1-yym];
+    switch (yyn)
+    {
+case 7:
+#line 341 "fortran.y"
+{yyerrok;yyclearin;}
+break;
+case 12:
+#line 349 "fortran.y"
+{
+                     if (inmoduledeclare == 0 )
+                     {
+                        pos_end = setposcur();
+                        RemoveWordSET_0(fortranout,pos_curinclude,
+                                              pos_end-pos_curinclude);
+                     }
+                  }
+break;
+case 17:
+#line 365 "fortran.y"
+{
+            /* we should ignore the declaration until the keyword             */
+            /*    TOK_ENDDONOTTREAT                                           */
+            couldaddvariable = 0 ;
+            RemoveWordCUR_0(fortranout,-20,20);
+         }
+break;
+case 18:
+#line 372 "fortran.y"
+{
+             couldaddvariable = 1 ;
+             RemoveWordCUR_0(fortranout,-24,24);
+          }
+break;
+case 21:
+#line 379 "fortran.y"
+{pos_cur = setposcur();}
+break;
+case 26:
+#line 388 "fortran.y"
+{incom = 1;}
+break;
+case 27:
+#line 391 "fortran.y"
+{if (incom !=1) {strcpy(curbuf,"");incom=0;}}
+break;
+case 31:
+#line 398 "fortran.y"
+{
+                      if ( couldaddvariable == 1 )
+                      {
+                      /* open param file                                      */
+                      if ( firstpass == 0 )
+                      {
+                         sprintf(ligne,"%s/ParamFile%s.h",nomdir,yyvsp[-1].nac);
+                         paramout=fopen(ligne,"w");
+                         if ( retour77 == 0 ) fprintf(paramout,"!\n");
+                         else fprintf(paramout,"C\n");
+
+                      }
+                      Add_SubroutineArgument_Var_1(yyvsp[0].l);
+                      if ( inmodulemeet == 1 )
+                      {
+                         insubroutinedeclare = 1;
+                         /* in the second step we should write the head of    */
+                         /*    the subroutine sub_loop_<subroutinename>       */
+                         writeheadnewsub_0(1);
+                      }
+                      else
+                      {
+                            insubroutinedeclare = 1;
+                            writeheadnewsub_0(1);
+                      }
+                      }
+                   }
+break;
+case 32:
+#line 426 "fortran.y"
+{
+                      /* open param file                                      */
+                      if ( firstpass == 0 )
+                      {
+                         sprintf(ligne,"%s/ParamFile%s.h",nomdir,yyvsp[0].nac);
+                         paramout=fopen(ligne,"w");
+                         if ( retour77 == 0 ) fprintf(paramout,"!\n");
+                         else fprintf(paramout,"C\n");
+
+                      }
+                      strcpy(subroutinename,yyvsp[0].nac);
+                      /* Common case                                          */
+                      insubroutinedeclare = 1;
+                      /* in the second step we should write the head of       */
+                      /*    the subroutine sub_loop_<subroutinename>          */
+                      writeheadnewsub_0(1);
+                   }
+break;
+case 33:
+#line 444 "fortran.y"
+{
+                      /* open param file                                      */
+                      if ( firstpass == 0 )
+                      {
+                         sprintf(ligne,"%s/ParamFile%s.h",nomdir,yyvsp[-3].nac);
+                         paramout=fopen(ligne,"w");
+                         if ( retour77 == 0 ) fprintf(paramout,"!\n");
+                         else fprintf(paramout,"C\n");
+                      }
+                      strcpy(subroutinename,yyvsp[-3].nac);
+                      if ( inmodulemeet == 1 )
+                      {
+                         insubroutinedeclare = 1;
+                         /* we should to list of the subroutine argument the  */
+                         /*    name of the function which has to be defined   */
+                         Add_SubroutineArgument_Var_1(yyvsp[-2].l);
+                         strcpy(DeclType,"");
+                         /* in the second step we should write the head of    */
+                         /*    the subroutine sub_loop_<subroutinename>       */
+                         writeheadnewsub_0(2);
+                      }
+                      else
+                      {
+                            insubroutinedeclare = 1;
+                            /* we should to list of the subroutine argument   */
+                            /* name of the function which has to be defined   */
+                            Add_SubroutineArgument_Var_1(yyvsp[-2].l);
+                            strcpy(DeclType,"");
+                            Add_FunctionType_Var_1(yyvsp[-3].nac);
+                            writeheadnewsub_0(2);
+                      }
+                   }
+break;
+case 34:
+#line 477 "fortran.y"
+{
+                      /* open param file                                      */
+                      if ( firstpass == 0 )
+                      {
+                         sprintf(ligne,"%s/ParamFile%s.h",nomdir,yyvsp[-1].nac);
+                         paramout=fopen(ligne,"w");
+                         if ( retour77 == 0 ) fprintf(paramout,"!\n");
+                         else fprintf(paramout,"C\n");
+                      }
+                      strcpy(subroutinename,yyvsp[-1].nac);
+                      if ( inmodulemeet == 1 )
+                      {
+                         insubroutinedeclare = 1;
+                         /* we should to list of the subroutine argument the  */
+                         /*    name of the function which has to be defined   */
+                         Add_SubroutineArgument_Var_1(yyvsp[0].l);
+                         strcpy(DeclType,"");
+                         Add_FunctionType_Var_1(yyvsp[-1].nac);
+                         /* in the second step we should write the head of    */
+                         /*    the subroutine sub_loop_<subroutinename>       */
+                         writeheadnewsub_0(2);
+                      }
+                      else
+                      {
+                            insubroutinedeclare = 1;
+                            /* we should to list of the subroutine argument   */
+                            /* name of the function which has to be defined   */
+                            Add_SubroutineArgument_Var_1(yyvsp[0].l);
+                            strcpy(DeclType,"");
+                            Add_FunctionType_Var_1(yyvsp[-1].nac);
+                            writeheadnewsub_0(2);
+                      }
+                   }
+break;
+case 35:
+#line 511 "fortran.y"
+{
+                      GlobalDeclaration = 0;
+                      strcpy(curmodulename,yyvsp[0].nac);
+                      strcpy(subroutinename,"");
+                      Add_NameOfModule_1(yyvsp[0].nac);
+                      if ( inmoduledeclare == 0 )
+                      {
+                         /* To know if there are in the module declaration    */
+                         inmoduledeclare = 1;
+                         /* to know if a module has been met                  */
+                         inmodulemeet = 1;
+                         /* to know if we are after the keyword contains      */
+                         aftercontainsdeclare = 0 ;
+                      }
+                   }
+break;
+case 36:
+#line 528 "fortran.y"
+{
+                      if ( couldaddvariable == 1 )
+                      {
+                         strcpy(yyval.nac,yyvsp[0].nac);strcpy(subroutinename,yyvsp[0].nac);
+                      }
+                   }
+break;
+case 38:
+#line 537 "fortran.y"
+{
+                      pos_curinclude = setposcur()-9;
+                   }
+break;
+case 39:
+#line 541 "fortran.y"
+{
+                      if ( couldaddvariable == 1 ) Add_Include_1(yyvsp[0].nac);
+                   }
+break;
+case 40:
+#line 545 "fortran.y"
+{
+                      if ( firstpass == 1 && couldaddvariable == 1) yyval.l=NULL;
+                   }
+break;
+case 41:
+#line 548 "fortran.y"
+{
+                      if ( firstpass == 1 && couldaddvariable == 1 ) yyval.l=NULL;
+                   }
+break;
+case 42:
+#line 552 "fortran.y"
+{
+                       if ( firstpass == 1 && couldaddvariable == 1 ) yyval.l=yyvsp[-1].l;
+                   }
+break;
+case 45:
+#line 559 "fortran.y"
+{
+                      if ( couldaddvariable == 1 )
+                      {
+                         Add_SubroutineArgument_Var_1(yyvsp[-1].l);
+                      }
+                   }
+break;
+case 46:
+#line 566 "fortran.y"
+{
+                      if ( firstpass == 1  && couldaddvariable == 1)
+                      {
+                         strcpy(nameinttypenameback,nameinttypename);
+                         strcpy(nameinttypename,"");
+                         curvar=createvar(yyvsp[0].na,NULL);
+                        strcpy(nameinttypename,nameinttypenameback);
+                         curlistvar=insertvar(NULL,curvar);
+                         yyval.l=settype("",curlistvar);
+                      }
+                   }
+break;
+case 47:
+#line 578 "fortran.y"
+{
+                      if ( firstpass == 1  && couldaddvariable == 1)
+                      {
+                         strcpy(nameinttypenameback,nameinttypename);
+                         strcpy(nameinttypename,"");                      
+                         curvar=createvar(yyvsp[0].na,NULL);
+                         strcpy(nameinttypename,nameinttypenameback);                         
+                         yyval.l=insertvar(yyvsp[-2].l,curvar);
+                      }
+                   }
+break;
+case 48:
+#line 589 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na,yyvsp[0].nac);}
+break;
+case 49:
+#line 590 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na,"*");}
+break;
+case 50:
+#line 593 "fortran.y"
+{
+                      if ( VarTypepar == 1 )
+                      {
+                         couldaddvariable = 1 ;
+                         VarTypepar = 0;
+                      }
+                   }
+break;
+case 51:
+#line 601 "fortran.y"
+{
+                      if ( couldaddvariable == 1 )
+                      {
+                         VarType = 1;
+                         couldaddvariable = 0 ;
+                      }
+                   }
+break;
+case 52:
+#line 609 "fortran.y"
+{
+                      if ( VarType == 1 ) couldaddvariable = 1 ;
+                      VarType = 0;
+                      VarTypepar = 0;
+                   }
+break;
+case 54:
+#line 616 "fortran.y"
+{
+                      if ( couldaddvariable == 1 )
+                      {
+                         if ( insubroutinedeclare == 0 )
+                                                  Add_GlobalParameter_Var_1(yyvsp[-1].l);
+                         else Add_Parameter_Var_1(yyvsp[-1].l);
+                         pos_end = setposcur();
+                        RemoveWordSET_0(fortranout,pos_cur_decl,
+                                                    pos_end-pos_cur_decl);
+                      }
+                      VariableIsParameter =  0 ;
+                   }
+break;
+case 55:
+#line 629 "fortran.y"
+{
+                     if ( couldaddvariable == 1 )
+                     {
+                        if ( insubroutinedeclare == 0 )
+                                                  Add_GlobalParameter_Var_1(yyvsp[0].l);
+                         else Add_Parameter_Var_1(yyvsp[0].l);
+                         pos_end = setposcur();
+                         RemoveWordSET_0(fortranout,pos_cur_decl,
+                                                    pos_end-pos_cur_decl);
+                      }
+                      VariableIsParameter =  0 ;
+                   }
+break;
+case 57:
+#line 643 "fortran.y"
+{
+                     pos_end = setposcur();
+                     RemoveWordSET_0(fortranout,pos_cursave,
+                                                pos_end-pos_cursave);
+                  }
+break;
+case 59:
+#line 650 "fortran.y"
+{
+                   /* if the variable is a parameter we can suppose that is   */
+                   /*    value is the same on each grid. It is not useless to */
+                   /*    create a copy of it on each grid                     */
+                      if ( couldaddvariable == 1 )
+                      {
+                         Add_Globliste_1(yyvsp[0].l);
+                         /* if variableparamlists has been declared in a      */
+                         /*    subroutine                                     */
+                         if ( insubroutinedeclare == 1 )
+                         {
+                            Add_Dimension_Var_1(yyvsp[0].l);
+                         }
+                         pos_end = setposcur();
+                         RemoveWordSET_0(fortranout,pos_curdimension,
+                                                pos_end-pos_curdimension);
+                      }
+                      /*                                                      */
+                      PublicDeclare = 0;
+                      PrivateDeclare = 0;
+                      ExternalDeclare = 0;
+                      strcpy(NamePrecision,"");
+                      c_star = 0;
+                      InitialValueGiven = 0 ;
+                      strcpy(IntentSpec,"");
+                      VariableIsParameter =  0 ;
+                      Allocatabledeclare = 0 ;
+                      SaveDeclare = 0;
+                      pointerdeclare = 0;
+                      optionaldeclare = 0 ;
+                      dimsgiven=0;
+                      c_selectorgiven=0;
+                      strcpy(nameinttypename,"");
+                      strcpy(c_selectorname,"");
+                   }
+break;
+case 60:
+#line 686 "fortran.y"
+{
+      if (firstpass == 0)
+      {
+      if (yyvsp[0].lnn)
+      {
+      removeglobfromlist(&(yyvsp[0].lnn));
+      pos_end = setposcur();
+           RemoveWordSET_0(fortranout,pos_cur,pos_end-pos_cur);
+      writelistpublic(yyvsp[0].lnn);
+      }
+      }
+      }
+break;
+case 70:
+#line 708 "fortran.y"
+{
+                      /* we should remove the data declaration                */
+                      if ( couldaddvariable == 1 && aftercontainsdeclare == 0 )
+                      {
+                        pos_end = setposcur();
+                        RemoveWordSET_0(fortranout,pos_curdata,
+                                              pos_end-pos_curdata);
+                      }
+                  }
+break;
+case 72:
+#line 720 "fortran.y"
+{
+         PublicDeclare = 0 ;
+         PrivateDeclare = 0 ;
+      }
+break;
+case 110:
+#line 771 "fortran.y"
+{
+                      /* if the variable is a parameter we can suppose that is*/
+                      /*    value is the same on each grid. It is not useless */
+                      /*    to create a copy of it on each grid               */
+                      if ( couldaddvariable == 1 )
+                      {
+                      pos_end = setposcur();
+                      /*if (insubroutinedeclare == 0)
+                        {   */
+                         RemoveWordSET_0(fortranout,pos_cur_decl,
+                                                 pos_end-pos_cur_decl);
+                                         
+                       /* }
+                      else
+                       {*/
+                        ReWriteDeclarationAndAddTosubroutine_01(yyvsp[-1].l);
+                        pos_cur_decl = setposcur();
+                        
+                       /*}*/
+                      if ( firstpass == 0 &&
+                           GlobalDeclaration == 0 &&
+                           insubroutinedeclare == 0 )
+                      {
+                         sprintf(ligne,"\n#include \"Module_Declar_%s.h\"\n"
+                                                                ,curmodulename);
+                         tofich(fortranout,ligne,1);
+                         sprintf (ligne, "Module_Declar_%s.h",curmodulename);
+                         module_declar = associate(ligne);
+                         sprintf (ligne, " ");
+                         tofich (module_declar, ligne,1);
+                         GlobalDeclaration = 1 ;
+                      }
+                         yyval.l = yyvsp[-1].l;
+                         Add_Globliste_1(yyvsp[-1].l);
+                                                  
+                         if ( insubroutinedeclare == 0 )
+                                                  Add_GlobalParameter_Var_1(yyvsp[-1].l);
+                         else
+                         {
+                            if ( pointerdeclare == 1 )
+                                                Add_Pointer_Var_From_List_1(yyvsp[-1].l);
+                            Add_Parameter_Var_1(yyvsp[-1].l);
+                         }
+
+                         /* if variables has been declared in a subroutine    */
+                         if ( insubroutinedeclare == 1 )
+                         { 
+                       /*    Add_SubroutineDeclaration_Var_1($1);*/
+                         }
+                         /* If there are a SAVE declarations in module's      */
+                         /*    subroutines we should remove it from the       */
+                         /*    subroutines declaration and add it in the      */
+                         /*    global declarations                            */
+                         if ( aftercontainsdeclare == 1 &&
+                              SaveDeclare == 1 && firstpass == 1 )
+                         {
+                              if ( inmodulemeet == 0 ) Add_Save_Var_dcl_1(yyvsp[-1].l);
+                              else  Add_SubroutineDeclarationSave_Var_1(yyvsp[-1].l);
+                         }
+                      }
+                      /*                                                      */
+                      PublicDeclare = 0;
+                      PrivateDeclare = 0;
+                      ExternalDeclare = 0;
+                      strcpy(NamePrecision,"");
+                      c_star = 0;
+                      InitialValueGiven = 0 ;
+                      strcpy(IntentSpec,"");
+                      VariableIsParameter =  0 ;
+                      Allocatabledeclare = 0 ;
+                      SaveDeclare = 0;
+                      pointerdeclare = 0;
+                      optionaldeclare = 0 ;
+                      dimsgiven=0;
+                      c_selectorgiven=0;
+                      strcpy(nameinttypename,"");
+                      strcpy(c_selectorname,"");
+                   }
+break;
+case 111:
+#line 850 "fortran.y"
+{
+                      /* open param file                                      */
+                      if ( firstpass == 0 )
+                      {
+                         sprintf(ligne,"%s/ParamFile%s.h",nomdir,yyvsp[-1].nac);
+                         paramout=fopen(ligne,"w");
+                         if ( retour77 == 0 ) fprintf(paramout,"!\n");
+                         else fprintf(paramout,"C\n");
+                      }
+                      strcpy(subroutinename,yyvsp[-1].nac);
+                      if ( inmodulemeet == 1 )
+                      {
+                         insubroutinedeclare = 1;
+                         /* we should to list of the subroutine argument the  */
+                         /*    name of the function which has to be defined   */
+                         Add_SubroutineArgument_Var_1(yyvsp[0].l);
+                         Add_FunctionType_Var_1(yyvsp[-1].nac);
+                         /* in the second step we should write the head of    */
+                         /*    the subroutine sub_loop_<subroutinename>       */
+                         writeheadnewsub_0(2);
+                      }
+                      else
+                      {
+                         insubroutinedeclare = 1;
+                         /* we should to list of the subroutine argument the  */
+                         /*    name of the function which has to be defined   */
+                         Add_SubroutineArgument_Var_1(yyvsp[0].l);
+                         Add_FunctionType_Var_1(yyvsp[-1].nac);
+                         /* in the second step we should write the head of    */
+                         /*    the subroutine sub_loop_<subroutinename>       */
+                         writeheadnewsub_0(2);
+                      }
+                      strcpy(nameinttypename,"");
+
+                   }
+break;
+case 112:
+#line 887 "fortran.y"
+{
+                       functiondeclarationisdone = 1;
+                   }
+break;
+case 113:
+#line 893 "fortran.y"
+{
+                      VariableIsParameter = 1;
+                      pos_curparameter = setposcur()-9;
+                   }
+break;
+case 114:
+#line 898 "fortran.y"
+{
+                      pos_curdata = setposcur()-strlen(yyvsp[0].nac);
+                   }
+break;
+case 115:
+#line 902 "fortran.y"
+{
+                      if ( couldaddvariable == 1 )
+                      {
+                      if ( aftercontainsdeclare == 1 ) strcpy(ligne,"");
+                      else sprintf(ligne,"(/ %s /)",yyvsp[-1].na);
+                      Add_Data_Var_1(yyvsp[-3].nac,ligne);
+                      }
+                   }
+break;
+case 116:
+#line 911 "fortran.y"
+{
+                      if ( couldaddvariable == 1 )
+                      {
+                      if ( aftercontainsdeclare == 1 ) strcpy(ligne,"");
+                      else sprintf(ligne,"(/ %s /)",yyvsp[-1].na);
+                      Add_Data_Var_1(yyvsp[-3].nac,ligne);
+                      }
+                   }
+break;
+case 117:
+#line 920 "fortran.y"
+{
+                       /*******************************************************/
+                       /*******************************************************/
+                       /*******************************************************/
+                       /*******************************************************/
+                       /*******************************************************/
+                       /*******************************************************/
+                       /*******************************************************/
+                   }
+break;
+case 118:
+#line 931 "fortran.y"
+{
+                      if ( couldaddvariable == 1 )
+                      {
+                         strcpy(yyval.na,yyvsp[0].na);
+                      }
+                   }
+break;
+case 119:
+#line 938 "fortran.y"
+{
+                      if ( couldaddvariable == 1 )
+                      {
+                         sprintf(yyval.na,"%s,%s",yyvsp[-2].na,yyvsp[0].na);
+                      }
+                   }
+break;
+case 124:
+#line 952 "fortran.y"
+{
+                     pos_cursave = setposcur()-4;
+                  }
+break;
+case 126:
+#line 958 "fortran.y"
+{
+                     if ( couldaddvariable == 1 ) Add_Save_Var_1(yyvsp[-1].nac,yyvsp[0].d);
+                  }
+break;
+case 130:
+#line 967 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s%s",yyvsp[-1].nac,yyvsp[0].nac);}
+break;
+case 131:
+#line 969 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s+%s",yyvsp[-2].na,yyvsp[0].na);}
+break;
+case 132:
+#line 971 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s-%s",yyvsp[-2].na,yyvsp[0].na);}
+break;
+case 133:
+#line 973 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s*%s",yyvsp[-2].na,yyvsp[0].na);}
+break;
+case 134:
+#line 975 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s/%s",yyvsp[-2].na,yyvsp[0].na);}
+break;
+case 135:
+#line 978 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.nac,"");}
+break;
+case 136:
+#line 980 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.nac,yyvsp[0].nac);}
+break;
+case 145:
+#line 995 "fortran.y"
+{
+                      positioninblock=0;
+                      pos_curdimension = setposcur()-9;
+                   }
+break;
+case 146:
+#line 1001 "fortran.y"
+{
+         if ( couldaddvariable == 1 )
+         {
+            /*                                                                */
+            curvar=createvar(yyvsp[-2].nac,yyvsp[-1].d);
+            /*                                                                */
+            CreateAndFillin_Curvar("",curvar);
+            /*                                                                */
+            curlistvar=insertvar(NULL,curvar);
+            /*                                                                */
+            yyval.l=settype("",curlistvar);
+            /*                                                                */
+            strcpy(vallengspec,"");
+         }
+      }
+break;
+case 147:
+#line 1017 "fortran.y"
+{
+         if ( couldaddvariable == 1 )
+         {
+            /*                                                                */
+            curvar=createvar(yyvsp[-2].nac,yyvsp[-1].d);
+            /*                                                                */
+            CreateAndFillin_Curvar("",curvar);
+            /*                                                                */
+            curlistvar=insertvar(yyvsp[-4].l,curvar);
+            /*                                                                */
+            yyval.l=curlistvar;
+            /*                                                                */
+            strcpy(vallengspec,"");
+         }
+      }
+break;
+case 150:
+#line 1037 "fortran.y"
+{
+        yyval.lnn=(listname *)NULL;
+        }
+break;
+case 151:
+#line 1041 "fortran.y"
+{
+          yyval.lnn=yyvsp[0].lnn;
+         }
+break;
+case 152:
+#line 1046 "fortran.y"
+{
+           yyval.lnn = Insertname(NULL,yyvsp[0].nac);
+           }
+break;
+case 153:
+#line 1050 "fortran.y"
+{
+          yyval.lnn = Insertname(yyvsp[-2].lnn,yyvsp[0].nac);
+          }
+break;
+case 154:
+#line 1055 "fortran.y"
+{
+                         pos_end = setposcur();
+                         RemoveWordSET_0(fortranout,pos_curcommon,
+                                                  pos_end-pos_curcommon);
+                   }
+break;
+case 155:
+#line 1061 "fortran.y"
+{
+                         if ( couldaddvariable == 1 )
+                         {
+                            sprintf(charusemodule,"%s",yyvsp[-1].nac);
+                            Add_NameOfCommon_1(yyvsp[-1].nac);
+                            pos_end = setposcur();
+                            RemoveWordSET_0(fortranout,pos_curcommon,
+                                                       pos_end-pos_curcommon);
+                         }
+                   }
+break;
+case 156:
+#line 1072 "fortran.y"
+{
+                         if ( couldaddvariable == 1 )
+                         {
+                            sprintf(charusemodule,"%s",yyvsp[-2].nac);
+                            Add_NameOfCommon_1(yyvsp[-2].nac);
+                            pos_end = setposcur();
+                            RemoveWordSET_0(fortranout,pos_curcommon,
+                                                       pos_end-pos_curcommon);
+                         }
+                   }
+break;
+case 157:
+#line 1084 "fortran.y"
+{
+                      positioninblock=0;
+                      pos_curcommon = setposcur()-6;
+                   }
+break;
+case 158:
+#line 1089 "fortran.y"
+{
+                      positioninblock=0;
+                      pos_curcommon = setposcur()-6-7;
+                   }
+break;
+case 159:
+#line 1095 "fortran.y"
+{
+                      if ( couldaddvariable == 1 ) Add_Common_var_1();
+                   }
+break;
+case 160:
+#line 1100 "fortran.y"
+{
+                      if ( couldaddvariable == 1 ) Add_Common_var_1();
+                   }
+break;
+case 161:
+#line 1104 "fortran.y"
+{
+                      if ( couldaddvariable == 1 )
+                      {
+                         positioninblock = positioninblock + 1 ;
+                         strcpy(commonvar,yyvsp[-1].nac);
+                         commondim = yyvsp[0].d;
+                      }
+                   }
+break;
+case 162:
+#line 1114 "fortran.y"
+{
+                      if ( couldaddvariable == 1 )
+                      {
+                         strcpy(yyval.nac,"");
+                         positioninblock=0;
+                         strcpy(commonblockname,"");
+                      }
+                   }
+break;
+case 163:
+#line 1123 "fortran.y"
+{
+                      if ( couldaddvariable == 1 )
+                      {
+                         strcpy(yyval.nac,yyvsp[-1].nac);
+                         positioninblock=0;
+                         strcpy(commonblockname,yyvsp[-1].nac);
+                      }
+                   }
+break;
+case 166:
+#line 1136 "fortran.y"
+{
+                      if ( couldaddvariable == 1 ) yyval.l=insertvar(NULL,yyvsp[0].v);
+                   }
+break;
+case 167:
+#line 1140 "fortran.y"
+{
+                      if ( couldaddvariable == 1 ) yyval.l=insertvar(yyvsp[-2].l,yyvsp[0].v);
+                   }
+break;
+case 168:
+#line 1145 "fortran.y"
+{
+                     if ( couldaddvariable == 1 )
+                     {
+                         curvar=(variable *) malloc(sizeof(variable));
+                         /*                                                   */
+                         Init_Variable(curvar);
+                         /*                                                   */
+                         curvar->v_VariableIsParameter=1;
+                         strcpy(curvar->v_nomvar,yyvsp[-2].nac);
+                         Save_Length(yyvsp[-2].nac,4);
+                         strcpy(curvar->v_subroutinename,subroutinename);
+                         Save_Length(subroutinename,11);
+                         strcpy(curvar->v_modulename,curmodulename);
+                         Save_Length(curmodulename,6);
+                         strcpy(curvar->v_initialvalue,yyvsp[0].na);
+                         Save_Length(yyvsp[0].na,14);
+                         strcpy(curvar->v_commoninfile,mainfile);
+                         Save_Length(mainfile,10);
+                         yyval.v=curvar;
+                      }
+                   }
+break;
+case 172:
+#line 1173 "fortran.y"
+{
+                       if ( insubroutinedeclare == 1 )
+                       {
+                          Add_ImplicitNoneSubroutine_1();
+                          pos_end = setposcur();
+                          RemoveWordSET_0(fortranout,pos_end-13,
+                                                             13);
+                       }
+                    }
+break;
+case 175:
+#line 1187 "fortran.y"
+{
+                      if ( couldaddvariable == 1 )
+                      {
+                         /*                                                   */
+                         if (dimsgiven == 1)
+                         {
+                            curvar=createvar(yyvsp[-3].nac,curdim);
+                         }
+                         else
+                         {
+                            curvar=createvar(yyvsp[-3].nac,yyvsp[-2].d);
+                         }
+                         /*                                                   */
+                         CreateAndFillin_Curvar(DeclType,curvar);
+                         /*                                                   */
+                         curlistvar=insertvar(NULL,curvar);
+                         if (!strcasecmp(DeclType,"character"))
+                         {
+                            if (c_selectorgiven == 1)
+                            {
+                               strcpy(c_selectordim.first,"1");
+                               strcpy(c_selectordim.last,c_selectorname);
+                               Save_Length(c_selectorname,1);
+                               change_dim_char
+                                     (insertdim(NULL,c_selectordim),curlistvar);
+                            }
+                         }
+                         yyval.l=settype(DeclType,curlistvar);
+                      }
+                      strcpy(vallengspec,"");
+                   }
+break;
+case 176:
+#line 1219 "fortran.y"
+{
+                      if ( couldaddvariable == 1 )
+                      {
+                         if (dimsgiven == 1)
+                         {
+                            curvar=createvar(yyvsp[-3].nac,curdim);
+                         }
+                         else
+                         {
+                            curvar=createvar(yyvsp[-3].nac,yyvsp[-2].d);
+                         }
+                         /*                                                   */
+                         CreateAndFillin_Curvar(yyvsp[-6].l->var->v_typevar,curvar);
+                         /*                                                   */
+                         strcpy(curvar->v_typevar,(yyvsp[-6].l->var->v_typevar));
+                         Save_Length(yyvsp[-6].l->var->v_typevar,3);
+                         /*                                                   */
+                         curlistvar=insertvar(yyvsp[-6].l,curvar);
+                         if (!strcasecmp(DeclType,"character"))
+                         {
+                            if (c_selectorgiven == 1)
+                            {
+                               strcpy(c_selectordim.first,"1");
+                               strcpy(c_selectordim.last,c_selectorname);
+                               Save_Length(c_selectorname,1);
+                               change_dim_char
+                                     (insertdim(NULL,c_selectordim),curlistvar);
+                            }
+                         }
+                         yyval.l=curlistvar;
+                      }
+                      strcpy(vallengspec,"");
+                   }
+break;
+case 177:
+#line 1253 "fortran.y"
+{dimsgiven=0;}
+break;
+case 178:
+#line 1256 "fortran.y"
+{strcpy(DeclType,yyvsp[-1].nac);}
+break;
+case 179:
+#line 1258 "fortran.y"
+{
+                      strcpy(DeclType,"CHARACTER");
+                   }
+break;
+case 180:
+#line 1262 "fortran.y"
+{
+                      strcpy(DeclType,yyvsp[-2].nac);
+                      strcpy(nameinttypename,yyvsp[0].nac);
+                   }
+break;
+case 181:
+#line 1267 "fortran.y"
+{
+                      strcpy(DeclType,"TYPE");
+                   }
+break;
+case 182:
+#line 1272 "fortran.y"
+{
+                 /*     if ( couldaddvariable == 1 ) VarTypepar = 1 ;
+                      couldaddvariable = 0 ;
+                      pos_cur_decl = setposcur()-5;*/
+                   pos_cur_decl = setposcur()-5;
+                   }
+break;
+case 184:
+#line 1281 "fortran.y"
+{c_selectorgiven=1;strcpy(c_selectorname,yyvsp[0].nac);}
+break;
+case 185:
+#line 1282 "fortran.y"
+{c_star = 1;}
+break;
+case 190:
+#line 1290 "fortran.y"
+{
+                      pos_cur_decl = setposcur()-9;
+                   }
+break;
+case 191:
+#line 1294 "fortran.y"
+{strcpy(yyval.nac,yyvsp[0].nac);}
+break;
+case 192:
+#line 1297 "fortran.y"
+{
+                      strcpy(yyval.nac,"INTEGER");
+                      pos_cur_decl = setposcur()-7;
+                   }
+break;
+case 193:
+#line 1301 "fortran.y"
+{
+                      strcpy(yyval.nac,"REAL");
+                      pos_cur_decl = setposcur()-4;
+                   }
+break;
+case 194:
+#line 1306 "fortran.y"
+{strcpy(yyval.nac,"COMPLEX");
+                   pos_cur_decl = setposcur()-7;}
+break;
+case 195:
+#line 1309 "fortran.y"
+{
+                      pos_cur_decl = setposcur()-16;
+                      strcpy(yyval.nac,"REAL");
+                      strcpy(nameinttypename,"8");
+                   }
+break;
+case 196:
+#line 1315 "fortran.y"
+{strcpy(yyval.nac,"DOUBLE COMPLEX");}
+break;
+case 197:
+#line 1317 "fortran.y"
+{
+                      strcpy(yyval.nac,"LOGICAL");
+                      pos_cur_decl = setposcur()-7;
+                   }
+break;
+case 199:
+#line 1323 "fortran.y"
+{strcpy(vallengspec,yyvsp[0].na);}
+break;
+case 200:
+#line 1325 "fortran.y"
+{sprintf(yyval.na,"*%s",yyvsp[0].na);}
+break;
+case 201:
+#line 1326 "fortran.y"
+{strcpy(yyval.na,"*(*)");}
+break;
+case 208:
+#line 1337 "fortran.y"
+{
+                      if ( strstr(yyvsp[0].na,"0.d0") )
+                      {
+                         strcpy(nameinttypename,"8");
+                         sprintf(NamePrecision,"");
+                      }
+                      else sprintf(NamePrecision,"%s = %s",yyvsp[-2].nac,yyvsp[0].na);
+                   }
+break;
+case 209:
+#line 1346 "fortran.y"
+{
+                      strcpy(NamePrecision,yyvsp[0].nac);
+                   }
+break;
+case 210:
+#line 1350 "fortran.y"
+{
+                      strcpy(NamePrecision,yyvsp[0].nac);
+                   }
+break;
+case 211:
+#line 1354 "fortran.y"
+{strcpy(CharacterSize,yyvsp[0].na);
+                    strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 212:
+#line 1356 "fortran.y"
+{strcpy(CharacterSize,"*");
+                    strcpy(yyval.na,"*");}
+break;
+case 220:
+#line 1370 "fortran.y"
+{
+                      VariableIsParameter = 1;
+                   }
+break;
+case 222:
+#line 1375 "fortran.y"
+{Allocatabledeclare = 1;}
+break;
+case 223:
+#line 1377 "fortran.y"
+{
+                      dimsgiven=1;
+                      curdim=yyvsp[0].d;
+                   }
+break;
+case 224:
+#line 1382 "fortran.y"
+{ExternalDeclare = 1;}
+break;
+case 225:
+#line 1384 "fortran.y"
+{strcpy(IntentSpec,yyvsp[-1].nac);}
+break;
+case 227:
+#line 1386 "fortran.y"
+{optionaldeclare = 1 ;}
+break;
+case 228:
+#line 1387 "fortran.y"
+{pointerdeclare = 1 ;}
+break;
+case 229:
+#line 1388 "fortran.y"
+{
+/*                       if ( inmodulemeet == 1 )
+                       {*/
+                          SaveDeclare = 1 ;
+                     /*  }*/
+                    }
+break;
+case 231:
+#line 1396 "fortran.y"
+{strcpy(yyval.nac,yyvsp[0].nac);}
+break;
+case 232:
+#line 1397 "fortran.y"
+{strcpy(yyval.nac,yyvsp[0].nac);}
+break;
+case 233:
+#line 1398 "fortran.y"
+{strcpy(yyval.nac,yyvsp[0].nac); }
+break;
+case 234:
+#line 1401 "fortran.y"
+{PublicDeclare = 1;}
+break;
+case 235:
+#line 1403 "fortran.y"
+{PrivateDeclare = 1;}
+break;
+case 236:
+#line 1405 "fortran.y"
+{if ( created_dimensionlist == 1 )
+                       {
+                           yyval.d=(listdim *)NULL;
+                       }
+                   }
+break;
+case 237:
+#line 1411 "fortran.y"
+{if ( created_dimensionlist == 1 ||
+                         agrif_parentcall      == 1 ) yyval.d=yyvsp[-1].d;}
+break;
+case 238:
+#line 1414 "fortran.y"
+{if ( created_dimensionlist == 1 ||
+                         agrif_parentcall      == 1 ) yyval.d=insertdim(NULL,yyvsp[0].dim1);}
+break;
+case 239:
+#line 1417 "fortran.y"
+{if ( couldaddvariable == 1 )
+                         if ( created_dimensionlist == 1 ) yyval.d=insertdim(yyvsp[-2].d,yyvsp[0].dim1);}
+break;
+case 240:
+#line 1420 "fortran.y"
+{
+                      strcpy(yyval.dim1.first,"1");
+                      strcpy(yyval.dim1.last,yyvsp[0].na);
+                      Save_Length(yyvsp[0].na,1);
+                   }
+break;
+case 241:
+#line 1425 "fortran.y"
+{
+                      strcpy(yyval.dim1.first,"");
+                      strcpy(yyval.dim1.last,"");
+                   }
+break;
+case 242:
+#line 1429 "fortran.y"
+{
+                      strcpy(yyval.dim1.first,yyvsp[-1].na);
+                      Save_Length(yyvsp[-1].na,2);
+                      strcpy(yyval.dim1.last,"");
+                   }
+break;
+case 243:
+#line 1434 "fortran.y"
+{
+                      strcpy(yyval.dim1.first,"");
+                      strcpy(yyval.dim1.last,yyvsp[0].na);
+                      Save_Length(yyvsp[0].na,1);
+                   }
+break;
+case 244:
+#line 1440 "fortran.y"
+{
+                      strcpy(yyval.dim1.first,yyvsp[-2].na);
+                      Save_Length(yyvsp[-2].na,2);
+                      strcpy(yyval.dim1.last,yyvsp[0].na);
+                      Save_Length(yyvsp[0].na,1);
+                   }
+break;
+case 245:
+#line 1447 "fortran.y"
+{strcpy(yyval.na,"*");}
+break;
+case 246:
+#line 1448 "fortran.y"
+{strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 247:
+#line 1450 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 248:
+#line 1452 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"(%s)",yyvsp[-1].na);}
+break;
+case 249:
+#line 1454 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 250:
+#line 1456 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 251:
+#line 1460 "fortran.y"
+{sprintf(yyval.na,"SUM(%s)",yyvsp[-1].na);}
+break;
+case 252:
+#line 1462 "fortran.y"
+{sprintf(yyval.na,"MAX(%s)",yyvsp[-1].na);}
+break;
+case 253:
+#line 1464 "fortran.y"
+{sprintf(yyval.na,"TANH(%s)",yyvsp[-1].na);}
+break;
+case 254:
+#line 1466 "fortran.y"
+{sprintf(yyval.na,"MAXVAL(%s)",yyvsp[-1].na);}
+break;
+case 255:
+#line 1468 "fortran.y"
+{sprintf(yyval.na,"MIN(%s)",yyvsp[-1].na);}
+break;
+case 256:
+#line 1470 "fortran.y"
+{sprintf(yyval.na,"MINVAL(%s)",yyvsp[-1].na);}
+break;
+case 257:
+#line 1472 "fortran.y"
+{sprintf(yyval.na,"TRIM(%s)",yyvsp[-1].na);}
+break;
+case 258:
+#line 1474 "fortran.y"
+{sprintf(yyval.na,"SQRT(%s)",yyvsp[-1].na);}
+break;
+case 259:
+#line 1476 "fortran.y"
+{sprintf(yyval.na,"REAL(%s)",yyvsp[-1].na);}
+break;
+case 260:
+#line 1478 "fortran.y"
+{sprintf(yyval.na,"NINT(%s)",yyvsp[-1].na);}
+break;
+case 261:
+#line 1480 "fortran.y"
+{sprintf(yyval.na,"FLOAT(%s)",yyvsp[-1].na);}
+break;
+case 262:
+#line 1482 "fortran.y"
+{sprintf(yyval.na,"EXP(%s)",yyvsp[-1].na);}
+break;
+case 263:
+#line 1484 "fortran.y"
+{sprintf(yyval.na,"COS(%s)",yyvsp[-1].na);}
+break;
+case 264:
+#line 1486 "fortran.y"
+{sprintf(yyval.na,"COSH(%s)",yyvsp[-1].na);}
+break;
+case 265:
+#line 1488 "fortran.y"
+{sprintf(yyval.na,"ACOS(%s)",yyvsp[-1].na);}
+break;
+case 266:
+#line 1490 "fortran.y"
+{sprintf(yyval.na,"SIN(%s)",yyvsp[-1].na);}
+break;
+case 267:
+#line 1492 "fortran.y"
+{sprintf(yyval.na,"SINH(%s)",yyvsp[-1].na);}
+break;
+case 268:
+#line 1494 "fortran.y"
+{sprintf(yyval.na,"ASIN(%s)",yyvsp[-1].na);}
+break;
+case 269:
+#line 1496 "fortran.y"
+{sprintf(yyval.na,"LOG(%s)",yyvsp[-1].na);}
+break;
+case 270:
+#line 1498 "fortran.y"
+{sprintf(yyval.na,"TAN(%s)",yyvsp[-1].na);}
+break;
+case 271:
+#line 1500 "fortran.y"
+{sprintf(yyval.na,"ATAN(%s)",yyvsp[-1].na);}
+break;
+case 272:
+#line 1502 "fortran.y"
+{sprintf(yyval.na,"ABS(%s)",yyvsp[-1].na);}
+break;
+case 273:
+#line 1504 "fortran.y"
+{sprintf(yyval.na,"MOD(%s)",yyvsp[-1].na);}
+break;
+case 274:
+#line 1506 "fortran.y"
+{sprintf(yyval.na,"SIGN(%s)",yyvsp[-1].na);}
+break;
+case 275:
+#line 1508 "fortran.y"
+{sprintf(yyval.na,"MINLOC(%s)",yyvsp[-1].na);}
+break;
+case 276:
+#line 1510 "fortran.y"
+{sprintf(yyval.na,"MAXLOC(%s)",yyvsp[-1].na);}
+break;
+case 277:
+#line 1512 "fortran.y"
+{strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 278:
+#line 1514 "fortran.y"
+{if ( couldaddvariable == 1 )
+                   { strcpy(yyval.na,yyvsp[-2].na);strcat(yyval.na,",");strcat(yyval.na,yyvsp[0].na);}}
+break;
+case 279:
+#line 1517 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 280:
+#line 1519 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na,yyvsp[0].nac);}
+break;
+case 281:
+#line 1521 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 282:
+#line 1523 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s%s",yyvsp[-1].na,yyvsp[0].na);}
+break;
+case 283:
+#line 1525 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s%s",yyvsp[-1].nac,yyvsp[0].na);}
+break;
+case 284:
+#line 1527 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s%s",yyvsp[-1].nac,yyvsp[0].na);}
+break;
+case 285:
+#line 1529 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.nac,"+");}
+break;
+case 286:
+#line 1530 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.nac,"-");}
+break;
+case 287:
+#line 1533 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"+%s",yyvsp[0].na);}
+break;
+case 288:
+#line 1535 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"-%s",yyvsp[0].na);}
+break;
+case 289:
+#line 1537 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"*%s",yyvsp[0].na);}
+break;
+case 290:
+#line 1539 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s%s",yyvsp[-1].nac,yyvsp[0].na);}
+break;
+case 291:
+#line 1541 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s%s",yyvsp[-1].nac,yyvsp[0].na);}
+break;
+case 292:
+#line 1543 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s%s",yyvsp[-1].nac,yyvsp[0].na);}
+break;
+case 293:
+#line 1545 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s%s",yyvsp[-1].nac,yyvsp[0].na);}
+break;
+case 294:
+#line 1547 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na," > %s",yyvsp[0].na);}
+break;
+case 295:
+#line 1549 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s%s",yyvsp[-1].nac,yyvsp[0].na);}
+break;
+case 296:
+#line 1551 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na," < %s",yyvsp[0].na);}
+break;
+case 297:
+#line 1553 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s%s",yyvsp[-1].nac,yyvsp[0].na);}
+break;
+case 298:
+#line 1555 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na," >= %s",yyvsp[0].na);}
+break;
+case 299:
+#line 1557 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s%s",yyvsp[-1].nac,yyvsp[0].na);}
+break;
+case 300:
+#line 1559 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na," <= %s",yyvsp[0].na);}
+break;
+case 301:
+#line 1561 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s%s",yyvsp[-1].nac,yyvsp[0].na);}
+break;
+case 302:
+#line 1563 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s%s",yyvsp[-1].nac,yyvsp[0].na);}
+break;
+case 303:
+#line 1565 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s%s",yyvsp[-1].nac,yyvsp[0].na);}
+break;
+case 304:
+#line 1567 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s%s",yyvsp[-1].nac,yyvsp[0].na);}
+break;
+case 305:
+#line 1569 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s%s",yyvsp[-1].nac,yyvsp[0].na);}
+break;
+case 306:
+#line 1571 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s",yyvsp[0].na);}
+break;
+case 307:
+#line 1573 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s",yyvsp[0].na);}
+break;
+case 308:
+#line 1575 "fortran.y"
+{strcpy(yyval.na,"");}
+break;
+case 309:
+#line 1577 "fortran.y"
+{sprintf(yyval.na,"/%s",yyvsp[0].na);}
+break;
+case 310:
+#line 1579 "fortran.y"
+{sprintf(yyval.na,"/= %s",yyvsp[0].na);}
+break;
+case 311:
+#line 1581 "fortran.y"
+{sprintf(yyval.na,"//%s",yyvsp[0].na);}
+break;
+case 312:
+#line 1584 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"==%s",yyvsp[0].na);}
+break;
+case 313:
+#line 1586 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"= %s",yyvsp[0].na);}
+break;
+case 314:
+#line 1589 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na,yyvsp[0].nac);}
+break;
+case 315:
+#line 1591 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 316:
+#line 1593 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 317:
+#line 1595 "fortran.y"
+{
+                      agrif_parentcall =0;
+                      if (!strcasecmp(identcopy,"Agrif_Parent") )
+                                                            agrif_parentcall =1;
+                      if ( Agrif_in_Tok_NAME(identcopy) == 1 )
+                      {
+                         inagrifcallargument = 1;
+                         Add_SubroutineWhereAgrifUsed_1(subroutinename,
+                                                        curmodulename);
+                      }
+                   }
+break;
+case 318:
+#line 1608 "fortran.y"
+{
+                     strcpy(yyval.na,yyvsp[0].na);
+                     if ( incalldeclare == 0 ) inagrifcallargument = 0;
+                   }
+break;
+case 319:
+#line 1613 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na," %s %s ",yyvsp[-1].na,yyvsp[0].na);}
+break;
+case 320:
+#line 1615 "fortran.y"
+{if ( couldaddvariable == 1 )
+                                                sprintf(yyval.na," %s ( %s )",yyvsp[-3].na,yyvsp[-1].na);}
+break;
+case 321:
+#line 1618 "fortran.y"
+{if ( couldaddvariable == 1 )
+                                         sprintf(yyval.na," %s ( %s ) %s ",yyvsp[-4].na,yyvsp[-2].na,yyvsp[0].na);}
+break;
+case 322:
+#line 1622 "fortran.y"
+{
+                      if ( couldaddvariable == 1 )
+                      {
+                         sprintf(yyval.na," %s ( %s )",yyvsp[-3].nac,yyvsp[-1].na);
+                         ModifyTheAgrifFunction_0(yyvsp[-1].na);
+                         agrif_parentcall =0;
+                      }
+                   }
+break;
+case 323:
+#line 1632 "fortran.y"
+{
+                      sprintf(yyval.na," %s %% %s ",yyvsp[-2].na,yyvsp[0].na);
+                      if ( incalldeclare == 0 ) inagrifcallargument = 0;
+                   }
+break;
+case 324:
+#line 1638 "fortran.y"
+{sprintf(yyval.na,"(/%s/)",yyvsp[-1].na);}
+break;
+case 325:
+#line 1640 "fortran.y"
+{strcpy(yyval.na," ");}
+break;
+case 326:
+#line 1642 "fortran.y"
+{strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 327:
+#line 1644 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 328:
+#line 1646 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s,%s",yyvsp[-2].na,yyvsp[0].na);}
+break;
+case 329:
+#line 1648 "fortran.y"
+{strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 330:
+#line 1649 "fortran.y"
+{strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 331:
+#line 1652 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s :%s",yyvsp[-2].na,yyvsp[0].na);}
+break;
+case 332:
+#line 1654 "fortran.y"
+{if ( couldaddvariable == 1 )
+                                               sprintf(yyval.na,"%s :%s :%s",yyvsp[-4].na,yyvsp[-2].na,yyvsp[0].na);}
+break;
+case 333:
+#line 1657 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,":%s :%s",yyvsp[-2].na,yyvsp[0].na);}
+break;
+case 334:
+#line 1658 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,": : %s",yyvsp[0].na);}
+break;
+case 335:
+#line 1659 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,":%s",yyvsp[0].na);}
+break;
+case 336:
+#line 1660 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s :",yyvsp[-1].na);}
+break;
+case 337:
+#line 1661 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,":");}
+break;
+case 338:
+#line 1663 "fortran.y"
+{
+                       if ( couldaddvariable == 1 )
+                       {
+                       if ( Vartonumber(yyvsp[0].nac) == 1 )
+                       {
+                          Add_SubroutineWhereAgrifUsed_1(subroutinename,
+                                                        curmodulename);
+                       }
+                       if (!strcasecmp(yyvsp[0].nac,"Agrif_Parent") )
+                                                            agrif_parentcall =1;
+                       if ( VariableIsNotFunction(yyvsp[0].nac) == 0 )
+                       {
+                          if ( inagrifcallargument == 1 )
+                          {
+                             if ( !strcasecmp(yyvsp[0].nac,identcopy) )
+                             {
+                                strcpy(sameagrifname,identcopy);
+                                sameagrifargument = 1;
+                             }
+                          }
+                          strcpy(identcopy,yyvsp[0].nac);
+                          pointedvar=0;
+                          strcpy(truename,yyvsp[0].nac);
+                          if (variscoupled_0(yyvsp[0].nac)) strcpy(truename,getcoupledname_0(yyvsp[0].nac));
+/*
+                          if ( VarIsNonGridDepend($1) == 0 &&
+                               Variableshouldberemove($1) == 0 )
+                          {
+                             if ( inagrifcallargument == 1 ||
+                                  varisallocatable_0($1) == 1 ||
+                                  varispointer_0($1) == 1 )
+                             {
+                            if ((IsinListe(List_UsedInSubroutine_Var,$1) == 1) || (inagrifcallargument == 1))
+                             {
+                              if (varistyped_0($1) == 0)
+                                 {
+                                 ModifyTheVariableName_0($1);
+                                 }
+                                 }
+                                 else
+                                 {
+                                 }
+                             }
+                             if (variscoupled_0($1) == 1)
+                             {
+      printf("mla variable %s est couplee %s\n",$1,getcoupledname_0($1));
+                             ModifyTheVariableNamecoupled_0($1,getcoupledname_0($1));
+                             }
+                             if ( inagrifcallargument != 1 ||
+                                  sameagrifargument ==1 )
+                                  Add_UsedInSubroutine_Var_1($1);
+                          }
+                          NotifyAgrifFunction_0($1);
+*/
+                          if ( VarIsNonGridDepend(truename) == 0 &&
+                               Variableshouldberemove(truename) == 0 )
+                          {
+                             if ( inagrifcallargument == 1 ||
+                                  varisallocatable_0(truename) == 1 ||
+                                  varispointer_0(truename) == 1 )
+                             {
+                            if ((IsinListe(List_UsedInSubroutine_Var,yyvsp[0].nac) == 1) || (inagrifcallargument == 1))
+                             {
+                              if (varistyped_0(truename) == 0)
+                                 {
+                                 ModifyTheVariableName_0(truename,strlen(yyvsp[0].nac));
+                                 }
+                                 }
+                             }
+                             if ( inagrifcallargument != 1 ||
+                                  sameagrifargument ==1 )
+                                  Add_UsedInSubroutine_Var_1(truename);
+                          }
+                          NotifyAgrifFunction_0(truename);
+                       }
+                       }
+                    }
+break;
+case 339:
+#line 1742 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.nac,".TRUE.");}
+break;
+case 340:
+#line 1743 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.nac,".FALSE.");}
+break;
+case 341:
+#line 1744 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.nac,yyvsp[0].nac);}
+break;
+case 342:
+#line 1745 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.nac,yyvsp[0].nac);}
+break;
+case 343:
+#line 1746 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.nac,yyvsp[0].nac);}
+break;
+case 344:
+#line 1747 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.nac,yyvsp[0].nac);}
+break;
+case 345:
+#line 1749 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.nac,"%s%s",yyvsp[-1].nac,yyvsp[0].nac);}
+break;
+case 347:
+#line 1753 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.nac,yyvsp[0].nac);}
+break;
+case 349:
+#line 1756 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.nac,yyvsp[0].nac);}
+break;
+case 350:
+#line 1758 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.nac,yyvsp[0].nac);}
+break;
+case 351:
+#line 1760 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na," ");}
+break;
+case 352:
+#line 1761 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 353:
+#line 1764 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"(%s :%s)",yyvsp[-3].na,yyvsp[-1].na);}
+break;
+case 354:
+#line 1766 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na," ");}
+break;
+case 355:
+#line 1767 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 356:
+#line 1769 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na," ");}
+break;
+case 357:
+#line 1770 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 358:
+#line 1772 "fortran.y"
+{InitialValueGiven = 0;}
+break;
+case 359:
+#line 1774 "fortran.y"
+{
+                       if ( couldaddvariable == 1 )
+                       {
+                          strcpy(InitValue,yyvsp[0].na);
+                          InitialValueGiven = 1;
+                       }
+                    }
+break;
+case 360:
+#line 1782 "fortran.y"
+{pos_curinit = setposcur();}
+break;
+case 361:
+#line 1785 "fortran.y"
+{sprintf(yyval.na,"(%s,%s)",yyvsp[-3].na,yyvsp[-1].na);}
+break;
+case 362:
+#line 1788 "fortran.y"
+{
+                      if ( couldaddvariable == 1 )
+                      {
+                      /* if variables has been declared in a subroutine       */
+                      if (insubroutinedeclare == 1)
+                      {
+                         copyuse_0(yyvsp[0].nac);
+                      }
+                      sprintf(charusemodule,"%s",yyvsp[0].nac);
+                      Add_NameOfModuleUsed_1(yyvsp[0].nac);
+
+                      if ( inmoduledeclare == 0 )
+                      {
+                         pos_end = setposcur();
+                         RemoveWordSET_0(fortranout,pos_curuse,
+                                               pos_end-pos_curuse);
+                      }
+                      }
+                    }
+break;
+case 363:
+#line 1808 "fortran.y"
+{
+                       if ( couldaddvariable == 1 )
+                       {
+                      if (insubroutinedeclare == 1)
+                      {
+                         Add_CouplePointed_Var_1(yyvsp[-2].nac,yyvsp[0].lc);
+                      }
+                      if ( firstpass == 1 )
+                      {
+                         if ( insubroutinedeclare == 1 )
+                         {
+                            coupletmp = yyvsp[0].lc;
+                            strcpy(ligne,"");
+                            while ( coupletmp )
+                            {
+                               strcat(ligne,coupletmp->c_namevar);
+                               strcat(ligne," => ");
+                               strcat(ligne,coupletmp->c_namepointedvar);
+                               coupletmp = coupletmp->suiv;
+                               if ( coupletmp ) strcat(ligne,",");
+                            }
+                            sprintf(charusemodule,"%s",yyvsp[-2].nac);
+                         }
+                         Add_NameOfModuleUsed_1(yyvsp[-2].nac);
+                      }
+                      if ( inmoduledeclare == 0 )
+                      {
+                         pos_end = setposcur();
+                         RemoveWordSET_0(fortranout,pos_curuse,
+                                               pos_end-pos_curuse);
+                      }
+                      }
+                    }
+break;
+case 364:
+#line 1842 "fortran.y"
+{
+                       if ( couldaddvariable == 1 )
+                       {
+                      /* if variables has been declared in a subroutine       */
+                      if (insubroutinedeclare == 1)
+                      {
+                         copyuseonly_0(yyvsp[-4].nac);
+                      }
+                      sprintf(charusemodule,"%s",yyvsp[-4].nac);
+                      Add_NameOfModuleUsed_1(yyvsp[-4].nac);
+
+                       if ( inmoduledeclare == 0 )
+                       {
+                          pos_end = setposcur();
+                          RemoveWordSET_0(fortranout,pos_curuse,
+                                                pos_end-pos_curuse);
+                       }
+                       }
+                    }
+break;
+case 365:
+#line 1862 "fortran.y"
+{
+                       if ( couldaddvariable == 1 )
+                       {
+                       /* if variables has been declared in a subroutine      */
+                       if (insubroutinedeclare == 1)
+                       {
+                          Add_CouplePointed_Var_1(yyvsp[-4].nac,yyvsp[0].lc);
+                       }
+                       if ( firstpass == 1 )
+                       {
+                         if ( insubroutinedeclare == 1 )
+                         {
+                             coupletmp = yyvsp[0].lc;
+                             strcpy(ligne,"");
+                             while ( coupletmp )
+                             {
+                                strcat(ligne,coupletmp->c_namevar);
+                               if ( strcasecmp(coupletmp->c_namepointedvar,"") )
+                                                           strcat(ligne," => ");
+                                strcat(ligne,coupletmp->c_namepointedvar);
+                                coupletmp = coupletmp->suiv;
+                                if ( coupletmp ) strcat(ligne,",");
+                             }
+                             sprintf(charusemodule,"%s",yyvsp[-4].nac);
+                          }
+                          Add_NameOfModuleUsed_1(yyvsp[-4].nac);
+                       }
+                       if ( firstpass == 0 )
+                       {
+                          if ( inmoduledeclare == 0 )
+                          {
+
+                            pos_end = setposcur();
+                             RemoveWordSET_0(fortranout,pos_curuse,
+                                                   pos_end-pos_curuse);
+                       if (oldfortranout) 
+                         variableisglobalinmodule(yyvsp[0].lc,yyvsp[-4].nac,oldfortranout,pos_curuseold);
+                        
+                          }
+                          else
+                          {
+
+                             /* if we are in the module declare and if the    */
+                             /* onlylist is a list of global variable         */
+                             variableisglobalinmodule(yyvsp[0].lc, yyvsp[-4].nac, fortranout,pos_curuse);
+                          }
+                       }
+                       }
+                    }
+break;
+case 366:
+#line 1913 "fortran.y"
+{
+                      pos_curuse = setposcur()-strlen(yyvsp[0].nac);
+                     if (firstpass == 0 && oldfortranout) {
+                     pos_curuseold = setposcurname(oldfortranout);
+                     }
+                   }
+break;
+case 367:
+#line 1921 "fortran.y"
+{strcpy(yyval.nac,yyvsp[0].nac);}
+break;
+case 368:
+#line 1924 "fortran.y"
+{
+                       if ( couldaddvariable == 1 ) yyval.lc = yyvsp[0].lc;
+                    }
+break;
+case 369:
+#line 1928 "fortran.y"
+{
+                        if ( couldaddvariable == 1 )
+                        {
+                        /* insert the variable in the list $1                 */
+                        yyvsp[0].lc->suiv = yyvsp[-2].lc;
+                        yyval.lc = yyvsp[0].lc;
+                        }
+                    }
+break;
+case 370:
+#line 1938 "fortran.y"
+{
+                       coupletmp =(listcouple *)malloc(sizeof(listcouple));
+                       strcpy(coupletmp->c_namevar,yyvsp[-2].nac);
+                       Save_Length(yyvsp[-2].nac,21);
+                       strcpy(coupletmp->c_namepointedvar,yyvsp[0].nac);
+                       Save_Length(yyvsp[0].nac,22);
+                       coupletmp->suiv = NULL;
+                       yyval.lc = coupletmp;
+                     }
+break;
+case 371:
+#line 1949 "fortran.y"
+{
+                       if ( couldaddvariable == 1 ) yyval.lc = yyvsp[0].lc;
+                    }
+break;
+case 372:
+#line 1953 "fortran.y"
+{
+                        if ( couldaddvariable == 1 )
+                        {
+                        /* insert the variable in the list $1                 */
+                        yyvsp[0].lc->suiv = yyvsp[-2].lc;
+                        yyval.lc = yyvsp[0].lc;
+                        }
+                    }
+break;
+case 373:
+#line 1963 "fortran.y"
+{
+                       coupletmp =(listcouple *)malloc(sizeof(listcouple));
+                       strcpy(coupletmp->c_namevar,yyvsp[-2].nac);
+                       Save_Length(yyvsp[-2].nac,21);
+                       strcpy(coupletmp->c_namepointedvar,yyvsp[0].nac);
+                       Save_Length(yyvsp[0].nac,22);
+                       coupletmp->suiv = NULL;
+                       yyval.lc = coupletmp;
+                       pointedvar=1;
+                       Add_UsedInSubroutine_Var_1(yyvsp[-2].nac);
+                    }
+break;
+case 374:
+#line 1974 "fortran.y"
+{
+                       coupletmp =(listcouple *)malloc(sizeof(listcouple));
+                       strcpy(coupletmp->c_namevar,yyvsp[0].nac);
+                       Save_Length(yyvsp[0].nac,21);
+                       strcpy(coupletmp->c_namepointedvar,"");
+                       coupletmp->suiv = NULL;
+                       yyval.lc = coupletmp;
+                     }
+break;
+case 376:
+#line 1985 "fortran.y"
+{
+                         Add_SubroutineWhereAgrifUsed_1(subroutinename,
+                                                        curmodulename);
+                                                        inallocate = 0;
+                     }
+break;
+case 377:
+#line 1991 "fortran.y"
+{
+                          Add_SubroutineWhereAgrifUsed_1(subroutinename,
+                                                         curmodulename);
+                                                         inallocate = 0;
+                     }
+break;
+case 379:
+#line 1998 "fortran.y"
+{
+                       GlobalDeclaration = 0 ;
+                       if ( firstpass == 0 &&
+                            strcasecmp(subroutinename,"") )
+                       {
+                          if ( module_declar && insubroutinedeclare == 0 )
+                          {
+                              fclose(module_declar);
+                          }
+                       }
+                       if ( couldaddvariable == 1 &&
+                            strcasecmp(subroutinename,"") )
+                       {
+                       if ( inmodulemeet == 1 )
+                       {
+                         /* we are in a module                                */
+                         if ( insubroutinedeclare == 1 )
+                         {
+                            /* it is like an end subroutine <name>            */
+                            insubroutinedeclare = 0 ;
+                            /*                                                */
+                            pos_cur = setposcur();
+                            closeandcallsubloopandincludeit_0(1);
+                            functiondeclarationisdone = 0;
+                         }
+                         else
+                         {
+                            /* it is like an end module <name>                */
+                            inmoduledeclare = 0 ;
+                            inmodulemeet = 0 ;
+                         }
+                       }
+                       else
+                       {
+                          insubroutinedeclare = 0;
+                          /*                                                  */
+                          pos_cur = setposcur();                        
+                          closeandcallsubloopandincludeit_0(2);
+                            functiondeclarationisdone = 0;
+                          if ( firstpass == 0 )
+                          {
+                             if ( retour77 == 0 ) fprintf(paramout,"!\n");
+                             else fprintf(paramout,"C\n");
+                             fclose(paramout);
+                           }
+                        }
+                      }
+                      strcpy(subroutinename,"");
+                    }
+break;
+case 380:
+#line 2048 "fortran.y"
+{
+                       if ( couldaddvariable == 1 )
+                       {
+                       insubroutinedeclare = 0;
+                       /*                                                     */
+                       pos_cur = setposcur();                      
+                       closeandcallsubloopandincludeit_0(3);
+                            functiondeclarationisdone = 0;
+                      if ( firstpass == 0 )
+                      {
+                         if ( retour77 == 0 ) fprintf(paramout,"!\n");
+                         else fprintf(paramout,"C\n");
+                         fclose(paramout);
+                      }
+                      strcpy(subroutinename,"");
+                      }
+                    }
+break;
+case 381:
+#line 2066 "fortran.y"
+{
+                       if ( couldaddvariable == 1 &&
+                            strcasecmp(subroutinename,"") )
+                       {
+                       insubroutinedeclare = 0;
+                       /*                                                     */
+                       pos_cur = setposcur();
+                                             
+                       closeandcallsubloopandincludeit_0(1);
+                            functiondeclarationisdone = 0;
+                      if ( firstpass == 0 )
+                      {
+                         if ( retour77 == 0 ) fprintf(paramout,"!\n");
+                         else fprintf(paramout,"C\n");
+                         fclose(paramout);
+                      }
+                      strcpy(subroutinename,"");
+                      }
+                    }
+break;
+case 382:
+#line 2086 "fortran.y"
+{
+                       if ( couldaddvariable == 1 )
+                       {
+                       insubroutinedeclare = 0;
+                       /*                                                     */
+                       pos_cur = setposcur();
+
+                       closeandcallsubloopandincludeit_0(0);
+                            functiondeclarationisdone = 0;
+                      if ( firstpass == 0 )
+                      {
+                         if ( retour77 == 0 ) fprintf(paramout,"!\n");
+                         else fprintf(paramout,"C\n");
+                         fclose(paramout);
+                      }
+                      strcpy(subroutinename,"");
+                      }
+                    }
+break;
+case 383:
+#line 2105 "fortran.y"
+{
+                       if ( couldaddvariable == 1 )
+                       {
+                       /* if we never meet the contains keyword               */
+                      Remove_Word_end_module_0(strlen(yyvsp[0].nac));
+                       if ( inmoduledeclare == 1 )
+                       {
+                          if ( aftercontainsdeclare == 0 )
+                          {
+                             Write_GlobalParameter_Declaration_0();
+                             Write_NotGridDepend_Declaration_0();
+                             Write_GlobalType_Declaration_0();
+                             Write_Alloc_Subroutine_For_End_0();
+                          }
+                       }
+                                           
+                       inmoduledeclare = 0 ;
+                       inmodulemeet = 0 ;
+
+                      Write_Word_end_module_0();
+                      strcpy(curmodulename,"");
+                      aftercontainsdeclare = 1;
+                      if ( firstpass == 0 )
+                      {
+                         if ( module_declar && insubroutinedeclare == 0)
+                         {
+                           fclose(module_declar);
+                         }
+                      }
+                      GlobalDeclaration = 0 ;
+                      }
+                  }
+break;
+case 397:
+#line 2151 "fortran.y"
+{
+                      if (inmoduledeclare == 1 )
+                      {
+                         Remove_Word_Contains_0();
+                         Write_GlobalParameter_Declaration_0();
+                         Write_GlobalType_Declaration_0();
+                         Write_NotGridDepend_Declaration_0();
+                         Write_Alloc_Subroutine_0();
+                         inmoduledeclare = 0 ;
+                         aftercontainsdeclare = 1;
+                      }
+                      else
+                      {
+                       if ( couldaddvariable == 1 )
+                       {
+                          if ( firstpass == 1 ) List_ContainsSubroutine =
+                                                Addtolistnom(subroutinename,
+                                                     List_ContainsSubroutine,0);
+                          insubroutinedeclare = 0;
+                          /*                                                  */
+
+                          closeandcallsubloop_contains_0();
+                            functiondeclarationisdone = 0;
+                         if ( firstpass == 0 )
+                         {
+                            if ( retour77 == 0 ) fprintf(paramout,"!\n");
+                            else fprintf(paramout,"C\n");
+                            fclose(paramout);
+                         }
+                         }
+                         strcpy(subroutinename,"");
+                      }
+                   }
+break;
+case 398:
+#line 2186 "fortran.y"
+{
+                      if ( couldaddvariable == 1 )
+                      {
+                       strcpy(yyval.nac,yyvsp[0].nac);
+                       pos_endsubroutine = setposcur()-strlen(yyvsp[0].nac);
+                       functiondeclarationisdone = 0;
+                       }
+                    }
+break;
+case 399:
+#line 2196 "fortran.y"
+{
+                      if ( couldaddvariable == 1 )
+                      {
+                       strcpy(yyval.nac,yyvsp[0].nac);
+                       pos_endsubroutine = setposcur()-strlen(yyvsp[0].nac);
+                       }
+                    }
+break;
+case 400:
+#line 2205 "fortran.y"
+{
+                      if ( couldaddvariable == 1 )
+                      {
+                       strcpy(yyval.nac,yyvsp[0].nac);
+                       pos_endsubroutine = setposcur()-strlen(yyvsp[0].nac);
+                       }
+                    }
+break;
+case 401:
+#line 2214 "fortran.y"
+{
+                      if ( couldaddvariable == 1 )
+                      {
+                       strcpy(yyval.nac,yyvsp[0].nac);
+                       pos_endsubroutine = setposcur()-strlen(yyvsp[0].nac);
+                       }
+                    }
+break;
+case 413:
+#line 2236 "fortran.y"
+{strcpy(yyval.nac,"");}
+break;
+case 414:
+#line 2237 "fortran.y"
+{strcpy(yyval.nac,yyvsp[0].nac);}
+break;
+case 426:
+#line 2257 "fortran.y"
+{
+                          Add_SubroutineWhereAgrifUsed_1(subroutinename,
+                                                        curmodulename);
+                                                        inallocate = 0;
+                     }
+break;
+case 427:
+#line 2263 "fortran.y"
+{
+                          Add_SubroutineWhereAgrifUsed_1(subroutinename,
+                                                        curmodulename);
+                                                        inallocate = 0;
+                     }
+break;
+case 433:
+#line 2274 "fortran.y"
+{if ( couldaddvariable == 1 ) created_dimensionlist = 0;}
+break;
+case 434:
+#line 2276 "fortran.y"
+{
+                  created_dimensionlist = 1;
+                  if  ( agrif_parentcall == 1 )
+                  {
+                      ModifyTheAgrifFunction_0(yyvsp[-1].d->dim.last);
+                      agrif_parentcall =0;
+                      fprintf(fortranout," = ");
+                  }
+              }
+break;
+case 435:
+#line 2286 "fortran.y"
+{created_dimensionlist = 1;}
+break;
+case 440:
+#line 2294 "fortran.y"
+{
+                      inagrifcallargument = 0 ;
+                      incalldeclare=0;
+                      if ( oldfortranout &&
+                           !strcasecmp(meetagrifinitgrids,subroutinename) &&
+                           firstpass == 0 &&
+                           callmpiinit == 1)
+                      {
+                      /*   pos_end = setposcur();
+                         RemoveWordSET_0(fortranout,pos_curcall,
+                                               pos_end-pos_curcall);
+                         fprintf(oldfortranout,"      Call MPI_Init (%s) \n"
+                                                                   ,mpiinitvar);*/
+                      }
+                      if ( oldfortranout           &&
+                           callagrifinitgrids == 1 &&
+                           firstpass == 0 )
+                      {
+                         pos_end = setposcur();
+                         RemoveWordSET_0(fortranout,pos_curcall,
+                                               pos_end-pos_curcall);
+
+                         strcpy(subofagrifinitgrids,subroutinename);
+                      }
+                      Instanciation_0(sameagrifname);
+                   }
+break;
+case 445:
+#line 2328 "fortran.y"
+{
+                       if (!strcasecmp(yyvsp[0].nac,"MPI_Init") )
+                       {
+                          callmpiinit = 1;
+                       }
+                       else
+                       {
+                          callmpiinit = 0;
+                       }
+                       if (!strcasecmp(yyvsp[0].nac,"Agrif_Init_Grids") )
+                       {
+                          callagrifinitgrids = 1;
+                          strcpy(meetagrifinitgrids,subroutinename);
+                       }
+                       else callagrifinitgrids = 0;
+                       if ( !strcasecmp(yyvsp[0].nac,"Agrif_Open_File") )
+                       {
+                          Add_SubroutineWhereAgrifUsed_1(subroutinename,
+                                                        curmodulename);
+                       }
+                       if ( Vartonumber(yyvsp[0].nac) == 1 )
+                       {
+                          incalldeclare=1;
+                          inagrifcallargument = 1 ;
+                          Add_SubroutineWhereAgrifUsed_1(subroutinename,
+                                                        curmodulename);
+                       }
+                    }
+break;
+case 446:
+#line 2358 "fortran.y"
+{pos_curcall=setposcur()-4;}
+break;
+case 449:
+#line 2363 "fortran.y"
+{
+                  if ( callmpiinit == 1 )
+                  {
+                     strcpy(mpiinitvar,yyvsp[0].na);
+                     if ( firstpass == 1 )
+                     {
+                        Add_UsedInSubroutine_Var_1 (mpiinitvar);
+/*                        curvar=createvar($1,NULL);
+                        curlistvar=insertvar(NULL,curvar);
+                        List_Subr outineArgument_Var = AddListvarToListvar
+                         (curlistvar,List_SubroutineAr gument_Var,1);*/
+                     }
+                  }
+               }
+break;
+case 528:
+#line 2485 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 529:
+#line 2486 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 530:
+#line 2487 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 531:
+#line 2490 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s,%s",yyvsp[-2].na,yyvsp[0].na);}
+break;
+case 532:
+#line 2492 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s,%s",yyvsp[-2].na,yyvsp[0].na);}
+break;
+case 533:
+#line 2494 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s,%s",yyvsp[-2].na,yyvsp[0].na);}
+break;
+case 534:
+#line 2496 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s,%s",yyvsp[-2].na,yyvsp[0].na);}
+break;
+case 535:
+#line 2498 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s,%s",yyvsp[-2].na,yyvsp[0].na);}
+break;
+case 536:
+#line 2500 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"%s,%s",yyvsp[-2].na,yyvsp[0].na);}
+break;
+case 537:
+#line 2501 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 538:
+#line 2502 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 539:
+#line 2505 "fortran.y"
+{if ( couldaddvariable == 1 ) strcpy(yyval.na,yyvsp[0].na);}
+break;
+case 540:
+#line 2507 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na," (%s)",yyvsp[-1].na);}
+break;
+case 541:
+#line 2509 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"(%s,%s)",yyvsp[-3].na,yyvsp[-1].na);}
+break;
+case 542:
+#line 2511 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"(%s,%s)",yyvsp[-3].na,yyvsp[-1].na);}
+break;
+case 543:
+#line 2513 "fortran.y"
+{if ( couldaddvariable == 1 ) sprintf(yyval.na,"(%s,%s)",yyvsp[-3].na,yyvsp[-1].na);}
+break;
+case 544:
+#line 2517 "fortran.y"
+{if ( couldaddvariable == 1 )
+                                              sprintf(yyval.na,"%s=%s,%s)",yyvsp[-4].nac,yyvsp[-2].na,yyvsp[0].na);}
+break;
+case 545:
+#line 2520 "fortran.y"
+{if ( couldaddvariable == 1 )
+                                        sprintf(yyval.na,"%s=%s,%s,%s)",yyvsp[-6].nac,yyvsp[-4].na,yyvsp[-2].na,yyvsp[0].na);}
+break;
+case 554:
+#line 2536 "fortran.y"
+{Add_Allocate_Var_1(yyvsp[0].nac,curmodulename);}
+break;
+case 557:
+#line 2541 "fortran.y"
+{Add_Allocate_Var_1(yyvsp[-3].nac,curmodulename);}
+break;
+case 571:
+#line 2564 "fortran.y"
+{strcpy(yyval.nac,yyvsp[0].nac);}
+break;
+#line 9558 "y.tab.c"
+    }
+    yyssp -= yym;
+    yystate = *yyssp;
+    yyvsp -= yym;
+    yym = yylhs[yyn];
+    if (yystate == 0 && yym == 0)
+    {
+#if YYDEBUG
+        if (yydebug)
+            printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+        yystate = YYFINAL;
+        *++yyssp = YYFINAL;
+        *++yyvsp = yyval;
+        if (yychar < 0)
+        {
+            if ((yychar = yylex()) < 0) yychar = 0;
+#if YYDEBUG
+            if (yydebug)
+            {
+                yys = 0;
+                if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+                if (!yys) yys = "illegal-symbol";
+                printf("%sdebug: state %d, reading %d (%s)\n",
+                        YYPREFIX, YYFINAL, yychar, yys);
+            }
+#endif
+        }
+        if (yychar == 0) goto yyaccept;
+        goto yyloop;
+    }
+    if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+            yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+        yystate = yytable[yyn];
+    else
+        yystate = yydgoto[yym];
+#if YYDEBUG
+    if (yydebug)
+        printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yyssp, yystate);
+#endif
+    if (yyssp >= yyss + yystacksize - 1)
+    {
+        goto yyoverflow;
+    }
+    *++yyssp = yystate;
+    *++yyvsp = yyval;
+    goto yyloop;
+yyoverflow:
+    yyerror("yacc stack overflow");
+yyabort:
+    return (1);
+yyaccept:
+    return (0);
+}
Index: /vendors/AGRIF/r_00/LIB/fortran.y
===================================================================
--- /vendors/AGRIF/r_00/LIB/fortran.y	(revision 1902)
+++ /vendors/AGRIF/r_00/LIB/fortran.y	(revision 1902)
@@ -0,0 +1,2674 @@
+/******************************************************************************/
+/*                                                                            */
+/*     CONV (converter) for Agrif (Adaptive Grid Refinement In Fortran)       */
+/*                                                                            */
+/* Copyright or   or Copr. Laurent Debreu (Laurent.Debreu@imag.fr)            */
+/*                        Cyril Mazauric (Cyril_Mazauric@yahoo.fr)            */
+/* This software is governed by the CeCILL-C license under French law and     */
+/* abiding by the rules of distribution of free software.  You can  use,      */
+/* modify and/ or redistribute the software under the terms of the CeCILL-C   */
+/* license as circulated by CEA, CNRS and INRIA at the following URL          */
+/* "http ://www.cecill.info".                                                  */
+/*                                                                            */
+/* As a counterpart to the access to the source code and  rights to copy,     */
+/* modify and redistribute granted by the license, users are provided only    */
+/* with a limited warranty  and the software's author,  the holder of the     */
+/* economic rights,  and the successive licensors  have only  limited         */
+/* liability.                                                                 */
+/*                                                                            */
+/* In this respect, the user's attention is drawn to the risks associated     */
+/* with loading,  using,  modifying and/or developing or reproducing the      */
+/* software by the user in light of its specific status of free software,     */
+/* that may mean  that it is complicated to manipulate,  and  that  also      */
+/* therefore means  that it is reserved for developers  and  experienced      */
+/* professionals having in-depth computer knowledge. Users are therefore      */
+/* encouraged to load and test the software's suitability as regards their    */
+/* requirements in conditions enabling the security of their systems and/or   */
+/* data to be ensured and,  more generally, to use and operate it in the      */
+/* same conditions as regards security.                                       */
+/*                                                                            */
+/* The fact that you are presently reading this means that you have had       */
+/* knowledge of the CeCILL-C license and that you accept its terms.           */
+/******************************************************************************/
+/* version 1.7                                                                */
+/******************************************************************************/
+%{
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include "decl.h"
+extern int line_num_fortran;
+extern int line_num_fortran_common;
+char *tmp;
+char c_selectorname[LONG_C];
+char ligne[LONG_C];
+char truename[LONGNOM];
+char identcopy[LONG_C];
+int c_selectorgiven=0;
+int incom;
+listvar *curlistvar;
+typedim c_selectordim;
+listcouple *coupletmp;
+listdim *parcoursdim;
+int removeline=0;
+listvar *test;
+%}
+
+%union {
+       char      nac[LONG_C];
+       char      na[LONGNOM];
+       listdim  *d;
+       listvar  *l;
+       listnom  *ln;
+       listcouple  *lc;
+       listname *lnn;
+       typedim   dim1;
+       variable *v;
+       }
+
+%left ','
+%nonassoc ':'
+%right '='
+%left TOK_BINARY_OP
+%left TOK_EQV TOK_NEQV
+%left TOK_OR TOK_XOR
+%left TOK_AND
+%left TOK_NOT
+%nonassoc TOK_LT TOK_GT TOK_LE TOK_GE TOK_EQ TOK_NE
+%nonassoc TOK_UNARY_OP
+%left TOK_DSLASH
+%left '+' '-'
+%left '*' TOK_SLASH
+%right TOK_DASTER
+
+%token TOK_SEP
+%token TOK_SEMICOLON
+%token TOK_NEXTLINE
+%token TOK_PARAMETER
+%token TOK_RESULT
+%token TOK_ONLY
+%token TOK_INCLUDE
+%token TOK_SUBROUTINE
+%token TOK_PROGRAM
+%token TOK_FUNCTION
+%token TOK_OMP
+%token TOK_DOLLAR
+%token TOK_FORMAT
+%token TOK_MAX
+%token TOK_TANH
+%token TOK_WHERE
+%token TOK_ELSEWHERE
+%token TOK_ENDWHERE
+%token TOK_MAXVAL
+%token TOK_TRIM
+%token TOK_SUM
+%token TOK_SQRT
+%token TOK_CASE
+%token TOK_SELECTCASE
+%token TOK_FILE
+%token TOK_END
+%token TOK_ERR
+%token TOK_DONOTTREAT
+%token TOK_ENDDONOTTREAT
+%token TOK_EXIST
+%token TOK_MIN
+%token TOK_FLOAT
+%token TOK_EXP
+%token TOK_COS
+%token TOK_COSH
+%token TOK_ACOS
+%token TOK_NINT
+%token TOK_CYCLE
+%token TOK_SIN
+%token TOK_SINH
+%token TOK_ASIN
+%token TOK_EQUIVALENCE
+%token TOK_BACKSPACE
+%token TOK_LOG
+%token TOK_TAN
+%token TOK_ATAN
+%token TOK_RECURSIVE
+%token TOK_ABS
+%token TOK_MOD
+%token TOK_SIGN
+%token TOK_MINLOC
+%token TOK_MAXLOC
+%token TOK_EXIT
+%token TOK_MINVAL
+%token TOK_PUBLIC
+%token TOK_PRIVATE
+%token TOK_ALLOCATABLE
+%token TOK_RETURN
+%token TOK_THEN
+%token TOK_ELSEIF
+%token TOK_ELSE
+%token TOK_ENDIF
+%token TOK_PRINT
+%token TOK_PLAINGOTO
+%token TOK_CONSTRUCTID
+%token TOK_LOGICALIF
+%token TOK_PLAINDO
+%token TOK_CONTAINS
+%token TOK_ENDDO
+%token TOK_MODULE
+%token TOK_ENDMODULE
+%token TOK_DOWHILE
+%token TOK_ALLOCATE
+%token TOK_OPEN
+%token TOK_CLOSE
+%token TOK_INQUIRE
+%token TOK_WRITE
+%token TOK_READ
+%token TOK_REWIND
+%token TOK_DEALLOCATE
+%token TOK_NULLIFY
+%token TOK_FIN
+%token TOK_DEBUT
+%token TOK_DIMENSION
+%token TOK_ENDSELECT
+%token TOK_EXTERNAL
+%token TOK_INTENT
+%token TOK_INTRINSIC
+%token TOK_NAMELIST
+%token TOK_CASEDEFAULT
+%token TOK_OPTIONAL
+%token TOK_POINTER
+%token TOK_CONTINUE
+%token TOK_SAVE
+%token TOK_TARGET
+%token TOK_QUOTE
+%token TOK_IMPLICIT
+%token TOK_NONE
+%token TOK_CALL
+%token TOK_STAT
+%token TOK_POINT_TO
+%token TOK_COMMON
+%token TOK_GLOBAL
+%token TOK_INTERFACE
+%token TOK_ENDINTERFACE
+%token TOK_LEFTAB
+%token TOK_RIGHTAB
+%token TOK_PAUSE
+%token TOK_PROCEDURE
+%token TOK_STOP
+%token TOK_NAMEEQ
+%token TOK_REAL8
+%token <nac> TOK_OUT
+%token <nac> TOK_INOUT
+%token <nac> TOK_IN
+%token <nac> TOK_USE
+%token <nac> TOK_DSLASH
+%token <nac> TOK_DASTER
+%token <nac> TOK_EQ
+%token <nac> TOK_EQV
+%token <nac> TOK_GT
+%token <nac> TOK_LT
+%token <nac> TOK_GE
+%token <nac> TOK_NE
+%token <nac> TOK_NEQV
+%token <nac> TOK_LE
+%token <nac> TOK_OR
+%token <nac> TOK_XOR
+%token <nac> TOK_NOT
+%token <nac> TOK_AND
+%token <nac> TOK_TRUE
+%token <nac> TOK_FALSE
+%token <nac> TOK_LABEL
+%token <nac> TOK_TYPE
+%token <nac> TOK_TYPEPAR
+%token <nac> TOK_ENDTYPE
+%token <nac> TOK_REAL
+%token <nac> TOK_INTEGER
+%token <nac> TOK_LOGICAL
+%token <nac> TOK_DOUBLEPRECISION
+%token <nac> TOK_DOUBLEREAL
+%token <nac> TOK_ENDSUBROUTINE
+%token <nac> TOK_ENDFUNCTION
+%token <nac> TOK_ENDPROGRAM
+%token <nac> TOK_ENDUNIT
+%token <nac> TOK_CHARACTER
+%token <nac> TOK_CHAR_CONSTANT
+%token <nac> TOK_CHAR_CUT
+%token <nac> TOK_DATA
+%token <nac> TOK_CHAR_INT
+%token <nac> TOK_CHAR_MESSAGE
+%token <nac> TOK_CSTREAL
+%token <nac> TOK_CSTREALDP
+%token <nac> TOK_CSTREALQP
+%token <nac> TOK_SFREAL
+%token <nac> TOK_COMPLEX
+%token <nac> TOK_DOUBLECOMPLEX
+%token <nac> TOK_NAME
+%token <nac> TOK_NAME_CHAR
+%token <nac> TOK_PROBTYPE  /* dimension of the problem                        */
+%token <nac> TOK_INTERPTYPE/* kind of interpolation                           */
+%token <nac> TOK_VARTYPE   /* posit ion of the grid variable on the cells of  */
+                          /*     the mesh                                     */
+%token <nac> TOK_SLASH
+%token <nac> TOK_BC        /* calculation of the boundary conditions           */
+%token <nac> TOK_OP
+%token <nac> TOK_CSTINT
+%token <nac> TOK_COMMENT
+%token <nac> TOK_FILENAME
+%token ','
+%token ':'
+%token '('
+%token ')'
+%token '['
+%token ']'
+%token '!'
+%token '_'
+%token '<'
+%token '>'
+%type <l> dcl
+%type <l> after_type
+%type <l> dimension
+%type <l> paramlist
+%type <l> args
+%type <l> arglist
+%type <lc> only_list
+%type <lc> only_name
+%type <lc> rename_list
+%type <lc> rename_name
+%type <d> dims
+%type <d> dimlist
+%type <dim1> dim
+%type <v> paramitem
+%type <nac> comblock
+%type <nac> name_routine
+%type <nac> module_name
+%type <nac> opt_name
+%type <nac> type
+%type <nac> word_endsubroutine
+%type <nac> word_endfunction
+%type <nac> word_endprogram
+%type <nac> word_endunit
+%type <nac> typename
+%type <nac> typespec
+%type <nac> string_constant
+%type <nac> simple_const
+%type <nac> ident
+%type <nac> do_var
+%type <nac> intent_spec
+%type <nac> signe
+%type <nac> opt_signe
+%type <nac> filename
+%type <na> attribute
+%type <na> complex_const
+%type <na> begin_array
+%type <na> clause
+%type <na> arg
+%type <na> uexpr
+%type <na> minmaxlist
+%type <na> lhs
+%type <na> vec
+%type <na> outlist
+%type <na> out2
+%type <na> other
+%type <na> dospec
+%type <na> expr_data
+%type <na> structure_component
+%type <na> array_ele_substring_func_ref
+%type <na> funarglist
+%type <na> funarg
+%type <na> funargs
+%type <na> triplet
+%type <na> substring
+%type <na> opt_substring
+%type <na> opt_expr
+%type <na> optexpr
+%type <na> datavallist
+%type <na> after_slash
+%type <na> after_equal
+%type <na> predefinedfunction
+%type <na> expr
+%type <na> ubound
+%type <na> operation
+%type <na> proper_lengspec
+%type <lnn> use_name_list
+%type <lnn> public
+
+%left TOK_OP
+%%
+input :
+      | input line
+      ;
+line :  '\n' position
+      | thislabel suite_line_list
+      | TOK_COMMENT
+      | keyword cmnt writedeclar
+      | error writedeclar nulcurbuf
+                   {yyerrok;yyclearin;}
+      ;
+suite_line_list : suite_line
+      |   suite_line_list TOK_SEMICOLON suite_line
+      ;
+suite_line : entry fin_line  /* subroutine, function, module                    */
+      | spec fin_line      /* declaration                                     */
+      | before_include filename fin_line
+                  {
+                     if (inmoduledeclare == 0 )
+                     {
+                        pos_end = setposcur();
+                        RemoveWordSET_0(fortranout,pos_curinclude,
+                                              pos_end-pos_curinclude);
+                     }
+                  }
+      | exec cmnt writedeclar /* if, do etc ...                               */
+      | instr fin_line    /* instruction ident  : do i = 1 ...                */
+      ;
+instr : ident ':'
+      ;
+fin_line : position cmnt
+      ;
+keyword : TOK_DONOTTREAT
+         {
+            /* we should ignore the declaration until the keyword             */
+            /*    TOK_ENDDONOTTREAT                                           */
+            couldaddvariable = 0 ;
+            RemoveWordCUR_0(fortranout,-20,20);
+         }
+      | TOK_ENDDONOTTREAT
+         {
+             couldaddvariable = 1 ;
+             RemoveWordCUR_0(fortranout,-24,24);
+          }
+      | TOK_OMP
+      | TOK_DOLLAR
+      ;
+position : {pos_cur = setposcur();}
+      ;
+thislabel :
+      | TOK_LABEL nulcurbuf
+      ;
+cmnt :
+      | TOK_COMMENT
+      ;
+incomment :
+                   {incom = 1;}
+      ;
+nulcurbuf :
+                   {if (incom !=1) {strcpy(curbuf,"");incom=0;}}
+      ;
+opt_recursive :
+      | TOK_RECURSIVE
+      ;
+entry :
+      | opt_recursive TOK_SUBROUTINE name_routine arglist
+                   {
+                      if ( couldaddvariable == 1 )
+                      {
+                      /* open param file                                      */
+                      if ( firstpass == 0 )
+                      {
+                         sprintf(ligne,"%s/ParamFile%s.h",nomdir,$3);
+                         paramout=fopen(ligne,"w");
+                         if ( retour77 == 0 ) fprintf(paramout,"!\n");
+                         else fprintf(paramout,"C\n");
+
+                      }
+                      Add_SubroutineArgument_Var_1($4);
+                      if ( inmodulemeet == 1 )
+                      {
+                         insubroutinedeclare = 1;
+                         /* in the second step we should write the head of    */
+                         /*    the subroutine sub_loop_<subroutinename>       */
+                         writeheadnewsub_0(1);
+                      }
+                      else
+                      {
+                            insubroutinedeclare = 1;
+                            writeheadnewsub_0(1);
+                      }
+                      }
+                   }
+      | TOK_PROGRAM name_routine
+                   {
+                      /* open param file                                      */
+                      if ( firstpass == 0 )
+                      {
+                         sprintf(ligne,"%s/ParamFile%s.h",nomdir,$2);
+                         paramout=fopen(ligne,"w");
+                         if ( retour77 == 0 ) fprintf(paramout,"!\n");
+                         else fprintf(paramout,"C\n");
+
+                      }
+                      strcpy(subroutinename,$2);
+                      /* Common case                                          */
+                      insubroutinedeclare = 1;
+                      /* in the second step we should write the head of       */
+                      /*    the subroutine sub_loop_<subroutinename>          */
+                      writeheadnewsub_0(1);
+                   }
+      | TOK_FUNCTION name_routine arglist TOK_RESULT arglist1
+                   {
+                      /* open param file                                      */
+                      if ( firstpass == 0 )
+                      {
+                         sprintf(ligne,"%s/ParamFile%s.h",nomdir,$2);
+                         paramout=fopen(ligne,"w");
+                         if ( retour77 == 0 ) fprintf(paramout,"!\n");
+                         else fprintf(paramout,"C\n");
+                      }
+                      strcpy(subroutinename,$2);
+                      if ( inmodulemeet == 1 )
+                      {
+                         insubroutinedeclare = 1;
+                         /* we should to list of the subroutine argument the  */
+                         /*    name of the function which has to be defined   */
+                         Add_SubroutineArgument_Var_1($3);
+                         strcpy(DeclType,"");
+                         /* in the second step we should write the head of    */
+                         /*    the subroutine sub_loop_<subroutinename>       */
+                         writeheadnewsub_0(2);
+                      }
+                      else
+                      {
+                            insubroutinedeclare = 1;
+                            /* we should to list of the subroutine argument   */
+                            /* name of the function which has to be defined   */
+                            Add_SubroutineArgument_Var_1($3);
+                            strcpy(DeclType,"");
+                            Add_FunctionType_Var_1($2);
+                            writeheadnewsub_0(2);
+                      }
+                   }
+      | TOK_FUNCTION name_routine arglist
+                   {
+                      /* open param file                                      */
+                      if ( firstpass == 0 )
+                      {
+                         sprintf(ligne,"%s/ParamFile%s.h",nomdir,$2);
+                         paramout=fopen(ligne,"w");
+                         if ( retour77 == 0 ) fprintf(paramout,"!\n");
+                         else fprintf(paramout,"C\n");
+                      }
+                      strcpy(subroutinename,$2);
+                      if ( inmodulemeet == 1 )
+                      {
+                         insubroutinedeclare = 1;
+                         /* we should to list of the subroutine argument the  */
+                         /*    name of the function which has to be defined   */
+                         Add_SubroutineArgument_Var_1($3);
+                         strcpy(DeclType,"");
+                         Add_FunctionType_Var_1($2);
+                         /* in the second step we should write the head of    */
+                         /*    the subroutine sub_loop_<subroutinename>       */
+                         writeheadnewsub_0(2);
+                      }
+                      else
+                      {
+                            insubroutinedeclare = 1;
+                            /* we should to list of the subroutine argument   */
+                            /* name of the function which has to be defined   */
+                            Add_SubroutineArgument_Var_1($3);
+                            strcpy(DeclType,"");
+                            Add_FunctionType_Var_1($2);
+                            writeheadnewsub_0(2);
+                      }
+                   }
+      | TOK_MODULE TOK_NAME
+                   {
+                      GlobalDeclaration = 0;
+                      strcpy(curmodulename,$2);
+                      strcpy(subroutinename,"");
+                      Add_NameOfModule_1($2);
+                      if ( inmoduledeclare == 0 )
+                      {
+                         /* To know if there are in the module declaration    */
+                         inmoduledeclare = 1;
+                         /* to know if a module has been met                  */
+                         inmodulemeet = 1;
+                         /* to know if we are after the keyword contains      */
+                         aftercontainsdeclare = 0 ;
+                      }
+                   }
+      ;
+name_routine : TOK_NAME
+                   {
+                      if ( couldaddvariable == 1 )
+                      {
+                         strcpy($$,$1);strcpy(subroutinename,$1);
+                      }
+                   }
+writedeclar :
+      ;
+before_include : TOK_INCLUDE
+                   {
+                      pos_curinclude = setposcur()-9;
+                   }
+filename : TOK_CHAR_CONSTANT
+                   {
+                      if ( couldaddvariable == 1 ) Add_Include_1($1);
+                   }
+      ;
+arglist :           {
+                      if ( firstpass == 1 && couldaddvariable == 1) $$=NULL;
+                   }
+      | '(' ')'    {
+                      if ( firstpass == 1 && couldaddvariable == 1 ) $$=NULL;
+                   }
+      | '(' args ')'
+                   {
+                       if ( firstpass == 1 && couldaddvariable == 1 ) $$=$2;
+                   }
+      ;
+arglist1:
+      | '(' ')'
+      | '(' args ')'
+                   {
+                      if ( couldaddvariable == 1 )
+                      {
+                         Add_SubroutineArgument_Var_1($2);
+                      }
+                   }
+      ;
+args :arg           {
+                      if ( firstpass == 1  && couldaddvariable == 1)
+                      {
+                         strcpy(nameinttypenameback,nameinttypename);
+                         strcpy(nameinttypename,"");
+                         curvar=createvar($1,NULL);
+                        strcpy(nameinttypename,nameinttypenameback);
+                         curlistvar=insertvar(NULL,curvar);
+                         $$=settype("",curlistvar);
+                      }
+                   }
+      | args ',' arg
+                   {
+                      if ( firstpass == 1  && couldaddvariable == 1)
+                      {
+                         strcpy(nameinttypenameback,nameinttypename);
+                         strcpy(nameinttypename,"");                      
+                         curvar=createvar($3,NULL);
+                         strcpy(nameinttypename,nameinttypenameback);                         
+                         $$=insertvar($1,curvar);
+                      }
+                   }
+      ;
+arg : TOK_NAME      {if ( couldaddvariable == 1 ) strcpy($$,$1);}
+      | '*'        {if ( couldaddvariable == 1 ) strcpy($$,"*");}
+      ;
+spec : type after_type
+                   {
+                      if ( VarTypepar == 1 )
+                      {
+                         couldaddvariable = 1 ;
+                         VarTypepar = 0;
+                      }
+                   }
+      | TOK_TYPE opt_spec opt_sep opt_name
+                   {
+                      if ( couldaddvariable == 1 )
+                      {
+                         VarType = 1;
+                         couldaddvariable = 0 ;
+                      }
+                   }
+      | TOK_ENDTYPE opt_name
+                   {
+                      if ( VarType == 1 ) couldaddvariable = 1 ;
+                      VarType = 0;
+                      VarTypepar = 0;
+                   }
+      | TOK_POINTER list_couple
+      | before_parameter  '(' paramlist ')'
+                   {
+                      if ( couldaddvariable == 1 )
+                      {
+                         if ( insubroutinedeclare == 0 )
+                                                  Add_GlobalParameter_Var_1($3);
+                         else Add_Parameter_Var_1($3);
+                         pos_end = setposcur();
+                        RemoveWordSET_0(fortranout,pos_cur_decl,
+                                                    pos_end-pos_cur_decl);
+                      }
+                      VariableIsParameter =  0 ;
+                   }
+      | before_parameter  paramlist
+                   {
+                     if ( couldaddvariable == 1 )
+                     {
+                        if ( insubroutinedeclare == 0 )
+                                                  Add_GlobalParameter_Var_1($2);
+                         else Add_Parameter_Var_1($2);
+                         pos_end = setposcur();
+                         RemoveWordSET_0(fortranout,pos_cur_decl,
+                                                    pos_end-pos_cur_decl);
+                      }
+                      VariableIsParameter =  0 ;
+                   }
+      | common
+      | save
+                  {
+                     pos_end = setposcur();
+                     RemoveWordSET_0(fortranout,pos_cursave,
+                                                pos_end-pos_cursave);
+                  }
+      | implicit
+      | dimension
+                  {
+                   /* if the variable is a parameter we can suppose that is   */
+                   /*    value is the same on each grid. It is not useless to */
+                   /*    create a copy of it on each grid                     */
+                      if ( couldaddvariable == 1 )
+                      {
+                         Add_Globliste_1($1);
+                         /* if variableparamlists has been declared in a      */
+                         /*    subroutine                                     */
+                         if ( insubroutinedeclare == 1 )
+                         {
+                            Add_Dimension_Var_1($1);
+                         }
+                         pos_end = setposcur();
+                         RemoveWordSET_0(fortranout,pos_curdimension,
+                                                pos_end-pos_curdimension);
+                      }
+                      /*                                                      */
+                      PublicDeclare = 0;
+                      PrivateDeclare = 0;
+                      ExternalDeclare = 0;
+                      strcpy(NamePrecision,"");
+                      c_star = 0;
+                      InitialValueGiven = 0 ;
+                      strcpy(IntentSpec,"");
+                      VariableIsParameter =  0 ;
+                      Allocatabledeclare = 0 ;
+                      SaveDeclare = 0;
+                      pointerdeclare = 0;
+                      optionaldeclare = 0 ;
+                      dimsgiven=0;
+                      c_selectorgiven=0;
+                      strcpy(nameinttypename,"");
+                      strcpy(c_selectorname,"");
+                   }
+      | public
+      {
+      if (firstpass == 0)
+      {
+      if ($1)
+      {
+      removeglobfromlist(&($1));
+      pos_end = setposcur();
+           RemoveWordSET_0(fortranout,pos_cur,pos_end-pos_cur);
+      writelistpublic($1);
+      }
+      }
+      }
+      | private
+      | use_stat
+      | module_proc_stmt
+      | interface
+      | namelist
+      | TOK_BACKSPACE '(' expr ')'
+      | TOK_EXTERNAL opt_sep use_name_list
+      | TOK_INTRINSIC opt_sep use_intrinsic_list
+      | TOK_EQUIVALENCE list_expr_equi
+      | before_data data '\n'
+                   {
+                      /* we should remove the data declaration                */
+                      if ( couldaddvariable == 1 && aftercontainsdeclare == 0 )
+                      {
+                        pos_end = setposcur();
+                        RemoveWordSET_0(fortranout,pos_curdata,
+                                              pos_end-pos_curdata);
+                      }
+                  }
+      ;
+opt_spec :
+      | access_spec
+      {
+         PublicDeclare = 0 ;
+         PrivateDeclare = 0 ;
+      }
+      ;
+name_intrinsic : TOK_SUM
+      | TOK_TANH
+      | TOK_MAXVAL
+      | TOK_MIN
+      | TOK_MINVAL
+      | TOK_TRIM
+      | TOK_SQRT
+      | TOK_NINT
+      | TOK_FLOAT
+      | TOK_EXP
+      | TOK_COS
+      | TOK_COSH
+      | TOK_ACOS
+      | TOK_SIN
+      | TOK_SINH
+      | TOK_ASIN
+      | TOK_LOG
+      | TOK_TAN
+      | TOK_ATAN
+      | TOK_MOD
+      | TOK_SIGN
+      | TOK_MINLOC
+      | TOK_MAXLOC
+      | TOK_NAME
+      ;
+use_intrinsic_list : name_intrinsic
+      | use_intrinsic_list ',' name_intrinsic
+      ;
+list_couple : '(' list_expr ')'
+      | list_couple ',' '(' list_expr ')'
+      ;
+list_expr_equi : expr_equi
+      | list_expr_equi ',' expr_equi
+      ;
+expr_equi : '(' list_expr_equi1 ')'
+      ;
+list_expr_equi1 : ident dims
+      | list_expr_equi1 ',' ident dims
+      ;
+list_expr : expr
+      | list_expr ',' expr
+      ;
+opt_sep :
+      | ':' ':'
+      ;
+after_type : dcl nodimsgiven
+                   {
+                      /* if the variable is a parameter we can suppose that is*/
+                      /*    value is the same on each grid. It is not useless */
+                      /*    to create a copy of it on each grid               */
+                      if ( couldaddvariable == 1 )
+                      {
+                      pos_end = setposcur();
+                      /*if (insubroutinedeclare == 0)
+                        {   */
+                         RemoveWordSET_0(fortranout,pos_cur_decl,
+                                                 pos_end-pos_cur_decl);
+                                         
+                       /* }
+                      else
+                       {*/
+                        ReWriteDeclarationAndAddTosubroutine_01($1);
+                        pos_cur_decl = setposcur();
+                        
+                       /*}*/
+                      if ( firstpass == 0 &&
+                           GlobalDeclaration == 0 &&
+                           insubroutinedeclare == 0 )
+                      {
+                         sprintf(ligne,"\n#include \"Module_Declar_%s.h\"\n"
+                                                                ,curmodulename);
+                         tofich(fortranout,ligne,1);
+                         sprintf (ligne, "Module_Declar_%s.h",curmodulename);
+                         module_declar = associate(ligne);
+                         sprintf (ligne, " ");
+                         tofich (module_declar, ligne,1);
+                         GlobalDeclaration = 1 ;
+                      }
+                         $$ = $1;
+                         Add_Globliste_1($1);
+                                                  
+                         if ( insubroutinedeclare == 0 )
+                                                  Add_GlobalParameter_Var_1($1);
+                         else
+                         {
+                            if ( pointerdeclare == 1 )
+                                                Add_Pointer_Var_From_List_1($1);
+                            Add_Parameter_Var_1($1);
+                         }
+
+                         /* if variables has been declared in a subroutine    */
+                         if ( insubroutinedeclare == 1 )
+                         { 
+                       /*    Add_SubroutineDeclaration_Var_1($1);*/
+                         }
+                         /* If there are a SAVE declarations in module's      */
+                         /*    subroutines we should remove it from the       */
+                         /*    subroutines declaration and add it in the      */
+                         /*    global declarations                            */
+                         if ( aftercontainsdeclare == 1 &&
+                              SaveDeclare == 1 && firstpass == 1 )
+                         {
+                              if ( inmodulemeet == 0 ) Add_Save_Var_dcl_1($1);
+                              else  Add_SubroutineDeclarationSave_Var_1($1);
+                         }
+                      }
+                      /*                                                      */
+                      PublicDeclare = 0;
+                      PrivateDeclare = 0;
+                      ExternalDeclare = 0;
+                      strcpy(NamePrecision,"");
+                      c_star = 0;
+                      InitialValueGiven = 0 ;
+                      strcpy(IntentSpec,"");
+                      VariableIsParameter =  0 ;
+                      Allocatabledeclare = 0 ;
+                      SaveDeclare = 0;
+                      pointerdeclare = 0;
+                      optionaldeclare = 0 ;
+                      dimsgiven=0;
+                      c_selectorgiven=0;
+                      strcpy(nameinttypename,"");
+                      strcpy(c_selectorname,"");
+                   }
+      | before_function name_routine arglist
+                   {
+                      /* open param file                                      */
+                      if ( firstpass == 0 )
+                      {
+                         sprintf(ligne,"%s/ParamFile%s.h",nomdir,$2);
+                         paramout=fopen(ligne,"w");
+                         if ( retour77 == 0 ) fprintf(paramout,"!\n");
+                         else fprintf(paramout,"C\n");
+                      }
+                      strcpy(subroutinename,$2);
+                      if ( inmodulemeet == 1 )
+                      {
+                         insubroutinedeclare = 1;
+                         /* we should to list of the subroutine argument the  */
+                         /*    name of the function which has to be defined   */
+                         Add_SubroutineArgument_Var_1($3);
+                         Add_FunctionType_Var_1($2);
+                         /* in the second step we should write the head of    */
+                         /*    the subroutine sub_loop_<subroutinename>       */
+                         writeheadnewsub_0(2);
+                      }
+                      else
+                      {
+                         insubroutinedeclare = 1;
+                         /* we should to list of the subroutine argument the  */
+                         /*    name of the function which has to be defined   */
+                         Add_SubroutineArgument_Var_1($3);
+                         Add_FunctionType_Var_1($2);
+                         /* in the second step we should write the head of    */
+                         /*    the subroutine sub_loop_<subroutinename>       */
+                         writeheadnewsub_0(2);
+                      }
+                      strcpy(nameinttypename,"");
+
+                   }
+      ;
+before_function : TOK_FUNCTION
+                   {
+                       functiondeclarationisdone = 1;
+                   }
+                   ;
+
+before_parameter : TOK_PARAMETER
+                   {
+                      VariableIsParameter = 1;
+                      pos_curparameter = setposcur()-9;
+                   }
+before_data : TOK_DATA
+                   {
+                      pos_curdata = setposcur()-strlen($1);
+                   }
+data : TOK_NAME TOK_SLASH datavallist TOK_SLASH
+                   {
+                      if ( couldaddvariable == 1 )
+                      {
+                      if ( aftercontainsdeclare == 1 ) strcpy(ligne,"");
+                      else sprintf(ligne,"(/ %s /)",$3);
+                      Add_Data_Var_1($1,ligne);
+                      }
+                   }
+      | data opt_comma TOK_NAME TOK_SLASH datavallist TOK_SLASH
+                   {
+                      if ( couldaddvariable == 1 )
+                      {
+                      if ( aftercontainsdeclare == 1 ) strcpy(ligne,"");
+                      else sprintf(ligne,"(/ %s /)",$5);
+                      Add_Data_Var_1($3,ligne);
+                      }
+                   }
+      | datanamelist TOK_SLASH datavallist TOK_SLASH
+                   {
+                       /*******************************************************/
+                       /*******************************************************/
+                       /*******************************************************/
+                       /*******************************************************/
+                       /*******************************************************/
+                       /*******************************************************/
+                       /*******************************************************/
+                   }
+      ;
+datavallist : expr_data
+                   {
+                      if ( couldaddvariable == 1 )
+                      {
+                         strcpy($$,$1);
+                      }
+                   }
+      | expr_data ',' datavallist
+                   {
+                      if ( couldaddvariable == 1 )
+                      {
+                         sprintf($$,"%s,%s",$1,$3);
+                      }
+                   }
+      ;
+
+save :  before_save varsave
+      | before_save  comblock varsave
+      | save opt_comma comblock opt_comma varsave
+      | save ',' varsave
+      ;
+before_save : TOK_SAVE
+                  {
+                     pos_cursave = setposcur()-4;
+                  }
+      ;
+varsave :
+      | TOK_NAME dims
+                  {
+                     if ( couldaddvariable == 1 ) Add_Save_Var_1($1,$2);
+                  }
+      ;
+datanamelist : TOK_NAME
+      | TOK_NAME '(' expr ')'
+      | datanamelist ',' datanamelist
+      ;
+expr_data : opt_signe simple_const
+                   {if ( couldaddvariable == 1 ) sprintf($$,"%s%s",$1,$2);}
+      | expr_data '+' expr_data
+                   {if ( couldaddvariable == 1 ) sprintf($$,"%s+%s",$1,$3);}
+      | expr_data '-' expr_data
+                   {if ( couldaddvariable == 1 ) sprintf($$,"%s-%s",$1,$3);}
+      | expr_data '*' expr_data
+                   {if ( couldaddvariable == 1 ) sprintf($$,"%s*%s",$1,$3);}
+      | expr_data '/' expr_data
+                   {if ( couldaddvariable == 1 ) sprintf($$,"%s/%s",$1,$3);}
+      ;
+opt_signe :
+                   {if ( couldaddvariable == 1 ) strcpy($$,"");}
+      | signe
+                   {if ( couldaddvariable == 1 ) strcpy($$,$1);}
+      ;
+namelist :  namelist_action after_namelist
+      ;
+namelist_action : TOK_NAMELIST  ident
+      | TOK_NAMELIST  comblock ident
+      | namelist_action opt_comma comblock opt_comma ident
+      | namelist_action ',' ident
+      ;
+after_namelist :
+      ;
+interface : TOK_INTERFACE opt_name
+      | TOK_ENDINTERFACE opt_name
+      ;
+before_dimension : TOK_DIMENSION
+                   {
+                      positioninblock=0;
+                      pos_curdimension = setposcur()-9;
+                   }
+
+dimension :  before_dimension opt_comma TOK_NAME dims lengspec
+      {
+         if ( couldaddvariable == 1 )
+         {
+            /*                                                                */
+            curvar=createvar($3,$4);
+            /*                                                                */
+            CreateAndFillin_Curvar("",curvar);
+            /*                                                                */
+            curlistvar=insertvar(NULL,curvar);
+            /*                                                                */
+            $$=settype("",curlistvar);
+            /*                                                                */
+            strcpy(vallengspec,"");
+         }
+      }
+      | dimension ',' TOK_NAME dims lengspec
+      {
+         if ( couldaddvariable == 1 )
+         {
+            /*                                                                */
+            curvar=createvar($3,$4);
+            /*                                                                */
+            CreateAndFillin_Curvar("",curvar);
+            /*                                                                */
+            curlistvar=insertvar($1,curvar);
+            /*                                                                */
+            $$=curlistvar;
+            /*                                                                */
+            strcpy(vallengspec,"");
+         }
+      }
+      ;
+private : TOK_PRIVATE '\n'
+      | TOK_PRIVATE opt_sep use_name_list
+      ;
+public : TOK_PUBLIC '\n'
+        {
+        $$=(listname *)NULL;
+        }
+      | TOK_PUBLIC opt_sep use_name_list
+         {
+          $$=$3;
+         }
+      ;
+use_name_list : TOK_NAME
+           {
+           $$ = Insertname(NULL,$1);
+           }
+      | use_name_list ',' TOK_NAME
+          {
+          $$ = Insertname($1,$3);
+          }
+      ;
+common : before_common var_common_list
+                   {
+                         pos_end = setposcur();
+                         RemoveWordSET_0(fortranout,pos_curcommon,
+                                                  pos_end-pos_curcommon);
+                   }
+      | before_common comblock var_common_list
+                   {
+                         if ( couldaddvariable == 1 )
+                         {
+                            sprintf(charusemodule,"%s",$2);
+                            Add_NameOfCommon_1($2);
+                            pos_end = setposcur();
+                            RemoveWordSET_0(fortranout,pos_curcommon,
+                                                       pos_end-pos_curcommon);
+                         }
+                   }
+      | common opt_comma comblock opt_comma var_common_list
+                   {
+                         if ( couldaddvariable == 1 )
+                         {
+                            sprintf(charusemodule,"%s",$3);
+                            Add_NameOfCommon_1($3);
+                            pos_end = setposcur();
+                            RemoveWordSET_0(fortranout,pos_curcommon,
+                                                       pos_end-pos_curcommon);
+                         }
+                   }
+      ;
+before_common : TOK_COMMON
+                   {
+                      positioninblock=0;
+                      pos_curcommon = setposcur()-6;
+                   }
+      | TOK_GLOBAL TOK_COMMON
+                   {
+                      positioninblock=0;
+                      pos_curcommon = setposcur()-6-7;
+                   }
+      ;
+var_common_list : var_common
+                   {
+                      if ( couldaddvariable == 1 ) Add_Common_var_1();
+                   }
+
+     | var_common_list ',' var_common
+                   {
+                      if ( couldaddvariable == 1 ) Add_Common_var_1();
+                   }
+var_common : TOK_NAME dims
+                   {
+                      if ( couldaddvariable == 1 )
+                      {
+                         positioninblock = positioninblock + 1 ;
+                         strcpy(commonvar,$1);
+                         commondim = $2;
+                      }
+                   }
+      ;
+comblock : TOK_DSLASH
+                   {
+                      if ( couldaddvariable == 1 )
+                      {
+                         strcpy($$,"");
+                         positioninblock=0;
+                         strcpy(commonblockname,"");
+                      }
+                   }
+      | TOK_SLASH TOK_NAME TOK_SLASH
+                   {
+                      if ( couldaddvariable == 1 )
+                      {
+                         strcpy($$,$2);
+                         positioninblock=0;
+                         strcpy(commonblockname,$2);
+                      }
+                   }
+      ;
+opt_comma :
+      | ','
+      ;
+paramlist : paramitem
+                   {
+                      if ( couldaddvariable == 1 ) $$=insertvar(NULL,$1);
+                   }
+      | paramlist ',' paramitem
+                   {
+                      if ( couldaddvariable == 1 ) $$=insertvar($1,$3);
+                   }
+      ;
+paramitem : TOK_NAME '=' expr
+                   {
+                     if ( couldaddvariable == 1 )
+                     {
+                         curvar=(variable *) malloc(sizeof(variable));
+                         /*                                                   */
+                         Init_Variable(curvar);
+                         /*                                                   */
+                         curvar->v_VariableIsParameter=1;
+                         strcpy(curvar->v_nomvar,$1);
+                         Save_Length($1,4);
+                         strcpy(curvar->v_subroutinename,subroutinename);
+                         Save_Length(subroutinename,11);
+                         strcpy(curvar->v_modulename,curmodulename);
+                         Save_Length(curmodulename,6);
+                         strcpy(curvar->v_initialvalue,$3);
+                         Save_Length($3,14);
+                         strcpy(curvar->v_commoninfile,mainfile);
+                         Save_Length(mainfile,10);
+                         $$=curvar;
+                      }
+                   }
+      ;
+module_proc_stmt : TOK_PROCEDURE proc_name_list
+      ;
+proc_name_list : TOK_NAME
+      | proc_name_list ',' TOK_NAME
+      ;
+implicit : TOK_IMPLICIT TOK_NONE
+                    {
+                       if ( insubroutinedeclare == 1 )
+                       {
+                          Add_ImplicitNoneSubroutine_1();
+                          pos_end = setposcur();
+                          RemoveWordSET_0(fortranout,pos_end-13,
+                                                             13);
+                       }
+                    }
+      | TOK_IMPLICIT TOK_REAL8
+      ;
+opt_retour :
+      ;
+dcl : options opt_retour TOK_NAME dims lengspec initial_value
+                   {
+                      if ( couldaddvariable == 1 )
+                      {
+                         /*                                                   */
+                         if (dimsgiven == 1)
+                         {
+                            curvar=createvar($3,curdim);
+                         }
+                         else
+                         {
+                            curvar=createvar($3,$4);
+                         }
+                         /*                                                   */
+                         CreateAndFillin_Curvar(DeclType,curvar);
+                         /*                                                   */
+                         curlistvar=insertvar(NULL,curvar);
+                         if (!strcasecmp(DeclType,"character"))
+                         {
+                            if (c_selectorgiven == 1)
+                            {
+                               strcpy(c_selectordim.first,"1");
+                               strcpy(c_selectordim.last,c_selectorname);
+                               Save_Length(c_selectorname,1);
+                               change_dim_char
+                                     (insertdim(NULL,c_selectordim),curlistvar);
+                            }
+                         }
+                         $$=settype(DeclType,curlistvar);
+                      }
+                      strcpy(vallengspec,"");
+                   }
+      | dcl ',' opt_retour TOK_NAME dims lengspec initial_value
+                   {
+                      if ( couldaddvariable == 1 )
+                      {
+                         if (dimsgiven == 1)
+                         {
+                            curvar=createvar($4,curdim);
+                         }
+                         else
+                         {
+                            curvar=createvar($4,$5);
+                         }
+                         /*                                                   */
+                         CreateAndFillin_Curvar($1->var->v_typevar,curvar);
+                         /*                                                   */
+                         strcpy(curvar->v_typevar,($1->var->v_typevar));
+                         Save_Length($1->var->v_typevar,3);
+                         /*                                                   */
+                         curlistvar=insertvar($1,curvar);
+                         if (!strcasecmp(DeclType,"character"))
+                         {
+                            if (c_selectorgiven == 1)
+                            {
+                               strcpy(c_selectordim.first,"1");
+                               strcpy(c_selectordim.last,c_selectorname);
+                               Save_Length(c_selectorname,1);
+                               change_dim_char
+                                     (insertdim(NULL,c_selectordim),curlistvar);
+                            }
+                         }
+                         $$=curlistvar;
+                      }
+                      strcpy(vallengspec,"");
+                   }
+      ;
+nodimsgiven :       {dimsgiven=0;}
+      ;
+type : typespec selector
+                   {strcpy(DeclType,$1);}
+      | before_character c_selector
+                   {
+                      strcpy(DeclType,"CHARACTER");
+                   }
+      | typename '*' TOK_CSTINT
+                   {
+                      strcpy(DeclType,$1);
+                      strcpy(nameinttypename,$3);
+                   }
+      | before_typepar attribute ')'
+                   {
+                      strcpy(DeclType,"TYPE");
+                   }
+      ;
+before_typepar : TOK_TYPEPAR
+                   {
+                 /*     if ( couldaddvariable == 1 ) VarTypepar = 1 ;
+                      couldaddvariable = 0 ;
+                      pos_cur_decl = setposcur()-5;*/
+                   pos_cur_decl = setposcur()-5;
+                   }
+      ;
+c_selector :
+      | '*' TOK_CSTINT
+                   {c_selectorgiven=1;strcpy(c_selectorname,$2);}
+      | '*' '(' c_attribute ')' {c_star = 1;}
+      | '(' c_attribute ')'
+      ;
+c_attribute : TOK_NAME clause opt_clause
+      | TOK_NAME '=' clause opt_clause
+      | clause opt_clause
+      ;
+before_character : TOK_CHARACTER
+                   {
+                      pos_cur_decl = setposcur()-9;
+                   }
+      ;
+typespec : typename {strcpy($$,$1);}
+      ;
+typename : TOK_INTEGER
+                   {
+                      strcpy($$,"INTEGER");
+                      pos_cur_decl = setposcur()-7;
+                   }
+      | TOK_REAL   {
+                      strcpy($$,"REAL");
+                      pos_cur_decl = setposcur()-4;
+                   }
+      | TOK_COMPLEX
+                   {strcpy($$,"COMPLEX");
+                   pos_cur_decl = setposcur()-7;}
+      | TOK_DOUBLEPRECISION
+                   {
+                      pos_cur_decl = setposcur()-16;
+                      strcpy($$,"REAL");
+                      strcpy(nameinttypename,"8");
+                   }
+      | TOK_DOUBLECOMPLEX
+                   {strcpy($$,"DOUBLE COMPLEX");}
+      | TOK_LOGICAL
+                   {
+                      strcpy($$,"LOGICAL");
+                      pos_cur_decl = setposcur()-7;
+                   }
+      ;
+lengspec :
+      | '*' proper_lengspec {strcpy(vallengspec,$2);}
+      ;
+proper_lengspec : expr {sprintf($$,"*%s",$1);}
+      | '(' '*' ')'{strcpy($$,"*(*)");}
+      ;
+selector :
+      | '*' proper_selector
+      | '(' attribute ')'
+      ;
+proper_selector : expr
+      | '(' '*' ')'
+      ;
+attribute : TOK_NAME clause
+      | TOK_NAME '=' clause
+                   {
+                      if ( strstr($3,"0.d0") )
+                      {
+                         strcpy(nameinttypename,"8");
+                         sprintf(NamePrecision,"");
+                      }
+                      else sprintf(NamePrecision,"%s = %s",$1,$3);
+                   }
+      | TOK_NAME
+                   {
+                      strcpy(NamePrecision,$1);
+                   }
+      | TOK_CSTINT
+                   {
+                      strcpy(NamePrecision,$1);
+                   }
+      ;
+clause : expr       {strcpy(CharacterSize,$1);
+                    strcpy($$,$1);}
+      | '*'        {strcpy(CharacterSize,"*");
+                    strcpy($$,"*");}
+      ;
+opt_clause :
+      | ',' TOK_NAME clause
+      ;
+options :
+      | ':' ':'
+      | ',' attr_spec_list ':' ':'
+      ;
+attr_spec_list : attr_spec
+      | attr_spec_list ',' attr_spec
+      ;
+attr_spec : TOK_PARAMETER
+                   {
+                      VariableIsParameter = 1;
+                   }
+      | access_spec
+      | TOK_ALLOCATABLE
+                   {Allocatabledeclare = 1;}
+      | TOK_DIMENSION dims
+                   {
+                      dimsgiven=1;
+                      curdim=$2;
+                   }
+      | TOK_EXTERNAL
+                   {ExternalDeclare = 1;}
+      | TOK_INTENT '(' intent_spec ')'
+                   {strcpy(IntentSpec,$3);}
+      | TOK_INTRINSIC
+      | TOK_OPTIONAL{optionaldeclare = 1 ;}
+      | TOK_POINTER {pointerdeclare = 1 ;}
+      | TOK_SAVE    {
+/*                       if ( inmodulemeet == 1 )
+                       {*/
+                          SaveDeclare = 1 ;
+                     /*  }*/
+                    }
+      | TOK_TARGET
+      ;
+intent_spec : TOK_IN {strcpy($$,$1);}
+      | TOK_OUT     {strcpy($$,$1);}
+      | TOK_INOUT   {strcpy($$,$1); }
+      ;
+access_spec : TOK_PUBLIC
+                   {PublicDeclare = 1;}
+      | TOK_PRIVATE
+                   {PrivateDeclare = 1;}
+      ;
+dims :              {if ( created_dimensionlist == 1 )
+                       {
+                           $$=(listdim *)NULL;
+                       }
+                   }
+      | '(' dimlist ')'
+                   {if ( created_dimensionlist == 1 ||
+                         agrif_parentcall      == 1 ) $$=$2;}
+      ;
+dimlist :   dim     {if ( created_dimensionlist == 1 ||
+                         agrif_parentcall      == 1 ) $$=insertdim(NULL,$1);}
+      | dimlist ',' dim
+                   {if ( couldaddvariable == 1 )
+                         if ( created_dimensionlist == 1 ) $$=insertdim($1,$3);}
+      ;
+dim : ubound         {
+                      strcpy($$.first,"1");
+                      strcpy($$.last,$1);
+                      Save_Length($1,1);
+                   }
+      | ':'        {
+                      strcpy($$.first,"");
+                      strcpy($$.last,"");
+                   }
+      | expr ':'   {
+                      strcpy($$.first,$1);
+                      Save_Length($1,2);
+                      strcpy($$.last,"");
+                   }
+      | ':' expr   {
+                      strcpy($$.first,"");
+                      strcpy($$.last,$2);
+                      Save_Length($2,1);
+                   }
+      | expr ':' ubound
+                   {
+                      strcpy($$.first,$1);
+                      Save_Length($1,2);
+                      strcpy($$.last,$3);
+                      Save_Length($3,1);
+                   }
+      ;
+ubound :  '*'       {strcpy($$,"*");}
+      | expr       {strcpy($$,$1);}
+      ;
+expr :  uexpr       {if ( couldaddvariable == 1 ) strcpy($$,$1);}
+      | '(' expr ')'
+                   {if ( couldaddvariable == 1 ) sprintf($$,"(%s)",$2);}
+      | complex_const
+                   {if ( couldaddvariable == 1 ) strcpy($$,$1);}
+      | predefinedfunction
+                   {if ( couldaddvariable == 1 ) strcpy($$,$1);}
+      ;
+
+predefinedfunction : TOK_SUM minmaxlist ')'
+                   {sprintf($$,"SUM(%s)",$2);}
+      | TOK_MAX minmaxlist ')'
+                   {sprintf($$,"MAX(%s)",$2);}
+      | TOK_TANH '(' minmaxlist ')'
+                   {sprintf($$,"TANH(%s)",$3);}
+      | TOK_MAXVAL '(' minmaxlist ')'
+                   {sprintf($$,"MAXVAL(%s)",$3);}
+      | TOK_MIN minmaxlist ')'
+                   {sprintf($$,"MIN(%s)",$2);}
+      | TOK_MINVAL '(' minmaxlist ')'
+                   {sprintf($$,"MINVAL(%s)",$3);}
+      | TOK_TRIM '(' expr ')'
+                   {sprintf($$,"TRIM(%s)",$3);}
+      | TOK_SQRT expr ')'
+                   {sprintf($$,"SQRT(%s)",$2);}
+      | TOK_REAL '(' minmaxlist ')'
+                   {sprintf($$,"REAL(%s)",$3);}
+      | TOK_NINT '(' expr ')'
+                   {sprintf($$,"NINT(%s)",$3);}
+      | TOK_FLOAT '(' expr ')'
+                   {sprintf($$,"FLOAT(%s)",$3);}
+      | TOK_EXP '(' expr ')'
+                   {sprintf($$,"EXP(%s)",$3);}
+      | TOK_COS '(' expr ')'
+                   {sprintf($$,"COS(%s)",$3);}
+      | TOK_COSH '(' expr ')'
+                   {sprintf($$,"COSH(%s)",$3);}
+      | TOK_ACOS '(' expr ')'
+                   {sprintf($$,"ACOS(%s)",$3);}
+      | TOK_SIN '(' expr ')'
+                   {sprintf($$,"SIN(%s)",$3);}
+      | TOK_SINH '(' expr ')'
+                   {sprintf($$,"SINH(%s)",$3);}
+      | TOK_ASIN '(' expr ')'
+                   {sprintf($$,"ASIN(%s)",$3);}
+      | TOK_LOG '(' expr ')'
+                   {sprintf($$,"LOG(%s)",$3);}
+      | TOK_TAN '(' expr ')'
+                   {sprintf($$,"TAN(%s)",$3);}
+      | TOK_ATAN '(' expr ')'
+                   {sprintf($$,"ATAN(%s)",$3);}
+      | TOK_ABS expr ')'
+                   {sprintf($$,"ABS(%s)",$2);}
+      | TOK_MOD '(' minmaxlist ')'
+                   {sprintf($$,"MOD(%s)",$3);}
+      | TOK_SIGN '(' minmaxlist ')'
+                   {sprintf($$,"SIGN(%s)",$3);}
+      | TOK_MINLOC '(' minmaxlist ')'
+                   {sprintf($$,"MINLOC(%s)",$3);}
+      | TOK_MAXLOC '(' minmaxlist ')'
+                   {sprintf($$,"MAXLOC(%s)",$3);}
+      ;
+minmaxlist : expr {strcpy($$,$1);}
+      | minmaxlist ',' expr
+                   {if ( couldaddvariable == 1 )
+                   { strcpy($$,$1);strcat($$,",");strcat($$,$3);}}
+      ;
+uexpr :  lhs        {if ( couldaddvariable == 1 ) strcpy($$,$1);}
+      | simple_const
+                   {if ( couldaddvariable == 1 ) strcpy($$,$1);}
+      | vec
+                   {if ( couldaddvariable == 1 ) strcpy($$,$1);}
+      | expr operation
+                   {if ( couldaddvariable == 1 ) sprintf($$,"%s%s",$1,$2);}
+      | signe expr %prec '*' 
+                   {if ( couldaddvariable == 1 ) sprintf($$,"%s%s",$1,$2);}
+      | TOK_NOT expr
+                   {if ( couldaddvariable == 1 ) sprintf($$,"%s%s",$1,$2);}
+      ;
+signe : '+'        {if ( couldaddvariable == 1 ) strcpy($$,"+");}
+      | '-'        {if ( couldaddvariable == 1 ) strcpy($$,"-");}
+      ;
+operation : '+' expr %prec '+'
+                   {if ( couldaddvariable == 1 ) sprintf($$,"+%s",$2);}
+      |  '-' expr %prec '+'
+                   {if ( couldaddvariable == 1 ) sprintf($$,"-%s",$2);}
+      |  '*' expr
+                   {if ( couldaddvariable == 1 ) sprintf($$,"*%s",$2);}
+      |  TOK_DASTER expr
+                   {if ( couldaddvariable == 1 ) sprintf($$,"%s%s",$1,$2);}
+      |  TOK_EQ expr %prec TOK_EQ
+                   {if ( couldaddvariable == 1 ) sprintf($$,"%s%s",$1,$2);}
+      |  TOK_EQV expr %prec TOK_EQV
+                   {if ( couldaddvariable == 1 ) sprintf($$,"%s%s",$1,$2);}                   
+      |  TOK_GT expr %prec TOK_EQ
+                   {if ( couldaddvariable == 1 ) sprintf($$,"%s%s",$1,$2);}
+      |  '>' expr %prec TOK_EQ
+                   {if ( couldaddvariable == 1 ) sprintf($$," > %s",$2);}
+      |  TOK_LT expr %prec TOK_EQ
+                   {if ( couldaddvariable == 1 ) sprintf($$,"%s%s",$1,$2);}
+      |  '<' expr %prec TOK_EQ
+                   {if ( couldaddvariable == 1 ) sprintf($$," < %s",$2);}
+      |  TOK_GE expr %prec TOK_EQ
+                   {if ( couldaddvariable == 1 ) sprintf($$,"%s%s",$1,$2);}
+      |  '>''=' expr %prec TOK_EQ
+                   {if ( couldaddvariable == 1 ) sprintf($$," >= %s",$3);}
+      |  TOK_LE expr %prec TOK_EQ
+                   {if ( couldaddvariable == 1 ) sprintf($$,"%s%s",$1,$2);}
+      |  '<''=' expr %prec TOK_EQ
+                   {if ( couldaddvariable == 1 ) sprintf($$," <= %s",$3);}
+      |  TOK_NE expr %prec TOK_EQ
+                   {if ( couldaddvariable == 1 ) sprintf($$,"%s%s",$1,$2);}
+      |  TOK_NEQV expr %prec TOK_EQV
+                   {if ( couldaddvariable == 1 ) sprintf($$,"%s%s",$1,$2);}                   
+      |  TOK_XOR expr
+                   {if ( couldaddvariable == 1 ) sprintf($$,"%s%s",$1,$2);}
+      |  TOK_OR expr
+                   {if ( couldaddvariable == 1 ) sprintf($$,"%s%s",$1,$2);}
+      |  TOK_AND expr
+                   {if ( couldaddvariable == 1 ) sprintf($$,"%s%s",$1,$2);}
+      |  TOK_SLASH after_slash
+                   {if ( couldaddvariable == 1 ) sprintf($$,"%s",$2);}
+      |  '=' after_equal
+                   {if ( couldaddvariable == 1 ) sprintf($$,"%s",$2);}
+
+after_slash : {strcpy($$,"");}
+      | expr
+                   {sprintf($$,"/%s",$1);}
+      | '=' expr %prec TOK_EQ
+                   {sprintf($$,"/= %s",$2);}
+      | TOK_SLASH expr
+                   {sprintf($$,"//%s",$2);}
+      ;
+after_equal : '=' expr %prec TOK_EQ
+                   {if ( couldaddvariable == 1 ) sprintf($$,"==%s",$2);}
+      | expr
+                   {if ( couldaddvariable == 1 ) sprintf($$,"= %s",$1);}
+      ;
+
+lhs : ident         {if ( couldaddvariable == 1 ) strcpy($$,$1);}
+      | structure_component
+                   {if ( couldaddvariable == 1 ) strcpy($$,$1);}
+      | array_ele_substring_func_ref
+                   {if ( couldaddvariable == 1 ) strcpy($$,$1);}
+      ;
+beforefunctionuse : {
+                      agrif_parentcall =0;
+                      if (!strcasecmp(identcopy,"Agrif_Parent") )
+                                                            agrif_parentcall =1;
+                      if ( Agrif_in_Tok_NAME(identcopy) == 1 )
+                      {
+                         inagrifcallargument = 1;
+                         Add_SubroutineWhereAgrifUsed_1(subroutinename,
+                                                        curmodulename);
+                      }
+                   }
+      ;
+array_ele_substring_func_ref : begin_array
+                   {
+                     strcpy($$,$1);
+                     if ( incalldeclare == 0 ) inagrifcallargument = 0;
+                   }
+      | begin_array substring
+                   {if ( couldaddvariable == 1 ) sprintf($$," %s %s ",$1,$2);}
+      | structure_component '(' funarglist ')'
+                   {if ( couldaddvariable == 1 )
+                                                sprintf($$," %s ( %s )",$1,$3);}
+      | structure_component '(' funarglist ')' substring
+                   {if ( couldaddvariable == 1 )
+                                         sprintf($$," %s ( %s ) %s ",$1,$3,$5);}
+      ;
+begin_array : ident '(' funarglist ')'
+                   {
+                      if ( couldaddvariable == 1 )
+                      {
+                         sprintf($$," %s ( %s )",$1,$3);
+                         ModifyTheAgrifFunction_0($3);
+                         agrif_parentcall =0;
+                      }
+                   }
+      ;
+structure_component : lhs '%' lhs
+                   {
+                      sprintf($$," %s %% %s ",$1,$3);
+                      if ( incalldeclare == 0 ) inagrifcallargument = 0;
+                   }
+      ;
+vec :  TOK_LEFTAB outlist TOK_RIGHTAB
+                   {sprintf($$,"(/%s/)",$2);}
+      ;
+funarglist : beforefunctionuse    {strcpy($$," ");}
+      | beforefunctionuse funargs
+                   {strcpy($$,$2);}
+      ;
+funargs : funarg     {if ( couldaddvariable == 1 ) strcpy($$,$1);}
+      | funargs ',' funarg
+                    {if ( couldaddvariable == 1 ) sprintf($$,"%s,%s",$1,$3);}
+      ;
+funarg : expr       {strcpy($$,$1);}
+      | triplet    {strcpy($$,$1);}
+      ;
+triplet : expr ':' expr
+                    {if ( couldaddvariable == 1 ) sprintf($$,"%s :%s",$1,$3);}
+      | expr ':' expr ':' expr
+                    {if ( couldaddvariable == 1 )
+                                               sprintf($$,"%s :%s :%s",$1,$3,$5);}
+      | ':' expr ':' expr
+                    {if ( couldaddvariable == 1 ) sprintf($$,":%s :%s",$2,$4);}
+      | ':' ':' expr{if ( couldaddvariable == 1 ) sprintf($$,": : %s",$3);}
+      | ':' expr    {if ( couldaddvariable == 1 ) sprintf($$,":%s",$2);}
+      | expr ':'    {if ( couldaddvariable == 1 ) sprintf($$,"%s :",$1);}
+      | ':'         {if ( couldaddvariable == 1 ) sprintf($$,":");}
+      ;
+ident : TOK_NAME    {
+                       if ( couldaddvariable == 1 )
+                       {
+                       if ( Vartonumber($1) == 1 )
+                       {
+                          Add_SubroutineWhereAgrifUsed_1(subroutinename,
+                                                        curmodulename);
+                       }
+                       if (!strcasecmp($1,"Agrif_Parent") )
+                                                            agrif_parentcall =1;
+                       if ( VariableIsNotFunction($1) == 0 )
+                       {
+                          if ( inagrifcallargument == 1 )
+                          {
+                             if ( !strcasecmp($1,identcopy) )
+                             {
+                                strcpy(sameagrifname,identcopy);
+                                sameagrifargument = 1;
+                             }
+                          }
+                          strcpy(identcopy,$1);
+                          pointedvar=0;
+                          strcpy(truename,$1);
+                          if (variscoupled_0($1)) strcpy(truename,getcoupledname_0($1));
+/*
+                          if ( VarIsNonGridDepend($1) == 0 &&
+                               Variableshouldberemove($1) == 0 )
+                          {
+                             if ( inagrifcallargument == 1 ||
+                                  varisallocatable_0($1) == 1 ||
+                                  varispointer_0($1) == 1 )
+                             {
+                            if ((IsinListe(List_UsedInSubroutine_Var,$1) == 1) || (inagrifcallargument == 1))
+                             {
+                              if (varistyped_0($1) == 0)
+                                 {
+                                 ModifyTheVariableName_0($1);
+                                 }
+                                 }
+                                 else
+                                 {
+                                 }
+                             }
+                             if (variscoupled_0($1) == 1)
+                             {
+      printf("mla variable %s est couplee %s\n",$1,getcoupledname_0($1));
+                             ModifyTheVariableNamecoupled_0($1,getcoupledname_0($1));
+                             }
+                             if ( inagrifcallargument != 1 ||
+                                  sameagrifargument ==1 )
+                                  Add_UsedInSubroutine_Var_1($1);
+                          }
+                          NotifyAgrifFunction_0($1);
+*/
+                          if ( VarIsNonGridDepend(truename) == 0 &&
+                               Variableshouldberemove(truename) == 0 )
+                          {
+                             if ( inagrifcallargument == 1 ||
+                                  varisallocatable_0(truename) == 1 ||
+                                  varispointer_0(truename) == 1 )
+                             {
+                            if ((IsinListe(List_UsedInSubroutine_Var,$1) == 1) || (inagrifcallargument == 1))
+                             {
+                              if (varistyped_0(truename) == 0)
+                                 {
+                                 ModifyTheVariableName_0(truename,strlen($1));
+                                 }
+                                 }
+                             }
+                             if ( inagrifcallargument != 1 ||
+                                  sameagrifargument ==1 )
+                                  Add_UsedInSubroutine_Var_1(truename);
+                          }
+                          NotifyAgrifFunction_0(truename);
+                       }
+                       }
+                    }
+      ;
+simple_const : TOK_TRUE
+                     {if ( couldaddvariable == 1 ) strcpy($$,".TRUE.");}
+      | TOK_FALSE    {if ( couldaddvariable == 1 ) strcpy($$,".FALSE.");}
+      | TOK_CSTINT   {if ( couldaddvariable == 1 ) strcpy($$,$1);}
+      | TOK_CSTREAL  {if ( couldaddvariable == 1 ) strcpy($$,$1);}
+      | TOK_CSTREALDP{if ( couldaddvariable == 1 ) strcpy($$,$1);}
+      | TOK_CSTREALQP{if ( couldaddvariable == 1 ) strcpy($$,$1);}
+      | simple_const TOK_NAME
+                     {if ( couldaddvariable == 1 ) sprintf($$,"%s%s",$1,$2);}
+      | string_constant opt_substring
+      ;
+string_constant : TOK_CHAR_CONSTANT
+                     {if ( couldaddvariable == 1 ) strcpy($$,$1);}
+      | string_constant TOK_CHAR_CONSTANT
+      | TOK_CHAR_MESSAGE
+                     {if ( couldaddvariable == 1 ) strcpy($$,$1);}
+      | TOK_CHAR_CUT
+                     {if ( couldaddvariable == 1 ) strcpy($$,$1);}
+      ;
+opt_substring :      {if ( couldaddvariable == 1 ) strcpy($$," ");}
+      | substring   {if ( couldaddvariable == 1 ) strcpy($$,$1);}
+      ;
+substring : '(' optexpr ':' optexpr ')'
+                    {if ( couldaddvariable == 1 ) sprintf($$,"(%s :%s)",$2,$4);}
+      ;
+optexpr :           {if ( couldaddvariable == 1 ) strcpy($$," ");}
+      | expr        {if ( couldaddvariable == 1 ) strcpy($$,$1);}
+      ;
+opt_expr : '\n'          {if ( couldaddvariable == 1 ) strcpy($$," ");}
+      | expr        {if ( couldaddvariable == 1 ) strcpy($$,$1);}
+      ;
+initial_value :      {InitialValueGiven = 0;}
+      | before_initial '=' expr
+                    {
+                       if ( couldaddvariable == 1 )
+                       {
+                          strcpy(InitValue,$3);
+                          InitialValueGiven = 1;
+                       }
+                    }
+      ;
+before_initial : {pos_curinit = setposcur();}
+      ;
+complex_const : '(' uexpr ',' uexpr ')'
+                    {sprintf($$,"(%s,%s)",$2,$4);}
+      ;
+use_stat : word_use  module_name
+                    {
+                      if ( couldaddvariable == 1 )
+                      {
+                      /* if variables has been declared in a subroutine       */
+                      if (insubroutinedeclare == 1)
+                      {
+                         copyuse_0($2);
+                      }
+                      sprintf(charusemodule,"%s",$2);
+                      Add_NameOfModuleUsed_1($2);
+
+                      if ( inmoduledeclare == 0 )
+                      {
+                         pos_end = setposcur();
+                         RemoveWordSET_0(fortranout,pos_curuse,
+                                               pos_end-pos_curuse);
+                      }
+                      }
+                    }
+      | word_use  module_name ',' rename_list
+                    {
+                       if ( couldaddvariable == 1 )
+                       {
+                      if (insubroutinedeclare == 1)
+                      {
+                         Add_CouplePointed_Var_1($2,$4);
+                      }
+                      if ( firstpass == 1 )
+                      {
+                         if ( insubroutinedeclare == 1 )
+                         {
+                            coupletmp = $4;
+                            strcpy(ligne,"");
+                            while ( coupletmp )
+                            {
+                               strcat(ligne,coupletmp->c_namevar);
+                               strcat(ligne," => ");
+                               strcat(ligne,coupletmp->c_namepointedvar);
+                               coupletmp = coupletmp->suiv;
+                               if ( coupletmp ) strcat(ligne,",");
+                            }
+                            sprintf(charusemodule,"%s",$2);
+                         }
+                         Add_NameOfModuleUsed_1($2);
+                      }
+                      if ( inmoduledeclare == 0 )
+                      {
+                         pos_end = setposcur();
+                         RemoveWordSET_0(fortranout,pos_curuse,
+                                               pos_end-pos_curuse);
+                      }
+                      }
+                    }
+      | word_use  module_name ',' TOK_ONLY ':' '\n'
+                    {
+                       if ( couldaddvariable == 1 )
+                       {
+                      /* if variables has been declared in a subroutine       */
+                      if (insubroutinedeclare == 1)
+                      {
+                         copyuseonly_0($2);
+                      }
+                      sprintf(charusemodule,"%s",$2);
+                      Add_NameOfModuleUsed_1($2);
+
+                       if ( inmoduledeclare == 0 )
+                       {
+                          pos_end = setposcur();
+                          RemoveWordSET_0(fortranout,pos_curuse,
+                                                pos_end-pos_curuse);
+                       }
+                       }
+                    }
+      | word_use  module_name ',' TOK_ONLY ':' only_list
+                    {
+                       if ( couldaddvariable == 1 )
+                       {
+                       /* if variables has been declared in a subroutine      */
+                       if (insubroutinedeclare == 1)
+                       {
+                          Add_CouplePointed_Var_1($2,$6);
+                       }
+                       if ( firstpass == 1 )
+                       {
+                         if ( insubroutinedeclare == 1 )
+                         {
+                             coupletmp = $6;
+                             strcpy(ligne,"");
+                             while ( coupletmp )
+                             {
+                                strcat(ligne,coupletmp->c_namevar);
+                               if ( strcasecmp(coupletmp->c_namepointedvar,"") )
+                                                           strcat(ligne," => ");
+                                strcat(ligne,coupletmp->c_namepointedvar);
+                                coupletmp = coupletmp->suiv;
+                                if ( coupletmp ) strcat(ligne,",");
+                             }
+                             sprintf(charusemodule,"%s",$2);
+                          }
+                          Add_NameOfModuleUsed_1($2);
+                       }
+                       if ( firstpass == 0 )
+                       {
+                          if ( inmoduledeclare == 0 )
+                          {
+
+                            pos_end = setposcur();
+                             RemoveWordSET_0(fortranout,pos_curuse,
+                                                   pos_end-pos_curuse);
+                       if (oldfortranout) 
+                         variableisglobalinmodule($6,$2,oldfortranout,pos_curuseold);
+                        
+                          }
+                          else
+                          {
+
+                             /* if we are in the module declare and if the    */
+                             /* onlylist is a list of global variable         */
+                             variableisglobalinmodule($6, $2, fortranout,pos_curuse);
+                          }
+                       }
+                       }
+                    }
+      ;
+word_use : TOK_USE
+                   {
+                      pos_curuse = setposcur()-strlen($1);
+                     if (firstpass == 0 && oldfortranout) {
+                     pos_curuseold = setposcurname(oldfortranout);
+                     }
+                   }
+      ;
+module_name : TOK_NAME
+                    {strcpy($$,$1);}
+      ;
+rename_list : rename_name
+                    {
+                       if ( couldaddvariable == 1 ) $$ = $1;
+                    }
+      | rename_list ',' rename_name
+                    {
+                        if ( couldaddvariable == 1 )
+                        {
+                        /* insert the variable in the list $1                 */
+                        $3->suiv = $1;
+                        $$ = $3;
+                        }
+                    }
+      ;
+rename_name : TOK_NAME TOK_POINT_TO TOK_NAME
+                    {
+                       coupletmp =(listcouple *)malloc(sizeof(listcouple));
+                       strcpy(coupletmp->c_namevar,$1);
+                       Save_Length($1,21);
+                       strcpy(coupletmp->c_namepointedvar,$3);
+                       Save_Length($3,22);
+                       coupletmp->suiv = NULL;
+                       $$ = coupletmp;
+                     }
+      ;
+only_list : only_name
+                    {
+                       if ( couldaddvariable == 1 ) $$ = $1;
+                    }
+      | only_list ',' only_name
+                    {
+                        if ( couldaddvariable == 1 )
+                        {
+                        /* insert the variable in the list $1                 */
+                        $3->suiv = $1;
+                        $$ = $3;
+                        }
+                    }
+      ;
+only_name : TOK_NAME TOK_POINT_TO TOK_NAME
+                    {
+                       coupletmp =(listcouple *)malloc(sizeof(listcouple));
+                       strcpy(coupletmp->c_namevar,$1);
+                       Save_Length($1,21);
+                       strcpy(coupletmp->c_namepointedvar,$3);
+                       Save_Length($3,22);
+                       coupletmp->suiv = NULL;
+                       $$ = coupletmp;
+                       pointedvar=1;
+                       Add_UsedInSubroutine_Var_1($1);
+                    }
+      | TOK_NAME    {
+                       coupletmp =(listcouple *)malloc(sizeof(listcouple));
+                       strcpy(coupletmp->c_namevar,$1);
+                       Save_Length($1,21);
+                       strcpy(coupletmp->c_namepointedvar,"");
+                       coupletmp->suiv = NULL;
+                       $$ = coupletmp;
+                     }
+      ;
+exec : iffable
+      | TOK_ALLOCATE '(' allocation_list opt_stat_spec ')'
+                     {
+                         Add_SubroutineWhereAgrifUsed_1(subroutinename,
+                                                        curmodulename);
+                                                        inallocate = 0;
+                     }
+      | TOK_DEALLOCATE '(' allocate_object_list opt_stat_spec ')'
+                     {
+                          Add_SubroutineWhereAgrifUsed_1(subroutinename,
+                                                         curmodulename);
+                                                         inallocate = 0;
+                     }
+      | TOK_NULLIFY '(' pointer_name_list ')'
+      | word_endunit /* end                                                   */
+                    {
+                       GlobalDeclaration = 0 ;
+                       if ( firstpass == 0 &&
+                            strcasecmp(subroutinename,"") )
+                       {
+                          if ( module_declar && insubroutinedeclare == 0 )
+                          {
+                              fclose(module_declar);
+                          }
+                       }
+                       if ( couldaddvariable == 1 &&
+                            strcasecmp(subroutinename,"") )
+                       {
+                       if ( inmodulemeet == 1 )
+                       {
+                         /* we are in a module                                */
+                         if ( insubroutinedeclare == 1 )
+                         {
+                            /* it is like an end subroutine <name>            */
+                            insubroutinedeclare = 0 ;
+                            /*                                                */
+                            pos_cur = setposcur();
+                            closeandcallsubloopandincludeit_0(1);
+                            functiondeclarationisdone = 0;
+                         }
+                         else
+                         {
+                            /* it is like an end module <name>                */
+                            inmoduledeclare = 0 ;
+                            inmodulemeet = 0 ;
+                         }
+                       }
+                       else
+                       {
+                          insubroutinedeclare = 0;
+                          /*                                                  */
+                          pos_cur = setposcur();                        
+                          closeandcallsubloopandincludeit_0(2);
+                            functiondeclarationisdone = 0;
+                          if ( firstpass == 0 )
+                          {
+                             if ( retour77 == 0 ) fprintf(paramout,"!\n");
+                             else fprintf(paramout,"C\n");
+                             fclose(paramout);
+                           }
+                        }
+                      }
+                      strcpy(subroutinename,"");
+                    }
+      | word_endprogram opt_name
+                    {
+                       if ( couldaddvariable == 1 )
+                       {
+                       insubroutinedeclare = 0;
+                       /*                                                     */
+                       pos_cur = setposcur();                      
+                       closeandcallsubloopandincludeit_0(3);
+                            functiondeclarationisdone = 0;
+                      if ( firstpass == 0 )
+                      {
+                         if ( retour77 == 0 ) fprintf(paramout,"!\n");
+                         else fprintf(paramout,"C\n");
+                         fclose(paramout);
+                      }
+                      strcpy(subroutinename,"");
+                      }
+                    }
+      | word_endsubroutine opt_name
+                    {
+                       if ( couldaddvariable == 1 &&
+                            strcasecmp(subroutinename,"") )
+                       {
+                       insubroutinedeclare = 0;
+                       /*                                                     */
+                       pos_cur = setposcur();
+                                             
+                       closeandcallsubloopandincludeit_0(1);
+                            functiondeclarationisdone = 0;
+                      if ( firstpass == 0 )
+                      {
+                         if ( retour77 == 0 ) fprintf(paramout,"!\n");
+                         else fprintf(paramout,"C\n");
+                         fclose(paramout);
+                      }
+                      strcpy(subroutinename,"");
+                      }
+                    }
+      | word_endfunction opt_name
+                    {
+                       if ( couldaddvariable == 1 )
+                       {
+                       insubroutinedeclare = 0;
+                       /*                                                     */
+                       pos_cur = setposcur();
+
+                       closeandcallsubloopandincludeit_0(0);
+                            functiondeclarationisdone = 0;
+                      if ( firstpass == 0 )
+                      {
+                         if ( retour77 == 0 ) fprintf(paramout,"!\n");
+                         else fprintf(paramout,"C\n");
+                         fclose(paramout);
+                      }
+                      strcpy(subroutinename,"");
+                      }
+                    }
+      | TOK_ENDMODULE opt_name
+                    {
+                       if ( couldaddvariable == 1 )
+                       {
+                       /* if we never meet the contains keyword               */
+                      Remove_Word_end_module_0(strlen($2));
+                       if ( inmoduledeclare == 1 )
+                       {
+                          if ( aftercontainsdeclare == 0 )
+                          {
+                             Write_GlobalParameter_Declaration_0();
+                             Write_NotGridDepend_Declaration_0();
+                             Write_GlobalType_Declaration_0();
+                             Write_Alloc_Subroutine_For_End_0();
+                          }
+                       }
+                                           
+                       inmoduledeclare = 0 ;
+                       inmodulemeet = 0 ;
+
+                      Write_Word_end_module_0();
+                      strcpy(curmodulename,"");
+                      aftercontainsdeclare = 1;
+                      if ( firstpass == 0 )
+                      {
+                         if ( module_declar && insubroutinedeclare == 0)
+                         {
+                           fclose(module_declar);
+                         }
+                      }
+                      GlobalDeclaration = 0 ;
+                      }
+                  }
+      | boucledo
+      | logif iffable
+      | TOK_WHERE '(' expr ')' opt_expr
+      | TOK_ELSEWHERE
+      | TOK_ENDWHERE
+      | logif TOK_THEN
+      | TOK_ELSEIF  '(' expr ')' TOK_THEN
+      | TOK_ELSE
+      | TOK_ENDIF opt_name
+      | TOK_CASE caselist ')'
+      | TOK_SELECTCASE '(' expr ')'
+      | TOK_CASEDEFAULT
+      | TOK_ENDSELECT
+      | TOK_CONTAINS
+                   {
+                      if (inmoduledeclare == 1 )
+                      {
+                         Remove_Word_Contains_0();
+                         Write_GlobalParameter_Declaration_0();
+                         Write_GlobalType_Declaration_0();
+                         Write_NotGridDepend_Declaration_0();
+                         Write_Alloc_Subroutine_0();
+                         inmoduledeclare = 0 ;
+                         aftercontainsdeclare = 1;
+                      }
+                      else
+                      {
+                       if ( couldaddvariable == 1 )
+                       {
+                          if ( firstpass == 1 ) List_ContainsSubroutine =
+                                                Addtolistnom(subroutinename,
+                                                     List_ContainsSubroutine,0);
+                          insubroutinedeclare = 0;
+                          /*                                                  */
+
+                          closeandcallsubloop_contains_0();
+                            functiondeclarationisdone = 0;
+                         if ( firstpass == 0 )
+                         {
+                            if ( retour77 == 0 ) fprintf(paramout,"!\n");
+                            else fprintf(paramout,"C\n");
+                            fclose(paramout);
+                         }
+                         }
+                         strcpy(subroutinename,"");
+                      }
+                   }
+      ;
+word_endsubroutine : TOK_ENDSUBROUTINE
+                    {
+                      if ( couldaddvariable == 1 )
+                      {
+                       strcpy($$,$1);
+                       pos_endsubroutine = setposcur()-strlen($1);
+                       functiondeclarationisdone = 0;
+                       }
+                    }
+      ;
+word_endunit : TOK_ENDUNIT
+                    {
+                      if ( couldaddvariable == 1 )
+                      {
+                       strcpy($$,$1);
+                       pos_endsubroutine = setposcur()-strlen($1);
+                       }
+                    }
+      ;
+word_endprogram :  TOK_ENDPROGRAM
+                    {
+                      if ( couldaddvariable == 1 )
+                      {
+                       strcpy($$,$1);
+                       pos_endsubroutine = setposcur()-strlen($1);
+                       }
+                    }
+      ;
+word_endfunction : TOK_ENDFUNCTION
+                    {
+                      if ( couldaddvariable == 1 )
+                      {
+                       strcpy($$,$1);
+                       pos_endsubroutine = setposcur()-strlen($1);
+                       }
+                    }
+      ;
+caselist : expr
+      | caselist ',' expr
+      | caselist ':' expr
+      ;
+boucledo : worddo opt_int do_arg
+      | wordwhile expr
+      | TOK_ENDDO optname
+      ;
+do_arg :
+      | do_var '=' expr ',' expr
+      | do_var '=' expr ',' expr ',' expr
+opt_int :
+      | TOK_CSTINT opt_comma
+      ;
+opt_name : '\n'  {strcpy($$,"");}
+      | TOK_NAME {strcpy($$,$1);}
+      ;
+optname :
+      | TOK_NAME
+      ;
+worddo :  TOK_PLAINDO
+      ;
+wordwhile :TOK_DOWHILE
+      ;
+
+dotarget :
+      | TOK_CSTINT
+      ;
+
+iffable : TOK_CONTINUE
+      | ident_dims after_ident_dims
+      | goto
+      | io
+      | call
+      | TOK_ALLOCATE '(' allocation_list opt_stat_spec ')'
+                     {
+                          Add_SubroutineWhereAgrifUsed_1(subroutinename,
+                                                        curmodulename);
+                                                        inallocate = 0;
+                     }
+      | TOK_DEALLOCATE '(' allocate_object_list opt_stat_spec ')'
+                     {
+                          Add_SubroutineWhereAgrifUsed_1(subroutinename,
+                                                        curmodulename);
+                                                        inallocate = 0;
+                     }
+      | TOK_EXIT optexpr
+      | TOK_RETURN opt_expr
+      | TOK_CYCLE opt_expr
+      | stop opt_expr
+      | int_list
+      ;
+before_dims : {if ( couldaddvariable == 1 ) created_dimensionlist = 0;}
+ident_dims : ident before_dims dims dims
+              {
+                  created_dimensionlist = 1;
+                  if  ( agrif_parentcall == 1 )
+                  {
+                      ModifyTheAgrifFunction_0($3->dim.last);
+                      agrif_parentcall =0;
+                      fprintf(fortranout," = ");
+                  }
+              }
+      | ident_dims '%' ident before_dims dims dims
+      {created_dimensionlist = 1;}
+int_list : TOK_CSTINT
+      | int_list ',' TOK_CSTINT
+      ;
+after_ident_dims : '=' expr
+      | TOK_POINT_TO expr
+      ;
+call : keywordcall opt_call
+                   {
+                      inagrifcallargument = 0 ;
+                      incalldeclare=0;
+                      if ( oldfortranout &&
+                           !strcasecmp(meetagrifinitgrids,subroutinename) &&
+                           firstpass == 0 &&
+                           callmpiinit == 1)
+                      {
+                      /*   pos_end = setposcur();
+                         RemoveWordSET_0(fortranout,pos_curcall,
+                                               pos_end-pos_curcall);
+                         fprintf(oldfortranout,"      Call MPI_Init (%s) \n"
+                                                                   ,mpiinitvar);*/
+                      }
+                      if ( oldfortranout           &&
+                           callagrifinitgrids == 1 &&
+                           firstpass == 0 )
+                      {
+                         pos_end = setposcur();
+                         RemoveWordSET_0(fortranout,pos_curcall,
+                                               pos_end-pos_curcall);
+
+                         strcpy(subofagrifinitgrids,subroutinename);
+                      }
+                      Instanciation_0(sameagrifname);
+                   }
+      ;
+opt_call :
+      | '(' opt_callarglist  ')'
+      ;
+opt_callarglist :
+      | callarglist
+      ;
+keywordcall : before_call TOK_NAME
+                    {
+                       if (!strcasecmp($2,"MPI_Init") )
+                       {
+                          callmpiinit = 1;
+                       }
+                       else
+                       {
+                          callmpiinit = 0;
+                       }
+                       if (!strcasecmp($2,"Agrif_Init_Grids") )
+                       {
+                          callagrifinitgrids = 1;
+                          strcpy(meetagrifinitgrids,subroutinename);
+                       }
+                       else callagrifinitgrids = 0;
+                       if ( !strcasecmp($2,"Agrif_Open_File") )
+                       {
+                          Add_SubroutineWhereAgrifUsed_1(subroutinename,
+                                                        curmodulename);
+                       }
+                       if ( Vartonumber($2) == 1 )
+                       {
+                          incalldeclare=1;
+                          inagrifcallargument = 1 ;
+                          Add_SubroutineWhereAgrifUsed_1(subroutinename,
+                                                        curmodulename);
+                       }
+                    }
+      ;
+before_call : TOK_CALL
+                    {pos_curcall=setposcur()-4;}
+callarglist :  callarg
+      | callarglist ',' callarg
+      ;
+
+callarg :  expr {
+                  if ( callmpiinit == 1 )
+                  {
+                     strcpy(mpiinitvar,$1);
+                     if ( firstpass == 1 )
+                     {
+                        Add_UsedInSubroutine_Var_1 (mpiinitvar);
+/*                        curvar=createvar($1,NULL);
+                        curlistvar=insertvar(NULL,curvar);
+                        List_Subr outineArgument_Var = AddListvarToListvar
+                         (curlistvar,List_SubroutineAr gument_Var,1);*/
+                     }
+                  }
+               }
+      | '*' label
+      ;
+
+stop : TOK_PAUSE
+      | TOK_STOP
+      ;
+
+io : iofctl ioctl
+      | read option_read
+      | write ioctl
+      | write ioctl outlist
+      | TOK_REWIND after_rewind
+      | TOK_FORMAT
+      ;
+opt_CHAR_INT :
+      | TOK_CSTINT TOK_NAME
+      ;
+idfile : '*'
+      | TOK_CSTINT
+      | ident
+      ;
+option_print :
+      | ',' outlist
+      ;
+option_inlist :
+      | inlist
+      ;
+option_read : ioctl option_inlist
+      | infmt opt_inlist
+      ;
+opt_outlist :
+      | outlist
+      ;
+opt_inlist :
+      | ',' inlist
+      ;
+ioctl :  '(' ctllist ')'
+      | '(' fexpr ')'
+      ;
+after_rewind :  '(' ident ')'
+      | '(' TOK_CSTINT ')'
+      | TOK_CSTINT
+      | '(' uexpr ')'
+      | TOK_NAME
+      ;
+ctllist : ioclause
+      | ctllist ',' ioclause
+      ;
+ioclause : fexpr
+      | '*'
+      | TOK_DASTER
+      | TOK_NAME expr
+      | TOK_NAME expr '%' ident_dims
+      | TOK_NAME '(' triplet ')'
+      | TOK_NAME '*'
+      | TOK_NAME TOK_DASTER
+      ;
+iofctl : TOK_OPEN
+      | TOK_CLOSE
+      ;
+infmt :  unpar_fexpr
+      | '*'
+      ;
+
+read :TOK_READ
+      | TOK_INQUIRE
+      | TOK_PRINT
+      ;
+
+write : TOK_WRITE
+      ;
+
+fexpr : unpar_fexpr
+      | '(' fexpr ')'
+      ;
+unpar_fexpr : lhs
+      | simple_const
+      | fexpr addop fexpr %prec '+'
+      | fexpr '*' fexpr
+      | fexpr TOK_SLASH fexpr
+      | fexpr TOK_DASTER fexpr
+      | addop fexpr %prec '*'
+      | fexpr TOK_DSLASH fexpr
+      | TOK_FILE expr
+      | TOK_EXIST expr
+      | TOK_ERR expr
+      | TOK_END expr
+      | TOK_NAME '=' expr
+      ;
+addop : '+'
+      | '-'
+      ;
+inlist : inelt
+      | inlist ',' inelt
+      ;
+opt_lhs :
+      | lhs
+      ;
+inelt : opt_lhs opt_operation
+      | '(' inlist ')' opt_operation
+      | predefinedfunction opt_operation
+      | simple_const opt_operation
+      | '(' inlist ',' dospec ')'
+      ;
+opt_operation :
+      | operation
+      | opt_operation operation
+      ;
+outlist : uexpr    {if ( couldaddvariable == 1 ) strcpy($$,$1);}
+      | other      {if ( couldaddvariable == 1 ) strcpy($$,$1);}
+      | out2       {if ( couldaddvariable == 1 ) strcpy($$,$1);}
+      ;
+out2: uexpr ',' expr
+                   {if ( couldaddvariable == 1 ) sprintf($$,"%s,%s",$1,$3);}
+      | uexpr ',' other
+                   {if ( couldaddvariable == 1 ) sprintf($$,"%s,%s",$1,$3);}
+      | other ',' expr
+                   {if ( couldaddvariable == 1 ) sprintf($$,"%s,%s",$1,$3);}
+      | other ',' other
+                   {if ( couldaddvariable == 1 ) sprintf($$,"%s,%s",$1,$3);}
+      | out2 ',' expr
+                   {if ( couldaddvariable == 1 ) sprintf($$,"%s,%s",$1,$3);}
+      | out2 ',' other
+                   {if ( couldaddvariable == 1 ) sprintf($$,"%s,%s",$1,$3);}
+      | uexpr     {if ( couldaddvariable == 1 ) strcpy($$,$1);}
+      | predefinedfunction {if ( couldaddvariable == 1 ) strcpy($$,$1);}
+      ;
+other :  complex_const
+                   {if ( couldaddvariable == 1 ) strcpy($$,$1);}
+      | '(' expr ')'
+                   {if ( couldaddvariable == 1 ) sprintf($$," (%s)",$2);}
+      | '(' uexpr ',' dospec ')'
+                   {if ( couldaddvariable == 1 ) sprintf($$,"(%s,%s)",$2,$4);}
+      | '(' other ',' dospec ')'
+                   {if ( couldaddvariable == 1 ) sprintf($$,"(%s,%s)",$2,$4);}
+      | '(' out2 ',' dospec ')'
+                   {if ( couldaddvariable == 1 ) sprintf($$,"(%s,%s)",$2,$4);}
+      ;
+
+dospec : TOK_NAME '=' expr ',' expr
+                   {if ( couldaddvariable == 1 )
+                                              sprintf($$,"%s=%s,%s)",$1,$3,$5);}
+      | TOK_NAME '=' expr ',' expr ',' expr
+                   {if ( couldaddvariable == 1 )
+                                        sprintf($$,"%s=%s,%s,%s)",$1,$3,$5,$7);}
+      ;
+labellist : label
+      | labellist ',' label
+      ;
+label : TOK_CSTINT
+      ;
+goto : TOK_PLAINGOTO '(' expr ',' expr ')' ',' expr
+      | TOK_PLAINGOTO label
+      ;
+allocation_list : allocate_object
+      | ident_dims
+      | allocation_list ',' allocate_object
+      ;
+allocate_object : ident
+                   {Add_Allocate_Var_1($1,curmodulename);}
+      | structure_component
+      | array_element
+      ;
+array_element : ident '(' funargs ')'
+                   {Add_Allocate_Var_1($1,curmodulename);}
+      ;
+subscript_list : expr
+      | subscript_list ',' expr
+      ;
+
+allocate_object_list :allocate_object
+      | allocate_object_list ',' allocate_object
+      ;
+opt_stat_spec :
+      | ',' TOK_STAT '=' ident
+      ;
+pointer_name_list : ident
+      | pointer_name_list ',' ident
+      ;
+opt_construct_name :
+      | TOK_NAME
+      ;
+opt_construct_name_colon :
+      | TOK_CONSTRUCTID ':'
+      ;
+logif : TOK_LOGICALIF expr ')'
+      ;
+do_var : ident {strcpy($$,$1);}
+      ;
+%%
+
+void processfortran(char *fichier_entree)
+{
+   extern FILE *fortranin;
+   extern FILE *fortranout;
+   char nomfile[LONG_C];
+   int c;
+   int confirmyes;
+
+   /*fortrandebug = 1;*/
+   if ( mark == 1 ) printf("Firstpass == %d \n",firstpass);
+/******************************************************************************/
+/*  1-  Open input and output files                                           */
+/******************************************************************************/
+   strcpy(nomfile,commondirin);
+   strcat(nomfile,"/");
+   strcat(nomfile,fichier_entree);
+   fortranin=fopen( nomfile,"r");
+   if (! fortranin)
+   {
+      printf("Error : File %s does not exist\n",nomfile);
+      exit(1);
+   }
+
+   strcpy(curfile,nomfile);
+   strcpy(nomfile,commondirout);
+   strcat(nomfile,"/");
+   strcat(nomfile,fichier_entree);
+   strcpy(nomfileoutput,nomfile);
+   Save_Length(nomfileoutput,31);
+   if (firstpass == 1)
+   {
+      if (checkexistcommon == 1)
+      {
+         if (fopen(nomfile,"r"))
+         {
+            printf("Warning : file %s already exist\n",nomfile);
+            confirmyes = 0;
+            while (confirmyes==0)
+            {
+               printf("Override file %s ? [Y/N]\n",nomfile);
+               c=getchar();
+               getchar();
+               if (c==79 || c==110)
+               {
+                  printf("We stop\n");
+                  exit(1);
+               }
+               if (c==89 || c==121)
+               {
+                  confirmyes=1;
+               }
+            }
+         }
+      }
+   }
+
+/******************************************************************************/
+/*  2-  Variables initialization                                              */
+/******************************************************************************/
+
+   line_num_fortran_common=1;
+   line_num_fortran=1;
+   PublicDeclare = 0;
+   PrivateDeclare = 0;
+   ExternalDeclare = 0;
+   SaveDeclare = 0;
+   pointerdeclare = 0;
+   optionaldeclare = 0;
+   incalldeclare = 0;
+   VarType = 0;
+   VarTypepar = 0;
+   Allocatabledeclare = 0 ;
+   strcpy(NamePrecision," ");
+   VariableIsParameter =  0 ;
+   strcpy(NamePrecision,"");
+   c_star = 0 ;
+   functiondeclarationisdone = 0;
+   insubroutinedeclare = 0 ;
+   strcpy(subroutinename," ");
+   InitialValueGiven = 0 ;
+   strcpy(EmptyChar," ");
+   inmoduledeclare = 0;
+   colnum=0;
+   incom=0;
+   couldaddvariable=1;
+   aftercontainsdeclare = 1;
+   strcpy(nameinttypename,"");
+   /* Name of the file without format                                         */
+   tmp = strchr(fichier_entree, '.');
+   strncpy(curfilename,fichier_entree,strlen(fichier_entree)-strlen(tmp));
+   Save_Length(curfilename,30);
+/******************************************************************************/
+/*  3-  Parsing of the input file (1 time)                                    */
+/******************************************************************************/
+   if (firstpass == 0 )
+   {
+      fortranout=fopen(nomfileoutput,"w");
+
+      NewModule_Creation_0();
+   }
+
+   fortranparse();
+
+   strcpy(curfile,mainfile);
+
+   if (firstpass == 0 ) fclose(fortranout);
+}
Index: /vendors/AGRIF/r_00/LIB/fortran.yy.c
===================================================================
--- /vendors/AGRIF/r_00/LIB/fortran.yy.c	(revision 1902)
+++ /vendors/AGRIF/r_00/LIB/fortran.yy.c	(revision 1902)
@@ -0,0 +1,3843 @@
+#define yy_create_buffer fortran_create_buffer
+#define yy_delete_buffer fortran_delete_buffer
+#define yy_scan_buffer fortran_scan_buffer
+#define yy_scan_string fortran_scan_string
+#define yy_scan_bytes fortran_scan_bytes
+#define yy_flex_debug fortran_flex_debug
+#define yy_init_buffer fortran_init_buffer
+#define yy_flush_buffer fortran_flush_buffer
+#define yy_load_buffer_state fortran_load_buffer_state
+#define yy_switch_to_buffer fortran_switch_to_buffer
+#define yyin fortranin
+#define yyleng fortranleng
+#define yylex fortranlex
+#define yyout fortranout
+#define yyrestart fortranrestart
+#define yytext fortrantext
+#define yywrap fortranwrap
+
+#line 20 "fortran.yy.c"
+/* A lexical scanner generated by flex */
+
+/* Scanner skeleton version:
+ * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $
+ */
+
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 5
+
+#include <stdio.h>
+
+
+/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
+#ifdef c_plusplus
+#ifndef __cplusplus
+#define __cplusplus
+#endif
+#endif
+
+
+#ifdef __cplusplus
+
+#include <stdlib.h>
+#include <unistd.h>
+
+/* Use prototypes in function declarations. */
+#define YY_USE_PROTOS
+
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else	/* ! __cplusplus */
+
+#if __STDC__
+
+#define YY_USE_PROTOS
+#define YY_USE_CONST
+
+#endif	/* __STDC__ */
+#endif	/* ! __cplusplus */
+
+#ifdef __TURBOC__
+ #pragma warn -rch
+ #pragma warn -use
+#include <io.h>
+#include <stdlib.h>
+#define YY_USE_CONST
+#define YY_USE_PROTOS
+#endif
+
+#ifdef YY_USE_CONST
+#define yyconst const
+#else
+#define yyconst
+#endif
+
+
+#ifdef YY_USE_PROTOS
+#define YY_PROTO(proto) proto
+#else
+#define YY_PROTO(proto) ()
+#endif
+
+/* Returned upon end-of-file. */
+#define YY_NULL 0
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index.  If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
+ */
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+
+/* Enter a start condition.  This macro really ought to take a parameter,
+ * but we do it the disgusting crufty way forced on us by the ()-less
+ * definition of BEGIN.
+ */
+#define BEGIN yy_start = 1 + 2 *
+
+/* Translate the current start state into a value that can be later handed
+ * to BEGIN to return to the state.  The YYSTATE alias is for lex
+ * compatibility.
+ */
+#define YY_START ((yy_start - 1) / 2)
+#define YYSTATE YY_START
+
+/* Action number for EOF rule of a given start state. */
+#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
+/* Special action meaning "start processing a new file". */
+#define YY_NEW_FILE yyrestart( yyin )
+
+#define YY_END_OF_BUFFER_CHAR 0
+
+/* Size of default input buffer. */
+#define YY_BUF_SIZE 16384
+
+typedef struct yy_buffer_state *YY_BUFFER_STATE;
+
+extern int yyleng;
+extern FILE *yyin, *yyout;
+
+#define EOB_ACT_CONTINUE_SCAN 0
+#define EOB_ACT_END_OF_FILE 1
+#define EOB_ACT_LAST_MATCH 2
+
+/* The funky do-while in the following #define is used to turn the definition
+ * int a single C statement (which needs a semi-colon terminator).  This
+ * avoids problems with code like:
+ *
+ * 	if ( condition_holds )
+ *		yyless( 5 );
+ *	else
+ *		do_something_else();
+ *
+ * Prior to using the do-while the compiler would get upset at the
+ * "else" because it interpreted the "if" statement as being all
+ * done when it reached the ';' after the yyless() call.
+ */
+
+/* Return all but the first 'n' matched characters back to the input stream. */
+
+#define yyless(n) \
+	do \
+		{ \
+		/* Undo effects of setting up yytext. */ \
+		*yy_cp = yy_hold_char; \
+		YY_RESTORE_YY_MORE_OFFSET \
+		yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
+		YY_DO_BEFORE_ACTION; /* set up yytext again */ \
+		} \
+	while ( 0 )
+
+#define unput(c) yyunput( c, yytext_ptr )
+
+/* The following is because we cannot portably get our hands on size_t
+ * (without autoconf's help, which isn't available because we want
+ * flex-generated scanners to compile on their own).
+ */
+typedef unsigned int yy_size_t;
+
+
+struct yy_buffer_state
+	{
+	FILE *yy_input_file;
+
+	char *yy_ch_buf;		/* input buffer */
+	char *yy_buf_pos;		/* current position in input buffer */
+
+	/* Size of input buffer in bytes, not including room for EOB
+	 * characters.
+	 */
+	yy_size_t yy_buf_size;
+
+	/* Number of characters read into yy_ch_buf, not including EOB
+	 * characters.
+	 */
+	int yy_n_chars;
+
+	/* Whether we "own" the buffer - i.e., we know we created it,
+	 * and can realloc() it to grow it, and should free() it to
+	 * delete it.
+	 */
+	int yy_is_our_buffer;
+
+	/* Whether this is an "interactive" input source; if so, and
+	 * if we're using stdio for input, then we want to use getc()
+	 * instead of fread(), to make sure we stop fetching input after
+	 * each newline.
+	 */
+	int yy_is_interactive;
+
+	/* Whether we're considered to be at the beginning of a line.
+	 * If so, '^' rules will be active on the next match, otherwise
+	 * not.
+	 */
+	int yy_at_bol;
+
+	/* Whether to try to fill the input buffer when we reach the
+	 * end of it.
+	 */
+	int yy_fill_buffer;
+
+	int yy_buffer_status;
+#define YY_BUFFER_NEW 0
+#define YY_BUFFER_NORMAL 1
+	/* When an EOF's been seen but there's still some text to process
+	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+	 * shouldn't try reading from the input source any more.  We might
+	 * still have a bunch of tokens to match, though, because of
+	 * possible backing-up.
+	 *
+	 * When we actually see the EOF, we change the status to "new"
+	 * (via yyrestart()), so that the user can continue scanning by
+	 * just pointing yyin at a new input file.
+	 */
+#define YY_BUFFER_EOF_PENDING 2
+	};
+
+static YY_BUFFER_STATE yy_current_buffer = 0;
+
+/* We provide macros for accessing buffer states in case in the
+ * future we want to put the buffer states in a more general
+ * "scanner state".
+ */
+#define YY_CURRENT_BUFFER yy_current_buffer
+
+
+/* yy_hold_char holds the character lost when yytext is formed. */
+static char yy_hold_char;
+
+static int yy_n_chars;		/* number of characters read into yy_ch_buf */
+
+
+int yyleng;
+
+/* Points to current character in buffer. */
+static char *yy_c_buf_p = (char *) 0;
+static int yy_init = 1;		/* whether we need to initialize */
+static int yy_start = 0;	/* start state number */
+
+/* Flag which is used to allow yywrap()'s to do buffer switches
+ * instead of setting up a fresh yyin.  A bit of a hack ...
+ */
+static int yy_did_buffer_switch_on_eof;
+
+void yyrestart YY_PROTO(( FILE *input_file ));
+
+void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
+void yy_load_buffer_state YY_PROTO(( void ));
+YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
+void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
+void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
+void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
+#define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
+
+YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
+YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
+YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
+
+static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
+static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));
+static void yy_flex_free YY_PROTO(( void * ));
+
+#define yy_new_buffer yy_create_buffer
+
+#define yy_set_interactive(is_interactive) \
+	{ \
+	if ( ! yy_current_buffer ) \
+		yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
+	yy_current_buffer->yy_is_interactive = is_interactive; \
+	}
+
+#define yy_set_bol(at_bol) \
+	{ \
+	if ( ! yy_current_buffer ) \
+		yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
+	yy_current_buffer->yy_at_bol = at_bol; \
+	}
+
+#define YY_AT_BOL() (yy_current_buffer->yy_at_bol)
+
+typedef unsigned char YY_CHAR;
+FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
+typedef int yy_state_type;
+extern char *yytext;
+#define yytext_ptr yytext
+
+static yy_state_type yy_get_previous_state YY_PROTO(( void ));
+static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
+static int yy_get_next_buffer YY_PROTO(( void ));
+static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
+
+/* Done after the current pattern has been matched and before the
+ * corresponding action - sets up yytext.
+ */
+#define YY_DO_BEFORE_ACTION \
+	yytext_ptr = yy_bp; \
+	yyleng = (int) (yy_cp - yy_bp); \
+	yy_hold_char = *yy_cp; \
+	*yy_cp = '\0'; \
+	yy_c_buf_p = yy_cp;
+
+#define YY_NUM_RULES 173
+#define YY_END_OF_BUFFER 174
+static yyconst short int yy_accept[1124] =
+    {   0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  174,  173,  163,  159,  162,  172,  151,  150,
+      153,  165,  151,  153,  153,  155,  152,  138,  149,  154,
+      157,  156,  158,  144,  144,  144,  144,  144,  144,  144,
+      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
+      144,  163,  159,  162,  172,  149,  144,  144,  144,  144,
+      144,  173,  173,  170,  173,  153,  144,    0,    0,  163,
+      164,    0,  162,  172,  172,  172,    0,  142,    0,    0,
+      165,  165,  165,  165,    0,    0,    0,  141,    0,    0,
+      133,   25,    0,  145,    0,    0,    0,    0,    0,    0,
+
+        0,  134,    0,  149,   24,    0,  144,  144,  144,  144,
+      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
+      144,  144,  144,   42,  144,  144,  144,  144,  144,  144,
+      144,  144,  144,  144,  144,  144,  144,   84,  144,  144,
+      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
+      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
+      144,  144,  144,  144,  163,  161,    0,  161,    0,    0,
+        0,    0,    0,  164,  160,  161,    0,  172,  171,  172,
+      172,  172,  161,  149,    4,  144,  144,  144,  144,  144,
+      144,    0,  170,    0,    0,    0,  167,   25,    0,    0,
+
+        4,    0,  144,  144,  144,  144,  144,  144,    0,    0,
+        0,  172,  172,    0,    0,  165,  165,    0,    0,    0,
+        0,  140,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  148,  145,    0,
+        0,    0,  143,    0,  144,  144,  144,  144,  144,  144,
+      144,  144,  144,  144,  144,  144,  144,  114,  144,  144,
+      144,    0,  144,  144,  144,  144,  144,   15,  144,  144,
+      144,  113,  144,  144,  144,  144,  144,    0,  144,    0,
+       95,  144,  144,  144,  144,  144,  120,  144,  144,  125,
+      144,  144,  144,  144,  144,  144,   88,  144,  144,  144,
+
+      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
+      144,  117,  144,  144,  144,  144,  144,  121,  144,  144,
+      144,  144,  144,  163,  161,    0,  164,    0,    0,    0,
+        0,    0,    0,    0,  161,    0,  161,  172,  172,  172,
+      149,    4,    4,    4,    4,  144,  144,  144,  144,  144,
+      144,    0,    0,    0,  167,    0,    0,    4,    4,    4,
+        4,  143,    0,  144,  144,    0,  144,  144,  144,  144,
+        0,    0,    0,  172,  172,    0,    0,  165,  165,    0,
+        0,    0,    0,  146,    0,  145,    0,  147,    0,   27,
+        0,   29,   28,   31,   30,   33,    0,    0,   35,    0,
+
+      145,    0,  146,    0,  145,    0,  147,    0,  143,    0,
+      144,  144,  124,  116,  144,  119,  122,  144,   21,  144,
+      144,  144,  144,  144,  115,  144,  144,  144,    0,  144,
+      144,  144,   93,    0,  107,  144,  144,  144,  144,  144,
+      144,  144,  144,  144,    0,  108,  144,  144,  144,  144,
+      144,  144,  144,    0,   87,  144,  144,  144,  144,  144,
+      144,  144,    0,   97,  144,  144,    0,  110,  144,  144,
+      144,  144,  111,   20,   59,   73,  144,  144,  144,  144,
+      144,  144,  144,  144,   78,   43,  144,  144,  144,  144,
+       68,  144,  126,  118,  144,   71,   53,  144,    0,   96,
+
+       98,  144,   91,  100,  144,  144,  163,  161,  164,    0,
+        0,    0,    0,    0,    0,  161,    0,  161,  172,  172,
+      172,  149,    4,    4,  144,  144,  144,  144,  144,   17,
+        0,    0,    0,    4,    4,    0,  143,    0,  144,  144,
+      144,  144,    0,    0,    0,  172,  172,    0,    0,  165,
+      165,    0,    0,   37,   26,    0,   34,   36,    0,  143,
+        0,  143,  144,  144,  144,  144,  144,   48,  144,  144,
+      144,  123,  144,  144,    0,  144,  144,  144,    0,  144,
+      144,    0,    0,    0,    0,    0,    0,    0,    0,   41,
+      144,   94,  144,  144,  144,  144,  144,  144,  144,  144,
+
+      144,   75,   75,   75,   75,  144,    0,  106,  112,  144,
+      144,   87,  144,  144,   89,  144,  144,  144,  144,  144,
+      144,  144,  144,  144,  144,  144,  144,  144,  144,   51,
+      144,   76,  144,  144,  144,    0,  144,  144,  144,  144,
+      144,  101,  144,  144,   54,   80,  163,  161,  164,    0,
+        0,    0,    0,    0,  161,    0,  161,  172,  172,  172,
+      149,    4,    3,    0,  103,  144,  144,   85,  144,   69,
+       70,   69,    0,    0,    0,    4,    3,    0,  143,    0,
+      143,  144,   48,  144,  123,    0,   22,    0,  172,   22,
+        0,   22,   22,  165,   22,    0,   22,   22,   22,   32,
+
+      144,   22,   22,   22,  144,  144,  144,   62,  144,  144,
+      144,  144,    0,  144,  144,  139,    0,    0,   92,  144,
+       41,    0,   94,    0,    0,    0,    0,    0,    0,    0,
+      144,  144,  144,  144,  144,  144,  144,  144,  144,    0,
+      109,  144,  144,  144,  144,  144,  144,  144,   65,  144,
+      144,  144,  128,   99,  127,  129,   38,  144,  144,  144,
+      144,  144,  144,   82,    0,  144,   10,   74,   18,  144,
+      144,   81,  163,  161,  164,    0,    0,    0,  161,  172,
+      172,   22,    4,    3,    3,  144,  144,  144,    0,    0,
+       22,    4,    3,    3,  144,   22,   22,   22,   23,  166,
+
+       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,
+      144,  144,  144,   57,  144,  144,  144,    0,    0,  144,
+      144,   39,   92,    0,  144,    0,    0,    0,    0,    0,
+        0,    0,    0,  144,  144,  144,  144,  144,  144,   72,
+      144,  144,  144,    0,    0,  144,  144,   16,   49,   44,
+      144,  144,   45,    0,  144,  144,  144,  144,   66,   83,
+        7,    0,    0,  144,    0,  144,  144,    0,    0,    0,
+      172,   23,    4,  144,  144,   63,    0,   23,    4,   23,
+       23,   23,  144,    8,  144,  144,   86,  144,  144,   39,
+        0,    0,  144,  144,    0,  144,    0,    0,    0,    0,
+
+        0,    0,   72,    0,  144,  144,  144,  144,  144,  144,
+       55,  144,   64,    0,    0,    0,  135,   11,   19,  144,
+      144,    0,  144,   79,   67,  144,    0,  144,    0,  144,
+      144,    0,    0,  172,    4,  144,   58,    0,    4,  144,
+      131,   46,  144,   50,    0,    0,  144,  144,    0,   56,
+        0,    0,    0,    0,    0,    0,   55,  144,  144,   40,
+      144,  105,  144,  144,    0,    0,    0,    0,  135,  130,
+       90,    0,  144,   60,    0,   61,    0,  144,  144,    0,
+       58,  172,    4,    4,  144,    0,    4,    4,  144,    9,
+        0,    0,  144,  144,   56,    0,    0,   40,    0,  105,
+
+        0,  144,  144,   13,  144,  144,    0,    0,    0,  144,
+        0,    0,  102,    6,    0,  172,    4,    4,  144,    0,
+        4,    4,   47,    0,    0,  144,  144,    0,    0,   13,
+        0,   14,  144,  144,   52,    0,    0,    0,  144,    0,
+      102,    0,  172,    4,    2,  104,    0,    4,    2,    0,
+        0,  144,  144,   14,    0,    0,  132,  144,    0,    0,
+        0,  144,    0,  104,  172,    4,    0,    4,    0,    0,
+      137,  144,  132,    0,   12,    0,    0,    0,  144,    0,
+      172,    1,    0,    1,  137,    0,  144,   12,    0,    0,
+        0,  144,    0,  172,    0,    0,  136,    0,    0,    0,
+
+       77,    5,  172,    0,  136,   77,  172,    0,  172,    0,
+      172,    0,  172,    0,  172,    0,  168,    0,    0,    0,
+        0,  169,    0
+    } ;
+
+static yyconst int yy_ec[256] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    4,    5,    6,    7,    8,    9,   10,   11,   12,
+       13,   14,   15,   16,   17,   18,   19,   20,   21,   22,
+       23,   24,   25,   26,   27,   28,   20,   29,   30,   31,
+       32,   33,    1,    1,   37,   38,   39,   40,   41,   42,
+       43,   44,   45,   46,   47,   48,   49,   50,   51,   52,
+       53,   54,   55,   56,   57,   58,   59,   60,   61,   62,
+       34,    1,   35,    1,   36,    1,   37,   38,   39,   40,
+
+       41,   42,   43,   44,   45,   46,   47,   48,   49,   50,
+       51,   52,   53,   54,   55,   56,   57,   58,   59,   60,
+       61,   62,   63,   63,   63,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1
+    } ;
+
+static yyconst int yy_meta[64] =
+    {   0,
+        1,    2,    3,    4,    1,    5,    1,    1,    1,    6,
+        1,    1,    1,    1,    7,    1,    7,    8,    1,    9,
+        9,    9,    9,    9,    9,    9,    9,    9,    1,    1,
+        1,    1,    1,    1,    1,   10,   11,   10,   10,   12,
+       13,   14,   15,   16,   10,   10,   10,   15,   15,   15,
+       11,   10,   12,   15,   15,   14,   15,   10,   17,   10,
+       10,   10,    5
+    } ;
+
+static yyconst short int yy_base[1180] =
+    {   0,
+        0,   62,    0,    0,    0,    0, 4185,   65,    0,   55,
+        0,    0, 4187,   35,   69,   70,   74,   37,   75,   50,
+       53,   72,   93,   78,   66,   56,  148,   87,   81,   65,
+       68,   99,   71,  191,  230,  108,  183,  225,  244,  103,
+      137,  152,  185,  250,  265,  262,  281,  220,  286,  296,
+      308,  368,  134,  424,  321,  350,  149, 4149,  310,  337,
+      270, 4189, 4182, 4189,  158,  380,  481, 4147, 4129,  138,
+      163,  175,  179,    0, 4145, 4127, 4174, 4189,  147,  133,
+     4176, 4175,  192,  156,  232,  393,  376, 4189,  402,  406,
+     4189, 4189,  543,  184, 4127, 4123,  204,  218,  226, 4121,
+
+     4123, 4189,  584,  358, 4189,  448,  532,  507,  514,  572,
+      534,  588,  593,  605,  617,  381,  242,  169,  195,  404,
+      384,  312,  517,  672,  524,  378,  403,  544,  365,  630,
+      597,  545,  424,  565,  651,  679,  425,  650,  626,  648,
+      672,  673,  603,  674,  680,  684,  698,  686,  699,  704,
+      706,  584,  707,  710,  711,  730,  683,  297,  732,  735,
+      734,  737,  742,  750,  788,  795, 4170,  389,  316, 4135,
+     4123,   72, 4115,  807, 4189,  863,  427, 4166, 4189,  225,
+      327,  543,  632,  660,  804,  765,  799,  770,  764,  785,
+      788, 4165, 4189,  343, 4164,  774, 4189, 4163,  820,  564,
+
+      856,  918,  946, 4147,  271,  661,  187,  270, 4116, 4106,
+      812, 4114, 4104,  547,  804,  617,  398,  859,  894,  906,
+      868, 4189,  889,  871,  815,  860,  896, 4120,  372, 4141,
+     4140, 4139, 4138,  275, 4099, 4136, 4099, 4189,  874,  907,
+      908,  914, 4111, 4110,  864,  973,  999,  977,  975,  983,
+      984,  981, 1002,  986,  987, 1006, 1007, 1008, 1011, 1020,
+     1010, 4091,  737, 1029, 1032, 1017, 1036, 1089, 1033, 1078,
+     1042, 1035, 1047, 1058, 1038, 1057, 1063, 1101, 1071, 1013,
+     4189, 1070, 1079, 1082, 1083, 1105, 1110, 1148, 1149, 1112,
+     1117, 1119, 1126, 1128, 1133, 1139, 1076, 1125, 1137, 1140,
+
+     1151, 1161, 1162, 1171, 1163, 1175, 1176, 1177, 1186, 1187,
+     1184, 1198, 1189, 1199, 1202, 1141, 1245, 1207, 1221, 1209,
+     1211, 1213, 1225, 1264, 1283, 4088, 1290, 4145, 4092, 4096,
+     4089, 4093, 4091, 4101, 1346,  715,  922,  557, 1120,  837,
+     1266,    0,  931, 4098, 4091, 1236, 1235, 1243, 1264, 1271,
+     1274,  800, 4020, 1311, 4189, 1268,  873, 4003, 1332, 1295,
+     1132, 1401, 1440,    0, 3971, 1479,  697,  659,  815,  998,
+     3883, 3892,  932, 3876, 3823, 1231,  551,  561, 1302, 1321,
+     1342, 1351, 1355, 1385, 1410, 1424, 1449, 1463, 3829, 4189,
+     3812, 4189, 4189, 4189, 4189, 4189, 3767, 3805, 4189, 3802,
+
+     1347, 1488, 1497, 1506, 1515, 1524, 1533, 1302, 3778, 1327,
+     1304, 1525, 4189, 1273, 1362, 1361, 1402, 1403, 1441, 1442,
+     1526, 1443, 1527, 1528, 1531, 1533, 1535, 1534, 3773, 1549,
+     1553, 1539, 1597, 1655, 4189, 1541, 1554, 1563, 1565, 1567,
+     1569, 1575, 1578, 1577, 1361, 4189, 1583, 1714, 1587, 1623,
+     1591, 1596, 1607, 3762, 1611, 1617, 1612, 1616, 1630, 1631,
+     1645, 1639, 1684, 4189, 1652, 1654, 1690, 4189, 1741, 1672,
+     1742, 1743, 1744, 1745, 1746, 1747, 1751, 1757, 1766, 1756,
+     1767, 1771, 1772, 1777, 1776, 1801, 1779, 1780, 1781, 1782,
+     1787, 1790, 1800, 1802, 1828, 1805, 1806, 1810, 1846, 4189,
+
+     1808, 1812, 1809, 1814, 1830, 1832, 1870, 1885, 1892, 3770,
+     3752, 3770, 3767, 3761, 3797, 1948, 1009, 1380, 1303,  663,
+     1414, 1873, 3746, 3747, 1903, 1863, 1902, 1839, 1943, 3794,
+     1306, 1438, 1451, 1849, 1566, 2003, 2029, 2068, 1591,  424,
+     1063, 1373, 3756,    0, 1392, 3755,    0,  815, 3788, 1875,
+     3790, 1919, 1702, 4189, 4189, 3774, 4189, 4189, 1987, 2013,
+     2038, 2052, 1844, 2096, 1864, 1882, 1884, 1883, 1927, 1924,
+     1929, 1909, 1945, 1930, 3746, 1949, 2123, 2124, 2160, 2045,
+     2126, 3738, 3728, 1588, 3733, 3680, 1623, 3668, 3683, 1963,
+     2129, 1965, 2030, 2132, 2130, 2128, 2136, 2148, 2150, 2138,
+
+     2191, 4189, 2186, 2178, 2162, 2180, 1990, 4189, 2164, 2166,
+     2184, 4189, 2187, 2196, 2188, 2190, 2194, 2200, 2209, 2203,
+     2206, 2210, 2218, 2222, 2221, 2230, 2225, 2228, 2236, 2231,
+     2246, 2237, 2243, 2244, 2249, 3696, 2252, 2255, 2258, 2256,
+     2264, 4189, 2265, 2267, 2276, 2277, 2322, 2331, 2341, 2313,
+     3686, 1416, 3684, 2336, 2397, 1449, 1648, 1854, 2040, 3697,
+     2324, 3654, 1783, 2335, 4189, 2313, 2312, 1910, 2335, 2392,
+     4189, 2389, 2194, 2341, 3693, 2249, 2042, 2452, 2478, 2504,
+     2530, 1870, 3675, 2558, 3672,    0, 4189, 2615,    0,    0,
+     3677, 3676, 4189, 3659, 3654, 2353, 2366, 2400, 4189, 4189,
+
+     2643, 2392, 2355, 2331, 2369, 2384, 2385, 2389, 2390, 2391,
+     2392, 2397, 3580, 2431, 2415, 2393, 3585, 3582, 2395, 2430,
+     4189, 3575, 4189, 3566, 3580, 3539, 3541, 3550, 3535, 3495,
+     2454, 2455, 2457, 2480, 2481, 2428, 2670, 2458, 2671, 2455,
+     4189, 2482, 2708, 2672, 2676, 2677, 2692, 2483, 2484, 2678,
+     2680, 2690, 2685, 2699, 2700, 2703, 2739, 2705, 2710, 2711,
+     2712, 2714, 2721, 2715, 2537, 2726, 2719, 2724, 2735, 2775,
+     2744, 2745, 2781, 2792, 2801, 3478, 3436, 3432,    0, 1637,
+     3476, 3475, 3435,    0, 1991, 2750, 2772, 2806, 1959, 3473,
+     3472, 2313, 3471, 2356, 2860, 2921,    0, 3455, 4189, 4189,
+
+        0, 3466, 4189, 3468, 2537, 2621, 4189, 2905, 2793, 2747,
+     2782, 2779, 2805, 2753, 2897, 2780, 2802, 3429, 2458, 2899,
+     2791, 2898, 4189, 3428, 2900, 3429, 3426, 3409, 3422, 3423,
+     3409, 3421, 3407, 2902, 2903, 2918, 2922, 2923, 2924, 2926,
+     2927, 2928, 2936, 2981, 2976, 2937, 2951, 2955, 2957, 2958,
+     2959, 2963, 2960, 2997, 2965, 2966, 2967, 2969, 2979, 2981,
+     2987, 3024, 3423, 2988, 2811, 2990, 2993, 3417, 3407, 2459,
+     2510, 3453, 3419, 2994, 2997, 2462, 3026, 3448, 3029, 3063,
+        0, 3426, 3002, 3000, 3016, 3006, 3013, 3018, 3021, 4189,
+     3389, 3309, 3024, 3022, 3272, 3027, 3215, 3209, 3187, 3150,
+
+     3134, 3029, 4189, 3004, 3055, 3040, 3056, 3042, 3058, 3061,
+     3062, 3067, 3065, 3098, 2484, 3110, 3119, 3070, 3088, 3089,
+     3094, 2917, 3090, 3091, 3097, 3098, 2953, 3099, 2930, 3100,
+     3109, 2818, 2796, 2785, 2502, 3110, 3102, 2383, 3135, 3112,
+     3120, 3124, 3128, 3125, 2746, 2687, 3131, 3133, 2605, 3134,
+     2590, 2592, 2586, 2479, 2459, 2433, 4189, 3139, 3143, 3144,
+     3147, 3149, 3152, 3155, 2541, 3192, 3208, 3204, 3210, 3162,
+     3178, 2438, 3185, 3182, 2414, 3188, 2340, 3189, 3190, 2333,
+     4189, 2018, 2288, 2260, 3192,  112, 3197, 3188, 3200, 3191,
+     2137, 2149, 3210, 3211, 4189, 2017, 2011, 4189, 1998, 4189,
+
+     1986, 3212, 3213, 3197, 3216, 3218, 2624, 3271, 1977, 3239,
+     1982, 1903, 3223, 3231, 1885, 3254, 1854, 1829, 3232, 3066,
+     1951, 1593, 3241, 1822, 1744, 3242, 3245, 1736, 1662, 4189,
+     1653, 3250, 3257, 3252, 3254, 2850, 3310, 1642, 3270, 1622,
+     4189, 1521, 3100, 1441,    0, 3255, 3294, 1280, 1416, 1354,
+     1309, 3268, 3280, 4189, 1314, 1246, 3264, 3278, 3325, 3333,
+     1178, 3284, 1155, 4189, 3300, 1072, 3313, 2771, 1054, 1064,
+     3294, 3296, 4189, 1044, 3302, 3350, 3377,  992, 3305,  960,
+     3102,    0, 3337,  892, 4189,  829, 3312, 4189, 3342, 3388,
+      696, 3345,  555, 3358, 3364,  406, 3367, 3414, 3415,  348,
+
+     3368, 4189, 3341, 3380, 4189, 4189, 3366, 3381, 3351, 3367,
+     2713, 3390, 3382, 3386,  281, 3404, 4189, 3405, 3416, 3426,
+      177, 4189, 4189, 3482, 3499, 3516, 3533, 3550, 3567, 3577,
+     3584, 3601, 3615, 3629, 3646, 3663, 3672, 3685, 3702, 3716,
+     3722, 3731, 3748, 3765, 3424, 3427, 3428, 3774, 3432, 3436,
+     3440,  362, 2185, 3786, 3800, 3806, 3441, 3445, 3812, 3818,
+     3827, 3844, 3861, 3878, 3895, 3912, 3926, 3935, 3952, 3969,
+     3986, 4003, 4020, 4037, 4054, 4071, 4088, 4105, 4122
+    } ;
+
+static yyconst short int yy_def[1180] =
+    {   0,
+     1123,    1, 1124, 1124,    1,    2, 1125, 1125,    1,    2,
+        1,    2, 1123, 1123, 1123, 1123, 1123, 1126, 1127, 1123,
+     1123, 1128, 1129, 1123, 1123, 1123, 1123, 1123, 1130, 1123,
+     1123, 1123, 1123, 1131, 1131,   35,   35,   35,   35,   38,
+       38,   38,   38,   38,   38,   38,   38,   38,   38,   37,
+       37, 1123, 1123, 1123, 1132, 1133,   37,   38,   38,   37,
+       38, 1123, 1134, 1123, 1134, 1135, 1123, 1123, 1123, 1123,
+     1123, 1123, 1123, 1126, 1126, 1126, 1127, 1123, 1127, 1127,
+     1128, 1123, 1128, 1128, 1129, 1136, 1129, 1123, 1129, 1129,
+     1123, 1123, 1123, 1137, 1123, 1123, 1123, 1123, 1123, 1123,
+
+     1123, 1123, 1138, 1130, 1123, 1123,   38,   38,   38,   38,
+       38,   38,   35,   38,   38,  115,  115,  115,  115,  115,
+      115,  115,  115, 1131,  115,  115,  115,  115,  115,  115,
+      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
+      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
+      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
+      115,  115,  115,  115, 1123, 1123, 1139, 1123, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1140, 1132, 1123, 1132,
+     1132, 1132, 1140, 1141, 1142,  115,  115,  115,  115,  115,
+      115, 1134, 1123, 1134, 1143, 1143, 1123, 1143, 1143, 1143,
+
+     1144, 1143, 1123,  203,  203,  203,  203,  203, 1123, 1123,
+     1123, 1126, 1126, 1127, 1127, 1128, 1128, 1136, 1136, 1136,
+     1136, 1123, 1129, 1129, 1145, 1146, 1147, 1123, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1148, 1149,
+     1150, 1151, 1152, 1153,  115,  115,  115,  115,  115,  115,
+      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
+      115, 1154,  124,  115,  115,  115,  115,  115,  115,  115,
+      115,  115,  115,  115,  115,  115,  115, 1123,  115, 1123,
+     1123,  115,  115,  115,  115,  115,  115,  115,  115,  115,
+      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
+
+      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
+      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
+      115,  115,  115, 1123, 1123, 1123, 1123, 1139, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1155, 1155, 1132, 1132, 1132,
+     1156, 1142, 1142, 1142, 1142,  115,  115,  115,  115,  115,
+      115, 1134, 1143, 1143, 1123, 1143, 1143, 1144, 1144, 1144,
+     1144, 1143, 1143,  203,  203, 1143,  203,  203,  203,  203,
+     1123, 1123, 1123, 1126, 1126, 1127, 1127, 1128, 1128, 1136,
+     1129, 1129, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+
+     1148, 1123, 1123, 1123, 1123, 1123, 1123, 1157, 1153, 1158,
+      115,  115, 1123,  115,  115,  115,  115,  115,  115,  115,
+      115,  115,  115,  115,  115,  115,  115,  115, 1123,  115,
+      115,  115,  115, 1123, 1123,  115,  115,  115,  115,  115,
+      115,  115,  115,  115, 1123, 1123,  115, 1123,  115,  115,
+      115,  115,  115, 1123,  115,  115,  115,  115,  115,  115,
+      115,  115, 1123, 1123,  115,  115, 1123, 1123,  115,  115,
+      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
+      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
+      115,  115,  115,  115,  115,  115,  115,  115, 1123, 1123,
+
+      115,  115,  115,  115,  115,  115, 1123, 1123, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1159, 1159, 1132, 1132,
+     1132, 1160, 1142, 1142,  115,  115,  115,  115,  115, 1123,
+     1134, 1143, 1143, 1144, 1144, 1143, 1143, 1143,  203,  203,
+      203,  203, 1123, 1161, 1123, 1126, 1162, 1127, 1163, 1128,
+     1164, 1129, 1165, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+     1123, 1123,  115, 1123,  115,  115,  115,  115,  115,  115,
+      115,  115,  115,  115, 1123,  115,  115,  115, 1123,  115,
+      115, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,  115,
+      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
+
+      115, 1123, 1123,  115,  115,  115, 1123, 1123,  115,  115,
+      115, 1123,  115,  115,  115,  115,  115,  115,  115,  115,
+      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
+      115,  115,  115,  115,  115, 1123,  115,  115,  115,  115,
+      115, 1123,  115,  115,  115,  115, 1123, 1123, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1132, 1132, 1166,
+     1167, 1142, 1168, 1123, 1123,  115,  115, 1123,  115, 1123,
+     1123, 1123, 1134, 1143, 1169, 1144, 1170, 1143, 1143, 1143,
+     1143,  203,  203, 1123,  203, 1171, 1123, 1123, 1172, 1126,
+     1173, 1127, 1123, 1174, 1128, 1175, 1129, 1129, 1123, 1123,
+
+     1123, 1123,  115,  115,  115,  115,  115,  115,  115,  115,
+      115,  115, 1123,  115,  115,  115, 1123, 1123,  115,  115,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+      115,  115,  115,  115,  115,  115,  115,  115,  115, 1123,
+     1123,  115,  115,  115,  115,  115,  115,  115,  115,  115,
+      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
+      115,  115,  115,  115, 1123,  115,  115,  115,  115,  115,
+      115,  115, 1123, 1123, 1123, 1123, 1123, 1123,  655, 1132,
+     1176, 1132, 1142, 1168, 1168,  115,  115,  115, 1134, 1177,
+     1143, 1144, 1170, 1170, 1123, 1143,  203,  203, 1123, 1123,
+
+     1126, 1127, 1123, 1128, 1129, 1129, 1123, 1123,  115,  115,
+      115,  115,  115,  115,  115,  115,  115, 1123, 1123,  115,
+      115,  115, 1123, 1123,  115, 1123, 1123, 1123, 1123, 1123,
+     1123, 1123, 1123,  115,  115,  115,  115,  115,  115,  115,
+      115,  115,  115, 1123, 1178,  115,  115,  115,  115,  115,
+      115,  115,  115, 1123,  115,  115,  115,  115,  115,  115,
+      115, 1123, 1123,  115, 1123,  115,  115, 1123, 1123, 1123,
+     1132, 1132, 1142,  115,  115, 1123, 1134, 1143, 1144, 1143,
+      203,  203,  115,  115,  115,  115,  115,  115,  115, 1123,
+     1123, 1123,  115,  115, 1123,  115, 1123, 1123, 1123, 1123,
+
+     1123, 1123, 1123, 1123,  115,  115,  115,  115,  115,  115,
+      115,  115,  115, 1178, 1123, 1179, 1178,  115,  115,  115,
+      115, 1123,  115,  115,  115,  115, 1123,  115, 1123,  115,
+      115, 1123, 1123, 1132, 1142,  115,  115, 1134, 1144,  115,
+      115,  115,  115,  115, 1123, 1123,  115,  115, 1123,  115,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123,  115,  115,  115,
+      115,  115,  115,  115, 1123, 1179, 1178, 1179, 1179,  115,
+      115, 1123,  115,  115, 1123,  115, 1123,  115,  115, 1123,
+     1123, 1132, 1142, 1142,  115, 1134, 1144, 1144,  115,  115,
+     1123, 1123,  115,  115, 1123, 1123, 1123, 1123, 1123, 1123,
+
+     1123,  115,  115,  115,  115,  115, 1123, 1178, 1123,  115,
+     1123, 1123,  115,  115, 1123, 1132, 1142, 1142,  115, 1134,
+     1144, 1144,  115, 1123, 1123,  115,  115, 1123, 1123, 1123,
+     1123,  115,  115,  115,  115, 1123, 1178, 1123,  115, 1123,
+     1123, 1123, 1132, 1142, 1142,  115, 1134, 1144, 1144, 1123,
+     1123,  115,  115, 1123, 1123, 1123,  115,  115, 1123, 1178,
+     1123,  115, 1123, 1123, 1132, 1142, 1134, 1144, 1123, 1123,
+      115,  115, 1123, 1123,  115, 1123, 1178, 1123,  115, 1123,
+     1132, 1142, 1134, 1144, 1123, 1123,  115, 1123, 1178, 1178,
+     1123,  115, 1123, 1132, 1134, 1123,  115, 1178, 1179, 1123,
+
+      115, 1123, 1132, 1134, 1123, 1123, 1132, 1134, 1132, 1134,
+     1132, 1134, 1132, 1134, 1132, 1134, 1123, 1134, 1134, 1134,
+     1134, 1123,    0, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123
+    } ;
+
+static yyconst short int yy_nxt[4253] =
+    {   0,
+       14,   15,   16,   17,   18,   19,   14,   20,   21,   22,
+       23,   24,   21,   25,   21,   26,   21,   27,   28,   29,
+       29,   29,   29,   29,   29,   29,   29,   29,   21,   30,
+       31,   32,   33,   21,   21,   34,   35,   36,   37,   38,
+       39,   40,   41,   34,   42,   34,   34,   43,   44,   45,
+       46,   47,   34,   48,   49,   50,   34,   34,   51,   34,
+       34,   34,   14,   52,   53,   54,   55,   64,   66,   65,
+       70,   72,   71,   72,   82,   71,   68,   73,   75,   92,
+       78,   56,   56,   56,   56,   56,   56,   56,   56,   56,
+       69,   68,   76,   67,   68,   86,   91,   68,  103,  102,
+
+       57,   58,   87,   88,   59,   69,   68,   68,   69,   68,
+       68,   69,   68,   83,  193,   68,   79,   60,   61,   68,
+       69,   69,   68,   69,   69,  210,   69,   84,   68,   69,
+       80,  105,  333,   69,   89,   72,   69,   72,   78,   70,
+       68,   71,   69,  108,  116,  108,  108,  131,   90,   93,
+      132,   93,   78,  133,   69,  108,  185,  108,   82,  134,
+      193, 1020,  108,  110,   71,  194,   71,   94,   94,   94,
+       94,   94,   94,   94,   94,   94,  211,  108,  211, 1122,
+       71,  108,   73,  214,   95,  186,  215,  135,   96,   68,
+       97,  108,  108,  136,   82,   98,  108,   99,  100,  187,
+
+      137,  138,  108,   69,  366,  254,  108,  101,  106,  217,
+      107,  107,  107,  107,  107,  107,  107,  107,  107,  117,
+      108,  108,  108,  225,  226,  108,  118,  179,  216,  108,
+      119,  108,  109,  120,   86,  139,  227,  108,  110,  108,
+      369,   87,   88,  121,  230,  255,  110,  106,  108,  107,
+      107,  107,  107,  107,  107,  107,  107,  107,  232,  231,
+      153,  338,  108,  108,  108,  122,  234,  111,  112,  123,
+      108,  109,  108,  233,  108,  124,  235,  113,  108,  125,
+      110,  108,  108, 1117,  114,  115,  140,  366,  366,  253,
+      108,  126,  396,  127,  141,  108,  128,  129,  108,  110,
+
+      142,  143,  108,  130,  108,  108,  108,  367,  370,  144,
+      108,  146,  108,  147,  108,  145,  108,  149,  148,  108,
+      108,  108,  154,  179,  191,  108,  155,  397,  180,  179,
+      156,  150,  160,  314,  151,  108,  108,  152,  157,  161,
+      108,  158,  159,  108,  108,  193,  108,  315,  260,  162,
+      108,  163,  329,  183,  108,  108,  108,  189,  108,  168,
+      135,  164,  181,  339,  108,  108,  330,  103,  108,  165,
+      243,  166,  167,  160,  243,  103,  182,  168,   86,  352,
+      161,  196,  197,  196,  108,   87,   88,  108, 1106,  390,
+      162,   68,  168,  198,  219,  220,  219,  190,  168, 1123,
+
+       82,  108,  221,  222,   86,   69,  169,  170,   86,   68,
+      171,   87,   88, 1123,  108,   87,   88,  108,  270,  252,
+      108,  199,  259,  172,  173,  174,  175,  176,  167,  391,
+      337,  108,  267,  168,  108,  200,  168,  108,  223,  108,
+      108,  366,  268,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  256,  257,  379, 1105,  108,  108,  258,  224,
+      108,  108,  169,  170,  683,   68,  171,  243,  243,  243,
+      243,  243,  243,  243,  243,  243,  282,  276,  108,  172,
+      173,  195,  196,  197,  196,  195,  195,  195,  201,  195,
+      195,  195,  195,  195,  195,  195,  195,  195,  202,  195,
+
+      203,  203,  203,  203,  203,  203,  203,  203,  203,  195,
+      195,  195,  195,  195,  195,  195,  204,  186,  204,  204,
+      204,  204,  205,  204,  118,  204,  204,  204,  206,  204,
+      204,  187,  204,  204,  204,  204,  207,  204,  204,  204,
+      204,  208,  204,  195,   93,  179,   93,  108,  108,  244,
+      245,  108,   78,  108,  108,  108,   78,  108,  108,  179,
+      108,  108,  108,   82,  108,  261,  197, 1102,  108,  108,
+      108,  266,  108,  108,  108,  108,  108,  108,  108,   95,
+      108,  108,  108,   96,  108,   97,  108,  108,  247,  108,
+       98,  549,   99,  100,  376,  275,  340,  108,  108,  519,
+
+      269,  108,  101,  239,  239,  239,  239,  239,  239,  239,
+      239,  239,  108,  108,  277,  550,  108,  357,  108,   82,
+      108,  303,  108,  240,  241,  246,  108,  108,  108,  108,
+      108,  108,  108,  108,  108,  337,  242,  108,  248,  108,
+      249,  168,  108,  108,  274,  108,  108,  108,  108,  250,
+      108,  291,  278,  251,  278,  108,  108,  108,  108,  108,
+      108,  108,  108,  337,  378,  179,  108,  108,  287,  168,
+      246,  108,  108,  262,  271,  262,  366,  103,  366,  108,
+      280,  272,  280,  108,  108,  273,  108,  108,  283,  106,
+      281,  263,  263,  263,  263,  263,  263,  263,  263,  263,
+
+      284,  108,  285,  108,  108,  286,  279,  288,  108,  108,
+      108,  368,  290,  540,  366,  245,  108,  659,  518,  108,
+      108,  289,  108,  292,  168,  108,  108,  108,  264,  293,
+      265,  294,  108,  108,  108,  108,  313,  108,  295,  108,
+      108,  297,  108,  304,  539,  305,  108,  108,  300, 1100,
+      301,  108,  298,  296,  244,  299,  302,  108,  310,  108,
+      108,  306,  307,  108,  108,  308,  108,  309,  108,  316,
+      108,  108,  311,  108,  320,  354,  355,  354,  108,  312,
+      317,  321,  322,  108,  318,  108,  108,  108,  319,  324,
+      108,  325,  167,  108,  323,  108,  327,  168,  325,  167,
+
+      108,  108,  193,  108,  168,  343,  108,  343,  327,   78,
+      325,  167,  253,  373,  349,  373,  168,  108,  108,  346,
+       78,  108,  197,  108,  108,  348,  169,  170,  351,  383,
+      171,  383,  366,  169,  170,  108,  350,  171,  108,  179,
+      344,  108,  531,  326,  173,  169,  170,  256,  347,  171,
+      326,  173,  108,  258,  345,  691,  356,  359,  197,  359,
+      377,  220,  326,  173,  327,  175,  335,  167,  380,  222,
+      220,  541,  168,   86,  385,  197,  385,  380,  222, 1096,
+       87,   88,  336,  336,  336,  336,  336,  336,  336,  336,
+      336,   86,  360,  521,  197,  219,  220,  219,   87,   88,
+
+      108,  169,  170,  221,  222,  171,  361,  219,  220,  219,
+      387,  411,  387,  225,  226,  221,  222,  108,  326,  173,
+      197,  402,  404,  402,  404,  518,  227,  382,  406,  533,
+      406,  168,  343,  545,  343,  545,  381,  362,  362,  362,
+      362,  362,  362,  362,  362,  362,  353,  353,  197,  353,
+      353,  353,  353,  353,  353,  353,  353,  353,  353,  353,
+      353,  353,  353,  363,  353,  364,  364,  364,  364,  364,
+      364,  364,  364,  364,  353,  353,  353,  353,  353,  353,
+      353,  365,  365,  365,  365,  365,  365,  365,  365,  365,
+      365,  365,  365,  365,  365,  365,  365,  365,  365,  365,
+
+      365,  365,  365,  365,  365,  365,  365,  365,  353,  108,
+      413,  108,  657,  108,  280,  366,  280,  108,  168,  108,
+      108, 1093,  108,  108,  281,  415,  108,  418,  108,  412,
+      108,  414,  416,  417,  108,  108,  108,  108,  108,  420,
+      108,  421,  108,  108,  108,  542,  108,  108, 1091,  419,
+      428,  425,  108,  432,  422,  108,  108,  423,  426,  108,
+      108,  108,  424,  108,  108,  108,  430,  427,  108,  108,
+      108,  108,  108,  108,  451,  431,  433,  444,  108,  445,
+      366,  445,  108,  108, 1088,  108,  108,  449,  108,  108,
+      434,  108,  434,  108,  108,  108,  447,  448,  450,  108,
+
+      108,  453,  278,  684,  278,  452,  108,  108, 1086,  446,
+      108,  108,  108, 1085,  108,  108,  108,  456,  108,  108,
+      435,  455,  179,  108,  108,  108,  457, 1082,  436,  108,
+      437,  108,  108,  438,  197,  108,  108,  439,  458,  459,
+      440,  108,  108,  441,  442,  460,  108,  443,  108,  463,
+      467,  463,  467,  108,  462,  108,  454,  472,  461,  464,
+      468,  478,  108,  108,  108,  108,  474,  520,  471,  108,
+      108, 1080,  108,  108,  473,  108,  108,  108,  108,  108,
+      535,  108,  476,  477,  108,  108,  108,  108,  475,  480,
+      108,  479,  108,  108,  498,  465,  469,  108,  108,  108,
+
+      481,  108,  108,  483,  108,  466,  470,  108,  482,  484,
+      485,  108,  108,  108,  108,  108,  108, 1078,  486,  487,
+      108,  490,  108,  108,  108,  108,  491,  492,  108,  108,
+      108,  488,  489,  493,  108,  108,   78,  108,  108,  108,
+      108,  494,  108,  108,  495,  108,  499,  108,  499,  108,
+      501,  108,  108,  497,  496,  108,  500,  108,  503,  504,
+      108,  108,  108,  502,  108,  507,  505,  508,  167,  518,
+      197,  108,  108,  168,  108,  168,  525,  530,  108,  527,
+      506,  108,  197,  103,  509,  548,  508,  167,  108,  108,
+      526,  509,  168,  508,  167, 1074,  108,  197,  108,  168,
+
+      108,  528,  169,  170,   82,  179,  171,  108,  193,  108,
+      108,  529,  354,  355,  354,  532,  559,  108,  559,  326,
+      173,  169,  170,  220,  108,  171,  108,  108,  169,  170,
+      380,  222,  171,  359,  197,  359, 1068,  534,  326,  173,
+      108,  561,  551,  561,   86,  326,  173,  509,  175,  516,
+      167,   87,   88,   86, 1073,  168,  658,  108,  563,  673,
+       87,   88,  445, 1070,  445,  517,  517,  517,  517,  517,
+      517,  517,  517,  517,  384,  384,  384,  384,  384,  384,
+      384,  384,  384,  657,  169,  170,  225,  226,  171,  168,
+      366,  553,  446,  688, 1069,  688,  552,  108,  108,  227,
+
+      565,  326,  173,  197,  384,  384,  384,  384,  384,  384,
+      384,  384,  384,  685,  108,  108,  179,  668,  197,  668,
+      362,  362,  362,  362,  362,  362,  362,  362,  362,  386,
+      386,  386,  386,  386,  386,  386,  386,  386,  108,  108,
+      197,  536,  197,  386,  386,  386,  386,  386,  386,  386,
+      386,  386,  168,  197,  660,  108,  108,  566,  168,  537,
+      537,  537,  537,  537,  537,  537,  537,  537,  388,  388,
+      388,  388,  388,  388,  388,  388,  388,  108,  567,  108,
+      538,  197,  388,  388,  388,  388,  388,  388,  388,  388,
+      388,  675,  674,  569,  108,  108,  108, 1066,  362,  362,
+
+      362,  362,  362,  362,  362,  362,  362,  403,  403,  403,
+      403,  403,  403,  403,  403,  403,  403,  403,  403,  403,
+      403,  403,  403,  403,  403,  405,  405,  405,  405,  405,
+      405,  405,  405,  405,  405,  405,  405,  405,  405,  405,
+      405,  405,  405,  407,  407,  407,  407,  407,  407,  407,
+      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
+      407,  108,  108,  108,  108,  564,  568,  108,  197,  108,
+      108,  108,  571,  572,  570,  108, 1064,  108,  108,  108,
+      108,  108,  573,  574,  108,  108,  108,  108,  108,  108,
+      108,  590,  108,  578,  108,  197,  576,  577,  579,  108,
+
+      579,  108,  108,  108,  592,  108,  108,  108,  366,  596,
+      591,  108,  593,  108,  108,  594,  108,  677,  108,  108,
+      595,  599,  108,  108,  607,  597,  607,  108,  108,  723,
+      108,  108,  610,  108,  600,  598,  108,  724,  601,  179,
+      606,  580, 1049,  108,  108,  682,  609,  108,  108,  108,
+      108,  168,  108,  108,  608,  581,  434,  168,  434,  108,
+      108,  613,  611,  727,  108,  108,  108,  108,  614,  108,
+      108,  615, 1063,  617,  616,  108,  108,  621,  871,  728,
+      618,  108, 1061,  108,  619,  463,  435,  463,  108,  620,
+      623,  467,  108,  467,  582,  464,  583, 1056,  108,  584,
+
+     1055,  468,  622,  585,   86,  108,  586,  108,  625,  587,
+      588,  698,  699,  589,  602,  602,  602,  602,  602,  602,
+      602,  602,  602,  602,  602,  108,  602,  602,  602,  602,
+      602,  603,  602,  604,  604,  604,  604,  604,  604,  604,
+      604,  604,  602,  602,  602,  602,  602,  602,  602,  605,
+      605,  605,  605,  605,  605,  605,  605,  605,  605,  605,
+      605,  605,  605,  605,  605,  605,  605,  605,  605,  605,
+      605,  605,  605,  605,  605,  605,  602,  108,  108,  108,
+      108,  108,  108,  108,  785, 1054,  785,  108, 1051,  626,
+      627,  624,  108,  108,  108,  108,  108,  108,  108,  108,
+
+      108,  628,  108,  108,  108,  629,  630,  633,  108,  108,
+      108,  631,  108,  108,  636,  108,  108,  108,  108,  108,
+      108,  635,  632,  108,  108,  634,  108,  638,  641,  108,
+      108,  640,  637,  108,  639,  108,  108,  108,  108,  642,
+      108,  108,  108,  108,  108,  108,  108,  499,  108,  499,
+      108,  197,  644,  108,  108,  108,  179,  500,  108,  108,
+      643,  108,  108,  108,  108,  108,  108,  108,  108, 1050,
+      645,  647,  646,  648,  167,  669,  657,   82, 1045,  168,
+      108,  108,  168,  108,  701,  108,  649,  366,  648,  167,
+      103, 1044,  108,  649,  168,  648,  167,  108,  780,  667,
+
+      705,  168,  676,  668,  664,  668,  664,  571,  169,  170,
+      795,  668,  171,  668,  665,  694,  108,  108,  108,  108,
+      108,   86,  707,  169,  170,  326,  173,  171,   87,   88,
+      169,  170, 1042,  706,  171,  108,  108,  108,  108,  108,
+      326,  173,  666, 1041,  670,  108,  670,  326,  173,  649,
+      175,  655,  167,  197,  671,  108,  108,  168,  672,  696,
+      108,  193,  108,  108,  709,  108,  108,  656,  656,  656,
+      656,  656,  656,  656,  656,  656,  708,  108,  710,  108,
+      108,  108,  108,  108,  712,  108,  169,  170, 1048,  714,
+      171,  607,  785,  607,  785,  711,  108, 1040,  108,  108,
+
+      877,  108,  108,  326,  173,  197,  560,  560,  560,  560,
+      560,  560,  560,  560,  560, 1038,  108,  678,  108,  678,
+      179,  608,  679,  679,  679,  679,  679,  679,  679,  679,
+      679,  197,  560,  560,  560,  560,  560,  560,  560,  560,
+      560, 1031,  179,  794,  197,  794, 1030, 1029,  537,  537,
+      537,  537,  537,  537,  537,  537,  537,  562,  562,  562,
+      562,  562,  562,  562,  562,  562,  108, 1028, 1016,  536,
+      197,  562,  562,  562,  562,  562,  562,  562,  562,  562,
+      781,  108,  680,  108,  680,  732,  719,  681,  681,  681,
+      681,  681,  681,  681,  681,  681,  687,  687,  108,  687,
+
+      687,  687,  687,  687,  687,  687,  687,  687,  687,  687,
+      687,  687,  687,  702,  687,  703,  703,  703,  703,  703,
+      703,  703,  703,  703,  687,  687,  687,  687,  687,  687,
+      687,  704,  704,  704,  704,  704,  704,  704,  704,  704,
+      704,  704,  704,  704,  704,  704,  704,  704,  704,  704,
+      704,  704,  704,  704,  704,  704,  704,  704,  687,  108,
+      108,  579,  108,  579,  108,  108,  108,  716,  108,  720,
+      715,  733,  108,  736,  739,  735,  108,  108,  731,  108,
+      734,  108,  108,  108,  108,  108,  108, 1025, 1024,  108,
+      738,  108,  740,  409,  740,  244,  193,  409,  108,  737,
+
+      108,  108,  108,  108,  717,  243,  243,  243,  243,  243,
+      243,  243,  243,  243,  108,  108,  108,  108,  718,  108,
+      108,  743,  741,  108,  108,  745,  108,  108,  744,  742,
+      108,  108,  108,  108,  748,  746,  108,  108,  789,  108,
+      108,  108,  752,  747,  108,  108,  108,  108,  753,  108,
+      750,  197,  751,  108,  108,  749,  108,  108,  108,  108,
+      755,  108,  108,  108,  108,  754,  108,  108,  756,  758,
+      757,  108,  108,  108,  108,  108,  760,  759,  108,  108,
+      763,  108,  108,  108,  108,  108,  761,  764,  108,  108,
+      108,  108,  108,  792,  108,  769,  108,  108,  762,  108,
+
+      108,  108,  108,  108, 1018,  108,  766,  768,  108,  108,
+      767,  108,  108,  108,  664,  197,  664,  108,  108,  770,
+      108,  771,  772,  773,  665,  774,  167,  168, 1017,  108,
+      108,  168,  775,  168,  774,  167,  664,  670,  664,  670,
+      168,  103,  775,  197,  774,  167,  665,  671,  108,  108,
+      168,  672,  776,  786,  879,   86,  787,  794,  197,  794,
+      169,  170,  806,  807,  171,  108,  108,  108,   86,  169,
+      170,  108,  244,  171,  776,   87,   88,  326,  173,  169,
+      170,  790,  788,  171,  108,  193,  326,  173,  108, 1015,
+      672,  108,  672,  670, 1012,  670,  326,  173,  775,  175,
+
+      779,  167,   86,  671,  672,  108,  168,  672,  108,   87,
+       88,  243,  243,  243,  243,  243,  243,  243,  243,  243,
+      812,  108,  108,  986,  811,  108,  108,  108,  108,  108,
+      816,  108,  819,  108,  819,  169,  170,  108,  108,  171,
+      813,  817,  108,  108,  108,  108,  108,  815,  108,  814,
+      108,  108,  326,  173,  197,  822,  740, 1011,  740,  819,
+      876,  819,  876,  876,  108,  876,  108,  108,  108,  820,
+      825,  679,  679,  679,  679,  679,  679,  679,  679,  679,
+      197,  839,  821,  108,  108,  965,  741,  965, 1009, 1001,
+      108,  108,  834,  108,  108,  835,  891,  679,  679,  679,
+
+      679,  679,  679,  679,  679,  679,  197,  108,  108,  892,
+      108,  841,  179,  836, 1000,  999,  108,  108,  843,  108,
+      108,  838,  837,  681,  681,  681,  681,  681,  681,  681,
+      681,  681,  197,  108,  108,  108,  850,  108,  862,   86,
+      862,  983, 1007,  984, 1007,  934,   87,   88,  863,  681,
+      681,  681,  681,  681,  681,  681,  681,  681,  791,  791,
+      197,  791,  791,  791,  791,  791,  791,  791,  791,  791,
+      791,  791,  791,  791,  791,  796,  791,  797,  797,  797,
+      797,  797,  797,  797,  797,  797,  791,  791,  791,  791,
+      791,  791,  791,  798,  798,  798,  798,  798,  798,  798,
+
+      798,  798,  798,  798,  798,  798,  798,  798,  798,  798,
+      798,  798,  798,  798,  798,  798,  798,  798,  798,  798,
+      791,  800,  800,   86,  800, 1036,  998, 1036,  800,  800,
+       87,   88,  800,  997,  996,  800,  800,  800,  800,  800,
+      800,  800,  800,  799,  799,  995,  799,  799,  799,  799,
+      799,  799,  799,  799,  799,  799,  799,  799,  799,  799,
+      808,  799,  809,  809,  809,  809,  809,  809,  809,  809,
+      809,  799,  799,  799,  799,  799,  799,  799,  810,  810,
+      810,  810,  810,  810,  810,  810,  810,  810,  810,  810,
+      810,  810,  810,  810,  810,  810,  810,  810,  810,  810,
+
+      810,  810,  810,  810,  810,  799,  108,  108,  108,  844,
+      840,  844,  108,  108,  851,  179,  108,  848,  842,  845,
+      847,  108,  846,  108,  108,  108,  108,  992,  108,  108,
+      108,  108,  849,  108,  852,  108,  108,  853,  108,  108,
+      854,  108,  854,  108,  108,  108,  857,  108,  108, 1113,
+      108,  108,  108,  108,  860,  108,  108,  108,  108,  856,
+      108,  108,  108,  108,  108,  859,  858,  108,  108,  861,
+      864,  108,  108,  197,  108,  108,  865,  108,  865,  108,
+      108,  108,  773,  108,  775,  167,  108,  179,  108,  108,
+      855,  874,  108,  775,  991,  774,  167,  108,  108,  867,
+
+      108,  168,  775,  108,  775,  167,  108,  876,  108,  876,
+      244,  108,  865,  866,  865,  108,  888,  885,  883,  169,
+      170,  875,  884,  171,  982,  108, 1084,  108,  108,  108,
+      169,  170,  108,  108,  171,  108,  326,  173,  108,  169,
+      170,  108,  108,  171,  894,  886,  108,  326,  173,  929,
+      981, 1059,  889, 1059,  980,  108,  326,  173,  108,  108,
+      878,  878,  197,  878,  878,  878,  878,  878,  878,  878,
+      878,  878,  878,  878,  878,  878,  878,  880,  878,  881,
+      881,  881,  881,  881,  881,  881,  881,  881,  878,  878,
+      878,  878,  878,  878,  878,  882,  882,  882,  882,  882,
+
+      882,  882,  882,  882,  882,  882,  882,  882,  882,  882,
+      882,  882,  882,  882,  882,  882,  882,  882,  882,  882,
+      882,  882,  878,  197,  243,  243,  243,  243,  243,  243,
+      243,  243,  243,  108,  108,  108,  108,  887,  108,  108,
+      362,  362,  362,  362,  362,  362,  362,  362,  362,  893,
+      108,  108,  108,  896,  108,  108,  906,  905,  108,  108,
+      108,  909,  108,  108,  108,  907,  977,  911,  912,  975,
+      972,  108,  108,  108,  910,  908,  108,  108,  915,  108,
+      108,  108,  844,  913,  844,  916,  918,  108,  917,  108,
+      108,  108,  845,  108,  108,  108,  108,  920,  854,  108,
+
+      854,  108,  108,  108,  108,  108,  919,  921,  108,  926,
+      108,  108,  108,  108,  925,  108,  108,  108,  923,  108,
+      108,  924,  108,  108,  108,  862,  930,  862,  193,  108,
+      936,  197,  108,  108,  108,  863,  108,  931,  108,  940,
+      108,  108,  108,  108,  957,  928,  108,  108,  922,  108,
+      108,  937,  108,  108,  108,  108,  941,  108,  108,  942,
+      108,  938,  948,  108,  939,  197,  108,  950,  193,  108,
+      944,  108,  947,  943,  108,  108,  108,  108,  961,  956,
+      108,  959,  362,  362,  362,  362,  362,  362,  362,  362,
+      362,  108,  108,  108,  108,  108,  960,  108,  108,  958,
+
+      915,  108,  179,  108,  179, 1047,  108,  916,  108,  108,
+      917,  108,  967,  962,  108,  108,  964,  963,  108,  968,
+      108,  915,  969,  108,  108,  108,  108,  108,  916,  970,
+      108,  917,  971,  108,  108,  108,  108,  197,  108,  976,
+      973,  108,  108,  108,  108,  108,  108,  108,  108, 1065,
+      108,  974,  108,  108,  978,  108,  108, 1094,  979,  989,
+      108,  108,  108,  108,  108,  108,  985,  108,  990,  108,
+      108,  994,  955,  108,  987,  108,  988,  108,  108, 1003,
+      108,  108,  993,  108,  108,  108,  108,  108,  108, 1002,
+      197,  108,  108, 1006,  967, 1004,  108,  108,  108,  197,
+
+      108,  968,  108,  954,  969,  108,  967, 1005,  108, 1008,
+      967, 1008,  967,  968,  108,  108,  969,  916,  108,  968,
+      917,  108,  969, 1010,  108,  108,  108,  108,  108, 1013,
+     1014,  108, 1022,  108,  953,  108,  108, 1021,  108, 1019,
+     1023,  108,  108,  108,  108,  108,  108,  108,  108,  108,
+      108, 1033,  108,  108,  108, 1027,  179, 1026, 1035,  108,
+     1034, 1032,  952,  108,  108,  108,  108,  108,  108,  108,
+      951,  108, 1037,  915, 1037,  108,  108,  108,  108, 1039,
+      916,  108, 1052,  917,  108,  108,  108, 1046,  108, 1043,
+      108,  108,  108,  108,  108,  108,  193, 1057,  108, 1053,
+
+      108, 1058,  179,  108,  108,  108,  108,  108,  108, 1062,
+      108, 1060,  915, 1060,  108,  193,  108,  108, 1075,  916,
+      108,  108,  917,  108, 1072,  949, 1076, 1071, 1076, 1067,
+      108,  108,  108,  108, 1077,  915, 1077,  108,  108,  193,
+     1079,  108,  916,  179,  915,  917, 1087,  108,  108,  108,
+     1081,  916, 1083,  179,  917,  108, 1089, 1089, 1092, 1089,
+      179, 1097,  946, 1089, 1089,  108,  193, 1089,  179,  193,
+     1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1090,  915,
+     1090,  108,  193,  193,  179, 1101,  916, 1095,  193,  917,
+      915, 1111,  193, 1103, 1098, 1098, 1107, 1099,  108, 1104,
+
+      917, 1098, 1098,  108,  108, 1098,  193,  193, 1098, 1098,
+     1098, 1098, 1098, 1098, 1098, 1098,  915,  967,  193, 1109,
+      108,  108, 1112,  916,  968, 1114,  917,  969,  193, 1108,
+      384, 1110,  384,  386,  388,  386,  388, 1115,  403,  945,
+      403, 1116,  405,  366,  405, 1119,  407,  560,  407,  560,
+      197,  562, 1120,  562,  935,  179,  933, 1118,  932,  927,
+      904,  903,  902,  901,  900,  899,  898,  897,  895,  890,
+       82,   78,  366,  197,  197,  197,  873,  179,  179,  870,
+      869, 1121,   62,   62,   62,   62,   62,   62,   62,   62,
+       62,   62,   62,   62,   62,   62,   62,   62,   62,   63,
+
+       63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
+       63,   63,   63,   63,   63,   63,   74,   74,  868,   74,
+       74,   74,   74,   74,   74,   74,   74,   74,   74,   74,
+       74,   74,   74,   77,   77,  833,   77,   77,   77,   77,
+       77,   77,   77,   77,   77,   77,   77,   77,   77,   77,
+       81,   81,   81,   81,   81,   81,   81,   81,   81,   81,
+       81,   81,   81,   81,   81,   81,   81,   85,   85,   85,
+       85,   85,   85,   85,   85,   85,   85,   85,   85,   85,
+       85,   85,   85,   85,  104,  104,  832,  831,  830,  829,
+      104,  108,  108,  108,  108,  108,  108,  108,  108,  108,
+
+      108,  178,  178,  178,  178,  178,  178,  178,  178,  178,
+      178,  178,  178,  178,  178,  178,  178,  178,  184,  828,
+      184,  827,  184,  184,  826,  824,  823,  818,  184,  192,
+      192,  192,  192,  192,  192,  192,  192,  192,  192,  192,
+      192,  192,  192,  192,  192,  192,  195,  195,  195,  195,
+      195,  195,  195,  195,  195,  195,   82,  195,  195,  195,
+      195,   82,  195,  218,  218,  218,  218,  218,  218,  218,
+      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
+       94,   78,  803,   94,   94,  238,  238,  238,  238,  366,
+      238,  238,  366,  238,  238,  197,  238,  238,  783,  179,
+
+      238,  238,  328,  328,  328,  328,  328,  328,  328,  328,
+      328,  328,  328,  328,  328,  328,  328,  328,  328,  336,
+      778,  336,  777,  765,  336,  341,  730,  341,  729,  341,
+      341,  342,  342,  726,  342,  342,  342,  342,  342,  342,
+      342,  342,  342,  342,  342,  342,  342,  342,  353,  353,
+      353,  353,  353,  353,  353,  353,  353,  353,  353,  353,
+      353,  353,  353,  353,  353,  358,  358,  358,  358,  358,
+      358,  358,  358,  358,  358,  358,  358,  358,  358,  358,
+      358,  358,  401,  725,  722,  401,  401,  262,  721,  262,
+      713,  700,   82,  693,  262,  689,  686,  530,  663,  662,
+
+      530,  654,  262,  517,  653,  517,  652,  651,  517,  522,
+      650,  522,  612,  522,  522,  656,  575,  656,  408,  558,
+      656,  661,  557,  661,  556,  661,  661,  687,  687,  555,
+      687,  687,  687,  687,  687,  687,  687,  687,  687,  687,
+      687,  687,  687,  687,  690,  690,  554,  690,  690,  690,
+      690,  690,  690,  690,  690,  690,  690,  690,  690,  690,
+      690,  692,  692,  547,  692,  692,  692,  692,  692,  692,
+      692,  692,  692,  692,  692,  692,  692,  692,  695,  695,
+      695,  695,  695,  695,  695,  695,  695,  695,  695,  695,
+      695,  695,  695,  695,  695,  697,  697,  697,  697,  697,
+
+      697,  697,  697,  697,  697,  697,  697,  697,  697,  697,
+      697,  697,  782,  782,  782,  782,  782,  782,  782,  782,
+      782,  782,  782,  782,  782,  782,  782,  782,  782,  104,
+      546,  104,  544,  104,  104,  784,  784,  543,  784,  784,
+      784,  784,  784,  784,  784,  784,  784,  784,  784,  784,
+      784,  784,  791,  791,  791,  791,  791,  791,  791,  791,
+      791,  791,  791,  791,  791,  791,  791,  791,  791,  793,
+      793,  793,  793,  793,  793,  793,  793,  793,  793,  793,
+      793,  793,  793,  793,  793,  793,  799,  799,  366,  799,
+      799,  799,  799,  799,  799,  799,  799,  799,  799,  799,
+
+      799,  799,  799,  801,  801,  197,  801,  801,  801,  801,
+      801,  801,  801,  801,  801,  801,  801,  801,  801,  801,
+      802,  802,  197,  802,  802,  802,  802,  802,  802,  802,
+      802,  802,  802,  802,  802,  802,  802,  804,  804,  804,
+      804,  804,  804,  804,  804,  804,  804,  804,  804,  804,
+      804,  804,  804,  804,  805,  805,  805,  805,  805,  805,
+      805,  805,  805,  805,  805,  805,  805,  805,  805,  805,
+      805,  872,  872,  872,  872,  872,  872,  872,  872,  872,
+      872,  872,  872,  872,  872,  872,  872,  872,  878,  878,
+      878,  878,  878,  878,  878,  878,  878,  878,  878,  878,
+
+      878,  878,  878,  878,  878,  914,  914,  914,  914,  914,
+      914,  914,  914,  914,  914,  914,  914,  914,  914,  914,
+      914,  914,  966,  966,  966,  966,  966,  966,  966,  966,
+      966,  966,  966,  966,  966,  966,  966,  966,  966,  524,
+      523,  515,  514,  513,  512,  511,  510,  179,  333,  429,
+      410,  408,  400,  399,  398,  395,  394,  393,  392,  389,
+      375,  374,  372,  371,  366,  197,  197,  193,  179,  334,
+      332,  331,  179,  237,  236,  229,  228,   82,   82,   78,
+      213,  212,  210,  209,  193,  188, 1123,   64,   13, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+     1123, 1123
+    } ;
+
+static yyconst short int yy_chk[4253] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    2,    2,    2,    2,    8,   10,    8,
+       15,   16,   15,   16,   22,   17,   14,   17,   18,   25,
+       19,    2,    2,    2,    2,    2,    2,    2,    2,    2,
+       14,   20,   18,   10,   21,   23,   24,   26,   29,   28,
+
+        2,    2,   23,   23,    2,   20,   30,   25,   21,   31,
+       15,   26,   33,   22,  986,   17,   19,    2,    2,   24,
+       30,   25,   29,   31,   15,  172,   33,   22,   28,   17,
+       19,   32,  172,   24,   23,   53,   29,   53,   80,   70,
+       32,   70,   28,   40,   36,   36,   36,   40,   23,   27,
+       40,   27,   79,   40,   32,   36,   57,   40,   84,   40,
+       65,  986,   36,   36,   71,   65,   71,   27,   27,   27,
+       27,   27,   27,   27,   27,   27,   72,   41,   72, 1121,
+       73,   41,   73,   79,   27,   57,   80,   41,   27,   27,
+       27,   41,   42,   42,   83,   27,   42,   27,   27,   57,
+
+       42,   42,   42,   27,  207,  118,   42,   27,   34,   84,
+       34,   34,   34,   34,   34,   34,   34,   34,   34,   37,
+       37,   37,  118,   94,   94,   43,   37,  180,   83,   43,
+       37,  119,   34,   37,   85,   43,   94,   37,   37,   43,
+      207,   85,   85,   37,   97,  119,   34,   35,  119,   35,
+       35,   35,   35,   35,   35,   35,   35,   35,   98,   97,
+       48,  180,   38,   38,   48,   38,   99,   35,   35,   38,
+       48,   35,   38,   98,   48,   38,   99,   35,  117,   38,
+       38,   39,   39, 1115,   35,   35,   44,  208,  205,  117,
+       44,   39,  234,   39,   44,  117,   39,   39,   39,   39,
+
+       44,   45,   46,   39,   44,   45,   46,  205,  208,   45,
+       61,   46,   46,   46,   61,   45,   46,   47,   46,   45,
+       61,   47,   49,   55,   61,   47,   49,  234,   55,  181,
+       49,   47,   50,  158,   47,   47,   49,   47,   49,   50,
+       49,   49,   49,   50,   51,  194,   50,  158,  122,   50,
+       59,   51,  169,   56,   59,   51,   50,   59,   51,   56,
+       59,   51,   55,  181,   59,  122,  169,   56,   51,   52,
+     1152,   52,   52,   60, 1152,  104,   55,   52,   87,  194,
+       60,   66,   66,   66,   60,   87,   87,   60, 1100,  229,
+       60,   56,  168,   66,   86,   86,   86,   60,  168,  104,
+
+      217,  129,   86,   86,   89,   56,   52,   52,   90,   52,
+       52,   89,   89,  104,  126,   90,   90,  116,  129,  116,
+      121,   66,  121,   52,   52,   54,   54,   54,   54,  229,
+      177,  126,  126,   54,  116,   66,  177,  121,   89,  127,
+      120,  540,  127,   54,   54,   54,   54,   54,   54,   54,
+       54,   54,  120,  120,  217, 1096,  127,  120,  120,   90,
+      133,  137,   54,   54,  540,   54,   54,  106,  106,  106,
+      106,  106,  106,  106,  106,  106,  137,  133,  137,   54,
+       54,   67,   67,   67,   67,   67,   67,   67,   67,   67,
+       67,   67,   67,   67,   67,   67,   67,   67,   67,   67,
+
+       67,   67,   67,   67,   67,   67,   67,   67,   67,   67,
+       67,   67,   67,   67,   67,   67,   67,   67,   67,   67,
+       67,   67,   67,   67,   67,   67,   67,   67,   67,   67,
+       67,   67,   67,   67,   67,   67,   67,   67,   67,   67,
+       67,   67,   67,   67,   93,  182,   93,  108,  108,  107,
+      109,  108,  214,  123,  109,  109,  377,  108,  109,  338,
+      125,  108,  108,  378,  109,  123,  200, 1093,  109,  109,
+      123,  125,  107,  107,  111,  111,  107,  125,  111,   93,
+      128,  132,  107,   93,  111,   93,  107,  107,  111,  111,
+       93,  377,   93,   93,  214,  132,  182,  128,  132,  338,
+
+      128,  134,   93,  103,  103,  103,  103,  103,  103,  103,
+      103,  103,  110,  110,  134,  378,  110,  200,  134,  216,
+      152,  152,  110,  103,  103,  110,  110,  110,  112,  112,
+      113,  113,  112,  131,  113,  183,  103,  152,  112,  143,
+      113,  183,  112,  112,  131,  114,  114,  113,  113,  114,
+      131,  143,  135,  115,  135,  114,  143,  115,  115,  114,
+      114,  115,  139,  184,  216,  520,  130,  115,  139,  184,
+      115,  115,  115,  124,  130,  124,  368,  184,  206,  139,
+      136,  130,  136,  130,  140,  130,  138,  135,  138,  124,
+      136,  124,  124,  124,  124,  124,  124,  124,  124,  124,
+
+      138,  140,  138,  138,  135,  138,  135,  140,  141,  142,
+      144,  206,  142,  368,  367,  136,  145,  520,  336,  157,
+      146,  141,  148,  144,  336,  141,  142,  144,  124,  145,
+      124,  146,  136,  145,  147,  149,  157,  146,  147,  148,
+      150,  148,  151,  153,  367,  153,  154,  155,  150, 1091,
+      151,  147,  149,  147,  263,  149,  151,  150,  155,  151,
+      153,  153,  153,  154,  155,  153,  156,  154,  159,  159,
+      161,  160,  156,  162,  161,  196,  196,  196,  163,  156,
+      159,  162,  163,  156,  160,  159,  164,  161,  160,  165,
+      162,  165,  165,  263,  164,  163,  166,  165,  166,  166,
+
+      189,  186,  352,  164,  166,  185,  188,  185,  174,  215,
+      174,  174,  186,  211,  189,  211,  174,  189,  186,  186,
+      548,  190,  199,  188,  191,  188,  165,  165,  191,  225,
+      165,  225,  369,  166,  166,  187,  190,  166,  190,  340,
+      185,  191,  352,  165,  165,  174,  174,  187,  187,  174,
+      166,  166,  187,  187,  185,  548,  199,  201,  201,  201,
+      215,  218,  174,  174,  176,  176,  176,  176,  218,  218,
+      221,  369,  176,  224,  226,  357,  226,  221,  221, 1086,
+      224,  224,  176,  176,  176,  176,  176,  176,  176,  176,
+      176,  223,  201,  340, 1084,  219,  219,  219,  223,  223,
+
+      245,  176,  176,  219,  219,  176,  201,  220,  220,  220,
+      227,  245,  227,  239,  239,  220,  220,  245,  176,  176,
+      202,  240,  241,  240,  241,  337,  239,  224,  242,  357,
+      242,  337,  343,  373,  343,  373,  223,  202,  202,  202,
+      202,  202,  202,  202,  202,  202,  203,  203,  203,  203,
+      203,  203,  203,  203,  203,  203,  203,  203,  203,  203,
+      203,  203,  203,  203,  203,  203,  203,  203,  203,  203,
+      203,  203,  203,  203,  203,  203,  203,  203,  203,  203,
+      203,  203,  203,  203,  203,  203,  203,  203,  203,  203,
+      203,  203,  203,  203,  203,  203,  203,  203,  203,  203,
+
+      203,  203,  203,  203,  203,  203,  203,  203,  203,  246,
+      247,  249,  517,  248,  280,  370,  280,  252,  517,  250,
+      251, 1080,  254,  255,  280,  249,  246,  252,  249,  246,
+      248,  248,  250,  251,  252,  247,  250,  251,  253,  254,
+      255,  255,  256,  257,  258,  370,  261,  259, 1078,  253,
+      261,  258,  247,  266,  256,  253,  260,  256,  259,  256,
+      257,  258,  257,  261,  259,  264,  264,  260,  265,  269,
+      266,  272,  267,  260,  275,  265,  267,  269,  271,  270,
+      541,  270,  264,  273, 1074,  265,  269,  273,  272,  267,
+      268,  275,  268,  276,  274,  271,  271,  271,  274,  277,
+
+      273,  277,  278,  541,  278,  276,  282,  279, 1070,  270,
+      276,  274,  297, 1069,  270,  283,  277,  282,  284,  285,
+      268,  279,  339,  282,  279,  268,  283, 1066,  268,  297,
+      268,  270,  283,  268,  361,  284,  285,  268,  284,  285,
+      268,  286,  268,  268,  268,  286,  287,  268,  290,  288,
+      289,  288,  289,  291,  287,  292,  278,  291,  286,  288,
+      289,  298,  293,  287,  294,  290,  293,  339,  290,  295,
+      291, 1063,  292,  299,  292,  296,  300,  316,  298,  293,
+      361,  294,  295,  296,  288,  289,  295,  301,  294,  300,
+      299,  299,  296,  300,  316,  288,  289,  302,  303,  305,
+
+      301,  288,  289,  302,  301,  288,  289,  304,  301,  303,
+      304,  306,  307,  308,  302,  303,  305, 1061,  304,  305,
+      311,  308,  309,  310,  304,  313,  309,  310,  306,  307,
+      308,  306,  307,  311,  312,  314,  376,  311,  315,  309,
+      310,  312,  313,  318,  313,  320,  317,  321,  317,  322,
+      318,  312,  314,  315,  314,  315,  317,  319,  320,  321,
+      318,  323,  320,  319,  321,  324,  322,  324,  324,  341,
+      356,  347,  346,  324,  319,  341,  346,  351,  323,  348,
+      323,  317, 1048,  341,  325,  376,  325,  325,  347,  346,
+      347,  327,  325,  327,  327, 1056,  348,  360,  317,  327,
+
+      349,  349,  324,  324,  379,  519,  324,  350,  531,  414,
+      351,  350,  354,  354,  354,  356,  408,  349,  408,  324,
+      324,  325,  325,  380,  350,  325,  414,  351,  327,  327,
+      380,  380,  327,  359,  359,  359, 1048,  360,  325,  325,
+      411,  410,  379,  410,  381,  327,  327,  335,  335,  335,
+      335,  381,  381,  382, 1055,  335,  519,  411,  411,  531,
+      382,  382,  445, 1051,  445,  335,  335,  335,  335,  335,
+      335,  335,  335,  335,  383,  383,  383,  383,  383,  383,
+      383,  383,  383,  518,  335,  335,  401,  401,  335,  518,
+      542,  382,  445,  545, 1050,  545,  381,  416,  415,  401,
+
+      415,  335,  335,  362,  384,  384,  384,  384,  384,  384,
+      384,  384,  384,  542,  416,  415,  521,  652, 1049,  652,
+      362,  362,  362,  362,  362,  362,  362,  362,  362,  385,
+      385,  385,  385,  385,  385,  385,  385,  385,  417,  418,
+      532,  362,  363,  386,  386,  386,  386,  386,  386,  386,
+      386,  386,  656,  533,  521,  417,  418,  418,  656,  363,
+      363,  363,  363,  363,  363,  363,  363,  363,  387,  387,
+      387,  387,  387,  387,  387,  387,  387,  419,  420,  422,
+      363,  366,  388,  388,  388,  388,  388,  388,  388,  388,
+      388,  533,  532,  422,  419,  420,  422, 1044,  366,  366,
+
+      366,  366,  366,  366,  366,  366,  366,  402,  402,  402,
+      402,  402,  402,  402,  402,  402,  403,  403,  403,  403,
+      403,  403,  403,  403,  403,  404,  404,  404,  404,  404,
+      404,  404,  404,  404,  405,  405,  405,  405,  405,  405,
+      405,  405,  405,  406,  406,  406,  406,  406,  406,  406,
+      406,  406,  407,  407,  407,  407,  407,  407,  407,  407,
+      407,  412,  421,  423,  424,  412,  421,  425,  535,  426,
+      428,  427,  424,  426,  423,  432, 1042,  436,  412,  421,
+      423,  424,  427,  428,  425,  430,  426,  428,  427,  431,
+      437,  436,  432,  432,  436, 1022,  430,  431,  433,  438,
+
+      433,  439,  430,  440,  438,  441,  431,  437,  539,  441,
+      437,  442,  438,  444,  443,  439,  438,  535,  439,  447,
+      440,  443,  441,  449,  450,  441,  450,  451,  442,  584,
+      444,  443,  452,  433,  444,  442,  447,  584,  447,  780,
+      449,  433, 1022,  453,  451,  539,  451,  455,  457,  452,
+      433,  657,  458,  456,  450,  433,  434,  657,  434,  450,
+      453,  456,  453,  587,  455,  457,  459,  460,  457,  458,
+      456,  458, 1040,  460,  459,  462,  450,  462,  780,  587,
+      460,  461, 1038,  459,  460,  463,  434,  463,  465,  461,
+      466,  467,  462,  467,  434,  463,  434, 1031,  461,  434,
+
+     1029,  467,  465,  434,  553,  465,  434,  466,  470,  434,
+      434,  553,  553,  434,  448,  448,  448,  448,  448,  448,
+      448,  448,  448,  448,  448,  470,  448,  448,  448,  448,
+      448,  448,  448,  448,  448,  448,  448,  448,  448,  448,
+      448,  448,  448,  448,  448,  448,  448,  448,  448,  448,
+      448,  448,  448,  448,  448,  448,  448,  448,  448,  448,
+      448,  448,  448,  448,  448,  448,  448,  448,  448,  448,
+      448,  448,  448,  448,  448,  448,  448,  469,  471,  472,
+      473,  474,  475,  476,  663, 1028,  663,  477, 1025,  471,
+      472,  469,  480,  478,  469,  471,  472,  473,  474,  475,
+
+      476,  477,  479,  481,  477,  478,  479,  482,  483,  480,
+      478,  480,  485,  484,  486,  487,  488,  489,  490,  479,
+      481,  484,  481,  491,  482,  483,  492,  488,  492,  485,
+      484,  490,  487,  488,  489,  490,  493,  486,  494,  495,
+      491,  496,  497,  492,  501,  503,  498,  499,  502,  499,
+      504,  534,  502,  493,  486,  494,  658,  499,  496,  497,
+      498,  501,  503,  498,  495,  502,  505,  504,  506, 1024,
+      505,  507,  506,  507,  507,  528,  522,  550, 1018,  507,
+      563,  495,  522,  505,  563,  506,  508,  682,  508,  508,
+      522, 1017,  528,  509,  508,  509,  509,  563,  658,  526,
+
+      565,  509,  534,  527,  525,  527,  525,  526,  507,  507,
+      682,  668,  507,  668,  525,  550,  526,  565,  566,  568,
+      567,  552,  567,  508,  508,  507,  507,  508,  552,  552,
+      509,  509, 1015,  566,  509,  566,  568,  567,  527,  525,
+      508,  508,  525, 1012,  529,  572,  529,  509,  509,  516,
+      516,  516,  516, 1021,  529,  527,  525,  516,  529,  552,
+      570,  789,  572,  569,  570,  571,  574,  516,  516,  516,
+      516,  516,  516,  516,  516,  516,  569,  570,  571,  529,
+      569,  573,  571,  574,  574,  576,  516,  516, 1021,  576,
+      516,  607,  785,  607,  785,  573,  529, 1011,  573,  590,
+
+      789,  592,  576,  516,  516,  536,  559,  559,  559,  559,
+      559,  559,  559,  559,  559, 1009,  590,  536,  592,  536,
+      982,  607,  536,  536,  536,  536,  536,  536,  536,  536,
+      536,  537,  560,  560,  560,  560,  560,  560,  560,  560,
+      560, 1001,  659,  677,  677,  677,  999,  997,  537,  537,
+      537,  537,  537,  537,  537,  537,  537,  561,  561,  561,
+      561,  561,  561,  561,  561,  561,  593,  996,  982,  537,
+      538,  562,  562,  562,  562,  562,  562,  562,  562,  562,
+      659,  580,  538,  593,  538,  593,  580,  538,  538,  538,
+      538,  538,  538,  538,  538,  538,  564,  564,  580,  564,
+
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  577,
+      578,  579,  581,  579,  596,  591,  595,  578,  594,  581,
+      577,  594,  597,  597,  600,  596,  577,  578,  591,  581,
+      595,  596,  591,  595,  598,  594,  599,  992,  991,  597,
+      599,  600,  601, 1153,  601,  604,  673, 1153,  605,  598,
+
+      609,  598,  610,  599,  579,  603,  603,  603,  603,  603,
+      603,  603,  603,  603,  604,  605,  606,  609,  579,  610,
+      611,  610,  601,  613,  615,  613,  616,  601,  611,  606,
+      617,  604,  614,  606,  617,  614,  618,  611,  673,  620,
+      613,  615,  621,  616,  601,  619,  622,  617,  622,  614,
+      619,  676,  620,  618,  623,  618,  620,  625,  624,  621,
+      624,  627,  619,  622,  628,  623,  626,  630,  625,  627,
+      626,  623,  629,  632,  625,  624,  629,  628,  627,  633,
+      634,  628,  631,  626,  630,  635,  631,  635,  637,  629,
+      632,  638,  640,  676,  639,  640,  633,  634,  633,  631,
+
+      641,  643,  635,  644,  984,  637,  637,  639,  638,  640,
+      638,  639,  645,  646,  650,  792,  650,  641,  643,  641,
+      644,  643,  644,  647,  650,  647,  647,  661,  983,  645,
+      646,  647,  648,  661,  648,  648,  664,  654,  664,  654,
+      648,  661,  649,  674,  649,  649,  664,  654,  667,  666,
+      649,  654,  650,  666,  792,  696,  667,  794,  794,  794,
+      647,  647,  696,  696,  647,  667,  666,  704,  697,  648,
+      648,  669,  703,  648,  664,  697,  697,  647,  647,  649,
+      649,  674,  669,  649,  704,  938,  648,  648,  669,  980,
+      672,  703,  672,  670,  977,  670,  649,  649,  655,  655,
+
+      655,  655,  698,  670,  672,  705,  655,  670,  703,  698,
+      698,  702,  702,  702,  702,  702,  702,  702,  702,  702,
+      706,  707,  705,  938,  705,  708,  709,  710,  711,  716,
+      711,  719,  714,  712,  714,  655,  655,  706,  707,  655,
+      707,  712,  708,  709,  710,  711,  716,  710,  719,  709,
+      712,  715,  655,  655,  678,  715,  740,  975,  740,  819,
+      870,  819,  870,  876,  736,  876,  720,  714,  715,  714,
+      720,  678,  678,  678,  678,  678,  678,  678,  678,  678,
+      679,  736,  714,  720,  714,  915,  740,  915,  972,  956,
+      731,  732,  731,  733,  738,  732,  819,  679,  679,  679,
+
+      679,  679,  679,  679,  679,  679,  680,  731,  732,  819,
+      733,  738,  871,  733,  955,  954,  734,  735,  742,  748,
+      749,  735,  734,  680,  680,  680,  680,  680,  680,  680,
+      680,  680,  681,  734,  735,  742,  748,  749,  765,  805,
+      765,  935,  965,  935,  965,  871,  805,  805,  765,  681,
+      681,  681,  681,  681,  681,  681,  681,  681,  684,  684,
+      684,  684,  684,  684,  684,  684,  684,  684,  684,  684,
+      684,  684,  684,  684,  684,  684,  684,  684,  684,  684,
+      684,  684,  684,  684,  684,  684,  684,  684,  684,  684,
+      684,  684,  684,  684,  684,  684,  684,  684,  684,  684,
+
+      684,  684,  684,  684,  684,  684,  684,  684,  684,  684,
+      684,  684,  684,  684,  684,  684,  684,  684,  684,  684,
+      684,  688,  688,  806,  688, 1007,  953, 1007,  688,  688,
+      806,  806,  688,  952,  951,  688,  688,  688,  688,  688,
+      688,  688,  688,  701,  701,  949,  701,  701,  701,  701,
+      701,  701,  701,  701,  701,  701,  701,  701,  701,  701,
+      701,  701,  701,  701,  701,  701,  701,  701,  701,  701,
+      701,  701,  701,  701,  701,  701,  701,  701,  701,  701,
+      701,  701,  701,  701,  701,  701,  701,  701,  701,  701,
+      701,  701,  701,  701,  701,  701,  701,  701,  701,  701,
+
+      701,  701,  701,  701,  701,  701,  737,  739,  744,  743,
+      737,  743,  745,  746,  750, 1111,  751,  746,  739,  743,
+      745,  753,  744,  737,  739,  744,  752,  946,  747,  745,
+      746,  750,  747,  751,  751,  754,  755,  752,  753,  756,
+      757,  758,  757,  752,  743,  747,  759,  760,  761, 1111,
+      762,  764,  754,  755,  762,  767,  756,  763,  758,  758,
+      768,  743,  766,  759,  760,  761,  760,  762,  764,  763,
+      766,  769,  767, 1068,  763,  757,  770,  768,  770,  766,
+      771,  772,  773,  810,  773,  773,  786,  934,  769,  814,
+      757,  786,  757,  774,  945,  774,  774,  771,  772,  771,
+
+      810,  774,  775,  786,  775,  775,  814,  788,  787,  788,
+      809,  770,  865,  770,  865,  812,  816,  812,  811,  773,
+      773,  787,  811,  773,  934,  787, 1068,  821,  770,  809,
+      774,  774,  812,  816,  774,  811,  773,  773,  817,  775,
+      775,  813,  788,  775,  821,  813,  809,  774,  774,  865,
+      933, 1036,  817, 1036,  932,  817,  775,  775,  813,  788,
+      795,  795,  795,  795,  795,  795,  795,  795,  795,  795,
+      795,  795,  795,  795,  795,  795,  795,  795,  795,  795,
+      795,  795,  795,  795,  795,  795,  795,  795,  795,  795,
+      795,  795,  795,  795,  795,  795,  795,  795,  795,  795,
+
+      795,  795,  795,  795,  795,  795,  795,  795,  795,  795,
+      795,  795,  795,  795,  795,  795,  795,  795,  795,  795,
+      795,  795,  795,  796,  808,  808,  808,  808,  808,  808,
+      808,  808,  808,  815,  822,  820,  825,  815,  834,  835,
+      796,  796,  796,  796,  796,  796,  796,  796,  796,  820,
+      815,  822,  820,  825,  836,  834,  835,  834,  837,  838,
+      839,  838,  840,  841,  842,  836,  929,  841,  842,  927,
+      922,  836,  843,  846,  839,  837,  838,  839,  845,  840,
+      841,  842,  844,  843,  844,  845,  846,  847,  845,  843,
+      846,  848,  844,  849,  850,  851,  853,  851,  854,  852,
+
+      854,  855,  856,  857,  847,  858,  847,  852,  848,  858,
+      849,  850,  851,  853,  857,  859,  852,  860,  855,  856,
+      857,  856,  858,  861,  864,  862,  866,  862,  877,  867,
+      874,  879,  859,  875,  860,  862,  884,  867,  883,  883,
+      861,  864,  886,  866,  904,  864,  867,  874,  854,  887,
+      875,  875,  885,  884,  888,  883,  885,  889,  894,  886,
+      893,  877,  894,  896,  879,  880,  887,  896, 1020,  885,
+      889,  888,  893,  888,  889,  894,  906,  893,  908,  902,
+      896,  906,  880,  880,  880,  880,  880,  880,  880,  880,
+      880,  905,  907,  906,  909,  908,  907,  910,  911,  905,
+
+      914,  913, 1043,  912, 1081, 1020,  918,  914,  905,  907,
+      914,  909,  916,  909,  910,  911,  912,  910,  913,  916,
+      912,  917,  916,  918,  919,  920,  923,  924,  917,  920,
+      921,  917,  921,  925,  926,  928,  930,  939,  937,  928,
+      923,  919,  920,  923,  924,  931,  936,  921,  940, 1043,
+      925,  926,  928,  930,  930,  937,  941, 1081,  931,  940,
+      942,  944,  931,  936,  943,  940,  936,  947,  943,  948,
+      950,  948,  901,  941,  939,  958,  939,  942,  944,  959,
+      960,  943,  947,  961,  947,  962,  948,  950,  963,  958,
+      988,  964,  958,  964,  966,  961,  959,  960,  970,  987,
+
+      961,  966,  962,  900,  966,  963,  968,  963,  964,  967,
+      967,  967,  969,  968,  971,  970,  968,  967,  974,  969,
+      967,  973,  969,  973,  976,  978,  979,  990,  985,  978,
+      979,  971,  988, 1004,  899,  974,  989,  987,  973,  985,
+      989,  976,  978,  979,  990,  985,  993,  994, 1002, 1003,
+     1004, 1003, 1005,  989, 1006,  994, 1016,  993, 1006, 1013,
+     1005, 1002,  898,  993,  994, 1002, 1003, 1014, 1019, 1005,
+      897, 1006, 1008, 1008, 1008, 1010, 1013, 1023, 1026, 1010,
+     1008, 1027, 1026, 1008, 1014, 1019, 1032, 1019, 1034, 1016,
+     1035, 1046, 1010, 1033, 1023, 1026, 1047, 1033, 1027, 1027,
+
+     1057, 1034, 1065, 1032, 1052, 1034, 1039, 1035, 1046, 1039,
+     1033, 1037, 1037, 1037, 1058, 1067, 1053, 1057, 1058, 1037,
+     1062, 1052, 1037, 1039, 1053,  895, 1059, 1052, 1059, 1047,
+     1071, 1058, 1072, 1053, 1060, 1060, 1060, 1062, 1075, 1083,
+     1062, 1079, 1060, 1103, 1089, 1060, 1072, 1071, 1087, 1072,
+     1065, 1089, 1067, 1109, 1089, 1075, 1076, 1076, 1079, 1076,
+     1094, 1087,  892, 1076, 1076, 1087, 1095, 1076, 1107, 1110,
+     1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1077, 1077,
+     1077, 1092, 1104, 1108, 1113, 1092, 1077, 1083, 1114, 1077,
+     1090, 1109, 1112, 1094, 1090, 1090, 1103, 1090, 1092, 1095,
+
+     1090, 1090, 1090, 1097, 1101, 1090, 1116, 1118, 1090, 1090,
+     1090, 1090, 1090, 1090, 1090, 1090, 1098, 1099, 1119, 1107,
+     1097, 1101, 1110, 1098, 1099, 1112, 1098, 1099, 1120, 1104,
+     1145, 1108, 1145, 1146, 1147, 1146, 1147, 1113, 1149,  891,
+     1149, 1114, 1150,  882, 1150, 1118, 1151, 1157, 1151, 1157,
+      878, 1158, 1119, 1158,  873,  872,  869, 1116,  868,  863,
+      833,  832,  831,  830,  829,  828,  827,  826,  824,  818,
+      804,  802,  798,  793,  791,  790,  783,  782,  781,  778,
+      777, 1120, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124,
+     1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1125,
+
+     1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125,
+     1125, 1125, 1125, 1125, 1125, 1125, 1126, 1126,  776, 1126,
+     1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126,
+     1126, 1126, 1126, 1127, 1127,  730, 1127, 1127, 1127, 1127,
+     1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127,
+     1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128,
+     1128, 1128, 1128, 1128, 1128, 1128, 1128, 1129, 1129, 1129,
+     1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
+     1129, 1129, 1129, 1129, 1130, 1130,  729,  728,  727,  726,
+     1130, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131,
+
+     1131, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132,
+     1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1133,  725,
+     1133,  724, 1133, 1133,  722,  718,  717,  713, 1133, 1134,
+     1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134,
+     1134, 1134, 1134, 1134, 1134, 1134, 1135, 1135, 1135, 1135,
+     1135, 1135, 1135, 1135, 1135, 1135,  695, 1135, 1135, 1135,
+     1135,  694, 1135, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
+     1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
+     1137,  692,  691, 1137, 1137, 1138, 1138, 1138, 1138,  685,
+     1138, 1138,  683, 1138, 1138,  675, 1138, 1138,  662,  660,
+
+     1138, 1138, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139,
+     1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1140,
+      653, 1140,  651,  636, 1140, 1141,  589, 1141,  588, 1141,
+     1141, 1142, 1142,  586, 1142, 1142, 1142, 1142, 1142, 1142,
+     1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1143, 1143,
+     1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143,
+     1143, 1143, 1143, 1143, 1143, 1144, 1144, 1144, 1144, 1144,
+     1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144,
+     1144, 1144, 1148,  585,  583, 1148, 1148, 1154,  582, 1154,
+      575,  556,  551,  549, 1154,  546,  543,  530,  524,  523,
+
+      515,  514, 1154, 1155,  513, 1155,  512,  511, 1155, 1156,
+      510, 1156,  454, 1156, 1156, 1159,  429, 1159,  409,  400,
+     1159, 1160,  398, 1160,  397, 1160, 1160, 1161, 1161,  391,
+     1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161,
+     1161, 1161, 1161, 1161, 1162, 1162,  389, 1162, 1162, 1162,
+     1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162,
+     1162, 1163, 1163,  375, 1163, 1163, 1163, 1163, 1163, 1163,
+     1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1164, 1164,
+     1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164,
+     1164, 1164, 1164, 1164, 1164, 1165, 1165, 1165, 1165, 1165,
+
+     1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165,
+     1165, 1165, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
+     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1167,
+      374, 1167,  372, 1167, 1167, 1168, 1168,  371, 1168, 1168,
+     1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
+     1168, 1168, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169,
+     1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1170,
+     1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170,
+     1170, 1170, 1170, 1170, 1170, 1170, 1171, 1171,  365, 1171,
+     1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
+
+     1171, 1171, 1171, 1172, 1172,  358, 1172, 1172, 1172, 1172,
+     1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172,
+     1173, 1173,  353, 1173, 1173, 1173, 1173, 1173, 1173, 1173,
+     1173, 1173, 1173, 1173, 1173, 1173, 1173, 1174, 1174, 1174,
+     1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174,
+     1174, 1174, 1174, 1174, 1175, 1175, 1175, 1175, 1175, 1175,
+     1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
+     1175, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+     1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1177, 1177,
+     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
+
+     1177, 1177, 1177, 1177, 1177, 1178, 1178, 1178, 1178, 1178,
+     1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
+     1178, 1178, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179,
+     1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179,  345,
+      344,  334,  333,  332,  331,  330,  329,  328,  326,  262,
+      244,  243,  237,  236,  235,  233,  232,  231,  230,  228,
+      213,  212,  210,  209,  204,  198,  195,  192,  178,  173,
+      171,  170,  167,  101,  100,   96,   95,   82,   81,   77,
+       76,   75,   69,   68,   63,   58,   13,    7, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+     1123, 1123
+    } ;
+
+static yy_state_type yy_last_accepting_state;
+static char *yy_last_accepting_cpos;
+
+/* The intent behind this definition is that it'll catch
+ * any uses of REJECT which flex missed.
+ */
+#define REJECT reject_used_but_not_detected
+#define yymore() yymore_used_but_not_detected
+#define YY_MORE_ADJ 0
+#define YY_RESTORE_YY_MORE_OFFSET
+char *yytext;
+#line 1 "fortran.lex"
+#define INITIAL 0
+/******************************************************************************/
+/*                                                                            */
+/*     CONV (converter) for Agrif (Adaptive Grid Refinement In Fortran)       */
+/*                                                                            */
+/* Copyright or   or Copr. Laurent Debreu (Laurent.Debreu@imag.fr)            */
+/*                        Cyril Mazauric (Cyril_Mazauric@yahoo.fr)            */
+/* This software is governed by the CeCILL-C license under French law and     */
+/* abiding by the rules of distribution of free software.  You can  use,      */
+/* modify and/ or redistribute the software under the terms of the CeCILL-C   */
+/* license as circulated by CEA, CNRS and INRIA at the following URL          */
+/* "http://www.cecill.info".                                                  */
+/*                                                                            */
+/* As a counterpart to the access to the source code and  rights to copy,     */
+/* modify and redistribute granted by the license, users are provided only    */
+/* with a limited warranty  and the software's author,  the holder of the     */
+/* economic rights,  and the successive licensors  have only  limited         */
+/* liability.                                                                 */
+/*                                                                            */
+/* In this respect, the user's attention is drawn to the risks associated     */
+/* with loading,  using,  modifying and/or developing or reproducing the      */
+/* software by the user in light of its specific status of free software,     */
+/* that may mean  that it is complicated to manipulate,  and  that  also      */
+/* therefore means  that it is reserved for developers  and  experienced      */
+/* professionals having in-depth computer knowledge. Users are therefore      */
+/* encouraged to load and test the software's suitability as regards their    */
+/* requirements in conditions enabling the security of their systems and/or   */
+/* data to be ensured and,  more generally, to use and operate it in the      */
+/* same conditions as regards security.                                       */
+/*                                                                            */
+/* The fact that you are presently reading this means that you have had       */
+/* knowledge of the CeCILL-C license and that you accept its terms.           */
+/******************************************************************************/
+/* version 1.7                                                                */
+/******************************************************************************/
+#define parameter 1
+
+#define character 2
+
+#define donottreat 3
+
+#define fortran77style 4
+
+#define fortran90style 5
+
+#line 41 "fortran.lex"
+#include <math.h>
+#include <stdlib.h>
+#include <string.h>
+extern FILE * yyin;
+#define MAX_INCLUDE_DEPTH 30
+#define tabsize 6
+YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH];
+int line_num_fortran=1;
+int line_num_fortran_common=1;
+int newlinef90 = 0;
+char *tmp;
+char tmpc;
+/******************************************************************************/
+/**************PETITS PB NON PREVUS *******************************************/
+/******************************************************************************/
+/* NEXTLINF77 un ligne fortran 77 peut commencer par -      &a=b or on        */
+/*            a prevu seulement       & a=b avec l'espace entre le symbole    */
+/*            de la 7eme et le debut de la ligne de commande                  */
+/*            le ! est aussi interdit comme symbole de la 7 eme colonne       */
+/*            Normalement NEXTLINEF77 \n+[ ]{5}[^ ]                           */
+/******************************************************************************/
+#define YY_USER_ACTION \
+        {\
+           if (firstpass == 0) \
+           {\
+              strcat(curbuf,yytext); \
+              Save_Length(curbuf,38); \
+              strcpy(motparse,yytext);\
+              Save_Length(motparse,32); \
+              colnum = colnum + strlen(motparse);\
+              ECHO; \
+           }\
+           strcpy(motparse1,yytext);\
+           /*printf("yytext = %s\n",yytext);*/\
+        /*if ( firstpass == 1 ) 
+                      printf("yytext = %s %d\n",yytext,strlen(yytext));*/\
+        }
+#line 1783 "fortran.yy.c"
+
+/* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+#ifndef YY_SKIP_YYWRAP
+#ifdef __cplusplus
+extern "C" int yywrap YY_PROTO(( void ));
+#else
+extern int yywrap YY_PROTO(( void ));
+#endif
+#endif
+
+#ifndef YY_NO_UNPUT
+static void yyunput YY_PROTO(( int c, char *buf_ptr ));
+#endif
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen YY_PROTO(( yyconst char * ));
+#endif
+
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+static int yyinput YY_PROTO(( void ));
+#else
+static int input YY_PROTO(( void ));
+#endif
+#endif
+
+#if YY_STACK_USED
+static int yy_start_stack_ptr = 0;
+static int yy_start_stack_depth = 0;
+static int *yy_start_stack = 0;
+#ifndef YY_NO_PUSH_STATE
+static void yy_push_state YY_PROTO(( int new_state ));
+#endif
+#ifndef YY_NO_POP_STATE
+static void yy_pop_state YY_PROTO(( void ));
+#endif
+#ifndef YY_NO_TOP_STATE
+static int yy_top_state YY_PROTO(( void ));
+#endif
+
+#else
+#define YY_NO_PUSH_STATE 1
+#define YY_NO_POP_STATE 1
+#define YY_NO_TOP_STATE 1
+#endif
+
+#ifdef YY_MALLOC_DECL
+YY_MALLOC_DECL
+#else
+#if __STDC__
+#ifndef __cplusplus
+#include <stdlib.h>
+#endif
+#else
+/* Just try to get by without declaring the routines.  This will fail
+ * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
+ * or sizeof(void*) != sizeof(int).
+ */
+#endif
+#endif
+
+/* Amount of stuff to slurp up with each read. */
+#ifndef YY_READ_BUF_SIZE
+#define YY_READ_BUF_SIZE 8192
+#endif
+
+/* Copy whatever the last rule matched to the standard output. */
+
+#ifndef ECHO
+/* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+#define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
+#endif
+
+/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
+ * is returned in "result".
+ */
+#ifndef YY_INPUT
+#define YY_INPUT(buf,result,max_size) \
+	if ( yy_current_buffer->yy_is_interactive ) \
+		{ \
+		int c = '*', n; \
+		for ( n = 0; n < max_size && \
+			     (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
+			buf[n] = (char) c; \
+		if ( c == '\n' ) \
+			buf[n++] = (char) c; \
+		if ( c == EOF && ferror( yyin ) ) \
+			YY_FATAL_ERROR( "input in flex scanner failed" ); \
+		result = n; \
+		} \
+	else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
+		  && ferror( yyin ) ) \
+		YY_FATAL_ERROR( "input in flex scanner failed" );
+#endif
+
+/* No semi-colon after return; correct usage is to write "yyterminate();" -
+ * we don't want an extra ';' after the "return" because that will cause
+ * some compilers to complain about unreachable statements.
+ */
+#ifndef yyterminate
+#define yyterminate() return YY_NULL
+#endif
+
+/* Number of entries by which start-condition stack grows. */
+#ifndef YY_START_STACK_INCR
+#define YY_START_STACK_INCR 25
+#endif
+
+/* Report a fatal error. */
+#ifndef YY_FATAL_ERROR
+#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
+#endif
+
+/* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+#ifndef YY_DECL
+#define YY_DECL int yylex YY_PROTO(( void ))
+#endif
+
+/* Code executed at the beginning of each rule, after yytext and yyleng
+ * have been set up.
+ */
+#ifndef YY_USER_ACTION
+#define YY_USER_ACTION
+#endif
+
+/* Code executed at the end of each rule. */
+#ifndef YY_BREAK
+#define YY_BREAK break;
+#endif
+
+#define YY_RULE_SETUP \
+	if ( yyleng > 0 ) \
+		yy_current_buffer->yy_at_bol = \
+				(yytext[yyleng - 1] == '\n'); \
+	YY_USER_ACTION
+
+YY_DECL
+	{
+	register yy_state_type yy_current_state;
+	register char *yy_cp, *yy_bp;
+	register int yy_act;
+
+#line 106 "fortran.lex"
+
+  if (infixed) BEGIN(fortran77style) ;
+  if (infree) BEGIN(fortran90style)  ;
+
+#line 1942 "fortran.yy.c"
+
+	if ( yy_init )
+		{
+		yy_init = 0;
+
+#ifdef YY_USER_INIT
+		YY_USER_INIT;
+#endif
+
+		if ( ! yy_start )
+			yy_start = 1;	/* first start state */
+
+		if ( ! yyin )
+			yyin = stdin;
+
+		if ( ! yyout )
+			yyout = stdout;
+
+		if ( ! yy_current_buffer )
+			yy_current_buffer =
+				yy_create_buffer( yyin, YY_BUF_SIZE );
+
+		yy_load_buffer_state();
+		}
+
+	while ( 1 )		/* loops until end-of-file is reached */
+		{
+		yy_cp = yy_c_buf_p;
+
+		/* Support of yytext. */
+		*yy_cp = yy_hold_char;
+
+		/* yy_bp points to the position in yy_ch_buf of the start of
+		 * the current run.
+		 */
+		yy_bp = yy_cp;
+
+		yy_current_state = yy_start;
+		yy_current_state += YY_AT_BOL();
+yy_match:
+		do
+			{
+			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+			if ( yy_accept[yy_current_state] )
+				{
+				yy_last_accepting_state = yy_current_state;
+				yy_last_accepting_cpos = yy_cp;
+				}
+			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+				{
+				yy_current_state = (int) yy_def[yy_current_state];
+				if ( yy_current_state >= 1124 )
+					yy_c = yy_meta[(unsigned int) yy_c];
+				}
+			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+			++yy_cp;
+			}
+		while ( yy_base[yy_current_state] != 4189 );
+
+yy_find_action:
+		yy_act = yy_accept[yy_current_state];
+		if ( yy_act == 0 )
+			{ /* have to back up */
+			yy_cp = yy_last_accepting_cpos;
+			yy_current_state = yy_last_accepting_state;
+			yy_act = yy_accept[yy_current_state];
+			}
+
+		YY_DO_BEFORE_ACTION;
+
+
+do_action:	/* This label is used only to access EOF actions. */
+
+
+		switch ( yy_act )
+	{ /* beginning of action switch */
+			case 0: /* must back up */
+			/* undo the effects of YY_DO_BEFORE_ACTION */
+			*yy_cp = yy_hold_char;
+			yy_cp = yy_last_accepting_cpos;
+			yy_current_state = yy_last_accepting_state;
+			goto yy_find_action;
+
+case 1:
+YY_RULE_SETUP
+#line 110 "fortran.lex"
+return TOK_DEBUT;
+	YY_BREAK
+case 2:
+YY_RULE_SETUP
+#line 111 "fortran.lex"
+return TOK_FIN;
+	YY_BREAK
+case 3:
+YY_RULE_SETUP
+#line 112 "fortran.lex"
+return TOK_OMP;
+	YY_BREAK
+case 4:
+YY_RULE_SETUP
+#line 113 "fortran.lex"
+return TOK_DOLLAR;
+	YY_BREAK
+case 5:
+YY_RULE_SETUP
+#line 115 "fortran.lex"
+{return TOK_REAL8;}
+	YY_BREAK
+case 6:
+YY_RULE_SETUP
+#line 116 "fortran.lex"
+{return TOK_SUBROUTINE;}
+	YY_BREAK
+case 7:
+YY_RULE_SETUP
+#line 117 "fortran.lex"
+{return TOK_PROGRAM;}
+	YY_BREAK
+case 8:
+YY_RULE_SETUP
+#line 118 "fortran.lex"
+{inallocate = 1; return TOK_ALLOCATE;}
+	YY_BREAK
+case 9:
+YY_RULE_SETUP
+#line 119 "fortran.lex"
+{inallocate = 1; return TOK_DEALLOCATE;}
+	YY_BREAK
+case 10:
+YY_RULE_SETUP
+#line 120 "fortran.lex"
+{return TOK_RESULT;}
+	YY_BREAK
+case 11:
+YY_RULE_SETUP
+#line 121 "fortran.lex"
+{return TOK_FUNCTION;}
+	YY_BREAK
+case 12:
+YY_RULE_SETUP
+#line 122 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_ENDSUBROUTINE;}
+	YY_BREAK
+case 13:
+YY_RULE_SETUP
+#line 123 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_ENDPROGRAM;}
+	YY_BREAK
+case 14:
+YY_RULE_SETUP
+#line 124 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_ENDFUNCTION;}
+	YY_BREAK
+case 15:
+YY_RULE_SETUP
+#line 125 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_ENDUNIT;}
+	YY_BREAK
+case 16:
+YY_RULE_SETUP
+#line 126 "fortran.lex"
+return TOK_INCLUDE;
+	YY_BREAK
+case 17:
+YY_RULE_SETUP
+#line 127 "fortran.lex"
+{
+                            strcpy(yylval.na,yytext);
+                            tmpc = input();
+                            unput(tmpc);
+                            if ( (
+                               tmpc >= 'a' && tmpc <= 'z'
+                                  ) || (
+                               tmpc >= 'A' && tmpc <= 'Z'
+                               )  )
+                               {
+                                  return TOK_USE;
+                               }
+                               else
+                               {
+                                  return TOK_NAME;
+                               }
+                         }
+	YY_BREAK
+case 18:
+YY_RULE_SETUP
+#line 144 "fortran.lex"
+{return TOK_REWIND;}
+	YY_BREAK
+case 19:
+YY_RULE_SETUP
+#line 145 "fortran.lex"
+return TOK_IMPLICIT;
+	YY_BREAK
+case 20:
+YY_RULE_SETUP
+#line 146 "fortran.lex"
+return TOK_NONE;
+	YY_BREAK
+case 21:
+YY_RULE_SETUP
+#line 147 "fortran.lex"
+return TOK_CALL;
+	YY_BREAK
+case 22:
+YY_RULE_SETUP
+#line 148 "fortran.lex"
+return TOK_TRUE;
+	YY_BREAK
+case 23:
+YY_RULE_SETUP
+#line 149 "fortran.lex"
+return TOK_FALSE;
+	YY_BREAK
+case 24:
+YY_RULE_SETUP
+#line 150 "fortran.lex"
+{return TOK_POINT_TO;}
+	YY_BREAK
+case 25:
+YY_RULE_SETUP
+#line 151 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_DASTER;}
+	YY_BREAK
+case 26:
+YY_RULE_SETUP
+#line 152 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_EQV;}
+	YY_BREAK
+case 27:
+YY_RULE_SETUP
+#line 153 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_EQ;}
+	YY_BREAK
+case 28:
+YY_RULE_SETUP
+#line 154 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_GT;}
+	YY_BREAK
+case 29:
+YY_RULE_SETUP
+#line 155 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_GE;}
+	YY_BREAK
+case 30:
+YY_RULE_SETUP
+#line 156 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_LT;}
+	YY_BREAK
+case 31:
+YY_RULE_SETUP
+#line 157 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_LE;}
+	YY_BREAK
+case 32:
+YY_RULE_SETUP
+#line 158 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_NEQV;}
+	YY_BREAK
+case 33:
+YY_RULE_SETUP
+#line 159 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_NE;}
+	YY_BREAK
+case 34:
+YY_RULE_SETUP
+#line 160 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_NOT;}
+	YY_BREAK
+case 35:
+YY_RULE_SETUP
+#line 161 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_OR;}
+	YY_BREAK
+case 36:
+YY_RULE_SETUP
+#line 162 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_XOR;}
+	YY_BREAK
+case 37:
+YY_RULE_SETUP
+#line 163 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_AND;}
+	YY_BREAK
+case 38:
+YY_RULE_SETUP
+#line 164 "fortran.lex"
+{return TOK_MODULE;}
+	YY_BREAK
+case 39:
+YY_RULE_SETUP
+#line 165 "fortran.lex"
+{return TOK_DOWHILE;}
+	YY_BREAK
+case 40:
+YY_RULE_SETUP
+#line 166 "fortran.lex"
+return TOK_ENDMODULE;
+	YY_BREAK
+case 41:
+YY_RULE_SETUP
+#line 167 "fortran.lex"
+return TOK_ENDDO;
+	YY_BREAK
+case 42:
+YY_RULE_SETUP
+#line 168 "fortran.lex"
+{return TOK_PLAINDO;}
+	YY_BREAK
+case 43:
+YY_RULE_SETUP
+#line 169 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_REAL;}
+	YY_BREAK
+case 44:
+YY_RULE_SETUP
+#line 170 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_INTEGER;}
+	YY_BREAK
+case 45:
+YY_RULE_SETUP
+#line 171 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_LOGICAL;}
+	YY_BREAK
+case 46:
+YY_RULE_SETUP
+#line 172 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_CHARACTER;}
+	YY_BREAK
+case 47:
+YY_RULE_SETUP
+#line 173 "fortran.lex"
+{return TOK_ALLOCATABLE;}
+	YY_BREAK
+case 48:
+YY_RULE_SETUP
+#line 174 "fortran.lex"
+return TOK_CLOSE;
+	YY_BREAK
+case 49:
+YY_RULE_SETUP
+#line 175 "fortran.lex"
+return TOK_INQUIRE;
+	YY_BREAK
+case 50:
+YY_RULE_SETUP
+#line 176 "fortran.lex"
+{return TOK_DIMENSION;}
+	YY_BREAK
+case 51:
+YY_RULE_SETUP
+#line 177 "fortran.lex"
+return TOK_PAUSE;
+	YY_BREAK
+case 52:
+YY_RULE_SETUP
+#line 178 "fortran.lex"
+return TOK_EQUIVALENCE;
+	YY_BREAK
+case 53:
+YY_RULE_SETUP
+#line 179 "fortran.lex"
+return TOK_STOP;
+	YY_BREAK
+case 54:
+YY_RULE_SETUP
+#line 180 "fortran.lex"
+return TOK_WHERE;
+	YY_BREAK
+case 55:
+YY_RULE_SETUP
+#line 181 "fortran.lex"
+return TOK_ENDWHERE;
+	YY_BREAK
+case 56:
+YY_RULE_SETUP
+#line 182 "fortran.lex"
+return TOK_ELSEWHERE;
+	YY_BREAK
+case 57:
+YY_RULE_SETUP
+#line 183 "fortran.lex"
+{return TOK_COMPLEX;}
+	YY_BREAK
+case 58:
+YY_RULE_SETUP
+#line 184 "fortran.lex"
+{return TOK_CONTAINS;}
+	YY_BREAK
+case 59:
+YY_RULE_SETUP
+#line 185 "fortran.lex"
+{return TOK_ONLY;}
+	YY_BREAK
+case 60:
+YY_RULE_SETUP
+#line 186 "fortran.lex"
+{return TOK_PARAMETER;}
+	YY_BREAK
+case 61:
+YY_RULE_SETUP
+#line 187 "fortran.lex"
+{return TOK_RECURSIVE;}
+	YY_BREAK
+case 62:
+YY_RULE_SETUP
+#line 188 "fortran.lex"
+{return TOK_COMMON;}
+	YY_BREAK
+case 63:
+YY_RULE_SETUP
+#line 189 "fortran.lex"
+{return TOK_GLOBAL;}
+	YY_BREAK
+case 64:
+YY_RULE_SETUP
+#line 190 "fortran.lex"
+{return TOK_EXTERNAL;}
+	YY_BREAK
+case 65:
+YY_RULE_SETUP
+#line 191 "fortran.lex"
+{return TOK_INTENT;}
+	YY_BREAK
+case 66:
+YY_RULE_SETUP
+#line 192 "fortran.lex"
+{return TOK_POINTER;}
+	YY_BREAK
+case 67:
+YY_RULE_SETUP
+#line 193 "fortran.lex"
+{return TOK_OPTIONAL;}
+	YY_BREAK
+case 68:
+YY_RULE_SETUP
+#line 194 "fortran.lex"
+{return TOK_SAVE;}
+	YY_BREAK
+case 69:
+YY_RULE_SETUP
+#line 195 "fortran.lex"
+{return TOK_TYPE;}
+	YY_BREAK
+case 70:
+YY_RULE_SETUP
+#line 196 "fortran.lex"
+{return TOK_TYPEPAR;}
+	YY_BREAK
+case 71:
+YY_RULE_SETUP
+#line 197 "fortran.lex"
+{if (inallocate == 1) return TOK_STAT; else {strcpy(yylval.na,yytext);return TOK_NAME;}}
+	YY_BREAK
+case 72:
+YY_RULE_SETUP
+#line 198 "fortran.lex"
+{return TOK_ENDTYPE;}
+	YY_BREAK
+case 73:
+YY_RULE_SETUP
+#line 199 "fortran.lex"
+return TOK_OPEN;
+	YY_BREAK
+case 74:
+YY_RULE_SETUP
+#line 200 "fortran.lex"
+return TOK_RETURN;
+	YY_BREAK
+case 75:
+YY_RULE_SETUP
+#line 201 "fortran.lex"
+return TOK_EXIT;
+	YY_BREAK
+case 76:
+YY_RULE_SETUP
+#line 202 "fortran.lex"
+return TOK_PRINT;
+	YY_BREAK
+case 77:
+YY_RULE_SETUP
+#line 203 "fortran.lex"
+{return TOK_PROCEDURE;}
+	YY_BREAK
+case 78:
+YY_RULE_SETUP
+#line 204 "fortran.lex"
+{return TOK_READ;}
+	YY_BREAK
+case 79:
+YY_RULE_SETUP
+#line 205 "fortran.lex"
+{return TOK_NAMELIST;}
+	YY_BREAK
+case 80:
+YY_RULE_SETUP
+#line 206 "fortran.lex"
+{return TOK_WRITE;}
+	YY_BREAK
+case 81:
+YY_RULE_SETUP
+#line 207 "fortran.lex"
+{return TOK_TARGET;}
+	YY_BREAK
+case 82:
+YY_RULE_SETUP
+#line 208 "fortran.lex"
+{return TOK_PUBLIC;}
+	YY_BREAK
+case 83:
+YY_RULE_SETUP
+#line 209 "fortran.lex"
+{return TOK_PRIVATE;}
+	YY_BREAK
+case 84:
+YY_RULE_SETUP
+#line 210 "fortran.lex"
+{strcpy(yylval.nac,yytext);return TOK_IN;}
+	YY_BREAK
+case 85:
+YY_RULE_SETUP
+#line 211 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_DATA;}
+	YY_BREAK
+case 86:
+YY_RULE_SETUP
+#line 212 "fortran.lex"
+return TOK_CONTINUE;
+	YY_BREAK
+case 87:
+YY_RULE_SETUP
+#line 213 "fortran.lex"
+{return TOK_PLAINGOTO;}
+	YY_BREAK
+case 88:
+YY_RULE_SETUP
+#line 214 "fortran.lex"
+{strcpy(yylval.nac,yytext);return TOK_OUT;}
+	YY_BREAK
+case 89:
+YY_RULE_SETUP
+#line 215 "fortran.lex"
+{strcpy(yylval.nac,yytext);return TOK_INOUT;}
+	YY_BREAK
+case 90:
+YY_RULE_SETUP
+#line 216 "fortran.lex"
+{return TOK_INTRINSIC;}
+	YY_BREAK
+case 91:
+YY_RULE_SETUP
+#line 217 "fortran.lex"
+{return TOK_THEN;}
+	YY_BREAK
+case 92:
+YY_RULE_SETUP
+#line 218 "fortran.lex"
+{return TOK_ELSEIF;}
+	YY_BREAK
+case 93:
+YY_RULE_SETUP
+#line 219 "fortran.lex"
+{return TOK_ELSE;}
+	YY_BREAK
+case 94:
+YY_RULE_SETUP
+#line 220 "fortran.lex"
+{return TOK_ENDIF;}
+	YY_BREAK
+case 95:
+YY_RULE_SETUP
+#line 221 "fortran.lex"
+{return TOK_LOGICALIF;}
+	YY_BREAK
+case 96:
+YY_RULE_SETUP
+#line 222 "fortran.lex"
+{return TOK_SUM;}
+	YY_BREAK
+case 97:
+YY_RULE_SETUP
+#line 223 "fortran.lex"
+{return TOK_MAX;}
+	YY_BREAK
+case 98:
+YY_RULE_SETUP
+#line 224 "fortran.lex"
+{return TOK_TANH;}
+	YY_BREAK
+case 99:
+YY_RULE_SETUP
+#line 225 "fortran.lex"
+{return TOK_MAXVAL;}
+	YY_BREAK
+case 100:
+YY_RULE_SETUP
+#line 226 "fortran.lex"
+{return TOK_TRIM;}
+	YY_BREAK
+case 101:
+YY_RULE_SETUP
+#line 227 "fortran.lex"
+{return TOK_SQRT;}
+	YY_BREAK
+case 102:
+YY_RULE_SETUP
+#line 228 "fortran.lex"
+{return TOK_SELECTCASE;}
+	YY_BREAK
+case 103:
+YY_RULE_SETUP
+#line 229 "fortran.lex"
+{return TOK_CASE;}
+	YY_BREAK
+case 104:
+YY_RULE_SETUP
+#line 230 "fortran.lex"
+{return TOK_CASEDEFAULT;}
+	YY_BREAK
+case 105:
+YY_RULE_SETUP
+#line 231 "fortran.lex"
+{return TOK_ENDSELECT;}
+	YY_BREAK
+case 106:
+YY_RULE_SETUP
+#line 232 "fortran.lex"
+{return TOK_FILE;}
+	YY_BREAK
+case 107:
+YY_RULE_SETUP
+#line 233 "fortran.lex"
+{return TOK_END;}
+	YY_BREAK
+case 108:
+YY_RULE_SETUP
+#line 234 "fortran.lex"
+{return TOK_ERR;}
+	YY_BREAK
+case 109:
+YY_RULE_SETUP
+#line 235 "fortran.lex"
+{return TOK_EXIST;}
+	YY_BREAK
+case 110:
+YY_RULE_SETUP
+#line 236 "fortran.lex"
+{return TOK_MIN;}
+	YY_BREAK
+case 111:
+YY_RULE_SETUP
+#line 237 "fortran.lex"
+{return TOK_NINT;}
+	YY_BREAK
+case 112:
+YY_RULE_SETUP
+#line 238 "fortran.lex"
+{return TOK_FLOAT;}
+	YY_BREAK
+case 113:
+YY_RULE_SETUP
+#line 239 "fortran.lex"
+{return TOK_EXP;}
+	YY_BREAK
+case 114:
+YY_RULE_SETUP
+#line 240 "fortran.lex"
+{return TOK_COS;}
+	YY_BREAK
+case 115:
+YY_RULE_SETUP
+#line 241 "fortran.lex"
+{return TOK_COSH;}
+	YY_BREAK
+case 116:
+YY_RULE_SETUP
+#line 242 "fortran.lex"
+{return TOK_ACOS;}
+	YY_BREAK
+case 117:
+YY_RULE_SETUP
+#line 243 "fortran.lex"
+{return TOK_SIN;}
+	YY_BREAK
+case 118:
+YY_RULE_SETUP
+#line 244 "fortran.lex"
+{return TOK_SINH;}
+	YY_BREAK
+case 119:
+YY_RULE_SETUP
+#line 245 "fortran.lex"
+{return TOK_ASIN;}
+	YY_BREAK
+case 120:
+YY_RULE_SETUP
+#line 246 "fortran.lex"
+{return TOK_LOG;}
+	YY_BREAK
+case 121:
+YY_RULE_SETUP
+#line 247 "fortran.lex"
+{return TOK_TAN;}
+	YY_BREAK
+case 122:
+YY_RULE_SETUP
+#line 248 "fortran.lex"
+{return TOK_ATAN;}
+	YY_BREAK
+case 123:
+YY_RULE_SETUP
+#line 249 "fortran.lex"
+{return TOK_CYCLE;}
+	YY_BREAK
+case 124:
+YY_RULE_SETUP
+#line 250 "fortran.lex"
+{return TOK_ABS;}
+	YY_BREAK
+case 125:
+YY_RULE_SETUP
+#line 251 "fortran.lex"
+{return TOK_MOD;}
+	YY_BREAK
+case 126:
+YY_RULE_SETUP
+#line 252 "fortran.lex"
+{return TOK_SIGN;}
+	YY_BREAK
+case 127:
+YY_RULE_SETUP
+#line 253 "fortran.lex"
+{return TOK_MINLOC;}
+	YY_BREAK
+case 128:
+YY_RULE_SETUP
+#line 254 "fortran.lex"
+{return TOK_MAXLOC;}
+	YY_BREAK
+case 129:
+YY_RULE_SETUP
+#line 255 "fortran.lex"
+{return TOK_MINVAL;}
+	YY_BREAK
+case 130:
+YY_RULE_SETUP
+#line 256 "fortran.lex"
+{return TOK_INTERFACE;}
+	YY_BREAK
+case 131:
+YY_RULE_SETUP
+#line 257 "fortran.lex"
+{return TOK_BACKSPACE;}
+	YY_BREAK
+case 132:
+YY_RULE_SETUP
+#line 258 "fortran.lex"
+{return TOK_ENDINTERFACE;}
+	YY_BREAK
+case 133:
+YY_RULE_SETUP
+#line 259 "fortran.lex"
+{return TOK_LEFTAB;}
+	YY_BREAK
+case 134:
+YY_RULE_SETUP
+#line 260 "fortran.lex"
+{return TOK_RIGHTAB;}
+	YY_BREAK
+case 135:
+YY_RULE_SETUP
+#line 261 "fortran.lex"
+{return TOK_FORMAT;}
+	YY_BREAK
+case 136:
+YY_RULE_SETUP
+#line 262 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_DOUBLEPRECISION;}
+	YY_BREAK
+case 137:
+YY_RULE_SETUP
+#line 263 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_DOUBLECOMPLEX;}
+	YY_BREAK
+case 138:
+YY_RULE_SETUP
+#line 264 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_SLASH;}
+	YY_BREAK
+case 139:
+YY_RULE_SETUP
+#line 265 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_DSLASH;}
+	YY_BREAK
+case 140:
+YY_RULE_SETUP
+#line 266 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_CHAR_CUT;}
+	YY_BREAK
+case 141:
+YY_RULE_SETUP
+#line 267 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_CHAR_CONSTANT;}
+	YY_BREAK
+case 142:
+YY_RULE_SETUP
+#line 268 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_CHAR_MESSAGE;}
+	YY_BREAK
+case 143:
+YY_RULE_SETUP
+#line 269 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_CHAR_INT;}
+	YY_BREAK
+case 144:
+YY_RULE_SETUP
+#line 270 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_NAME;}
+	YY_BREAK
+case 145:
+YY_RULE_SETUP
+#line 271 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_CSTREAL;}
+	YY_BREAK
+case 146:
+YY_RULE_SETUP
+#line 272 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_CSTREALDP;}
+	YY_BREAK
+case 147:
+YY_RULE_SETUP
+#line 273 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_CSTREALQP;}
+	YY_BREAK
+case 148:
+*yy_cp = yy_hold_char; /* undo effects of setting up yytext */
+yy_c_buf_p = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+#line 274 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_CSTREAL;}
+	YY_BREAK
+case 149:
+YY_RULE_SETUP
+#line 275 "fortran.lex"
+{strcpy(yylval.na,yytext);return TOK_CSTINT;}
+	YY_BREAK
+case 150:
+YY_RULE_SETUP
+#line 276 "fortran.lex"
+{}
+	YY_BREAK
+case 151:
+YY_RULE_SETUP
+#line 277 "fortran.lex"
+{return TOK_QUOTE;}
+	YY_BREAK
+case 152:
+YY_RULE_SETUP
+#line 278 "fortran.lex"
+{}
+	YY_BREAK
+case 153:
+YY_RULE_SETUP
+#line 279 "fortran.lex"
+{strcpy(yylval.na,yytext);return (int) *yytext;}
+	YY_BREAK
+case 154:
+YY_RULE_SETUP
+#line 280 "fortran.lex"
+{return TOK_SEMICOLON;}
+	YY_BREAK
+case 155:
+YY_RULE_SETUP
+#line 281 "fortran.lex"
+{return (int) *yytext;}
+	YY_BREAK
+case 156:
+YY_RULE_SETUP
+#line 282 "fortran.lex"
+{return (int) *yytext;}
+	YY_BREAK
+case 157:
+YY_RULE_SETUP
+#line 283 "fortran.lex"
+{return (int) *yytext;}
+	YY_BREAK
+case 158:
+YY_RULE_SETUP
+#line 284 "fortran.lex"
+{return (int) *yytext;}
+	YY_BREAK
+case 159:
+YY_RULE_SETUP
+#line 285 "fortran.lex"
+{colnum=0;line_num_fortran++;line_num_fortran_common++; return (int) *yytext;}
+	YY_BREAK
+case 160:
+*yy_cp = yy_hold_char; /* undo effects of setting up yytext */
+yy_c_buf_p = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+#line 286 "fortran.lex"
+
+	YY_BREAK
+case 161:
+YY_RULE_SETUP
+#line 287 "fortran.lex"
+{if (newlinef90 == 0) return TOK_LABEL; else newlinef90 = 0;}
+	YY_BREAK
+case 162:
+YY_RULE_SETUP
+#line 288 "fortran.lex"
+
+	YY_BREAK
+case 163:
+YY_RULE_SETUP
+#line 289 "fortran.lex"
+{colnum=colnum-1+tabsize;}
+	YY_BREAK
+case 164:
+YY_RULE_SETUP
+#line 290 "fortran.lex"
+;
+	YY_BREAK
+case 165:
+YY_RULE_SETUP
+#line 291 "fortran.lex"
+{line_num_fortran++;line_num_fortran_common++;newlinef90=1;colnum=0;}
+	YY_BREAK
+case 166:
+YY_RULE_SETUP
+#line 292 "fortran.lex"
+{line_num_fortran++;line_num_fortran_common++;colnum=0;}
+	YY_BREAK
+case 167:
+YY_RULE_SETUP
+#line 293 "fortran.lex"
+{
+                           convert2lower(motparse1);
+                           if ( strncasecmp(motparse1,"contains",8) == 0 )
+                           {
+                              return TOK_CONTAINS;
+                           }
+                           else
+                           {
+                              colnum=0;line_num_fortran++;line_num_fortran_common++;
+                             if ( !strcasecmp(motparse1,"C$AGRIF_DO_NOT_TREAT\n")) return TOK_DONOTTREAT;
+                             if ( !strcasecmp(motparse1,"C$AGRIF_END_DO_NOT_TREAT\n")) return TOK_ENDDONOTTREAT;
+                           }
+                         }
+	YY_BREAK
+case 168:
+YY_RULE_SETUP
+#line 306 "fortran.lex"
+BEGIN(donottreat);
+	YY_BREAK
+case 169:
+YY_RULE_SETUP
+#line 307 "fortran.lex"
+BEGIN(INITIAL);
+	YY_BREAK
+case 170:
+YY_RULE_SETUP
+#line 308 "fortran.lex"
+
+	YY_BREAK
+case 171:
+YY_RULE_SETUP
+#line 309 "fortran.lex"
+{
+                             colnum = 0;
+                             if ( !strcasecmp(motparse1,"!$AGRIF_DO_NOT_TREAT\n")) return TOK_DONOTTREAT;
+                             if ( !strcasecmp(motparse1,"!$AGRIF_END_DO_NOT_TREAT\n")) return TOK_ENDDONOTTREAT;
+                          }
+	YY_BREAK
+case 172:
+YY_RULE_SETUP
+#line 314 "fortran.lex"
+{
+                             colnum = 0;
+                             if ( !strcasecmp(motparse1,"!$AGRIF_DO_NOT_TREAT\n")) return TOK_DONOTTREAT;
+                             if ( !strcasecmp(motparse1,"!$AGRIF_END_DO_NOT_TREAT\n")) return TOK_ENDDONOTTREAT;
+                          }
+	YY_BREAK
+case 173:
+YY_RULE_SETUP
+#line 319 "fortran.lex"
+ECHO;
+	YY_BREAK
+#line 2933 "fortran.yy.c"
+case YY_STATE_EOF(INITIAL):
+case YY_STATE_EOF(parameter):
+case YY_STATE_EOF(character):
+case YY_STATE_EOF(donottreat):
+case YY_STATE_EOF(fortran77style):
+case YY_STATE_EOF(fortran90style):
+	yyterminate();
+
+	case YY_END_OF_BUFFER:
+		{
+		/* Amount of text matched not including the EOB char. */
+		int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;
+
+		/* Undo the effects of YY_DO_BEFORE_ACTION. */
+		*yy_cp = yy_hold_char;
+		YY_RESTORE_YY_MORE_OFFSET
+
+		if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
+			{
+			/* We're scanning a new file or input source.  It's
+			 * possible that this happened because the user
+			 * just pointed yyin at a new source and called
+			 * yylex().  If so, then we have to assure
+			 * consistency between yy_current_buffer and our
+			 * globals.  Here is the right place to do so, because
+			 * this is the first action (other than possibly a
+			 * back-up) that will match for the new input source.
+			 */
+			yy_n_chars = yy_current_buffer->yy_n_chars;
+			yy_current_buffer->yy_input_file = yyin;
+			yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
+			}
+
+		/* Note that here we test for yy_c_buf_p "<=" to the position
+		 * of the first EOB in the buffer, since yy_c_buf_p will
+		 * already have been incremented past the NUL character
+		 * (since all states make transitions on EOB to the
+		 * end-of-buffer state).  Contrast this with the test
+		 * in input().
+		 */
+		if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
+			{ /* This was really a NUL. */
+			yy_state_type yy_next_state;
+
+			yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
+
+			yy_current_state = yy_get_previous_state();
+
+			/* Okay, we're now positioned to make the NUL
+			 * transition.  We couldn't have
+			 * yy_get_previous_state() go ahead and do it
+			 * for us because it doesn't know how to deal
+			 * with the possibility of jamming (and we don't
+			 * want to build jamming into it because then it
+			 * will run more slowly).
+			 */
+
+			yy_next_state = yy_try_NUL_trans( yy_current_state );
+
+			yy_bp = yytext_ptr + YY_MORE_ADJ;
+
+			if ( yy_next_state )
+				{
+				/* Consume the NUL. */
+				yy_cp = ++yy_c_buf_p;
+				yy_current_state = yy_next_state;
+				goto yy_match;
+				}
+
+			else
+				{
+				yy_cp = yy_c_buf_p;
+				goto yy_find_action;
+				}
+			}
+
+		else switch ( yy_get_next_buffer() )
+			{
+			case EOB_ACT_END_OF_FILE:
+				{
+				yy_did_buffer_switch_on_eof = 0;
+
+				if ( yywrap() )
+					{
+					/* Note: because we've taken care in
+					 * yy_get_next_buffer() to have set up
+					 * yytext, we can now set up
+					 * yy_c_buf_p so that if some total
+					 * hoser (like flex itself) wants to
+					 * call the scanner after we return the
+					 * YY_NULL, it'll still work - another
+					 * YY_NULL will get returned.
+					 */
+					yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
+
+					yy_act = YY_STATE_EOF(YY_START);
+					goto do_action;
+					}
+
+				else
+					{
+					if ( ! yy_did_buffer_switch_on_eof )
+						YY_NEW_FILE;
+					}
+				break;
+				}
+
+			case EOB_ACT_CONTINUE_SCAN:
+				yy_c_buf_p =
+					yytext_ptr + yy_amount_of_matched_text;
+
+				yy_current_state = yy_get_previous_state();
+
+				yy_cp = yy_c_buf_p;
+				yy_bp = yytext_ptr + YY_MORE_ADJ;
+				goto yy_match;
+
+			case EOB_ACT_LAST_MATCH:
+				yy_c_buf_p =
+				&yy_current_buffer->yy_ch_buf[yy_n_chars];
+
+				yy_current_state = yy_get_previous_state();
+
+				yy_cp = yy_c_buf_p;
+				yy_bp = yytext_ptr + YY_MORE_ADJ;
+				goto yy_find_action;
+			}
+		break;
+		}
+
+	default:
+		YY_FATAL_ERROR(
+			"fatal flex scanner internal error--no action found" );
+	} /* end of action switch */
+		} /* end of scanning one token */
+	} /* end of yylex */
+
+
+/* yy_get_next_buffer - try to read in a new buffer
+ *
+ * Returns a code representing an action:
+ *	EOB_ACT_LAST_MATCH -
+ *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+ *	EOB_ACT_END_OF_FILE - end of file
+ */
+
+static int yy_get_next_buffer()
+	{
+	register char *dest = yy_current_buffer->yy_ch_buf;
+	register char *source = yytext_ptr;
+	register int number_to_move, i;
+	int ret_val;
+
+	if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
+		YY_FATAL_ERROR(
+		"fatal flex scanner internal error--end of buffer missed" );
+
+	if ( yy_current_buffer->yy_fill_buffer == 0 )
+		{ /* Don't try to fill the buffer, so this is an EOF. */
+		if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
+			{
+			/* We matched a single character, the EOB, so
+			 * treat this as a final EOF.
+			 */
+			return EOB_ACT_END_OF_FILE;
+			}
+
+		else
+			{
+			/* We matched some text prior to the EOB, first
+			 * process it.
+			 */
+			return EOB_ACT_LAST_MATCH;
+			}
+		}
+
+	/* Try to read more data. */
+
+	/* First move last chars to start of buffer. */
+	number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;
+
+	for ( i = 0; i < number_to_move; ++i )
+		*(dest++) = *(source++);
+
+	if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+		/* don't do the read, it's not guaranteed to return an EOF,
+		 * just force an EOF
+		 */
+		yy_current_buffer->yy_n_chars = yy_n_chars = 0;
+
+	else
+		{
+		int num_to_read =
+			yy_current_buffer->yy_buf_size - number_to_move - 1;
+
+		while ( num_to_read <= 0 )
+			{ /* Not enough room in the buffer - grow it. */
+#ifdef YY_USES_REJECT
+			YY_FATAL_ERROR(
+"input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
+#else
+
+			/* just a shorter name for the current buffer */
+			YY_BUFFER_STATE b = yy_current_buffer;
+
+			int yy_c_buf_p_offset =
+				(int) (yy_c_buf_p - b->yy_ch_buf);
+
+			if ( b->yy_is_our_buffer )
+				{
+				int new_size = b->yy_buf_size * 2;
+
+				if ( new_size <= 0 )
+					b->yy_buf_size += b->yy_buf_size / 8;
+				else
+					b->yy_buf_size *= 2;
+
+				b->yy_ch_buf = (char *)
+					/* Include room in for 2 EOB chars. */
+					yy_flex_realloc( (void *) b->yy_ch_buf,
+							 b->yy_buf_size + 2 );
+				}
+			else
+				/* Can't grow it, we don't own it. */
+				b->yy_ch_buf = 0;
+
+			if ( ! b->yy_ch_buf )
+				YY_FATAL_ERROR(
+				"fatal error - scanner input buffer overflow" );
+
+			yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
+
+			num_to_read = yy_current_buffer->yy_buf_size -
+						number_to_move - 1;
+#endif
+			}
+
+		if ( num_to_read > YY_READ_BUF_SIZE )
+			num_to_read = YY_READ_BUF_SIZE;
+
+		/* Read in more data. */
+		YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
+			yy_n_chars, num_to_read );
+
+		yy_current_buffer->yy_n_chars = yy_n_chars;
+		}
+
+	if ( yy_n_chars == 0 )
+		{
+		if ( number_to_move == YY_MORE_ADJ )
+			{
+			ret_val = EOB_ACT_END_OF_FILE;
+			yyrestart( yyin );
+			}
+
+		else
+			{
+			ret_val = EOB_ACT_LAST_MATCH;
+			yy_current_buffer->yy_buffer_status =
+				YY_BUFFER_EOF_PENDING;
+			}
+		}
+
+	else
+		ret_val = EOB_ACT_CONTINUE_SCAN;
+
+	yy_n_chars += number_to_move;
+	yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
+	yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
+
+	yytext_ptr = &yy_current_buffer->yy_ch_buf[0];
+
+	return ret_val;
+	}
+
+
+/* yy_get_previous_state - get the state just before the EOB char was reached */
+
+static yy_state_type yy_get_previous_state()
+	{
+	register yy_state_type yy_current_state;
+	register char *yy_cp;
+
+	yy_current_state = yy_start;
+	yy_current_state += YY_AT_BOL();
+
+	for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
+		{
+		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+		if ( yy_accept[yy_current_state] )
+			{
+			yy_last_accepting_state = yy_current_state;
+			yy_last_accepting_cpos = yy_cp;
+			}
+		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+			{
+			yy_current_state = (int) yy_def[yy_current_state];
+			if ( yy_current_state >= 1124 )
+				yy_c = yy_meta[(unsigned int) yy_c];
+			}
+		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+		}
+
+	return yy_current_state;
+	}
+
+
+/* yy_try_NUL_trans - try to make a transition on the NUL character
+ *
+ * synopsis
+ *	next_state = yy_try_NUL_trans( current_state );
+ */
+
+#ifdef YY_USE_PROTOS
+static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
+#else
+static yy_state_type yy_try_NUL_trans( yy_current_state )
+yy_state_type yy_current_state;
+#endif
+	{
+	register int yy_is_jam;
+	register char *yy_cp = yy_c_buf_p;
+
+	register YY_CHAR yy_c = 1;
+	if ( yy_accept[yy_current_state] )
+		{
+		yy_last_accepting_state = yy_current_state;
+		yy_last_accepting_cpos = yy_cp;
+		}
+	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+		{
+		yy_current_state = (int) yy_def[yy_current_state];
+		if ( yy_current_state >= 1124 )
+			yy_c = yy_meta[(unsigned int) yy_c];
+		}
+	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+	yy_is_jam = (yy_current_state == 1123);
+
+	return yy_is_jam ? 0 : yy_current_state;
+	}
+
+
+#ifndef YY_NO_UNPUT
+#ifdef YY_USE_PROTOS
+static void yyunput( int c, register char *yy_bp )
+#else
+static void yyunput( c, yy_bp )
+int c;
+register char *yy_bp;
+#endif
+	{
+	register char *yy_cp = yy_c_buf_p;
+
+	/* undo effects of setting up yytext */
+	*yy_cp = yy_hold_char;
+
+	if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
+		{ /* need to shift things up to make room */
+		/* +2 for EOB chars. */
+		register int number_to_move = yy_n_chars + 2;
+		register char *dest = &yy_current_buffer->yy_ch_buf[
+					yy_current_buffer->yy_buf_size + 2];
+		register char *source =
+				&yy_current_buffer->yy_ch_buf[number_to_move];
+
+		while ( source > yy_current_buffer->yy_ch_buf )
+			*--dest = *--source;
+
+		yy_cp += (int) (dest - source);
+		yy_bp += (int) (dest - source);
+		yy_current_buffer->yy_n_chars =
+			yy_n_chars = yy_current_buffer->yy_buf_size;
+
+		if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
+			YY_FATAL_ERROR( "flex scanner push-back overflow" );
+		}
+
+	*--yy_cp = (char) c;
+
+
+	yytext_ptr = yy_bp;
+	yy_hold_char = *yy_cp;
+	yy_c_buf_p = yy_cp;
+	}
+#endif	/* ifndef YY_NO_UNPUT */
+
+
+#ifdef __cplusplus
+static int yyinput()
+#else
+static int input()
+#endif
+	{
+	int c;
+
+	*yy_c_buf_p = yy_hold_char;
+
+	if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
+		{
+		/* yy_c_buf_p now points to the character we want to return.
+		 * If this occurs *before* the EOB characters, then it's a
+		 * valid NUL; if not, then we've hit the end of the buffer.
+		 */
+		if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
+			/* This was really a NUL. */
+			*yy_c_buf_p = '\0';
+
+		else
+			{ /* need more input */
+			int offset = yy_c_buf_p - yytext_ptr;
+			++yy_c_buf_p;
+
+			switch ( yy_get_next_buffer() )
+				{
+				case EOB_ACT_LAST_MATCH:
+					/* This happens because yy_g_n_b()
+					 * sees that we've accumulated a
+					 * token and flags that we need to
+					 * try matching the token before
+					 * proceeding.  But for input(),
+					 * there's no matching to consider.
+					 * So convert the EOB_ACT_LAST_MATCH
+					 * to EOB_ACT_END_OF_FILE.
+					 */
+
+					/* Reset buffer status. */
+					yyrestart( yyin );
+
+					/* fall through */
+
+				case EOB_ACT_END_OF_FILE:
+					{
+					if ( yywrap() )
+						return EOF;
+
+					if ( ! yy_did_buffer_switch_on_eof )
+						YY_NEW_FILE;
+#ifdef __cplusplus
+					return yyinput();
+#else
+					return input();
+#endif
+					}
+
+				case EOB_ACT_CONTINUE_SCAN:
+					yy_c_buf_p = yytext_ptr + offset;
+					break;
+				}
+			}
+		}
+
+	c = *(unsigned char *) yy_c_buf_p;	/* cast for 8-bit char's */
+	*yy_c_buf_p = '\0';	/* preserve yytext */
+	yy_hold_char = *++yy_c_buf_p;
+
+	yy_current_buffer->yy_at_bol = (c == '\n');
+
+	return c;
+	}
+
+
+#ifdef YY_USE_PROTOS
+void yyrestart( FILE *input_file )
+#else
+void yyrestart( input_file )
+FILE *input_file;
+#endif
+	{
+	if ( ! yy_current_buffer )
+		yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
+
+	yy_init_buffer( yy_current_buffer, input_file );
+	yy_load_buffer_state();
+	}
+
+
+#ifdef YY_USE_PROTOS
+void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
+#else
+void yy_switch_to_buffer( new_buffer )
+YY_BUFFER_STATE new_buffer;
+#endif
+	{
+	if ( yy_current_buffer == new_buffer )
+		return;
+
+	if ( yy_current_buffer )
+		{
+		/* Flush out information for old buffer. */
+		*yy_c_buf_p = yy_hold_char;
+		yy_current_buffer->yy_buf_pos = yy_c_buf_p;
+		yy_current_buffer->yy_n_chars = yy_n_chars;
+		}
+
+	yy_current_buffer = new_buffer;
+	yy_load_buffer_state();
+
+	/* We don't actually know whether we did this switch during
+	 * EOF (yywrap()) processing, but the only time this flag
+	 * is looked at is after yywrap() is called, so it's safe
+	 * to go ahead and always set it.
+	 */
+	yy_did_buffer_switch_on_eof = 1;
+	}
+
+
+#ifdef YY_USE_PROTOS
+void yy_load_buffer_state( void )
+#else
+void yy_load_buffer_state()
+#endif
+	{
+	yy_n_chars = yy_current_buffer->yy_n_chars;
+	yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
+	yyin = yy_current_buffer->yy_input_file;
+	yy_hold_char = *yy_c_buf_p;
+	}
+
+
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
+#else
+YY_BUFFER_STATE yy_create_buffer( file, size )
+FILE *file;
+int size;
+#endif
+	{
+	YY_BUFFER_STATE b;
+
+	b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
+	if ( ! b )
+		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+	b->yy_buf_size = size;
+
+	/* yy_ch_buf has to be 2 characters longer than the size given because
+	 * we need to put in 2 end-of-buffer characters.
+	 */
+	b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
+	if ( ! b->yy_ch_buf )
+		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+	b->yy_is_our_buffer = 1;
+
+	yy_init_buffer( b, file );
+
+	return b;
+	}
+
+
+#ifdef YY_USE_PROTOS
+void yy_delete_buffer( YY_BUFFER_STATE b )
+#else
+void yy_delete_buffer( b )
+YY_BUFFER_STATE b;
+#endif
+	{
+	if ( ! b )
+		return;
+
+	if ( b == yy_current_buffer )
+		yy_current_buffer = (YY_BUFFER_STATE) 0;
+
+	if ( b->yy_is_our_buffer )
+		yy_flex_free( (void *) b->yy_ch_buf );
+
+	yy_flex_free( (void *) b );
+	}
+
+
+#ifndef YY_ALWAYS_INTERACTIVE
+#ifndef YY_NEVER_INTERACTIVE
+extern int isatty YY_PROTO(( int ));
+#endif
+#endif
+
+#ifdef YY_USE_PROTOS
+void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
+#else
+void yy_init_buffer( b, file )
+YY_BUFFER_STATE b;
+FILE *file;
+#endif
+
+
+	{
+	yy_flush_buffer( b );
+
+	b->yy_input_file = file;
+	b->yy_fill_buffer = 1;
+
+#if YY_ALWAYS_INTERACTIVE
+	b->yy_is_interactive = 1;
+#else
+#if YY_NEVER_INTERACTIVE
+	b->yy_is_interactive = 0;
+#else
+	b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
+#endif
+#endif
+	}
+
+
+#ifdef YY_USE_PROTOS
+void yy_flush_buffer( YY_BUFFER_STATE b )
+#else
+void yy_flush_buffer( b )
+YY_BUFFER_STATE b;
+#endif
+
+	{
+	if ( ! b )
+		return;
+
+	b->yy_n_chars = 0;
+
+	/* We always need two end-of-buffer characters.  The first causes
+	 * a transition to the end-of-buffer state.  The second causes
+	 * a jam in that state.
+	 */
+	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+
+	b->yy_buf_pos = &b->yy_ch_buf[0];
+
+	b->yy_at_bol = 1;
+	b->yy_buffer_status = YY_BUFFER_NEW;
+
+	if ( b == yy_current_buffer )
+		yy_load_buffer_state();
+	}
+
+
+#ifndef YY_NO_SCAN_BUFFER
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
+#else
+YY_BUFFER_STATE yy_scan_buffer( base, size )
+char *base;
+yy_size_t size;
+#endif
+	{
+	YY_BUFFER_STATE b;
+
+	if ( size < 2 ||
+	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
+	     base[size-1] != YY_END_OF_BUFFER_CHAR )
+		/* They forgot to leave room for the EOB's. */
+		return 0;
+
+	b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
+	if ( ! b )
+		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
+
+	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
+	b->yy_buf_pos = b->yy_ch_buf = base;
+	b->yy_is_our_buffer = 0;
+	b->yy_input_file = 0;
+	b->yy_n_chars = b->yy_buf_size;
+	b->yy_is_interactive = 0;
+	b->yy_at_bol = 1;
+	b->yy_fill_buffer = 0;
+	b->yy_buffer_status = YY_BUFFER_NEW;
+
+	yy_switch_to_buffer( b );
+
+	return b;
+	}
+#endif
+
+
+#ifndef YY_NO_SCAN_STRING
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
+#else
+YY_BUFFER_STATE yy_scan_string( yy_str )
+yyconst char *yy_str;
+#endif
+	{
+	int len;
+	for ( len = 0; yy_str[len]; ++len )
+		;
+
+	return yy_scan_bytes( yy_str, len );
+	}
+#endif
+
+
+#ifndef YY_NO_SCAN_BYTES
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
+#else
+YY_BUFFER_STATE yy_scan_bytes( bytes, len )
+yyconst char *bytes;
+int len;
+#endif
+	{
+	YY_BUFFER_STATE b;
+	char *buf;
+	yy_size_t n;
+	int i;
+
+	/* Get memory for full buffer, including space for trailing EOB's. */
+	n = len + 2;
+	buf = (char *) yy_flex_alloc( n );
+	if ( ! buf )
+		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
+
+	for ( i = 0; i < len; ++i )
+		buf[i] = bytes[i];
+
+	buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
+
+	b = yy_scan_buffer( buf, n );
+	if ( ! b )
+		YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
+
+	/* It's okay to grow etc. this buffer, and we should throw it
+	 * away when we're done.
+	 */
+	b->yy_is_our_buffer = 1;
+
+	return b;
+	}
+#endif
+
+
+#ifndef YY_NO_PUSH_STATE
+#ifdef YY_USE_PROTOS
+static void yy_push_state( int new_state )
+#else
+static void yy_push_state( new_state )
+int new_state;
+#endif
+	{
+	if ( yy_start_stack_ptr >= yy_start_stack_depth )
+		{
+		yy_size_t new_size;
+
+		yy_start_stack_depth += YY_START_STACK_INCR;
+		new_size = yy_start_stack_depth * sizeof( int );
+
+		if ( ! yy_start_stack )
+			yy_start_stack = (int *) yy_flex_alloc( new_size );
+
+		else
+			yy_start_stack = (int *) yy_flex_realloc(
+					(void *) yy_start_stack, new_size );
+
+		if ( ! yy_start_stack )
+			YY_FATAL_ERROR(
+			"out of memory expanding start-condition stack" );
+		}
+
+	yy_start_stack[yy_start_stack_ptr++] = YY_START;
+
+	BEGIN(new_state);
+	}
+#endif
+
+
+#ifndef YY_NO_POP_STATE
+static void yy_pop_state()
+	{
+	if ( --yy_start_stack_ptr < 0 )
+		YY_FATAL_ERROR( "start-condition stack underflow" );
+
+	BEGIN(yy_start_stack[yy_start_stack_ptr]);
+	}
+#endif
+
+
+#ifndef YY_NO_TOP_STATE
+static int yy_top_state()
+	{
+	return yy_start_stack[yy_start_stack_ptr - 1];
+	}
+#endif
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
+#endif
+
+#ifdef YY_USE_PROTOS
+static void yy_fatal_error( yyconst char msg[] )
+#else
+static void yy_fatal_error( msg )
+char msg[];
+#endif
+	{
+	(void) fprintf( stderr, "%s\n", msg );
+	exit( YY_EXIT_FAILURE );
+	}
+
+
+
+/* Redefine yyless() so it works in section 3 code. */
+
+#undef yyless
+#define yyless(n) \
+	do \
+		{ \
+		/* Undo effects of setting up yytext. */ \
+		yytext[yyleng] = yy_hold_char; \
+		yy_c_buf_p = yytext + n; \
+		yy_hold_char = *yy_c_buf_p; \
+		*yy_c_buf_p = '\0'; \
+		yyleng = n; \
+		} \
+	while ( 0 )
+
+
+/* Internal utility routines. */
+
+#ifndef yytext_ptr
+#ifdef YY_USE_PROTOS
+static void yy_flex_strncpy( char *s1, yyconst char *s2, int n )
+#else
+static void yy_flex_strncpy( s1, s2, n )
+char *s1;
+yyconst char *s2;
+int n;
+#endif
+	{
+	register int i;
+	for ( i = 0; i < n; ++i )
+		s1[i] = s2[i];
+	}
+#endif
+
+#ifdef YY_NEED_STRLEN
+#ifdef YY_USE_PROTOS
+static int yy_flex_strlen( yyconst char *s )
+#else
+static int yy_flex_strlen( s )
+yyconst char *s;
+#endif
+	{
+	register int n;
+	for ( n = 0; s[n]; ++n )
+		;
+
+	return n;
+	}
+#endif
+
+
+#ifdef YY_USE_PROTOS
+static void *yy_flex_alloc( yy_size_t size )
+#else
+static void *yy_flex_alloc( size )
+yy_size_t size;
+#endif
+	{
+	return (void *) malloc( size );
+	}
+
+#ifdef YY_USE_PROTOS
+static void *yy_flex_realloc( void *ptr, yy_size_t size )
+#else
+static void *yy_flex_realloc( ptr, size )
+void *ptr;
+yy_size_t size;
+#endif
+	{
+	/* The cast to (char *) in the following accommodates both
+	 * implementations that use char* generic pointers, and those
+	 * that use void* generic pointers.  It works with the latter
+	 * because both ANSI C and C++ allow castless assignment from
+	 * any pointer type to void*, and deal with argument conversions
+	 * as though doing an assignment.
+	 */
+	return (void *) realloc( (char *) ptr, size );
+	}
+
+#ifdef YY_USE_PROTOS
+static void yy_flex_free( void *ptr )
+#else
+static void yy_flex_free( ptr )
+void *ptr;
+#endif
+	{
+	free( ptr );
+	}
+
+#if YY_MAIN
+int main()
+	{
+	yylex();
+	return 0;
+	}
+#endif
+#line 319 "fortran.lex"
+
+
+fortranerror(char *s)
+{
+   if (!strcasecmp(curfile,mainfile))
+   {
+      printf("%s line %d, file %s\n",s,line_num_fortran,curfile);
+   }
+   else
+   {
+      printf("%s line %d, file %s\n",s,line_num_fortran_common,curfile);
+   }
+   /*exit(0);*/
+}
+
+int fortranwrap()
+{
+}
Index: /vendors/AGRIF/r_00/LIB/main.c
===================================================================
--- /vendors/AGRIF/r_00/LIB/main.c	(revision 1902)
+++ /vendors/AGRIF/r_00/LIB/main.c	(revision 1902)
@@ -0,0 +1,2426 @@
+#ifndef lint
+static char yysccsid[] = "@(#)yaccpar	1.9 (Berkeley) 02/21/93";
+#endif
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define yyclearin (yychar=(-1))
+#define yyerrok (yyerrflag=0)
+#define YYRECOVERING (yyerrflag!=0)
+#define YYPREFIX "yy"
+#line 36 "convert.y"
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include "decl.h"
+#line 42 "convert.y"
+typedef union {
+       int ival;
+       char na[LONG_C];
+       listnom * ln;
+       } YYSTYPE;
+#line 23 "y.tab.c"
+#define TOK_SEP 257
+#define TOK_USE 258
+#define TOK_MODULEMAIN 259
+#define TOK_NOTGRIDDEP 260
+#define TOK_USEITEM 261
+#define TOK_NAME 262
+#define TOK_PROBTYPE 263
+#define YYERRCODE 256
+short yylhs[] = {                                        -1,
+    0,    0,    1,    1,    1,    1,    1,    1,    1,
+};
+short yylen[] = {                                         2,
+    0,    2,    1,    3,    5,    7,    3,    4,    3,
+};
+short yydefred[] = {                                      1,
+    0,    0,    0,    0,    0,    3,    2,    0,    0,    0,
+    0,    9,    7,    0,    0,    4,    8,    0,    0,    5,
+    0,    6,
+};
+short yydgoto[] = {                                       1,
+    7,
+};
+short yysindex[] = {                                      0,
+  -10, -258, -257, -253, -256,    0,    0,  -52,  -51, -252,
+  -43,    0,    0,  -50, -251,    0,    0,  -42, -250,    0,
+  -46,    0,
+};
+short yyrindex[] = {                                      0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,
+};
+short yygindex[] = {                                      0,
+    0,
+};
+#define YYTABLESIZE 253
+short yytable[] = {                                       6,
+   15,   19,    8,   10,    9,   11,   12,   13,   17,   14,
+   18,   21,   22,    0,    0,   16,   20,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    2,    3,    4,
+    0,    0,    5,
+};
+short yycheck[] = {                                      10,
+   44,   44,  261,  257,  262,  262,   59,   59,   59,  262,
+  262,  262,   59,   -1,   -1,   59,   59,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  258,  259,  260,
+   -1,   -1,  263,
+};
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 1
+#endif
+#define YYMAXTOKEN 263
+#if YYDEBUG
+char *yyname[] = {
+"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,"'('","')'",0,0,"','",0,0,0,0,0,0,0,0,0,0,0,0,0,"':'","';'",0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'['",0,"']'",0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+"TOK_SEP","TOK_USE","TOK_MODULEMAIN","TOK_NOTGRIDDEP","TOK_USEITEM","TOK_NAME",
+"TOK_PROBTYPE",
+};
+char *yyrule[] = {
+"$accept : input",
+"input :",
+"input : input line",
+"line : '\\n'",
+"line : TOK_PROBTYPE TOK_NAME ';'",
+"line : TOK_PROBTYPE TOK_NAME ',' TOK_NAME ';'",
+"line : TOK_PROBTYPE TOK_NAME ',' TOK_NAME ',' TOK_NAME ';'",
+"line : TOK_MODULEMAIN TOK_NAME ';'",
+"line : TOK_NOTGRIDDEP TOK_SEP TOK_NAME ';'",
+"line : TOK_USE TOK_USEITEM ';'",
+};
+#endif
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 500
+#define YYMAXDEPTH 500
+#endif
+#endif
+int yydebug;
+int yynerrs;
+int yyerrflag;
+int yychar;
+short *yyssp;
+YYSTYPE *yyvsp;
+YYSTYPE yyval;
+YYSTYPE yylval;
+short yyss[YYSTACKSIZE];
+YYSTYPE yyvs[YYSTACKSIZE];
+#define yystacksize YYSTACKSIZE
+#line 83 "convert.y"
+
+int main(int argc,char *argv[])
+{
+   extern FILE * yyin ;
+   FILE *dependglobaloutput;
+   int i;
+   listnom *parcours;
+   listvar *newvar;
+   int stylegiven = 0;
+   int infreegiven ;
+   int infixedgiven ;
+   int lengthmainfile;
+
+   if (argc < 2)
+   {
+       printf("usage : conv <file> [-rm] [-incdir <directory>] \n");
+       printf(" [-comdirin   <directory>] [-comdirout <directory>]\n");
+       printf(" [-convfile  <FILENAME >] -SubloopScalar -SubloopScalar1 \n");
+       printf(" [-free|-fixed]\n");
+       exit(0);
+   }
+/******************************************************************************/
+/*  1-  Variables initialization                                              */
+/******************************************************************************/
+   List_Global_Var=(listvar *)NULL;
+   List_GlobalParameter_Var=(listvar *)NULL;
+   List_Allocate_Var=(listallocate *)NULL;
+   List_Common_Var=(listvar *)NULL;
+   List_SubroutineWhereAgrifUsed=(listnom *)NULL;
+   List_Subroutine_For_Alloc=(listnom *)NULL;
+   List_Include=(listusemodule *)NULL;
+   List_NameOfModuleUsed=(listusemodule *)NULL;
+   listofmoduletmp=(listusemodule *)NULL;
+   List_SubroutineDeclaration_Var=(listvar *)NULL;
+   List_UsedInSubroutine_Var=(listvar *)NULL;
+   List_NotGridDepend_Var=(listvar *)NULL;
+   Listofavailableindices=(listindice *)NULL;
+   List_CouplePointed_Var=(listvarpointtovar *)NULL;
+   List_ModuleUsed_Var = (listvar *)NULL;
+   List_ModuleUsedInModuleUsed_Var = (listvar *)NULL;
+   List_GlobParamModuleUsed_Var = (listparameter *)NULL;
+   List_GlobParamModuleUsedInModuleUsed_Var = (listparameter *)NULL;
+   List_SubroutineArgument_Var = (listvar *)NULL;
+   List_FunctionType_Var = (listvar *)NULL;
+   tmpuselocallist = (listusemodule *)NULL;
+   List_ContainsSubroutine = (listnom *)NULL;
+   oldfortranout = (FILE *)NULL;
+
+   strcpy(mainfile,argv[1]);
+   strcpy(nomdir,"AGRIF_INC");
+   strcpy(commondirin,".");
+   strcpy(commondirout,".");
+   strcpy(filetoparse," ");
+   strcpy(subofagrifinitgrids,"");
+   strcpy(meetagrifinitgrids,"");
+   strcpy(mpiinitvar,"");
+
+   length_last = 0 ;
+   length_first = 0 ;
+   length_v_typevar = 0 ;
+   length_v_nomvar = 0 ;
+   length_v_dimchar = 0 ;
+   length_v_modulename = 0 ;
+   length_v_commonname = 0 ;
+   length_v_vallengspec = 0 ;
+   length_v_nameinttypename = 0 ;
+   length_v_commoninfile = 0 ;
+   length_v_subroutinename = 0 ;
+   length_v_precision = 0 ;
+   length_v_IntentSpec = 0 ;
+   length_v_initialvalue = 0 ;
+   length_v_readedlistdimension = 0 ;
+   length_u_usemodule = 0 ;
+   length_u_charusemodule = 0 ;
+   length_u_cursubroutine = 0 ;
+   length_u_modulename = 0 ;
+   length_n_name = 0 ;
+   length_c_namevar = 0 ;
+   length_c_namepointedvar = 0 ;
+   length_o_nom = 0 ;
+   length_o_module = 0 ;
+   length_a_nomvar = 0 ;
+   length_a_subroutine = 0 ;
+   length_a_module = 0 ;
+   length_t_usemodule = 0 ;
+   length_t_cursubroutine = 0 ;
+   length_curfilename = 0 ;
+   length_nomfileoutput = 0 ;
+   length_motparse = 0 ;
+   length_mainfile = 0 ;
+   length_nomdir = 0 ;
+   length_commondirout = 0 ;
+   length_commondirin = 0 ;
+   length_filetoparse = 0 ;
+   length_curbuf = 0 ;
+   length_toprintglob = 0 ;
+   length_tmpvargridname = 0 ;
+   length_ligne_Subloop = 0 ;
+   length_lvargridname_toamr = 0 ;
+   length_toprint_utilagrif = 0 ;
+   length_toprinttmp_utilchar = 0 ;
+   length_ligne_writedecl = 0 ;
+   length_newname_toamr = 0 ;
+   length_newname_writedecl = 0 ;
+   length_ligne_toamr = 0 ;
+   length_tmpligne_writedecl = 0 ;
+   value_char_size = 0 ;
+   value_char_size1 = 0 ;
+   value_char_size2 = 0 ;
+   value_char_size3 = 0 ;
+   inallocate = 0;
+   infixed = 1;
+   infree  = 0;
+
+   checkexistcommon=1;
+   todebug=0;
+   onlyfixedgrids=0;
+   fixedgrids=0;
+   InAgrifParentDef = 0;
+   IndicenbmaillesX=0;
+   IndicenbmaillesY=0;
+   IndicenbmaillesZ=0;
+   created_dimensionlist = 1;
+   indicemaxtabvars = 0;   /* current indice in the table tabvars             */
+   SubloopScalar = 0;
+   todebug = 0;
+   todebugfree = 0;
+   retour77 = 1 ;
+   mark = 0 ;
+   shouldincludempif = 0 ;
+   Read_val_max();
+/******************************************************************************/
+/*  2-  Program arguments                                                     */
+/******************************************************************************/
+
+   if ((yyin=fopen(argv[1],"r"))==NULL)
+   {
+      printf("the file %s doesn't exist \n",argv[1]);
+      exit(0);
+   }
+
+   i=2;
+   while (i<argc)
+   {
+      if (!strcasecmp(argv[i],"-incdir"))
+      {
+         strcpy(nomdir,argv[i+1]);
+         i++;
+      }
+      else if (!strcasecmp(argv[i],"-comdirin")) /* input directory           */
+      {
+         strcpy(commondirin,argv[i+1]);
+         i++;
+      }
+      else if (!strcasecmp(argv[i],"-comdirout")) /* output directory         */
+      {
+         strcpy(commondirout,argv[i+1]);
+         i++;
+      }
+      else if (!strcasecmp(argv[i],"-convfile")) /* file to parse             */
+      {
+         strcpy(filetoparse,argv[i+1]);
+         i++;
+         lengthmainfile = strlen(filetoparse);
+         if (!strcasecmp(&filetoparse[lengthmainfile-4],".f90"))
+         {
+         infixed = 0;
+         infree = 1;
+         }
+         else
+         {
+         infixed = 1;
+         infree = 0;
+         }
+      }
+      else if (!strcasecmp(argv[i],"-free")) /* file to parse        */
+      {
+         stylegiven = 1;
+         infreegiven  = 1 ;
+         infixedgiven = 0;
+      }   
+      else if (!strcasecmp(argv[i],"-fixed")) /* file to parse        */
+      {
+         stylegiven = 1;
+         infreegiven  = 0;
+         infixedgiven = 1;
+      }         
+      else if (!strcasecmp(argv[i],"-SubloopScalar")) /* file to parse        */
+      {
+         SubloopScalar = 1 ;
+      }
+      else if (!strcasecmp(argv[i],"-SubloopScalar1")) /* file to parse       */
+      {
+         SubloopScalar = 2 ;
+      }
+      else if (!strcasecmp(argv[i],"-todebug")) /* file to parse       */
+      {
+         todebug = 1 ;
+      }
+      else if (!strcasecmp(argv[i],"-mark")) /* file to parse       */
+      {
+         mark = 1 ;
+      }
+      else if (!strcasecmp(argv[i],"-todebugfree")) /* file to parse       */
+      {
+         todebugfree = 1 ;
+      }
+      else if (!strcasecmp(argv[i],"-rm"))
+      {
+         checkexistcommon=0;
+      }
+      else
+      {
+         printf("Unkwon option : %s\n",argv[i]);
+         exit(0);
+      }
+      i++;
+   }
+
+   if (stylegiven == 1) 
+   {
+   infree = infreegiven;
+   infixed = infixedgiven;   
+   }
+   Save_Length(nomdir,34);
+   Save_Length(commondirout,35);
+   Save_Length(commondirin,36);
+   Save_Length(filetoparse,37);
+
+/******************************************************************************/
+/*  3-  Parsing of the  conv file <name>.in                                   */
+/******************************************************************************/
+
+   if ((yyin=fopen(argv[1],"r"))==NULL)
+   {
+       printf("the file %s doesn't exist \n",argv[1]);
+       exit(0);
+   }
+   strcpy(mainfile,argv[1]);
+   Save_Length(mainfile,33);
+
+   if ( strstr(filetoparse,".f90") ||
+        strstr(filetoparse,".F90") ) retour77 = 0;
+
+   yyparse();
+
+/******************************************************************************/
+/*  4-  Preparation of the file parsing                                       */
+/******************************************************************************/
+   if ((yyin=fopen(filetoparse,"r"))==NULL) /* Is the file to parse exist ?   */
+   {
+      printf("the file %s doesn't exist \n",filetoparse);
+      exit(0);
+   }
+   /* mainfile : the name of the file to parse                                */
+   strcpy(mainfile,filetoparse);
+   /*                                                                         */
+   if ((dependglobaloutput=fopen(".dependglobal_agrif","r"))!=NULL)
+   {
+      fscanf(dependglobaloutput,"%d\n",&indicemaxtabvars);
+      fclose(dependglobaloutput);
+   }
+   Readthedependavailablefile();
+   /* Read the .dependnbxnby file which contains indices of nbmaillsX,        */
+   /*    nbmailleY and nbmailleZ                                              */
+   Readthedependnbxnbyfile();
+   Read_Subroutine_For_Alloc();
+/******************************************************************************/
+/*  5-  Parsing of the input file (2 times)                                   */
+/******************************************************************************/
+   /* Record all variable in list                                             */
+   firstpass = 1;
+   processfortran(filetoparse);
+   /*                                                                         */
+   CompleteThelistvarindoloop();
+   /* Read list of module used                                                */
+   RecordUseModulesVariables();
+   /* Read list of module used in module used                                 */
+   RecordUseModulesUseModulesVariables();
+   /* Save variables are considered as globals ones                           */
+   Update_List_Global_Var_From_List_Save_Var();
+   /* Update all lists                                                        */
+   ListUpdate();
+   /*                                                                         */
+   Clean_List_Global_Var();
+   /* Indice tabvars identification                                           */
+   IndiceTabvarsIdentification();
+   /* Update all lists                                                        */
+   ListUpdate();
+   /* The allocation subroutine is necessary ????                             */
+   New_Allocate_Subroutine_Is_Necessary();
+   /* The allocation subroutine is necessary for common list                  */
+   New_Allocate_Subroutine_For_Common_Is_Necessary();
+   /* Sort List_SubroutineArgument_Var                                        */
+   Sort_List_SubroutineArgument_Var();
+   /* Clean all lists                                                         */
+   ListClean();
+   /* Update Indice of List_UsedInSubroutine_Var from module used             */
+   List_UsedInSubroutine_Var_Update_From_Module_Used();
+   /* Update List_SubroutineWhereAgrifUsed                                    */
+   UpdateList_SubroutineWhereAgrifUsed();
+   /* Update List_UsedInSubroutine_Var with v_readedlistdimension             */
+   UpdateList_UsedInSubroutine_With_dimension();;
+   /*                                                                         */
+   ModifyThelistvarindoloop();
+   /*                                                                         */
+   UpdateListDeclarationWithDimensionList();
+   /*                                                                         */
+   GiveTypeOfVariables();
+   Affiche();
+   /* Build new subroutines                                                   */
+   firstpass = 0;
+   processfortran(filetoparse);
+
+   newvar = (listvar *)NULL;
+/*newvar = List_Global_Var; */
+   while ( newvar )
+   {
+      printf("++++ %s %d %s %s %s\n",
+      newvar->var->v_nomvar,
+      newvar->var->v_nbdim,
+      newvar->var->v_subroutinename,
+      newvar->var->v_modulename,
+      newvar->var->v_typevar
+             );
+      newvar = newvar->suiv;
+   }
+/******************************************************************************/
+/*  6-  Write informations in output files                                    */
+/******************************************************************************/
+
+   /* Write the .dependglobal_agrif file which contain the max indice         */
+   /*    of the tabvars table                                                 */
+   dependglobaloutput = fopen(".dependglobal_agrif","w");
+   fprintf(dependglobaloutput,"%d\n",indicemaxtabvars);
+   fclose(dependglobaloutput);
+   /* Write the list of available indice                                      */
+   Writethedependavailablefile();
+   /* Write the .dependnbxnby file which contains indices of nbmaillsX,       */
+   /*    nbmailleY and nbmailleZ                                              */
+   Writethedependnbxnbyfile();
+   /* Write the .depend<namefile> file which contain general informations     */
+   /*    about variable of this file                                          */
+   parcours = List_NameOfModule;
+   while( parcours )
+   {
+      Writethedependlistofmoduleused(parcours->o_nom);
+      WritedependParameterList(parcours->o_nom);
+      Writethedependfile(parcours->o_nom,List_Global_Var);
+      parcours=parcours->suiv;
+   }
+   parcours = List_NameOfCommon;
+   while( parcours )
+   {
+      Writethedependfile(parcours->o_nom,List_Common_Var);
+      parcours=parcours->suiv;
+   }
+   Write_Subroutine_For_Alloc();
+/******************************************************************************/
+/*  7-  Create files in AGRIF_INC directory                                   */
+/******************************************************************************/
+   creefichieramr(NameTamponfile);
+
+   Write_val_max();
+
+   if ( todebug == 1 ) printf("Out of CONV \n");
+   return 0;
+}
+#line 537 "y.tab.c"
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+int
+yyparse()
+{
+    register int yym, yyn, yystate;
+#if YYDEBUG
+    register char *yys;
+    extern char *getenv();
+
+    if (yys = getenv("YYDEBUG"))
+    {
+        yyn = *yys;
+        if (yyn >= '0' && yyn <= '9')
+            yydebug = yyn - '0';
+    }
+#endif
+
+    yynerrs = 0;
+    yyerrflag = 0;
+    yychar = (-1);
+
+    yyssp = yyss;
+    yyvsp = yyvs;
+    *yyssp = yystate = 0;
+
+yyloop:
+    if (yyn = yydefred[yystate]) goto yyreduce;
+    if (yychar < 0)
+    {
+        if ((yychar = yylex()) < 0) yychar = 0;
+#if YYDEBUG
+        if (yydebug)
+        {
+            yys = 0;
+            if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+            if (!yys) yys = "illegal-symbol";
+            printf("%sdebug: state %d, reading %d (%s)\n",
+                    YYPREFIX, yystate, yychar, yys);
+        }
+#endif
+    }
+    if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+    {
+#if YYDEBUG
+        if (yydebug)
+            printf("%sdebug: state %d, shifting to state %d\n",
+                    YYPREFIX, yystate, yytable[yyn]);
+#endif
+        if (yyssp >= yyss + yystacksize - 1)
+        {
+            goto yyoverflow;
+        }
+        *++yyssp = yystate = yytable[yyn];
+        *++yyvsp = yylval;
+        yychar = (-1);
+        if (yyerrflag > 0)  --yyerrflag;
+        goto yyloop;
+    }
+    if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+    {
+        yyn = yytable[yyn];
+        goto yyreduce;
+    }
+    if (yyerrflag) goto yyinrecovery;
+#ifdef lint
+    goto yynewerror;
+#endif
+yynewerror:
+    yyerror("syntax error");
+#ifdef lint
+    goto yyerrlab;
+#endif
+yyerrlab:
+    ++yynerrs;
+yyinrecovery:
+    if (yyerrflag < 3)
+    {
+        yyerrflag = 3;
+        for (;;)
+        {
+            if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&
+                    yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+            {
+#if YYDEBUG
+                if (yydebug)
+                    printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yyssp, yytable[yyn]);
+#endif
+                if (yyssp >= yyss + yystacksize - 1)
+                {
+                    goto yyoverflow;
+                }
+                *++yyssp = yystate = yytable[yyn];
+                *++yyvsp = yylval;
+                goto yyloop;
+            }
+            else
+            {
+#if YYDEBUG
+                if (yydebug)
+                    printf("%sdebug: error recovery discarding state %d\n",
+                            YYPREFIX, *yyssp);
+#endif
+                if (yyssp <= yyss) goto yyabort;
+                --yyssp;
+                --yyvsp;
+            }
+        }
+    }
+    else
+    {
+        if (yychar == 0) goto yyabort;
+#if YYDEBUG
+        if (yydebug)
+        {
+            yys = 0;
+            if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+            if (!yys) yys = "illegal-symbol";
+            printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+                    YYPREFIX, yystate, yychar, yys);
+        }
+#endif
+        yychar = (-1);
+        goto yyloop;
+    }
+yyreduce:
+#if YYDEBUG
+    if (yydebug)
+        printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+                YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+    yym = yylen[yyn];
+    yyval = yyvsp[1-yym];
+    switch (yyn)
+    {
+case 4:
+#line 67 "convert.y"
+{initdimprob(1,yyvsp[-1].na,"0","0");}
+break;
+case 5:
+#line 68 "convert.y"
+{initdimprob(2,yyvsp[-3].na, yyvsp[-1].na,"0");}
+break;
+case 6:
+#line 70 "convert.y"
+{initdimprob(3,yyvsp[-5].na, yyvsp[-3].na, yyvsp[-1].na);}
+break;
+case 7:
+#line 72 "convert.y"
+{listofmodules = Addtolistnom(yyvsp[-1].na,listofmodules,0);
+                                                        Addmoduletothelist(yyvsp[-1].na);}
+break;
+case 8:
+#line 74 "convert.y"
+{Add_NotGridDepend_Var_1(yyvsp[-1].na);}
+break;
+case 9:
+#line 75 "convert.y"
+{
+                                    if (!strcasecmp(yyvsp[-1].na,"FIXED_GRIDS"))
+                                                                 fixedgrids=1;
+                                    if (!strcasecmp(yyvsp[-1].na,"ONLY_FIXED_GRIDS"))
+                                                             onlyfixedgrids=1;
+                                 }
+break;
+#line 708 "y.tab.c"
+    }
+    yyssp -= yym;
+    yystate = *yyssp;
+    yyvsp -= yym;
+    yym = yylhs[yyn];
+    if (yystate == 0 && yym == 0)
+    {
+#if YYDEBUG
+        if (yydebug)
+            printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+        yystate = YYFINAL;
+        *++yyssp = YYFINAL;
+        *++yyvsp = yyval;
+        if (yychar < 0)
+        {
+            if ((yychar = yylex()) < 0) yychar = 0;
+#if YYDEBUG
+            if (yydebug)
+            {
+                yys = 0;
+                if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+                if (!yys) yys = "illegal-symbol";
+                printf("%sdebug: state %d, reading %d (%s)\n",
+                        YYPREFIX, YYFINAL, yychar, yys);
+            }
+#endif
+        }
+        if (yychar == 0) goto yyaccept;
+        goto yyloop;
+    }
+    if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+            yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+        yystate = yytable[yyn];
+    else
+        yystate = yydgoto[yym];
+#if YYDEBUG
+    if (yydebug)
+        printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yyssp, yystate);
+#endif
+    if (yyssp >= yyss + yystacksize - 1)
+    {
+        goto yyoverflow;
+    }
+    *++yyssp = yystate;
+    *++yyvsp = yyval;
+    goto yyloop;
+yyoverflow:
+    yyerror("yacc stack overflow");
+yyabort:
+    return (1);
+yyaccept:
+    return (0);
+}
+#line 2 "convert.yy.c"
+/* A lexical scanner generated by flex */
+
+/* Scanner skeleton version:
+ * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $
+ */
+
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 5
+
+#include <stdio.h>
+
+
+/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
+#ifdef c_plusplus
+#ifndef __cplusplus
+#define __cplusplus
+#endif
+#endif
+
+
+#ifdef __cplusplus
+
+#include <stdlib.h>
+#include <unistd.h>
+
+/* Use prototypes in function declarations. */
+#define YY_USE_PROTOS
+
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else	/* ! __cplusplus */
+
+#if __STDC__
+
+#define YY_USE_PROTOS
+#define YY_USE_CONST
+
+#endif	/* __STDC__ */
+#endif	/* ! __cplusplus */
+
+#ifdef __TURBOC__
+ #pragma warn -rch
+ #pragma warn -use
+#include <io.h>
+#include <stdlib.h>
+#define YY_USE_CONST
+#define YY_USE_PROTOS
+#endif
+
+#ifdef YY_USE_CONST
+#define yyconst const
+#else
+#define yyconst
+#endif
+
+
+#ifdef YY_USE_PROTOS
+#define YY_PROTO(proto) proto
+#else
+#define YY_PROTO(proto) ()
+#endif
+
+/* Returned upon end-of-file. */
+#define YY_NULL 0
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index.  If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
+ */
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+
+/* Enter a start condition.  This macro really ought to take a parameter,
+ * but we do it the disgusting crufty way forced on us by the ()-less
+ * definition of BEGIN.
+ */
+#define BEGIN yy_start = 1 + 2 *
+
+/* Translate the current start state into a value that can be later handed
+ * to BEGIN to return to the state.  The YYSTATE alias is for lex
+ * compatibility.
+ */
+#define YY_START ((yy_start - 1) / 2)
+#define YYSTATE YY_START
+
+/* Action number for EOF rule of a given start state. */
+#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
+/* Special action meaning "start processing a new file". */
+#define YY_NEW_FILE yyrestart( yyin )
+
+#define YY_END_OF_BUFFER_CHAR 0
+
+/* Size of default input buffer. */
+#define YY_BUF_SIZE 16384
+
+typedef struct yy_buffer_state *YY_BUFFER_STATE;
+
+extern int yyleng;
+extern FILE *yyin, *yyout;
+
+#define EOB_ACT_CONTINUE_SCAN 0
+#define EOB_ACT_END_OF_FILE 1
+#define EOB_ACT_LAST_MATCH 2
+
+/* The funky do-while in the following #define is used to turn the definition
+ * int a single C statement (which needs a semi-colon terminator).  This
+ * avoids problems with code like:
+ *
+ * 	if ( condition_holds )
+ *		yyless( 5 );
+ *	else
+ *		do_something_else();
+ *
+ * Prior to using the do-while the compiler would get upset at the
+ * "else" because it interpreted the "if" statement as being all
+ * done when it reached the ';' after the yyless() call.
+ */
+
+/* Return all but the first 'n' matched characters back to the input stream. */
+
+#define yyless(n) \
+	do \
+		{ \
+		/* Undo effects of setting up yytext. */ \
+		*yy_cp = yy_hold_char; \
+		YY_RESTORE_YY_MORE_OFFSET \
+		yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
+		YY_DO_BEFORE_ACTION; /* set up yytext again */ \
+		} \
+	while ( 0 )
+
+#define unput(c) yyunput( c, yytext_ptr )
+
+/* The following is because we cannot portably get our hands on size_t
+ * (without autoconf's help, which isn't available because we want
+ * flex-generated scanners to compile on their own).
+ */
+typedef unsigned int yy_size_t;
+
+
+struct yy_buffer_state
+	{
+	FILE *yy_input_file;
+
+	char *yy_ch_buf;		/* input buffer */
+	char *yy_buf_pos;		/* current position in input buffer */
+
+	/* Size of input buffer in bytes, not including room for EOB
+	 * characters.
+	 */
+	yy_size_t yy_buf_size;
+
+	/* Number of characters read into yy_ch_buf, not including EOB
+	 * characters.
+	 */
+	int yy_n_chars;
+
+	/* Whether we "own" the buffer - i.e., we know we created it,
+	 * and can realloc() it to grow it, and should free() it to
+	 * delete it.
+	 */
+	int yy_is_our_buffer;
+
+	/* Whether this is an "interactive" input source; if so, and
+	 * if we're using stdio for input, then we want to use getc()
+	 * instead of fread(), to make sure we stop fetching input after
+	 * each newline.
+	 */
+	int yy_is_interactive;
+
+	/* Whether we're considered to be at the beginning of a line.
+	 * If so, '^' rules will be active on the next match, otherwise
+	 * not.
+	 */
+	int yy_at_bol;
+
+	/* Whether to try to fill the input buffer when we reach the
+	 * end of it.
+	 */
+	int yy_fill_buffer;
+
+	int yy_buffer_status;
+#define YY_BUFFER_NEW 0
+#define YY_BUFFER_NORMAL 1
+	/* When an EOF's been seen but there's still some text to process
+	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+	 * shouldn't try reading from the input source any more.  We might
+	 * still have a bunch of tokens to match, though, because of
+	 * possible backing-up.
+	 *
+	 * When we actually see the EOF, we change the status to "new"
+	 * (via yyrestart()), so that the user can continue scanning by
+	 * just pointing yyin at a new input file.
+	 */
+#define YY_BUFFER_EOF_PENDING 2
+	};
+
+static YY_BUFFER_STATE yy_current_buffer = 0;
+
+/* We provide macros for accessing buffer states in case in the
+ * future we want to put the buffer states in a more general
+ * "scanner state".
+ */
+#define YY_CURRENT_BUFFER yy_current_buffer
+
+
+/* yy_hold_char holds the character lost when yytext is formed. */
+static char yy_hold_char;
+
+static int yy_n_chars;		/* number of characters read into yy_ch_buf */
+
+
+int yyleng;
+
+/* Points to current character in buffer. */
+static char *yy_c_buf_p = (char *) 0;
+static int yy_init = 1;		/* whether we need to initialize */
+static int yy_start = 0;	/* start state number */
+
+/* Flag which is used to allow yywrap()'s to do buffer switches
+ * instead of setting up a fresh yyin.  A bit of a hack ...
+ */
+static int yy_did_buffer_switch_on_eof;
+
+void yyrestart YY_PROTO(( FILE *input_file ));
+
+void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
+void yy_load_buffer_state YY_PROTO(( void ));
+YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
+void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
+void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
+void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
+#define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
+
+YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
+YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
+YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
+
+static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
+static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));
+static void yy_flex_free YY_PROTO(( void * ));
+
+#define yy_new_buffer yy_create_buffer
+
+#define yy_set_interactive(is_interactive) \
+	{ \
+	if ( ! yy_current_buffer ) \
+		yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
+	yy_current_buffer->yy_is_interactive = is_interactive; \
+	}
+
+#define yy_set_bol(at_bol) \
+	{ \
+	if ( ! yy_current_buffer ) \
+		yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
+	yy_current_buffer->yy_at_bol = at_bol; \
+	}
+
+#define YY_AT_BOL() (yy_current_buffer->yy_at_bol)
+
+typedef unsigned char YY_CHAR;
+FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
+typedef int yy_state_type;
+extern char *yytext;
+#define yytext_ptr yytext
+
+static yy_state_type yy_get_previous_state YY_PROTO(( void ));
+static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
+static int yy_get_next_buffer YY_PROTO(( void ));
+static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
+
+/* Done after the current pattern has been matched and before the
+ * corresponding action - sets up yytext.
+ */
+#define YY_DO_BEFORE_ACTION \
+	yytext_ptr = yy_bp; \
+	yyleng = (int) (yy_cp - yy_bp); \
+	yy_hold_char = *yy_cp; \
+	*yy_cp = '\0'; \
+	yy_c_buf_p = yy_cp;
+
+#define YY_NUM_RULES 12
+#define YY_END_OF_BUFFER 13
+static yyconst short int yy_accept[74] =
+    {   0,
+        0,    0,    0,    0,   13,   12,   11,   10,   12,    9,
+       12,   12,   12,    9,    8,    8,    8,    8,    8,    8,
+       11,    0,    4,    7,    5,    8,    8,    8,    8,    8,
+        8,    8,    6,    8,    8,    8,    8,    3,    8,    8,
+        8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
+        8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
+        8,    8,    8,    2,    8,    8,    8,    1,    8,    8,
+        8,    8,    0
+    } ;
+
+static yyconst int yy_ec[256] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    2,    1,    1,    1,    1,    4,    1,    1,    5,
+        6,    1,    1,    7,    1,    1,    1,    8,    9,   10,
+       11,    8,    8,    8,   12,    8,    8,   13,   14,    1,
+        1,    1,    1,    1,   18,   19,   19,   20,   21,   22,
+       23,   19,   24,   19,   19,   25,   26,   27,   28,   29,
+       19,   30,   31,   32,   33,   19,   19,   34,   35,   19,
+       15,    1,   16,    1,   17,    1,   18,   19,   19,   20,
+
+       21,   22,   23,   19,   24,   19,   19,   25,   26,   27,
+       28,   29,   19,   30,   31,   32,   33,   19,   19,   34,
+       35,   19,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1
+    } ;
+
+static yyconst int yy_meta[36] =
+    {   0,
+        1,    1,    2,    1,    1,    1,    1,    3,    3,    3,
+        3,    3,    1,    1,    1,    1,    3,    3,    3,    3,
+        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
+        3,    3,    3,    3,    3
+    } ;
+
+static yyconst short int yy_base[76] =
+    {   0,
+        0,    0,    0,    0,   96,   97,   93,   97,   90,   97,
+       73,   72,   71,   77,    0,   24,   61,   61,   69,   55,
+       83,   80,   79,   97,   97,    0,   70,   47,   48,   54,
+       48,   56,    0,   55,   52,   39,   55,    0,   52,   41,
+       53,   43,   51,   43,   44,   39,   41,   43,   38,   33,
+       30,   39,   24,   37,   32,   34,   33,   20,   32,   21,
+       27,   21,   14,    0,   27,   22,   19,    0,   11,   16,
+       19,    7,   97,   48,   34
+    } ;
+
+static yyconst short int yy_def[76] =
+    {   0,
+       73,    1,    1,    1,   73,   73,   73,   73,   74,   73,
+       73,   73,   73,   73,   75,   75,   75,   75,   75,   75,
+       73,   74,   74,   73,   73,   75,   75,   75,   75,   75,
+       75,   75,   75,   75,   75,   75,   75,   75,   75,   75,
+       75,   75,   75,   75,   75,   75,   75,   75,   75,   75,
+       75,   75,   75,   75,   75,   75,   75,   75,   75,   75,
+       75,   75,   75,   75,   75,   75,   75,   75,   75,   75,
+       75,   75,    0,   73,   73
+    } ;
+
+static yyconst short int yy_nxt[133] =
+    {   0,
+        6,    7,    8,    9,   10,   10,   10,    6,   11,   12,
+       13,    6,   14,   10,   10,   10,   15,   15,   15,   15,
+       15,   16,   15,   15,   15,   15,   17,   18,   19,   15,
+       15,   15,   20,   15,   15,   27,   26,   33,   72,   71,
+       70,   69,   68,   67,   33,   66,   65,   28,   22,   64,
+       22,   63,   62,   61,   60,   59,   58,   57,   56,   55,
+       54,   53,   52,   51,   50,   49,   48,   47,   46,   45,
+       44,   43,   42,   41,   40,   39,   38,   37,   36,   35,
+       34,   33,   23,   23,   21,   32,   31,   30,   29,   25,
+       24,   24,   24,   23,   21,   73,    5,   73,   73,   73,
+
+       73,   73,   73,   73,   73,   73,   73,   73,   73,   73,
+       73,   73,   73,   73,   73,   73,   73,   73,   73,   73,
+       73,   73,   73,   73,   73,   73,   73,   73,   73,   73,
+       73,   73
+    } ;
+
+static yyconst short int yy_chk[133] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,   16,   75,   72,   71,   70,
+       69,   67,   66,   65,   63,   62,   61,   16,   74,   60,
+       74,   59,   58,   57,   56,   55,   54,   53,   52,   51,
+       50,   49,   48,   47,   46,   45,   44,   43,   42,   41,
+       40,   39,   37,   36,   35,   34,   32,   31,   30,   29,
+       28,   27,   23,   22,   21,   20,   19,   18,   17,   14,
+       13,   12,   11,    9,    7,    5,   73,   73,   73,   73,
+
+       73,   73,   73,   73,   73,   73,   73,   73,   73,   73,
+       73,   73,   73,   73,   73,   73,   73,   73,   73,   73,
+       73,   73,   73,   73,   73,   73,   73,   73,   73,   73,
+       73,   73
+    } ;
+
+static yy_state_type yy_last_accepting_state;
+static char *yy_last_accepting_cpos;
+
+/* The intent behind this definition is that it'll catch
+ * any uses of REJECT which flex missed.
+ */
+#define REJECT reject_used_but_not_detected
+#define yymore() yymore_used_but_not_detected
+#define YY_MORE_ADJ 0
+#define YY_RESTORE_YY_MORE_OFFSET
+char *yytext;
+#line 1 "convert.lex"
+#define INITIAL 0
+/******************************************************************************/
+/*                                                                            */
+/*     CONV (converter) for Agrif (Adaptive Grid Refinement In Fortran)       */
+/*                                                                            */
+/* Copyright or   or Copr. Laurent Debreu (Laurent.Debreu@imag.fr)            */
+/*                        Cyril Mazauric (Cyril_Mazauric@yahoo.fr)            */
+/* This software is governed by the CeCILL-C license under French law and     */
+/* abiding by the rules of distribution of free software.  You can  use,      */
+/* modify and/ or redistribute the software under the terms of the CeCILL-C   */
+/* license as circulated by CEA, CNRS and INRIA at the following URL          */
+/* "http://www.cecill.info".                                                  */
+/*                                                                            */
+/* As a counterpart to the access to the source code and  rights to copy,     */
+/* modify and redistribute granted by the license, users are provided only    */
+/* with a limited warranty  and the software's author,  the holder of the     */
+/* economic rights,  and the successive licensors  have only  limited         */
+/* liability.                                                                 */
+/*                                                                            */
+/* In this respect, the user's attention is drawn to the risks associated     */
+/* with loading,  using,  modifying and/or developing or reproducing the      */
+/* software by the user in light of its specific status of free software,     */
+/* that may mean  that it is complicated to manipulate,  and  that  also      */
+/* therefore means  that it is reserved for developers  and  experienced      */
+/* professionals having in-depth computer knowledge. Users are therefore      */
+/* encouraged to load and test the software's suitability as regards their    */
+/* requirements in conditions enabling the security of their systems and/or   */
+/* data to be ensured and,  more generally, to use and operate it in the      */
+/* same conditions as regards security.                                       */
+/*                                                                            */
+/* The fact that you are presently reading this means that you have had       */
+/* knowledge of the CeCILL-C license and that you accept its terms.           */
+/******************************************************************************/
+/* version 1.7                                                                */
+/******************************************************************************/
+#define character 1
+
+#line 37 "convert.lex"
+#include <math.h>
+#include <stdlib.h>
+#include <string.h>
+int line_num=1;
+extern FILE * yyin;
+#define MAX_INCLUDE_DEPTH 30
+YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH];
+#line 460 "convert.yy.c"
+
+/* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+#ifndef YY_SKIP_YYWRAP
+#ifdef __cplusplus
+extern "C" int yywrap YY_PROTO(( void ));
+#else
+extern int yywrap YY_PROTO(( void ));
+#endif
+#endif
+
+#ifndef YY_NO_UNPUT
+static void yyunput YY_PROTO(( int c, char *buf_ptr ));
+#endif
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen YY_PROTO(( yyconst char * ));
+#endif
+
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+static int yyinput YY_PROTO(( void ));
+#else
+static int input YY_PROTO(( void ));
+#endif
+#endif
+
+#if YY_STACK_USED
+static int yy_start_stack_ptr = 0;
+static int yy_start_stack_depth = 0;
+static int *yy_start_stack = 0;
+#ifndef YY_NO_PUSH_STATE
+static void yy_push_state YY_PROTO(( int new_state ));
+#endif
+#ifndef YY_NO_POP_STATE
+static void yy_pop_state YY_PROTO(( void ));
+#endif
+#ifndef YY_NO_TOP_STATE
+static int yy_top_state YY_PROTO(( void ));
+#endif
+
+#else
+#define YY_NO_PUSH_STATE 1
+#define YY_NO_POP_STATE 1
+#define YY_NO_TOP_STATE 1
+#endif
+
+#ifdef YY_MALLOC_DECL
+YY_MALLOC_DECL
+#else
+#if __STDC__
+#ifndef __cplusplus
+#include <stdlib.h>
+#endif
+#else
+/* Just try to get by without declaring the routines.  This will fail
+ * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
+ * or sizeof(void*) != sizeof(int).
+ */
+#endif
+#endif
+
+/* Amount of stuff to slurp up with each read. */
+#ifndef YY_READ_BUF_SIZE
+#define YY_READ_BUF_SIZE 8192
+#endif
+
+/* Copy whatever the last rule matched to the standard output. */
+
+#ifndef ECHO
+/* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+#define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
+#endif
+
+/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
+ * is returned in "result".
+ */
+#ifndef YY_INPUT
+#define YY_INPUT(buf,result,max_size) \
+	if ( yy_current_buffer->yy_is_interactive ) \
+		{ \
+		int c = '*', n; \
+		for ( n = 0; n < max_size && \
+			     (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
+			buf[n] = (char) c; \
+		if ( c == '\n' ) \
+			buf[n++] = (char) c; \
+		if ( c == EOF && ferror( yyin ) ) \
+			YY_FATAL_ERROR( "input in flex scanner failed" ); \
+		result = n; \
+		} \
+	else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
+		  && ferror( yyin ) ) \
+		YY_FATAL_ERROR( "input in flex scanner failed" );
+#endif
+
+/* No semi-colon after return; correct usage is to write "yyterminate();" -
+ * we don't want an extra ';' after the "return" because that will cause
+ * some compilers to complain about unreachable statements.
+ */
+#ifndef yyterminate
+#define yyterminate() return YY_NULL
+#endif
+
+/* Number of entries by which start-condition stack grows. */
+#ifndef YY_START_STACK_INCR
+#define YY_START_STACK_INCR 25
+#endif
+
+/* Report a fatal error. */
+#ifndef YY_FATAL_ERROR
+#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
+#endif
+
+/* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+#ifndef YY_DECL
+#define YY_DECL int yylex YY_PROTO(( void ))
+#endif
+
+/* Code executed at the beginning of each rule, after yytext and yyleng
+ * have been set up.
+ */
+#ifndef YY_USER_ACTION
+#define YY_USER_ACTION
+#endif
+
+/* Code executed at the end of each rule. */
+#ifndef YY_BREAK
+#define YY_BREAK break;
+#endif
+
+#define YY_RULE_SETUP \
+	YY_USER_ACTION
+
+YY_DECL
+	{
+	register yy_state_type yy_current_state;
+	register char *yy_cp, *yy_bp;
+	register int yy_act;
+
+#line 55 "convert.lex"
+
+#line 613 "convert.yy.c"
+
+	if ( yy_init )
+		{
+		yy_init = 0;
+
+#ifdef YY_USER_INIT
+		YY_USER_INIT;
+#endif
+
+		if ( ! yy_start )
+			yy_start = 1;	/* first start state */
+
+		if ( ! yyin )
+			yyin = stdin;
+
+		if ( ! yyout )
+			yyout = stdout;
+
+		if ( ! yy_current_buffer )
+			yy_current_buffer =
+				yy_create_buffer( yyin, YY_BUF_SIZE );
+
+		yy_load_buffer_state();
+		}
+
+	while ( 1 )		/* loops until end-of-file is reached */
+		{
+		yy_cp = yy_c_buf_p;
+
+		/* Support of yytext. */
+		*yy_cp = yy_hold_char;
+
+		/* yy_bp points to the position in yy_ch_buf of the start of
+		 * the current run.
+		 */
+		yy_bp = yy_cp;
+
+		yy_current_state = yy_start;
+yy_match:
+		do
+			{
+			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+			if ( yy_accept[yy_current_state] )
+				{
+				yy_last_accepting_state = yy_current_state;
+				yy_last_accepting_cpos = yy_cp;
+				}
+			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+				{
+				yy_current_state = (int) yy_def[yy_current_state];
+				if ( yy_current_state >= 74 )
+					yy_c = yy_meta[(unsigned int) yy_c];
+				}
+			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+			++yy_cp;
+			}
+		while ( yy_base[yy_current_state] != 97 );
+
+yy_find_action:
+		yy_act = yy_accept[yy_current_state];
+		if ( yy_act == 0 )
+			{ /* have to back up */
+			yy_cp = yy_last_accepting_cpos;
+			yy_current_state = yy_last_accepting_state;
+			yy_act = yy_accept[yy_current_state];
+			}
+
+		YY_DO_BEFORE_ACTION;
+
+
+do_action:	/* This label is used only to access EOF actions. */
+
+
+		switch ( yy_act )
+	{ /* beginning of action switch */
+			case 0: /* must back up */
+			/* undo the effects of YY_DO_BEFORE_ACTION */
+			*yy_cp = yy_hold_char;
+			yy_cp = yy_last_accepting_cpos;
+			yy_current_state = yy_last_accepting_state;
+			goto yy_find_action;
+
+case 1:
+YY_RULE_SETUP
+#line 56 "convert.lex"
+return TOK_MODULEMAIN; /* name of the module                      */
+	YY_BREAK
+case 2:
+YY_RULE_SETUP
+#line 57 "convert.lex"
+return TOK_NOTGRIDDEP; /* variable which are not grid dependent   */
+	YY_BREAK
+case 3:
+YY_RULE_SETUP
+#line 58 "convert.lex"
+return TOK_USE;
+	YY_BREAK
+case 4:
+YY_RULE_SETUP
+#line 59 "convert.lex"
+{}
+	YY_BREAK
+case 5:
+YY_RULE_SETUP
+#line 60 "convert.lex"
+return TOK_SEP;
+	YY_BREAK
+case 6:
+YY_RULE_SETUP
+#line 61 "convert.lex"
+{strcpy(yylval.na,yytext); return TOK_USEITEM;}
+	YY_BREAK
+case 7:
+YY_RULE_SETUP
+#line 62 "convert.lex"
+{strcpy(yylval.na,yytext); return TOK_PROBTYPE;}
+	YY_BREAK
+/* dimension of the problem                */
+case 8:
+YY_RULE_SETUP
+#line 64 "convert.lex"
+{strcpy(yylval.na,yytext); return TOK_NAME;}
+	YY_BREAK
+case 9:
+YY_RULE_SETUP
+#line 65 "convert.lex"
+{return (int) *yytext;}
+	YY_BREAK
+case 10:
+YY_RULE_SETUP
+#line 66 "convert.lex"
+{line_num++;return (int) *yytext;}
+	YY_BREAK
+case 11:
+YY_RULE_SETUP
+#line 67 "convert.lex"
+;
+	YY_BREAK
+case 12:
+YY_RULE_SETUP
+#line 68 "convert.lex"
+ECHO;
+	YY_BREAK
+#line 757 "convert.yy.c"
+case YY_STATE_EOF(INITIAL):
+case YY_STATE_EOF(character):
+	yyterminate();
+
+	case YY_END_OF_BUFFER:
+		{
+		/* Amount of text matched not including the EOB char. */
+		int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;
+
+		/* Undo the effects of YY_DO_BEFORE_ACTION. */
+		*yy_cp = yy_hold_char;
+		YY_RESTORE_YY_MORE_OFFSET
+
+		if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
+			{
+			/* We're scanning a new file or input source.  It's
+			 * possible that this happened because the user
+			 * just pointed yyin at a new source and called
+			 * yylex().  If so, then we have to assure
+			 * consistency between yy_current_buffer and our
+			 * globals.  Here is the right place to do so, because
+			 * this is the first action (other than possibly a
+			 * back-up) that will match for the new input source.
+			 */
+			yy_n_chars = yy_current_buffer->yy_n_chars;
+			yy_current_buffer->yy_input_file = yyin;
+			yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
+			}
+
+		/* Note that here we test for yy_c_buf_p "<=" to the position
+		 * of the first EOB in the buffer, since yy_c_buf_p will
+		 * already have been incremented past the NUL character
+		 * (since all states make transitions on EOB to the
+		 * end-of-buffer state).  Contrast this with the test
+		 * in input().
+		 */
+		if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
+			{ /* This was really a NUL. */
+			yy_state_type yy_next_state;
+
+			yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
+
+			yy_current_state = yy_get_previous_state();
+
+			/* Okay, we're now positioned to make the NUL
+			 * transition.  We couldn't have
+			 * yy_get_previous_state() go ahead and do it
+			 * for us because it doesn't know how to deal
+			 * with the possibility of jamming (and we don't
+			 * want to build jamming into it because then it
+			 * will run more slowly).
+			 */
+
+			yy_next_state = yy_try_NUL_trans( yy_current_state );
+
+			yy_bp = yytext_ptr + YY_MORE_ADJ;
+
+			if ( yy_next_state )
+				{
+				/* Consume the NUL. */
+				yy_cp = ++yy_c_buf_p;
+				yy_current_state = yy_next_state;
+				goto yy_match;
+				}
+
+			else
+				{
+				yy_cp = yy_c_buf_p;
+				goto yy_find_action;
+				}
+			}
+
+		else switch ( yy_get_next_buffer() )
+			{
+			case EOB_ACT_END_OF_FILE:
+				{
+				yy_did_buffer_switch_on_eof = 0;
+
+				if ( yywrap() )
+					{
+					/* Note: because we've taken care in
+					 * yy_get_next_buffer() to have set up
+					 * yytext, we can now set up
+					 * yy_c_buf_p so that if some total
+					 * hoser (like flex itself) wants to
+					 * call the scanner after we return the
+					 * YY_NULL, it'll still work - another
+					 * YY_NULL will get returned.
+					 */
+					yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
+
+					yy_act = YY_STATE_EOF(YY_START);
+					goto do_action;
+					}
+
+				else
+					{
+					if ( ! yy_did_buffer_switch_on_eof )
+						YY_NEW_FILE;
+					}
+				break;
+				}
+
+			case EOB_ACT_CONTINUE_SCAN:
+				yy_c_buf_p =
+					yytext_ptr + yy_amount_of_matched_text;
+
+				yy_current_state = yy_get_previous_state();
+
+				yy_cp = yy_c_buf_p;
+				yy_bp = yytext_ptr + YY_MORE_ADJ;
+				goto yy_match;
+
+			case EOB_ACT_LAST_MATCH:
+				yy_c_buf_p =
+				&yy_current_buffer->yy_ch_buf[yy_n_chars];
+
+				yy_current_state = yy_get_previous_state();
+
+				yy_cp = yy_c_buf_p;
+				yy_bp = yytext_ptr + YY_MORE_ADJ;
+				goto yy_find_action;
+			}
+		break;
+		}
+
+	default:
+		YY_FATAL_ERROR(
+			"fatal flex scanner internal error--no action found" );
+	} /* end of action switch */
+		} /* end of scanning one token */
+	} /* end of yylex */
+
+
+/* yy_get_next_buffer - try to read in a new buffer
+ *
+ * Returns a code representing an action:
+ *	EOB_ACT_LAST_MATCH -
+ *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+ *	EOB_ACT_END_OF_FILE - end of file
+ */
+
+static int yy_get_next_buffer()
+	{
+	register char *dest = yy_current_buffer->yy_ch_buf;
+	register char *source = yytext_ptr;
+	register int number_to_move, i;
+	int ret_val;
+
+	if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
+		YY_FATAL_ERROR(
+		"fatal flex scanner internal error--end of buffer missed" );
+
+	if ( yy_current_buffer->yy_fill_buffer == 0 )
+		{ /* Don't try to fill the buffer, so this is an EOF. */
+		if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
+			{
+			/* We matched a single character, the EOB, so
+			 * treat this as a final EOF.
+			 */
+			return EOB_ACT_END_OF_FILE;
+			}
+
+		else
+			{
+			/* We matched some text prior to the EOB, first
+			 * process it.
+			 */
+			return EOB_ACT_LAST_MATCH;
+			}
+		}
+
+	/* Try to read more data. */
+
+	/* First move last chars to start of buffer. */
+	number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;
+
+	for ( i = 0; i < number_to_move; ++i )
+		*(dest++) = *(source++);
+
+	if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+		/* don't do the read, it's not guaranteed to return an EOF,
+		 * just force an EOF
+		 */
+		yy_current_buffer->yy_n_chars = yy_n_chars = 0;
+
+	else
+		{
+		int num_to_read =
+			yy_current_buffer->yy_buf_size - number_to_move - 1;
+
+		while ( num_to_read <= 0 )
+			{ /* Not enough room in the buffer - grow it. */
+#ifdef YY_USES_REJECT
+			YY_FATAL_ERROR(
+"input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
+#else
+
+			/* just a shorter name for the current buffer */
+			YY_BUFFER_STATE b = yy_current_buffer;
+
+			int yy_c_buf_p_offset =
+				(int) (yy_c_buf_p - b->yy_ch_buf);
+
+			if ( b->yy_is_our_buffer )
+				{
+				int new_size = b->yy_buf_size * 2;
+
+				if ( new_size <= 0 )
+					b->yy_buf_size += b->yy_buf_size / 8;
+				else
+					b->yy_buf_size *= 2;
+
+				b->yy_ch_buf = (char *)
+					/* Include room in for 2 EOB chars. */
+					yy_flex_realloc( (void *) b->yy_ch_buf,
+							 b->yy_buf_size + 2 );
+				}
+			else
+				/* Can't grow it, we don't own it. */
+				b->yy_ch_buf = 0;
+
+			if ( ! b->yy_ch_buf )
+				YY_FATAL_ERROR(
+				"fatal error - scanner input buffer overflow" );
+
+			yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
+
+			num_to_read = yy_current_buffer->yy_buf_size -
+						number_to_move - 1;
+#endif
+			}
+
+		if ( num_to_read > YY_READ_BUF_SIZE )
+			num_to_read = YY_READ_BUF_SIZE;
+
+		/* Read in more data. */
+		YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
+			yy_n_chars, num_to_read );
+
+		yy_current_buffer->yy_n_chars = yy_n_chars;
+		}
+
+	if ( yy_n_chars == 0 )
+		{
+		if ( number_to_move == YY_MORE_ADJ )
+			{
+			ret_val = EOB_ACT_END_OF_FILE;
+			yyrestart( yyin );
+			}
+
+		else
+			{
+			ret_val = EOB_ACT_LAST_MATCH;
+			yy_current_buffer->yy_buffer_status =
+				YY_BUFFER_EOF_PENDING;
+			}
+		}
+
+	else
+		ret_val = EOB_ACT_CONTINUE_SCAN;
+
+	yy_n_chars += number_to_move;
+	yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
+	yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
+
+	yytext_ptr = &yy_current_buffer->yy_ch_buf[0];
+
+	return ret_val;
+	}
+
+
+/* yy_get_previous_state - get the state just before the EOB char was reached */
+
+static yy_state_type yy_get_previous_state()
+	{
+	register yy_state_type yy_current_state;
+	register char *yy_cp;
+
+	yy_current_state = yy_start;
+
+	for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
+		{
+		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+		if ( yy_accept[yy_current_state] )
+			{
+			yy_last_accepting_state = yy_current_state;
+			yy_last_accepting_cpos = yy_cp;
+			}
+		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+			{
+			yy_current_state = (int) yy_def[yy_current_state];
+			if ( yy_current_state >= 74 )
+				yy_c = yy_meta[(unsigned int) yy_c];
+			}
+		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+		}
+
+	return yy_current_state;
+	}
+
+
+/* yy_try_NUL_trans - try to make a transition on the NUL character
+ *
+ * synopsis
+ *	next_state = yy_try_NUL_trans( current_state );
+ */
+
+#ifdef YY_USE_PROTOS
+static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
+#else
+static yy_state_type yy_try_NUL_trans( yy_current_state )
+yy_state_type yy_current_state;
+#endif
+	{
+	register int yy_is_jam;
+	register char *yy_cp = yy_c_buf_p;
+
+	register YY_CHAR yy_c = 1;
+	if ( yy_accept[yy_current_state] )
+		{
+		yy_last_accepting_state = yy_current_state;
+		yy_last_accepting_cpos = yy_cp;
+		}
+	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+		{
+		yy_current_state = (int) yy_def[yy_current_state];
+		if ( yy_current_state >= 74 )
+			yy_c = yy_meta[(unsigned int) yy_c];
+		}
+	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+	yy_is_jam = (yy_current_state == 73);
+
+	return yy_is_jam ? 0 : yy_current_state;
+	}
+
+
+#ifndef YY_NO_UNPUT
+#ifdef YY_USE_PROTOS
+static void yyunput( int c, register char *yy_bp )
+#else
+static void yyunput( c, yy_bp )
+int c;
+register char *yy_bp;
+#endif
+	{
+	register char *yy_cp = yy_c_buf_p;
+
+	/* undo effects of setting up yytext */
+	*yy_cp = yy_hold_char;
+
+	if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
+		{ /* need to shift things up to make room */
+		/* +2 for EOB chars. */
+		register int number_to_move = yy_n_chars + 2;
+		register char *dest = &yy_current_buffer->yy_ch_buf[
+					yy_current_buffer->yy_buf_size + 2];
+		register char *source =
+				&yy_current_buffer->yy_ch_buf[number_to_move];
+
+		while ( source > yy_current_buffer->yy_ch_buf )
+			*--dest = *--source;
+
+		yy_cp += (int) (dest - source);
+		yy_bp += (int) (dest - source);
+		yy_current_buffer->yy_n_chars =
+			yy_n_chars = yy_current_buffer->yy_buf_size;
+
+		if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
+			YY_FATAL_ERROR( "flex scanner push-back overflow" );
+		}
+
+	*--yy_cp = (char) c;
+
+
+	yytext_ptr = yy_bp;
+	yy_hold_char = *yy_cp;
+	yy_c_buf_p = yy_cp;
+	}
+#endif	/* ifndef YY_NO_UNPUT */
+
+
+#ifdef __cplusplus
+static int yyinput()
+#else
+static int input()
+#endif
+	{
+	int c;
+
+	*yy_c_buf_p = yy_hold_char;
+
+	if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
+		{
+		/* yy_c_buf_p now points to the character we want to return.
+		 * If this occurs *before* the EOB characters, then it's a
+		 * valid NUL; if not, then we've hit the end of the buffer.
+		 */
+		if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
+			/* This was really a NUL. */
+			*yy_c_buf_p = '\0';
+
+		else
+			{ /* need more input */
+			int offset = yy_c_buf_p - yytext_ptr;
+			++yy_c_buf_p;
+
+			switch ( yy_get_next_buffer() )
+				{
+				case EOB_ACT_LAST_MATCH:
+					/* This happens because yy_g_n_b()
+					 * sees that we've accumulated a
+					 * token and flags that we need to
+					 * try matching the token before
+					 * proceeding.  But for input(),
+					 * there's no matching to consider.
+					 * So convert the EOB_ACT_LAST_MATCH
+					 * to EOB_ACT_END_OF_FILE.
+					 */
+
+					/* Reset buffer status. */
+					yyrestart( yyin );
+
+					/* fall through */
+
+				case EOB_ACT_END_OF_FILE:
+					{
+					if ( yywrap() )
+						return EOF;
+
+					if ( ! yy_did_buffer_switch_on_eof )
+						YY_NEW_FILE;
+#ifdef __cplusplus
+					return yyinput();
+#else
+					return input();
+#endif
+					}
+
+				case EOB_ACT_CONTINUE_SCAN:
+					yy_c_buf_p = yytext_ptr + offset;
+					break;
+				}
+			}
+		}
+
+	c = *(unsigned char *) yy_c_buf_p;	/* cast for 8-bit char's */
+	*yy_c_buf_p = '\0';	/* preserve yytext */
+	yy_hold_char = *++yy_c_buf_p;
+
+
+	return c;
+	}
+
+
+#ifdef YY_USE_PROTOS
+void yyrestart( FILE *input_file )
+#else
+void yyrestart( input_file )
+FILE *input_file;
+#endif
+	{
+	if ( ! yy_current_buffer )
+		yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
+
+	yy_init_buffer( yy_current_buffer, input_file );
+	yy_load_buffer_state();
+	}
+
+
+#ifdef YY_USE_PROTOS
+void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
+#else
+void yy_switch_to_buffer( new_buffer )
+YY_BUFFER_STATE new_buffer;
+#endif
+	{
+	if ( yy_current_buffer == new_buffer )
+		return;
+
+	if ( yy_current_buffer )
+		{
+		/* Flush out information for old buffer. */
+		*yy_c_buf_p = yy_hold_char;
+		yy_current_buffer->yy_buf_pos = yy_c_buf_p;
+		yy_current_buffer->yy_n_chars = yy_n_chars;
+		}
+
+	yy_current_buffer = new_buffer;
+	yy_load_buffer_state();
+
+	/* We don't actually know whether we did this switch during
+	 * EOF (yywrap()) processing, but the only time this flag
+	 * is looked at is after yywrap() is called, so it's safe
+	 * to go ahead and always set it.
+	 */
+	yy_did_buffer_switch_on_eof = 1;
+	}
+
+
+#ifdef YY_USE_PROTOS
+void yy_load_buffer_state( void )
+#else
+void yy_load_buffer_state()
+#endif
+	{
+	yy_n_chars = yy_current_buffer->yy_n_chars;
+	yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
+	yyin = yy_current_buffer->yy_input_file;
+	yy_hold_char = *yy_c_buf_p;
+	}
+
+
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
+#else
+YY_BUFFER_STATE yy_create_buffer( file, size )
+FILE *file;
+int size;
+#endif
+	{
+	YY_BUFFER_STATE b;
+
+	b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
+	if ( ! b )
+		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+	b->yy_buf_size = size;
+
+	/* yy_ch_buf has to be 2 characters longer than the size given because
+	 * we need to put in 2 end-of-buffer characters.
+	 */
+	b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
+	if ( ! b->yy_ch_buf )
+		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+	b->yy_is_our_buffer = 1;
+
+	yy_init_buffer( b, file );
+
+	return b;
+	}
+
+
+#ifdef YY_USE_PROTOS
+void yy_delete_buffer( YY_BUFFER_STATE b )
+#else
+void yy_delete_buffer( b )
+YY_BUFFER_STATE b;
+#endif
+	{
+	if ( ! b )
+		return;
+
+	if ( b == yy_current_buffer )
+		yy_current_buffer = (YY_BUFFER_STATE) 0;
+
+	if ( b->yy_is_our_buffer )
+		yy_flex_free( (void *) b->yy_ch_buf );
+
+	yy_flex_free( (void *) b );
+	}
+
+
+#ifndef YY_ALWAYS_INTERACTIVE
+#ifndef YY_NEVER_INTERACTIVE
+extern int isatty YY_PROTO(( int ));
+#endif
+#endif
+
+#ifdef YY_USE_PROTOS
+void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
+#else
+void yy_init_buffer( b, file )
+YY_BUFFER_STATE b;
+FILE *file;
+#endif
+
+
+	{
+	yy_flush_buffer( b );
+
+	b->yy_input_file = file;
+	b->yy_fill_buffer = 1;
+
+#if YY_ALWAYS_INTERACTIVE
+	b->yy_is_interactive = 1;
+#else
+#if YY_NEVER_INTERACTIVE
+	b->yy_is_interactive = 0;
+#else
+	b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
+#endif
+#endif
+	}
+
+
+#ifdef YY_USE_PROTOS
+void yy_flush_buffer( YY_BUFFER_STATE b )
+#else
+void yy_flush_buffer( b )
+YY_BUFFER_STATE b;
+#endif
+
+	{
+	if ( ! b )
+		return;
+
+	b->yy_n_chars = 0;
+
+	/* We always need two end-of-buffer characters.  The first causes
+	 * a transition to the end-of-buffer state.  The second causes
+	 * a jam in that state.
+	 */
+	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+
+	b->yy_buf_pos = &b->yy_ch_buf[0];
+
+	b->yy_at_bol = 1;
+	b->yy_buffer_status = YY_BUFFER_NEW;
+
+	if ( b == yy_current_buffer )
+		yy_load_buffer_state();
+	}
+
+
+#ifndef YY_NO_SCAN_BUFFER
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
+#else
+YY_BUFFER_STATE yy_scan_buffer( base, size )
+char *base;
+yy_size_t size;
+#endif
+	{
+	YY_BUFFER_STATE b;
+
+	if ( size < 2 ||
+	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
+	     base[size-1] != YY_END_OF_BUFFER_CHAR )
+		/* They forgot to leave room for the EOB's. */
+		return 0;
+
+	b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
+	if ( ! b )
+		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
+
+	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
+	b->yy_buf_pos = b->yy_ch_buf = base;
+	b->yy_is_our_buffer = 0;
+	b->yy_input_file = 0;
+	b->yy_n_chars = b->yy_buf_size;
+	b->yy_is_interactive = 0;
+	b->yy_at_bol = 1;
+	b->yy_fill_buffer = 0;
+	b->yy_buffer_status = YY_BUFFER_NEW;
+
+	yy_switch_to_buffer( b );
+
+	return b;
+	}
+#endif
+
+
+#ifndef YY_NO_SCAN_STRING
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
+#else
+YY_BUFFER_STATE yy_scan_string( yy_str )
+yyconst char *yy_str;
+#endif
+	{
+	int len;
+	for ( len = 0; yy_str[len]; ++len )
+		;
+
+	return yy_scan_bytes( yy_str, len );
+	}
+#endif
+
+
+#ifndef YY_NO_SCAN_BYTES
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
+#else
+YY_BUFFER_STATE yy_scan_bytes( bytes, len )
+yyconst char *bytes;
+int len;
+#endif
+	{
+	YY_BUFFER_STATE b;
+	char *buf;
+	yy_size_t n;
+	int i;
+
+	/* Get memory for full buffer, including space for trailing EOB's. */
+	n = len + 2;
+	buf = (char *) yy_flex_alloc( n );
+	if ( ! buf )
+		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
+
+	for ( i = 0; i < len; ++i )
+		buf[i] = bytes[i];
+
+	buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
+
+	b = yy_scan_buffer( buf, n );
+	if ( ! b )
+		YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
+
+	/* It's okay to grow etc. this buffer, and we should throw it
+	 * away when we're done.
+	 */
+	b->yy_is_our_buffer = 1;
+
+	return b;
+	}
+#endif
+
+
+#ifndef YY_NO_PUSH_STATE
+#ifdef YY_USE_PROTOS
+static void yy_push_state( int new_state )
+#else
+static void yy_push_state( new_state )
+int new_state;
+#endif
+	{
+	if ( yy_start_stack_ptr >= yy_start_stack_depth )
+		{
+		yy_size_t new_size;
+
+		yy_start_stack_depth += YY_START_STACK_INCR;
+		new_size = yy_start_stack_depth * sizeof( int );
+
+		if ( ! yy_start_stack )
+			yy_start_stack = (int *) yy_flex_alloc( new_size );
+
+		else
+			yy_start_stack = (int *) yy_flex_realloc(
+					(void *) yy_start_stack, new_size );
+
+		if ( ! yy_start_stack )
+			YY_FATAL_ERROR(
+			"out of memory expanding start-condition stack" );
+		}
+
+	yy_start_stack[yy_start_stack_ptr++] = YY_START;
+
+	BEGIN(new_state);
+	}
+#endif
+
+
+#ifndef YY_NO_POP_STATE
+static void yy_pop_state()
+	{
+	if ( --yy_start_stack_ptr < 0 )
+		YY_FATAL_ERROR( "start-condition stack underflow" );
+
+	BEGIN(yy_start_stack[yy_start_stack_ptr]);
+	}
+#endif
+
+
+#ifndef YY_NO_TOP_STATE
+static int yy_top_state()
+	{
+	return yy_start_stack[yy_start_stack_ptr - 1];
+	}
+#endif
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
+#endif
+
+#ifdef YY_USE_PROTOS
+static void yy_fatal_error( yyconst char msg[] )
+#else
+static void yy_fatal_error( msg )
+char msg[];
+#endif
+	{
+	(void) fprintf( stderr, "%s\n", msg );
+	exit( YY_EXIT_FAILURE );
+	}
+
+
+
+/* Redefine yyless() so it works in section 3 code. */
+
+#undef yyless
+#define yyless(n) \
+	do \
+		{ \
+		/* Undo effects of setting up yytext. */ \
+		yytext[yyleng] = yy_hold_char; \
+		yy_c_buf_p = yytext + n; \
+		yy_hold_char = *yy_c_buf_p; \
+		*yy_c_buf_p = '\0'; \
+		yyleng = n; \
+		} \
+	while ( 0 )
+
+
+/* Internal utility routines. */
+
+#ifndef yytext_ptr
+#ifdef YY_USE_PROTOS
+static void yy_flex_strncpy( char *s1, yyconst char *s2, int n )
+#else
+static void yy_flex_strncpy( s1, s2, n )
+char *s1;
+yyconst char *s2;
+int n;
+#endif
+	{
+	register int i;
+	for ( i = 0; i < n; ++i )
+		s1[i] = s2[i];
+	}
+#endif
+
+#ifdef YY_NEED_STRLEN
+#ifdef YY_USE_PROTOS
+static int yy_flex_strlen( yyconst char *s )
+#else
+static int yy_flex_strlen( s )
+yyconst char *s;
+#endif
+	{
+	register int n;
+	for ( n = 0; s[n]; ++n )
+		;
+
+	return n;
+	}
+#endif
+
+
+#ifdef YY_USE_PROTOS
+static void *yy_flex_alloc( yy_size_t size )
+#else
+static void *yy_flex_alloc( size )
+yy_size_t size;
+#endif
+	{
+	return (void *) malloc( size );
+	}
+
+#ifdef YY_USE_PROTOS
+static void *yy_flex_realloc( void *ptr, yy_size_t size )
+#else
+static void *yy_flex_realloc( ptr, size )
+void *ptr;
+yy_size_t size;
+#endif
+	{
+	/* The cast to (char *) in the following accommodates both
+	 * implementations that use char* generic pointers, and those
+	 * that use void* generic pointers.  It works with the latter
+	 * because both ANSI C and C++ allow castless assignment from
+	 * any pointer type to void*, and deal with argument conversions
+	 * as though doing an assignment.
+	 */
+	return (void *) realloc( (char *) ptr, size );
+	}
+
+#ifdef YY_USE_PROTOS
+static void yy_flex_free( void *ptr )
+#else
+static void yy_flex_free( ptr )
+void *ptr;
+#endif
+	{
+	free( ptr );
+	}
+
+#if YY_MAIN
+int main()
+	{
+	yylex();
+	return 0;
+	}
+#endif
+#line 68 "convert.lex"
+
+
+
+int yywrap()
+{
+}
+
+
+yyerror(char *s)
+{
+if (!strcasecmp(curfile,mainfile))
+{
+   printf("Dans convert %s line %d, fichier %s\n",s,line_num,curfile);
+}
+else
+{
+   printf("Dans convert %s line %d, fichier %s\n",s,line_num,curfile);
+}
+exit(0);
+}
Index: /vendors/AGRIF/r_00/LIB/run
===================================================================
--- /vendors/AGRIF/r_00/LIB/run	(revision 1902)
+++ /vendors/AGRIF/r_00/LIB/run	(revision 1902)
@@ -0,0 +1,2 @@
+gmake -f Makefile.lex clean
+gmake -f Makefile.lex
Index: /vendors/AGRIF/r_00/LIB/toamr.c
===================================================================
--- /vendors/AGRIF/r_00/LIB/toamr.c	(revision 1902)
+++ /vendors/AGRIF/r_00/LIB/toamr.c	(revision 1902)
@@ -0,0 +1,1193 @@
+/******************************************************************************/
+/*                                                                            */
+/*     CONV (converter) for Agrif (Adaptive Grid Refinement In Fortran)       */
+/*                                                                            */
+/* Copyright or   or Copr. Laurent Debreu (Laurent.Debreu@imag.fr)            */
+/*                        Cyril Mazauric (Cyril_Mazauric@yahoo.fr)            */
+/* This software is governed by the CeCILL-C license under French law and     */
+/* abiding by the rules of distribution of free software.  You can  use,      */
+/* modify and/ or redistribute the software under the terms of the CeCILL-C   */
+/* license as circulated by CEA, CNRS and INRIA at the following URL          */
+/* "http://www.cecill.info".                                                  */
+/*                                                                            */
+/* As a counterpart to the access to the source code and  rights to copy,     */
+/* modify and redistribute granted by the license, users are provided only    */
+/* with a limited warranty  and the software's author,  the holder of the     */
+/* economic rights,  and the successive licensors  have only  limited         */
+/* liability.                                                                 */
+/*                                                                            */
+/* In this respect, the user's attention is drawn to the risks associated     */
+/* with loading,  using,  modifying and/or developing or reproducing the      */
+/* software by the user in light of its specific status of free software,     */
+/* that may mean  that it is complicated to manipulate,  and  that  also      */
+/* therefore means  that it is reserved for developers  and  experienced      */
+/* professionals having in-depth computer knowledge. Users are therefore      */
+/* encouraged to load and test the software's suitability as regards their    */
+/* requirements in conditions enabling the security of their systems and/or   */
+/* data to be ensured and,  more generally, to use and operate it in the      */
+/* same conditions as regards security.                                       */
+/*                                                                            */
+/* The fact that you are presently reading this means that you have had       */
+/* knowledge of the CeCILL-C license and that you accept its terms.           */
+/******************************************************************************/
+/* version 1.7                                                                */
+/******************************************************************************/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include "decl.h"
+char lvargridname[LONG_4C];
+char lvargridname2[LONG_4C];
+
+
+/******************************************************************************/
+/*                       variablenameroottabvars                              */
+/******************************************************************************/
+/* This subroutine is used to create the string                               */
+/******************************************************************************/
+/*                                                                            */
+/*  ----------->  Agrif_Mygrid % tabvars (i) % var                            */
+/*                                                                            */
+/******************************************************************************/
+char *variablenameroottabvars (variable * var)
+{
+  char *ligne;
+
+  ligne = (char *) malloc (LONG_C * sizeof (char));
+  sprintf (ligne, "Agrif_Mygrid %% tabvars(%d) %% var ", var->v_indicetabvars);
+  return ligne;
+}
+
+
+/******************************************************************************/
+/*                        variablenametabvars                                 */
+/******************************************************************************/
+/* This subroutine is used to create the string                               */
+/******************************************************************************/
+/*                                                                            */
+/*  if iorindice = 0 ---------->  Agrif_Gr % tabvars (i) % var                */
+/*                                                                            */
+/*  if iorindice = 1 ---------->  Agrif_Gr % tabvars (12) % var               */
+/*                                                                            */
+/******************************************************************************/
+char *variablenametabvars (variable * var, int iorindice)
+{
+  char *ligne;
+
+  ligne = (char *) malloc (LONG_C * sizeof (char));
+  if ( iorindice == 0 ) sprintf (ligne, " Agrif_Gr %% tabvars(%d)%% var",
+                                 var->v_indicetabvars);
+  else sprintf (ligne, " Agrif_Gr %% tabvars(i)%% var");
+  return ligne;
+}
+
+/******************************************************************************/
+/*                        variablecurgridtabvars                              */
+/******************************************************************************/
+/* This subroutine is used to create the string                               */
+/******************************************************************************/
+/*                                                                            */
+/*  ----------->  Agrif_Curgrid % tabvars (i) % var                           */
+/*                                                                            */
+/******************************************************************************/
+char *variablecurgridtabvars (variable * var,int ParentOrCurgrid)
+{
+  char *ligne;
+
+  ligne = (char *) malloc (LONG_C * sizeof (char));
+  if ( ParentOrCurgrid == 0 ) sprintf (ligne, " Agrif_tabvars(%d) %% var",
+                              var->v_indicetabvars);
+  else if ( ParentOrCurgrid == 1 ) sprintf (ligne,
+                              " Agrif_tabvars(%d) %% parent_var %% var",
+                               var->v_indicetabvars);
+  else if ( ParentOrCurgrid == 2 ) sprintf (ligne,
+                              " Agrif_Mygrid %% tabvars(%d) %% var",
+                               var->v_indicetabvars);
+  else if ( ParentOrCurgrid == 3 ) sprintf (ligne,
+                              " Agrif_Curgrid %% tabvars(%d) %% var",
+                               var->v_indicetabvars);
+  else sprintf (ligne, " AGRIF_Mygrid %% tabvars(%d) %% var",
+                               var->v_indicetabvars);
+  return ligne;
+}
+
+void WARNING_CharSize(variable *var)
+{
+   if ( var->v_nbdim == 0 )
+   {
+      if ( convert2int(var->v_dimchar) > 2050 )
+      {
+         printf("WARNING : The dimension of the character  %s   \n",
+                                                              var->v_nomvar);
+         printf("   is upper than 2050. You must change         \n");
+         printf("   the dimension of carray0                    \n");
+         printf("   in the file AGRIF/AGRIF_FILES/modtypes.F    \n");
+         printf("   line 247. Replace 300 with %d.              \n",
+                                            convert2int(var->v_dimchar)+100);
+      }
+      Save_Length_int(convert2int(var->v_dimchar),1);
+   }
+   else if ( var->v_nbdim == 1 )
+   {
+      if ( convert2int(var->v_dimchar) > 300 )
+      {
+         printf("WARNING : The dimension of the character  %s   \n",
+                                                              var->v_nomvar);
+         printf("   is upper than 300. You must change          \n");
+         printf("   the dimension of carray1                    \n");
+         printf("   in the file AGRIF/AGRIF_FILES/modtypes.F    \n");
+         printf("   line 247. Replace 300 with %d.              \n",
+                                            convert2int(var->v_dimchar)+100);
+      }
+      Save_Length_int(convert2int(var->v_dimchar),2);
+   }
+   else if ( var->v_nbdim == 2 )
+   {
+      if ( convert2int(var->v_dimchar) > 300 )
+      {
+         printf("WARNING : The dimension of the character  %s   \n",
+                                                              var->v_nomvar);
+         printf("   is upper than 300. You must change          \n");
+         printf("   the dimension of carray2                    \n");
+         printf("   in the file AGRIF/AGRIF_FILES/modtypes.F    \n");
+         printf("   line 247. Replace 300 with %d.              \n",
+                                            convert2int(var->v_dimchar)+100);
+      }
+      Save_Length_int(convert2int(var->v_dimchar),3);
+   }
+   else if ( var->v_nbdim == 3 )
+   {
+      if ( convert2int(var->v_dimchar) > 300 )
+      {
+         printf("WARNING : The dimension of the character  %s   \n",
+                                                              var->v_nomvar);
+         printf("   is upper than 300. You must change          \n");
+         printf("   the dimension of carray3                    \n");
+         printf("   in the file AGRIF/AGRIF_FILES/modtypes.F    \n");
+         printf("   line 247. Replace 300 with %d.              \n",
+                                            convert2int(var->v_dimchar)+100);
+      }
+      Save_Length_int(convert2int(var->v_dimchar),4);
+   }
+}
+/******************************************************************************/
+/*                           vargridnametabvars                               */
+/******************************************************************************/
+/* This subroutine is used to create the string                               */
+/******************************************************************************/
+/*                                                                            */
+/*  if iorindice == 0 ----------->  Agrif_Gr % tabvars (i) % var % array1     */
+/*                                                                            */
+/*  if iorindice == 1 ----------->  Agrif_Gr % tabvars (12) % var % array1    */
+/*                                                                            */
+/******************************************************************************/
+char *vargridnametabvars (variable * var,int iorindice)
+{
+  char *tmp;
+  char tmp1[LONG_C];
+
+  tmp = variablenametabvars (var,iorindice);
+  strcpy(tmp1,tmp);
+  if ( todebugfree == 1 ) free(tmp);
+
+  sprintf (lvargridname, "%s", tmp1);
+  if (!strcasecmp (var->v_typevar, "REAL"))
+    {
+      if ( !strcasecmp(var->v_nameinttypename,"8") )
+                           sprintf (lvargridname2, "%% darray%d", var->v_nbdim);
+      else if ( !strcasecmp(var->v_nameinttypename,"4") )
+                           sprintf (lvargridname2, "%% sarray%d", var->v_nbdim);
+      else sprintf (lvargridname2, "%% array%d", var->v_nbdim);
+    }
+  else if (!strcasecmp (var->v_typevar, "INTEGER"))
+    {
+      sprintf (lvargridname2, "%% iarray%d", var->v_nbdim);
+    }
+  else if (!strcasecmp (var->v_typevar, "LOGICAL"))
+    {
+      sprintf (lvargridname2, "%% larray%d", var->v_nbdim);
+    }
+  else if (!strcasecmp (var->v_typevar, "CHARACTER"))
+    {
+      WARNING_CharSize(var);
+      sprintf (lvargridname2, "%% carray%d", var->v_nbdim);
+    }
+
+  strcat (lvargridname, lvargridname2);
+
+  Save_Length(lvargridname,42);
+  Save_Length(lvargridname2,42);
+  return lvargridname;
+}
+
+/******************************************************************************/
+/*                           vargridcurgridtabvars                            */
+/******************************************************************************/
+/* This subroutine is used to create the string                               */
+/******************************************************************************/
+/*                                                                            */
+/* if ParentOrCurgrid == 0 -->  Agrif_Curgrid % tabvars (i) % var % array1    */
+/*                                                                            */
+/* if ParentOrCurgrid == 1 -->  Agrif_tabvars (i) % parent_var %var % array1  */
+/*                                                                            */
+/* if ParentOrCurgrid == 2 -->  Agrif_Gr % tabvars (i) % var % array1         */
+/*                                                                            */
+/******************************************************************************/
+char *vargridcurgridtabvars (variable * var,int ParentOrCurgrid)
+{
+  char *tmp;
+  char tmp1[LONG_C];
+
+ if (!strcasecmp(var->v_typevar,"type"))
+  {
+  strcpy(lvargridname2,"");
+  sprintf(lvargridname,"Agrif_%s_var(Agrif_Curgrid%%fixedrank)%%%s",var->v_modulename,var->v_nomvar);
+  }
+  else
+  {
+  tmp = variablecurgridtabvars (var,ParentOrCurgrid);
+  strcpy(tmp1,tmp);
+  if ( todebugfree == 1 ) free(tmp);
+
+  sprintf (lvargridname, "%s", tmp1);
+  if (!strcasecmp (var->v_typevar, "REAL"))
+    {
+      if ( !strcasecmp(var->v_nameinttypename,"8") )
+                           sprintf (lvargridname2, "%% darray%d", var->v_nbdim);
+      else if ( !strcasecmp(var->v_nameinttypename,"4") )
+                           sprintf (lvargridname2, "%% sarray%d", var->v_nbdim);
+      else sprintf (lvargridname2, "%% array%d", var->v_nbdim);
+    }
+  else if (!strcasecmp (var->v_typevar, "INTEGER"))
+    {
+      sprintf (lvargridname2, "%% iarray%d", var->v_nbdim);
+    }
+  else if (!strcasecmp (var->v_typevar, "LOGICAL"))
+    {
+      sprintf (lvargridname2, "%% larray%d", var->v_nbdim);
+    }
+  else if (!strcasecmp (var->v_typevar, "CHARACTER"))
+    {
+      WARNING_CharSize(var);
+      sprintf (lvargridname2, "%% carray%d", var->v_nbdim);
+    }
+  }
+
+  strcat (lvargridname, lvargridname2);
+
+  Save_Length(lvargridname,42);
+  Save_Length(lvargridname2,42);
+  return lvargridname;
+}
+
+/******************************************************************************/
+/*                  vargridcurgridtabvarswithoutAgrif_Gr                      */
+/******************************************************************************/
+/* This subroutine is used to create the string                               */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+char *vargridcurgridtabvarswithoutAgrif_Gr (variable * var)
+{
+
+  sprintf (lvargridname, "(%d) %% var", var->v_indicetabvars);
+
+  if (!strcasecmp (var->v_typevar, "REAL"))
+    {
+      if ( !strcasecmp(var->v_nameinttypename,"8") )
+                           sprintf (lvargridname2, "%% darray%d", var->v_nbdim);
+      else if ( !strcasecmp(var->v_nameinttypename,"4") )
+                           sprintf (lvargridname2, "%% sarray%d", var->v_nbdim);
+      else sprintf (lvargridname2, "%% array%d", var->v_nbdim);
+    }
+  else if (!strcasecmp (var->v_typevar, "INTEGER"))
+    {
+      sprintf (lvargridname2, "%% iarray%d", var->v_nbdim);
+    }
+  else if (!strcasecmp (var->v_typevar, "LOGICAL"))
+    {
+      sprintf (lvargridname2, "%% larray%d", var->v_nbdim);
+    }
+  else if (!strcasecmp (var->v_typevar, "CHARACTER"))
+    {
+      WARNING_CharSize(var);
+      sprintf (lvargridname2, "%% carray%d", var->v_nbdim);
+    }
+
+  strcat (lvargridname, lvargridname2);
+
+  Save_Length(lvargridname,42);
+  Save_Length(lvargridname2,42);
+  return lvargridname;
+}
+
+/******************************************************************************/
+/*                               vargridparam                                 */
+/******************************************************************************/
+/* This subroutine is used to create the string which contains                */
+/* dimension list                                                             */
+/******************************************************************************/
+/*                                                                            */
+/*  DIMENSION(jpi,0:jpj) ----------->"1:jpi,0:jpj"                            */
+/*                                                                            */
+/******************************************************************************/
+char *vargridparam (variable * v, int whichone)
+{
+  typedim dim;
+  listdim *newdim;
+  char newname[LONG_4C];
+
+  newdim = v->v_dimension;
+  if (!newdim) return "";
+
+  strcpy (tmpvargridname, "(");
+  while (newdim)
+  {
+     dim = newdim->dim;
+
+     strcpy(newname,"");
+     strcpy(newname,
+            ChangeTheInitalvaluebyTabvarsName(dim.first,List_Global_Var,
+                                                                     whichone));
+                                                                     
+        strcpy(newname,ChangeTheInitalvaluebyTabvarsName(newname,
+                       List_Common_Var,whichone));
+
+        strcpy(newname,ChangeTheInitalvaluebyTabvarsName(newname,
+                       List_ModuleUsed_Var,whichone));
+
+     strcat (tmpvargridname, newname);
+     strcat (tmpvargridname, " : ");
+
+     strcpy(newname,"");
+     strcpy(newname,ChangeTheInitalvaluebyTabvarsName
+                        (dim.last,List_Global_Var,whichone));
+                        
+        strcpy(newname,ChangeTheInitalvaluebyTabvarsName
+                       (newname, List_Common_Var,whichone));   
+                       
+        strcpy(newname,ChangeTheInitalvaluebyTabvarsName
+                       (newname, List_ModuleUsed_Var,whichone));                                            
+                        
+     Save_Length(tmpvargridname,46);
+     strcat (tmpvargridname, newname);
+     newdim = newdim->suiv;
+     if (newdim) strcat (tmpvargridname, ",");
+  }
+  strcat (tmpvargridname, ")");
+  strcat (tmpvargridname, "\0");
+  Save_Length(tmpvargridname,40);
+  return tmpvargridname;
+}
+
+/******************************************************************************/
+/*                        write_probdimagrif_file                             */
+/******************************************************************************/
+/* This subroutine is used to create the file probdim_agrif.h                 */
+/******************************************************************************/
+/*                                                                            */
+/*               probdim_agrif.h                                              */
+/*                                                                            */
+/*               Agrif_probdim = <number>                                     */
+/*                                                                            */
+/******************************************************************************/
+void write_probdimagrif_file()
+{
+  FILE *probdim;
+  char ligne[LONG_C];
+
+  probdim = associate("probdim_agrif.h");
+  sprintf (ligne, "Agrif_Probdim = %d", dimprob);
+  tofich (probdim, ligne,1);
+  fclose (probdim);
+}
+
+/******************************************************************************/
+/*                             write_keysagrif_file                           */
+/******************************************************************************/
+/* This subroutine is used to create the file keys_agrif.h                    */
+/******************************************************************************/
+/*                                                                            */
+/*               keys_agrif.h                                                 */
+/*                                                                            */
+/*               AGRIF_USE_FIXED_GRIDS = 0                                    */
+/*               AGRIF_USE_ONLY_FIXED_GRIDS = 0                               */
+/*               AGRIF_USE_(ONLY)_FIXED_GRIDS = 1                             */
+/*                                                                            */
+/******************************************************************************/
+void write_keysagrif_file()
+{
+  FILE *keys;
+
+  keys = associate ("keys_agrif.h");
+  fprintf(keys,"      AGRIF_USE_FIXED_GRIDS = 0\n");
+  fprintf(keys,"      AGRIF_USE_ONLY_FIXED_GRIDS = 0\n");
+  if (fixedgrids     == 1) fprintf(keys,"      AGRIF_USE_FIXED_GRIDS = 1\n");
+  if (onlyfixedgrids == 1)
+                         fprintf(keys,"      AGRIF_USE_ONLY_FIXED_GRIDS = 1\n");
+
+  fclose(keys);
+}
+
+/******************************************************************************/
+/*                      write_modtypeagrif_file                               */
+/******************************************************************************/
+/* This subroutine is used to create the file typedata                        */
+/******************************************************************************/
+/*                                                                            */
+/*               modtype_agrif.h                                              */
+/*                                                                            */
+/*               Agrif_NbVariables =                                          */
+/*                                                                            */
+/******************************************************************************/
+void write_modtypeagrif_file()
+{
+  char ligne[LONG_C];
+  FILE *typedata;
+
+  typedata = associate ("modtype_agrif.h");
+  /* AGRIF_NbVariables : number of variables                                  */
+  sprintf (ligne, "AGRIF_NbVariables = %d",indicemaxtabvars);
+  tofich(typedata,ligne,1);
+  fclose (typedata);
+}
+
+/******************************************************************************/
+/*                   write_createvarnameagrif_file                            */
+/******************************************************************************/
+/* This subroutine is used to create the file  createvarname                  */
+/******************************************************************************/
+/*                                                                            */
+/*    Agrif_Gr % tabvars (i) % var % namevar = "variable"                     */
+/*                                                                            */
+/******************************************************************************/
+void write_createvarnameagrif_file(variable *v,FILE *createvarname,
+                                                       int *InitEmpty)
+{
+  char ligne[LONG_C];
+  char *tmp;
+  char temp1[LONG_C];
+
+  tmp =  variablenametabvars(v,0);
+  strcpy (temp1, tmp);
+  if ( todebugfree == 1 ) free(tmp);
+
+  *InitEmpty = 0 ;
+  sprintf(ligne, "%s %% namevar = \"%s\"",temp1,v->v_nomvar);
+  tofich(createvarname,ligne,1);
+}
+
+/******************************************************************************/
+/*                        write_Setnumberofcells_file                         */
+/******************************************************************************/
+/* This subroutine is used to create the file  setnumberofcells               */
+/******************************************************************************/
+/*                                                                            */
+/*              Agrif_Gr % n(i) = nbmailles                                   */
+/*                                                                            */
+/******************************************************************************/
+void write_Setnumberofcells_file(char *name)
+{
+  char ligne[LONG_C];
+  FILE *setnumberofcells;
+
+  if ( IndicenbmaillesX != 0 )
+  {
+  setnumberofcells=associate(name);
+
+  if (onlyfixedgrids != 1 )
+  {
+  sprintf (ligne,
+           "Agrif_Gr %% nb(1) = Agrif_Gr %% tabvars(%d) %% var %% iarray0",
+           IndicenbmaillesX);
+  }
+  else
+  {
+  sprintf (ligne,
+           "Agrif_Gr %% nb(1) = Agrif_Curgrid %% tabvars(%d) %% var %% iarray0",
+           IndicenbmaillesX);
+  }
+  tofich (setnumberofcells, ligne,1);
+  if (dimprob > 1)
+  {
+     if (onlyfixedgrids != 1 )
+     {
+     sprintf (ligne,
+           "Agrif_Gr %% nb(2) = Agrif_Gr %% tabvars(%d) %% var %% iarray0",
+           IndicenbmaillesY);
+     }
+     else
+     {
+     sprintf (ligne,
+           "Agrif_Gr %% nb(2) = Agrif_Curgrid %% tabvars(%d) %% var %% iarray0",
+           IndicenbmaillesY);
+     }
+
+     tofich (setnumberofcells, ligne,1);
+  }
+  if (dimprob > 2)
+  {
+     if (onlyfixedgrids != 1 )
+     {
+     sprintf (ligne,
+           "Agrif_Gr %% nb(3) = Agrif_Gr %% tabvars(%d) %% var %% iarray0",
+           IndicenbmaillesZ);
+     }
+     else
+     {
+     sprintf (ligne,
+           "Agrif_Gr %% nb(3) = Agrif_Curgrid %% tabvars(%d) %% var %% iarray0",
+           IndicenbmaillesZ);
+     }
+     tofich (setnumberofcells, ligne,1);
+  }
+
+  fclose (setnumberofcells);
+  }
+}
+
+/******************************************************************************/
+/*                       write_Getnumberofcells_file                          */
+/******************************************************************************/
+/* This subroutine is used to create the file  getnumberofcells               */
+/******************************************************************************/
+/*                                                                            */
+/*              nbmailles = Agrif_Gr % n(i)                                   */
+/*                                                                            */
+/******************************************************************************/
+void write_Getnumberofcells_file(char *name)
+{
+  char ligne[LONG_C];
+  FILE *getnumberofcells;
+
+  if ( IndicenbmaillesX != 0 )
+  {
+  getnumberofcells=associate(name);
+  sprintf (ligne,
+           "Agrif_Curgrid %% tabvars(%d) %% var %% iarray0 = Agrif_Gr %% nb(1)",
+           IndicenbmaillesX);
+  tofich (getnumberofcells, ligne,1);
+  if (dimprob > 1)
+    {
+      sprintf (ligne,
+           "Agrif_Curgrid %% tabvars(%d) %% var %% iarray0 = Agrif_Gr %% nb(2)",
+           IndicenbmaillesY);
+      tofich (getnumberofcells, ligne,1);
+    }
+  if (dimprob > 2)
+    {
+      sprintf (ligne,
+           "Agrif_Curgrid %% tabvars(%d) %% var %% iarray0 = Agrif_Gr %% nb(3)",
+           IndicenbmaillesZ);
+      tofich (getnumberofcells, ligne,1);
+    }
+  fclose (getnumberofcells);
+  }
+}
+
+
+/******************************************************************************/
+/*                      write_initialisationsagrif_file                       */
+/******************************************************************************/
+/* This subroutine is used to create the file initproc                        */
+/******************************************************************************/
+/*                                                                            */
+/*              ! variable                                                    */
+/*              Agrif_Gr % tabvars(i) % var % nbdim = 1                       */
+/*                                                                            */
+/******************************************************************************/
+void write_initialisationsagrif_file(variable *v,FILE *initproc,
+                                     int *VarnameEmpty)
+{
+  char ligne[LONG_C];
+  char temp1[LONG_C];
+  char *tmp;
+
+  tmp = variablenameroottabvars (v);
+  strcpy (temp1, tmp);
+  if ( todebugfree == 1 ) free(tmp);
+
+  if ( v->v_nbdim != 0 )
+  {
+     *VarnameEmpty = 0 ;
+     sprintf (ligne, "%s %% nbdim = %d", temp1, v->v_nbdim);
+     tofich (initproc, ligne,1);
+  }
+}
+
+
+void Write_Alloc_Agrif_Files()
+{
+   listnom *parcours;
+   FILE *alloccalls;
+   FILE *AllocUSE;
+
+   AllocUSE= associate("include_use_Alloc_agrif.h");
+   alloccalls = associate("allocations_calls_agrif.h");
+
+   parcours = List_Subroutine_For_Alloc;
+   while ( parcours )
+   {
+      fprintf(AllocUSE,"      USE %s\n", parcours -> o_nom );
+      fprintf (alloccalls,"      Call Alloc_agrif_%s(Agrif_Gr)\n",
+                                                            parcours -> o_nom );
+      parcours = parcours -> suiv;
+   }
+
+   fclose (AllocUSE);
+   fclose (alloccalls);
+}
+
+int IndiceInlist(int indic, listindice *listin)
+{
+   listindice *parcoursindic;
+   int out;
+
+   out = 0 ;
+
+   parcoursindic = listin;
+   while ( parcoursindic && out == 0 )
+   {
+      if ( parcoursindic->i_indice == indic ) out = 1;
+      else parcoursindic = parcoursindic -> suiv;
+   }
+
+   return out;
+}
+void write_allocation_Common_0()
+{
+   listnom *parcours_nom;
+   listnom *neededparameter;
+   listvar *parcours;
+   listvar *parcoursprec;
+   listvar *parcours1;
+   FILE *allocationagrif;
+   FILE *paramtoamr;
+   char ligne[LONGNOM];
+   variable *v;
+   int IndiceMax;
+   int IndiceMin;
+   int compteur;
+   int out;
+   int indiceprec;
+   int ValeurMax;
+   char initialvalue[LONG_4C];
+   listindice *list_indic;
+   listindice *parcoursindic;
+   int i;
+
+   parcoursprec = (listvar *)NULL;
+   parcours_nom = List_NameOfCommon;
+   ValeurMax = 2;
+   while ( parcours_nom  )
+   {
+      /*                                                                      */
+      if ( parcours_nom->o_val == 1 )
+      {
+         /* Open the file to create the Alloc_agrif subroutine                */
+         sprintf(ligne,"alloc_agrif_%s.h",parcours_nom->o_nom);
+         allocationagrif = associate (ligne);
+         /*                                                                   */
+         fprintf(allocationagrif,"#include \"Param_toamr_%s.h\" \n",
+                                                           parcours_nom->o_nom);
+         /*                                                                   */
+         sprintf(ligne,"Param_toamr_%s.h",parcours_nom->o_nom);
+         paramtoamr = associate (ligne);
+         neededparameter = (listnom * )NULL;
+         /*                                                                   */
+         list_indic = (listindice *)NULL;
+         /*                                                                   */
+         shouldincludempif = 1 ;
+         parcours = List_Common_Var;
+         while ( parcours )
+         {
+            if ( !strcasecmp(parcours->var->v_commonname,parcours_nom->o_nom) &&
+                  IndiceInlist(parcours->var->v_indicetabvars,list_indic) == 0
+               )
+            {
+               /***************************************************************/
+               /***************************************************************/
+               /***************************************************************/
+               v = parcours->var;
+               IndiceMax = 0;
+               IndiceMin = indicemaxtabvars;
+  /* body of the file                                                         */
+  if ( !strcasecmp(v->v_commoninfile,mainfile) )
+  {
+     if (onlyfixedgrids != 1 && v->v_nbdim!=0)
+     {
+        strcpy (ligne, "If (.not. associated(");
+        strcat (ligne, vargridnametabvars(v,0));
+        strcat (ligne, "))                       then");
+        Save_Length(ligne,48);
+        tofich (allocationagrif, ligne,1);
+     }
+     if ( v->v_allocatable != 1 && ( v->v_dimsempty != 1) )
+     {
+        /*                ALLOCATION                                          */
+        if ( v->v_dimension != 0  )
+        {
+           if ( v->v_indicetabvars < IndiceMin ||
+                v->v_indicetabvars > IndiceMax )
+           {
+              parcours1 = parcours;
+              compteur = -1;
+              out = 0;
+              indiceprec = parcours->var->v_indicetabvars -1 ;
+              while ( parcours1 && out == 0 &&
+                      !strcasecmp(  parcours->var->v_readedlistdimension,
+                                  parcours1->var->v_readedlistdimension) &&
+                      !strcasecmp(  parcours->var->v_typevar,
+                                  parcours1->var->v_typevar) &&
+                            ( parcours1->var->v_indicetabvars == indiceprec+1 )
+                     )
+              {
+
+               if ( !strcasecmp(parcours1->var->v_modulename,
+                                parcours_nom->o_nom) ||
+                    !strcasecmp(parcours1->var->v_commonname,
+                                parcours_nom->o_nom) )
+                 {
+                      compteur = compteur +1 ;
+                      indiceprec = parcours1->var->v_indicetabvars;
+                      parcoursprec = parcours1;
+                      parcours1 = parcours1->suiv;
+                 }
+                 else out = 1;
+              }
+
+              if ( compteur > ValeurMax )
+              {
+                 fprintf(allocationagrif,"      DO i = %d , %d\n",
+                                         parcours->var->v_indicetabvars,
+                                       parcours->var->v_indicetabvars+compteur);
+                 IndiceMin = parcours->var->v_indicetabvars;
+                 IndiceMax = parcours->var->v_indicetabvars+compteur;
+                 strcpy (ligne, "allocate ");
+                 strcat (ligne, "(");
+                 strcat (ligne, vargridnametabvars(v,1));
+                 strcat (ligne, vargridparam(v,0));
+                 strcat (ligne, ")");
+                 Save_Length(ligne,48);
+                 tofich (allocationagrif, ligne,1);
+                 fprintf(allocationagrif,"      end do\n");
+                 i=parcours->var->v_indicetabvars;
+                 do
+                 {
+                    parcoursindic =  (listindice *)malloc(sizeof(listindice));
+                    parcoursindic -> i_indice = i;
+                    parcoursindic -> suiv = list_indic;
+                    list_indic = parcoursindic;
+                    i = i + 1;
+                 } while ( i <= parcours->var->v_indicetabvars+compteur );
+                 parcours = parcoursprec;
+                 /*                                                           */
+              }
+              else
+              {
+                 strcpy (ligne, "allocate ");
+                 strcat (ligne, "(");
+                 strcat (ligne, vargridnametabvars(v,0));
+                 strcat (ligne, vargridparam(v,0));
+                 strcat (ligne, ")");
+                 Save_Length(ligne,48);
+                 tofich (allocationagrif, ligne,1);
+                 /*                                                           */
+                 parcoursindic =  (listindice *)malloc(sizeof(listindice));
+                 parcoursindic -> i_indice = parcours->var->v_indicetabvars;
+                 parcoursindic -> suiv = list_indic;
+                 list_indic = parcoursindic;
+              }
+                neededparameter = writedeclarationintoamr(List_Parameter_Var,
+                              paramtoamr,v,parcours_nom->o_nom,neededparameter,
+                                                               v->v_commonname);
+              /*                                                              */
+           }
+        } /* end of the allocation part                                       */
+        /*                INITIALISATION                                      */
+        if ( strcasecmp(v->v_initialvalue,"") )
+        {
+           strcpy (ligne, "");
+           strcat (ligne, vargridnametabvars(v,0));
+           /* We should modify the initialvalue in the case of variable has   */
+           /*    been defined with others variables                           */
+                      
+           strcpy(initialvalue,
+                  ChangeTheInitalvaluebyTabvarsName
+                                      (v->v_initialvalue,List_Global_Var,0));
+           if ( !strcasecmp(initialvalue,v->v_initialvalue) )
+           {
+              strcpy(initialvalue,"");
+              strcpy(initialvalue,ChangeTheInitalvaluebyTabvarsName
+                                      (v->v_initialvalue,List_Common_Var,0));
+           }
+           if ( !strcasecmp(initialvalue,v->v_initialvalue) )
+           {
+              strcpy(initialvalue,"");
+              strcpy(initialvalue,ChangeTheInitalvaluebyTabvarsName
+                                     (v->v_initialvalue,List_ModuleUsed_Var,0));
+           }
+           strcat (ligne," = ");
+           strcat (ligne,initialvalue);
+           /*                                                                 */
+           Save_Length(ligne,48);
+           tofich (allocationagrif, ligne,1);
+        }
+     }
+     if (onlyfixedgrids != 1 && v->v_nbdim!=0)
+     {
+        strcpy (ligne, "   End if");
+        tofich (allocationagrif, ligne,1);
+     }
+  }
+               /***************************************************************/
+               /***************************************************************/
+               /***************************************************************/
+            }
+            parcours = parcours -> suiv;
+         }
+         /* Close the file Alloc_agrif                                        */
+         fclose(allocationagrif);
+         fclose(paramtoamr);
+      }
+      /*                                                                      */
+      parcours_nom = parcours_nom -> suiv;
+   }
+
+}
+
+
+
+void write_allocation_Global_0()
+{
+   listnom *parcours_nom;
+   listvar *parcours;
+   listvar *parcoursprec;
+   listvar *parcours1;
+   FILE *allocationagrif;
+   char ligne[LONGNOM];
+   variable *v;
+   int IndiceMax;
+   int IndiceMin;
+   int compteur;
+   int out;
+   int indiceprec;
+   int ValeurMax;
+   char initialvalue[LONG_4C];
+   int typeiswritten ;
+
+   parcoursprec = (listvar *)NULL;
+   parcours_nom = List_NameOfModule;
+   ValeurMax = 2;
+   while ( parcours_nom  )
+   {
+      /*                                                                      */
+      if ( parcours_nom->o_val == 1 )
+      {
+         IndiceMax = 0;
+         IndiceMin = indicemaxtabvars;
+         /* Open the file to create the Alloc_agrif subroutine                */
+         sprintf(ligne,"alloc_agrif_%s.h",parcours_nom->o_nom);
+         allocationagrif = associate (ligne);
+         /*                                                                   */
+         if ( ModuleIsDefineInInputFile(parcours_nom->o_nom) == 1 )
+         {
+             /* add the call to initworkspace                                 */
+            tofich(allocationagrif,"if ( .NOT. Agrif_Root() ) then ",1);
+            fprintf(allocationagrif,"#include \"GetNumberofcells.h\" \n");
+            tofich(allocationagrif,"else ",1);
+            fprintf(allocationagrif,"#include \"SetNumberofcells.h\" \n");
+            tofich(allocationagrif,"endif ",1);
+            tofich(allocationagrif,"Call Agrif_InitWorkspace ",1);
+         }
+
+         typeiswritten = 0;
+
+         parcours = List_Global_Var;
+         while ( parcours )
+         {
+            if ( !strcasecmp(parcours->var->v_modulename,parcours_nom->o_nom) &&
+                 parcours->var->v_VariableIsParameter == 0                  &&
+                 parcours->var->v_notgrid == 0                              &&
+                 !strcasecmp(parcours->var->v_modulename,parcours_nom->o_nom)  )
+            {
+               /***************************************************************/
+               /***************************************************************/
+               /***************************************************************/
+               v = parcours->var;
+               IndiceMax = 0;
+               IndiceMin = indicemaxtabvars;
+  /* body of the file                                                         */
+  if ( !strcasecmp(v->v_commoninfile,mainfile) )
+  {
+     if (onlyfixedgrids != 1 && v->v_nbdim!=0)
+     {
+        strcpy (ligne, "If (.not. associated(");
+        strcat (ligne, vargridnametabvars(v,0));
+        strcat (ligne, "))                       then");
+        Save_Length(ligne,48);
+        tofich (allocationagrif, ligne,1);
+     }
+     if ( v->v_allocatable != 1 && ( v->v_dimsempty != 1) )
+     {
+        /*                ALLOCATION                                          */
+        if ( v->v_dimension != 0  )
+        {
+           if ( v->v_indicetabvars < IndiceMin ||
+                v->v_indicetabvars > IndiceMax )
+           {
+              parcours1 = parcours;
+              compteur = -1;
+              out = 0;
+              indiceprec = parcours->var->v_indicetabvars -1 ;
+              while ( parcours1 && out == 0 &&
+                      !strcasecmp(  parcours->var->v_readedlistdimension,
+                                  parcours1->var->v_readedlistdimension) &&
+                      !strcasecmp(  parcours->var->v_typevar,
+                                  parcours1->var->v_typevar) &&
+                             ( parcours1->var->v_indicetabvars == indiceprec+1 )
+                     )
+              {
+
+               if ( !strcasecmp(parcours1->var->v_modulename,
+                                parcours_nom->o_nom) ||
+                    !strcasecmp(parcours1->var->v_commonname,
+                                parcours_nom->o_nom) )
+                 {
+                      compteur = compteur +1 ;
+                      indiceprec = parcours1->var->v_indicetabvars;
+                      parcoursprec = parcours1;
+                      parcours1 = parcours1->suiv;
+                 }
+                 else out = 1;
+              }
+              if ( compteur > ValeurMax )
+              {
+                 fprintf(allocationagrif,"      DO i = %d , %d\n",
+                                          parcours->var->v_indicetabvars,
+                                       parcours->var->v_indicetabvars+compteur);
+                 IndiceMin = parcours->var->v_indicetabvars;
+                 IndiceMax = parcours->var->v_indicetabvars+compteur;
+                 strcpy (ligne, "allocate ");
+                 strcat (ligne, "(");
+                 strcat (ligne, vargridnametabvars(v,1));
+                 strcat (ligne, vargridparam(v,0));
+                 strcat (ligne, ")");
+                 Save_Length(ligne,48);
+                 tofich (allocationagrif, ligne,1);
+                 fprintf(allocationagrif,"      end do\n");
+                 parcours = parcoursprec;
+              }
+              else
+              {
+                 strcpy (ligne, "allocate ");
+                 strcat (ligne, "(");
+                 strcat (ligne, vargridnametabvars(v,0));
+                 strcat (ligne, vargridparam(v,0));
+                 strcat (ligne, ")");
+                 Save_Length(ligne,48);
+                 tofich (allocationagrif, ligne,1);
+              }
+           }
+        } /* end of the allocation part                                       */
+
+        /*                INITIALISATION                                      */
+        if ( strcasecmp(v->v_initialvalue,"") )
+        {
+           strcpy (ligne, "");
+           strcat (ligne, vargridnametabvars(v,0));
+           /* We should modify the initialvalue in the case of variable has   */
+           /*    been defined with others variables                           */
+
+           strcpy(initialvalue,
+                  ChangeTheInitalvaluebyTabvarsName
+                                      (v->v_initialvalue,List_Global_Var,0));
+           if ( !strcasecmp(initialvalue,v->v_initialvalue) )
+           {
+              strcpy(initialvalue,"");
+              strcpy(initialvalue,ChangeTheInitalvaluebyTabvarsName
+                                      (v->v_initialvalue,List_Common_Var,0));
+           }
+           if ( !strcasecmp(initialvalue,v->v_initialvalue) )
+           {
+              strcpy(initialvalue,"");
+              strcpy(initialvalue,ChangeTheInitalvaluebyTabvarsName
+                                     (v->v_initialvalue,List_ModuleUsed_Var,0));
+           }
+           strcat (ligne," = ");
+           strcat (ligne,initialvalue);
+           /*                                                                 */
+           Save_Length(ligne,48);
+           tofich (allocationagrif, ligne,1);
+        }
+     }
+/* Case of structure types */
+        if ((typeiswritten == 0) && !strcasecmp(v->v_typevar,"type"))
+        {
+        sprintf(ligne,"If (.Not.Allocated(Agrif_%s_var)) Then",v->v_modulename);
+        tofich(allocationagrif, ligne, 1);
+        sprintf(ligne,"Allocate(Agrif_%s_var(0:Agrif_NbMaxGrids))",v->v_modulename);
+        tofich(allocationagrif, ligne, 1);
+        strcpy(ligne,"End If");
+        tofich(allocationagrif, ligne, 1);
+        typeiswritten = 1;
+        }
+     if (onlyfixedgrids != 1 && v->v_nbdim!=0)
+     {
+        strcpy (ligne, "   End if");
+        tofich (allocationagrif, ligne,1);
+     }
+  }
+               /***************************************************************/
+               /***************************************************************/
+               /***************************************************************/
+            }
+            parcours = parcours -> suiv;
+         }
+         /*                                                                   */
+         if ( ModuleIsDefineInInputFile(parcours_nom->o_nom) == 1 )
+         {
+            /* add the call to initworkspace                                  */
+            tofich(allocationagrif,"if ( .NOT. Agrif_Root() ) then ",1);
+            fprintf(allocationagrif,"#include \"GetNumberofcells.h\" \n");
+            tofich(allocationagrif,"else ",1);
+            fprintf(allocationagrif,"#include \"SetNumberofcells.h\" \n");
+            tofich(allocationagrif,"endif ",1);
+            tofich(allocationagrif,"Call Agrif_InitWorkspace ",1);
+         }
+         /* Close the file Alloc_agrif                                        */
+         fclose(allocationagrif);
+      } /* end parcours_nom == 1                                              */
+      /*                                                                      */
+      parcours_nom = parcours_nom -> suiv;
+   }
+}
+
+/******************************************************************************/
+/*                           creefichieramr                                   */
+/******************************************************************************/
+/* This subroutine is the main one to create AGRIF_INC files                  */
+/******************************************************************************/
+/*                                                                            */
+/******************************************************************************/
+void creefichieramr (char *NameTampon)
+{
+  listvar *newvar;
+  variable *v;
+  int erreur;
+  char filefich[LONG_C];
+  char ligne[LONG_C];
+  int IndiceMax;
+  int IndiceMin;
+  int InitEmpty;
+  int VarnameEmpty;
+  int donotwrite;
+
+  FILE *initproc;
+  FILE *initglobal;
+  FILE *createvarname;
+  FILE *createvarnameglobal;
+
+  if ( todebug == 1 ) printf("Enter in creefichieramr\n");
+  strcpy (filefich, "cd ");
+  strcat (filefich, nomdir);
+  erreur = system (filefich);
+  if (erreur)
+  {
+     strcpy (filefich, "mkdir ");
+     strcat (filefich, nomdir);
+     system (filefich);
+     printf ("%s: Directory created\n", nomdir);
+  }
+
+/******************************************************************************/
+/******************** Creation of AGRIF_INC files *****************************/
+/******************************************************************************/
+
+/*----------------------------------------------------------------------------*/
+  if ( todebug == 1 )
+  {
+     strcpy(ligne,"initialisations_agrif_");
+     strcat(ligne,NameTampon);
+     strcat(ligne,".h");
+     initproc = associate (ligne);
+/*----------------------------------------------------------------------------*/
+     strcpy(ligne,"createvarname_agrif_");
+     strcat(ligne,NameTampon);
+     strcat(ligne,".h");
+     createvarname = associate (ligne);
+/*----------------------------------------------------------------------------*/
+     InitEmpty = 1 ;
+     VarnameEmpty = 1 ;
+
+     newvar = List_Global_Var;
+     while ( newvar && todebug == 1 )
+     {
+        donotwrite = 0;
+        v = newvar->var;
+
+        if ( ( v->v_common == 1 || v->v_module == 1 ) && donotwrite == 0 )
+        {
+          write_createvarnameagrif_file(v,createvarname,&VarnameEmpty);
+          write_initialisationsagrif_file(v,initproc,&InitEmpty);
+        }
+        newvar = newvar->suiv;
+     }
+  /*                                                                          */
+     fclose (createvarname);
+     fclose (initproc);
+  /*--------------------------------------------------------------------------*/
+     if ( Did_filetoparse_readed(curmodulename) == 0 )
+     {
+        if ( InitEmpty != 1  )
+        {
+           initglobal = associateaplus("initialisations_agrif.h");
+           strcpy(ligne,"#include \"initialisations_agrif_");
+           strcat(ligne,NameTampon);
+           strcat(ligne,".h\"\n");
+           fprintf(initglobal,ligne);
+           fclose(initglobal);
+        }
+  /*--------------------------------------------------------------------------*/
+        if ( VarnameEmpty != 1 )
+        {
+           createvarnameglobal= associateaplus("createvarname_agrif.h");
+           strcpy(ligne,"#include \"createvarname_agrif_");
+           strcat(ligne,NameTampon);
+           strcat(ligne,".h\"\n");
+           fprintf(createvarnameglobal,ligne);
+           fclose(createvarnameglobal);
+        }
+     }
+  }
+/*----------------------------------------------------------------------------*/
+/*----------------------------------------------------------------------------*/
+/*----------------------------------------------------------------------------*/
+/*----------------------------------------------------------------------------*/
+/*----------------------------------------------------------------------------*/
+  IndiceMax = 0;
+  IndiceMin = 0;
+
+  write_allocation_Common_0();
+  write_allocation_Global_0();
+
+  Write_Alloc_Agrif_Files();
+  write_probdimagrif_file();
+  write_keysagrif_file();
+  write_modtypeagrif_file();
+  if ( NbMailleXDefined == 1 )
+                             write_Setnumberofcells_file("SetNumberofcells.h");
+  if ( NbMailleXDefined == 1 )
+                             write_Getnumberofcells_file("GetNumberofcells.h");
+  retour77 = 0;
+  if ( NbMailleXDefined == 1 )
+                          write_Setnumberofcells_file("SetNumberofcellsFree.h");
+  if ( NbMailleXDefined == 1 )
+                          write_Getnumberofcells_file("GetNumberofcellsFree.h");
+  retour77 = 1;
+  if ( NbMailleXDefined == 1 )
+                         write_Setnumberofcells_file("SetNumberofcellsFixed.h");
+  if ( NbMailleXDefined == 1 )
+                         write_Getnumberofcells_file("GetNumberofcellsFixed.h");
+  if ( todebug == 1 ) printf("Out of creefichieramr\n");
+}
Index: /vendors/AGRIF/r_00/agrif_opa.in
===================================================================
--- /vendors/AGRIF/r_00/agrif_opa.in	(revision 1902)
+++ /vendors/AGRIF/r_00/agrif_opa.in	(revision 1902)
@@ -0,0 +1,12 @@
+% Number of cells in each direction %
+ 2D nbcellsx,nbcellsy;
+% Name of the common file : an include file (paramfile) OR a module (parammodule) %  
+ parammodule par_oce ;
+
+USE ONLY_FIXED_GRIDS;
+
+% Variables which are not grid dependent %
+% notgriddep :: name of the variable; %
+notgriddep :: nstop;
+
+%USE DEBUG;%
Index: /vendors/AGRIF/r_00/efface
===================================================================
--- /vendors/AGRIF/r_00/efface	(revision 1902)
+++ /vendors/AGRIF/r_00/efface	(revision 1902)
@@ -0,0 +1,9 @@
+rm -f AGRIF_INC/*
+rm -f AGRIF_MODELFILES/*
+rm -f AGRIF_OBJS/*
+rm -f AGRIF_YOURFILES/*
+rm -f SORTIE/*
+
+rm -f .depend*
+rm -f .agrif*
+rm -f LIB/*.o
