diff --git a/NonLinearSolver/BoundaryConditions/nonLinearBC.h b/NonLinearSolver/BoundaryConditions/nonLinearBC.h
index 3e080f76117e910932f61708481f5d6f383bfc96..824855eb512845a343f551cbfffb880b97e33677 100644
--- a/NonLinearSolver/BoundaryConditions/nonLinearBC.h
+++ b/NonLinearSolver/BoundaryConditions/nonLinearBC.h
@@ -22,6 +22,7 @@
 #include "solverAlgorithms.h" // change this
 #include "pbcVertex.h"
 #include "nonLinearMicroBC.h"
+#include "vertexGroupOperation.h"
 #endif
 class partDomain;
 
@@ -30,7 +31,7 @@ class nonLinearBoundaryCondition
  public:
   enum whichCondition{position=0, velocity=1, acceleration=2};
   enum location{UNDEF,ON_VERTEX,ON_EDGE,ON_FACE,ON_VOLUME,RIGIDCONTACT,ON_FACE_VERTEX};
-  enum type{DIRICHLET, NEUMANN,INITIAL,PERIODIC,CONSTRAINT,RCONTACT,SAMEDISP,FIXONFACE,ALIGN};
+  enum type{DIRICHLET, NEUMANN,INITIAL,PERIODIC,CONSTRAINT,RCONTACT,SAMEDISP,FIXONFACE,ALIGN,LINEARCONSTRAINT};
   #ifndef SWIG
   location onWhat; // on vertices or elements
   int _tag; // tag for the dofManager or Physical number of BC
@@ -248,6 +249,44 @@ class nonLinearPeriodicBCBetweenTwoGroups : public nonLinearBoundaryCondition{
 	}
 };
 
+class nonLinearLinearConstraintBCBetweenTwoGroups : public nonLinearBoundaryCondition{
+ public:
+  int comp;
+  groupOfElements* gMaster, *gSlave;
+  linearCombinationOfVertices* rightHandSide;
+  vertexGroupOperation* vgOperation;
+  setInt excludedVertices;
+  double slaveFactor;
+  
+
+  virtual nonLinearBoundaryCondition::type getType() const {return nonLinearBoundaryCondition::LINEARCONSTRAINT;}
+  nonLinearLinearConstraintBCBetweenTwoGroups():nonLinearBoundaryCondition(),comp(0),gMaster(NULL),gSlave(NULL),rightHandSide(NULL),
+                vgOperation(NULL),slaveFactor(1.),excludedVertices(){};
+  nonLinearLinearConstraintBCBetweenTwoGroups(const nonLinearLinearConstraintBCBetweenTwoGroups& src) : nonLinearBoundaryCondition(src){
+   this->comp = src.comp;
+   this->gMaster = src.gMaster;
+   this->gSlave = src.gSlave;
+   this->rightHandSide = NULL;
+   if (src.rightHandSide)
+   {
+     this->rightHandSide = src.rightHandSide->clone();
+   }
+   this->vgOperation = NULL;
+   if (src.vgOperation != NULL)
+   {
+     this->vgOperation = src.vgOperation->clone();
+   }
+   this->slaveFactor = src.slaveFactor;
+   excludedVertices.copyData(src.excludedVertices);
+  }
+  virtual ~nonLinearLinearConstraintBCBetweenTwoGroups(){
+		if (gMaster!=NULL){delete gMaster; gMaster = NULL;}
+		if (gSlave!=NULL){delete gSlave; gSlave = NULL;};
+    if (rightHandSide!=NULL) {delete rightHandSide; rightHandSide = NULL;}
+    if (vgOperation!=NULL) {delete vgOperation; vgOperation = NULL;};
+	}
+}; 
+
 class nonLinearAveragePeriodicBCBetweenTwoGroups : public nonLinearBoundaryCondition{
  public:
   int comp;
diff --git a/NonLinearSolver/Domain/partDomain.cpp b/NonLinearSolver/Domain/partDomain.cpp
index 62d7d653934a554cae88cc931780a0d534756386..e1052cfb1e749c1fb06021c50d40f97633004865 100644
--- a/NonLinearSolver/Domain/partDomain.cpp
+++ b/NonLinearSolver/Domain/partDomain.cpp
@@ -1331,6 +1331,7 @@ void dgPartDomain::numberValuesToTransfertMPI(AllIPState *aips,int* sizeeachrank
          IPStateBase* ipsm = (*vips)[j];
          // take initial but supposed same value to transfert for all (so transfert only once)
          IPVariable *ipvm = static_cast<IPVariableMechanics*>(ipsm->getState(IPStateBase::initial));
+         //Msg::Error("numberValuesToTransfertMPI %d",ipvm->numberValuesToCommunicateMPI());
          nvc += ipvm->numberValuesToCommunicateMPI();
       }
       if(nvc!=0) // otherwise no value to communicate
diff --git a/NonLinearSolver/field/energyField.cpp b/NonLinearSolver/field/energyField.cpp
index 09032e23d13a44a397641bf7e4f45356803a8624..e2b96eb790e45c6d766b0c47cfafd912aeb84e77 100644
--- a/NonLinearSolver/field/energyField.cpp
+++ b/NonLinearSolver/field/energyField.cpp
@@ -59,7 +59,7 @@ void energeticField::openFiles(const std::string energyFile, const std::string e
       fprintf(fpenergy,"Time;Kinetic;Deformation;Plastic;Wext;Damage;Total;LocalPathFollowing\n");
     }
   }
-  
+
   if(_fractureEnergyComputation>0)
 	{
     std::string fname;
@@ -91,12 +91,12 @@ energeticField::energeticField(nonLinearMechSolver* sl, std::vector<dataBuildVie
                                const int energyComp,const int fracComp,
                                nonLinearMechSolver::scheme myscheme,
                                const std::string fileName,
-                               const std::string energyFile, 
+                               const std::string energyFile,
                                const std::string eneryFractureFile) : elementsField(fileName,1,dbview_),
                                                        _dynamics((myscheme == nonLinearMechSolver::StaticLinear ||
                                                                   myscheme == nonLinearMechSolver::StaticNonLinear) ? false : true),
                                                        _energyComputation(energyComp),_fractureEnergyComputation(fracComp),
-                                                        _wext(0.), _rigidContactFilter(),fpenergy(NULL), _systemSizeWithoutRigidContact(0), 
+                                                        _wext(0.), _rigidContactFilter(),fpenergy(NULL), _systemSizeWithoutRigidContact(0),
                                                         fpfrac(NULL), _solver(sl), _lastSaveEnergyStep(0),_lastSaveFractureEnergyStep(0),
                                                         _energyFilePrefix(energyFile), eneryFractureFilePrefix(eneryFractureFile)
 {
@@ -107,9 +107,9 @@ energeticField::energeticField(nonLinearMechSolver* sl, std::vector<dataBuildVie
   {
     _numStepBetweenTwoViews = _solver->getStepBetweenArchiving();
   }
-  
+
   openFiles(_energyFilePrefix,eneryFractureFilePrefix);
-	
+
 	// set system size without rigid contact
 	if(_solver->getStaticDofManager() !=NULL)
 	{
@@ -264,7 +264,7 @@ double energeticField::pathFollowingLocalValue(MElement *ele, const partDomain *
     }
     else{
       return _solver->getIPField()->computeBulkPathFollowingLocalValue(ele,dom,IPStateBase::current);
-    }    
+    }
   }
   else{
     return 0.;
@@ -294,7 +294,7 @@ void energeticField::externalWork()const{ // for multiSystem takes only the firs
 		lsys = multiDof->getManager(0)->getLinearSystem(Aname);
 	}
 	nonLinearSystem<double>* nlsys = dynamic_cast<nonLinearSystem<double>*>(lsys);
-	
+
   if(nlsys!=NULL){
     Deltawext = 2*nlsys->getExternalWork(_systemSizeWithoutRigidContact); // as we divided the value by 2 later !!!
 
@@ -426,12 +426,12 @@ void energeticField::archive(const double time,const int step, const bool forceV
       _energy[4] = this->damageEnergy();
       _energy[5] = _energy[0]+_energy[1];
 			_energy[6] = this->pathFollowingLocalValue();
-			
-      fprintf(fpenergy,"%e;%e;%e;%e;%e;%e;%e;%e;\n",time,_energy[0], _energy[1], _energy[2], _energy[3],_energy[4],_energy[5],_energy[6]);
+
+      fprintf(fpenergy,"%e;%e;%e;%e;%e;%e;%e;%e\n",time,_energy[0], _energy[1], _energy[2], _energy[3],_energy[4],_energy[5],_energy[6]);
       fflush(fpenergy);
     }
   }
-  
+
   if ((step > _lastSaveFractureEnergyStep) and (_fractureEnergyComputation > 0))
   {
     if (forceView or (step%_fractureEnergyComputation==0))
diff --git a/NonLinearSolver/field/nlsField.h b/NonLinearSolver/field/nlsField.h
index acaf5027f9cef1e820d13ba39c6e13751eb3f6c5..57c406d10801762291813aed8d11a94a30281f22 100644
--- a/NonLinearSolver/field/nlsField.h
+++ b/NonLinearSolver/field/nlsField.h
@@ -24,7 +24,7 @@ class nonLinearMechSolver;
 #endif // SWIG
 class nlsField{
   public:
-    typedef enum {crude=10000, mean=10001, max=10002, min=10003} ElemValue; // enum to select a particular value on element
+    typedef enum {crude=10000, mean=10001, max=10002, min=10003, increment=10004, rate=10005} ElemValue; // enum to select a particular value on element
 #ifndef SWIG
     // struct to keep necessary data to build a view
     struct dataBuildView{
diff --git a/NonLinearSolver/internalPoints/CMakeLists.txt b/NonLinearSolver/internalPoints/CMakeLists.txt
index ebab3f35405e87c5b24910df2c8217b096f7fcce..61d58e69c5bbc639cc85db48db259240403c0b6b 100644
--- a/NonLinearSolver/internalPoints/CMakeLists.txt
+++ b/NonLinearSolver/internalPoints/CMakeLists.txt
@@ -41,6 +41,7 @@ set(SRC
   ipEOS.cpp
   ipUMATInterface.cpp
   ipCrystalPlasticity.cpp
+  ipGursonUMAT.cpp
   ipAnIsotropicElecTherMech.cpp
   ipHyperelastic.cpp
   ipNonLocalDamageHyperelastic.cpp
@@ -48,6 +49,7 @@ set(SRC
   ipKinematicHardening.cpp
   ipAnIsotropicTherMech.cpp
   ipCluster.cpp
+  ipTFA.cpp
   ipVoidState.cpp
 )
 
diff --git a/NonLinearSolver/internalPoints/ipField.cpp b/NonLinearSolver/internalPoints/ipField.cpp
index f6ae0b6ae1c578bd2c5a7a78ca100d2becbbf575..c77ca3b756954764041cc68a11e3261cb352c8fa 100644
--- a/NonLinearSolver/internalPoints/ipField.cpp
+++ b/NonLinearSolver/internalPoints/ipField.cpp
@@ -58,6 +58,12 @@ std::string IPField::ToString(const int i){
   else if (i == P_ZX) return "P_ZX";
   else if (i == P_ZY) return "P_ZY";
   else if (i == P_ZZ) return "P_ZZ";
+  else if (i == S_XX) return "S_XX";
+  else if (i == S_XY) return "S_XY";
+  else if (i == S_XZ) return "S_XZ";
+  else if (i == S_YY) return "S_YY";
+  else if (i == S_YZ) return "S_YZ";
+  else if (i == S_ZZ) return "S_ZZ";
   else if (i == G_XXX) return "G_XXX";
   else if (i == G_XXY) return "G_XXY";
   else if (i == G_XXZ) return "G_XXZ";
@@ -112,6 +118,11 @@ std::string IPField::ToString(const int i){
   else if (i == Q_ZZX) return "Q_ZZX";
   else if (i == Q_ZZY) return "Q_ZZY";
   else if (i == Q_ZZZ) return "Q_ZZZ";
+  else if (i == ISO_YIELD) return "ISO_YIELD";
+  else if (i == ISO_YIELD_TENSILE) return "ISO_YIELD_TENSILE";
+  else if (i == ISO_YIELD_COMPRESSION) return "ISO_YIELD_COMPRESSION";
+  else if (i == ISO_YIELD_SHEAR) return "ISO_YIELD_SHEAR";
+  else if (i == KIN_YIELD) return "KIN_YIELD";
   else if (i == MTX_SVM) return "MTX_SVM";
   else if (i == MTX_SIG_XX) return "MTX_SIG_XX";
   else if (i == MTX_SIG_YY) return "MTX_SIG_YY";
@@ -162,6 +173,7 @@ std::string IPField::ToString(const int i){
   else if (i == K_XY) return "K_XY";
   else if (i == K_YZ) return "K_YZ";
   else if (i == K_XZ) return "K_XZ";
+  else if (i == KVM) return "KVM";
   else if (i == FAILURE_ONSET) return "FAILURE_ONSET";
   else if (i == GL_EQUIVALENT_STRAIN_RATE) return "GL_EQUIVALENT_STRAIN_RATE";
   else if (i == NONLOCAL_FAILURE_PLASTICSTRAIN) return "NONLOCAL_FAILURE_PLASTICSTRAIN";
@@ -178,7 +190,7 @@ std::string IPField::ToString(const int i){
   else if (i == DISP_JUMP_Y) return "DISP_JUMP_Y";
   else if (i == DISP_JUMP_Z) return "DISP_JUMP_Z";
   else if (i == STRESS_TRIAXIALITY) return "STRESS_TRIAXIALITY";
-  else if (i == ACTIVE_DAMAGING_ZONE) return "ACTIVE_DAMAGING_ZONE";
+  else if (i == ACTIVE_DISSIPATION) return "ACTIVE_DISSIPATION";
   else if (i == FIELD_CAPACITY) return "FIELD_CAPACITY";
   else if (i == MECHANICAL_SOURCE) return "MECHANICAL_SOURCE";
   else if (i == FIELD_SOURCE) return "FIELD_SOURCE";
@@ -260,81 +272,88 @@ std::string IPField::ToString(const int i){
   else if (i == INC_R_ZX) return "INC_R_ZX";
   else if (i == INC_R_ZY) return "INC_R_ZY";
   else if (i == INC_R_ZZ) return "INC_R_ZZ";
-
-    //phenomenologicalSMP
-    else if (i == FTH_XX) return "FTH_XX";
-    else if (i == FTH_YY) return "FTH_YY";
-    else if (i == FTH_ZZ) return "FTH_ZZ";
-    else if (i == FTH_XY) return "FTH_XY";
-    else if (i == FTH_YZ) return "FTH_YZ";
-    else if (i == FTH_ZX) return "FTH_ZX";
-
-    else if (i == FF_XX) return "FF_XX";
-    else if (i == FF_YY) return "FF_YY";
-    else if (i == FF_ZZ) return "FF_ZZ";
-    else if (i == FF_XY) return "FF_XY";
-    else if (i == FF_YZ) return "FF_YZ";
-    else if (i == FF_ZX) return "FF_ZX";
-
-    else if (i == FPG_XX) return "FPG_XX";
-    else if (i == FPG_YY) return "FPG_YY";
-    else if (i == FPG_ZZ) return "FPG_ZZ";
-    else if (i == FPG_XY) return "FPG_XY";
-    else if (i == FPG_YZ) return "FPG_YZ";
-    else if (i == FPG_ZX) return "FPG_ZX";
-
-    else if (i == FeG_XX) return "FeG_XX";
-    else if (i == FeG_YY) return "FeG_YY";
-    else if (i == FeG_ZZ) return "FeG_ZZ";
-    else if (i == FeG_XY) return "FeG_XY";
-    else if (i == FeG_YZ) return "FeG_YZ";
-    else if (i == FeG_ZX) return "FeG_ZX";
-
-    else if (i == FP_XX) return "FP_XX";
-    else if (i == FP_YY) return "FP_YY";
-    else if (i == FP_ZZ) return "FP_ZZ";
-    else if (i == FP_XY) return "FP_XY";
-    else if (i == FP_YX) return "FP_YX";
-    else if (i == FP_YZ) return "FP_YZ";
-    else if (i == FP_ZY) return "FP_ZY";
-    else if (i == FP_ZX) return "FP_ZX";
-    else if (i == FP_XZ) return "FP_XZ";
-
-    else if (i == FeR_XX) return "FeR_XX";
-    else if (i == FeR_YY) return "FeR_YY";
-    else if (i == FeR_ZZ) return "FeR_ZZ";
-    else if (i == FeR_XY) return "FeR_XY";
-    else if (i == FeR_YZ) return "FeR_YZ";
-    else if (i == FeR_ZX) return "FeR_ZX";
-
-    else if (i == ZG) return "ZG";
-    else if (i == TIG) return "TIG";
-    else if (i == TIR) return "TIR";
-    else if (i == TT) return "TT";
-
-    else if (i == FfAM_XX) return "FfAM_XX";
-    else if (i == FfAM_YY) return "FfAM_YY";
-    else if (i == FfAM_ZZ) return "FfAM_ZZ";
-    else if (i == FfAM_XY) return "FfAM_XY";
-    else if (i == FfAM_YZ) return "FfAM_YZ";
-    else if (i == FfAM_ZX) return "FfAM_ZX";
-
-    else if (i == FpAM_XX) return "FpAM_XX";
-    else if (i == FpAM_YY) return "FpAM_YY";
-    else if (i == FpAM_ZZ) return "FpAM_ZZ";
-    else if (i == FpAM_XY) return "FpAM_XY";
-    else if (i == FpAM_YZ) return "FpAM_YZ";
-    else if (i == FpAM_ZX) return "FpAM_ZX";
-
-    else if (i == FeAM_XX) return "FeAM_XX";
-    else if (i == FeAM_YY) return "FeAM_YY";
-    else if (i == FeAM_ZZ) return "FeAM_ZZ";
-    else if (i == FeAM_XY) return "FeAM_XY";
-    else if (i == FeAM_YZ) return "FeAM_YZ";
-    else if (i == FeAM_ZX) return "FeAM_ZX";
-
-    else if (i == epsAM)   return "epsAM";
-    //phenomenologicalSMP
+  //phenomenologicalSMP
+  else if (i == FTH_XX) return "FTH_XX";
+  else if (i == FTH_YY) return "FTH_YY";
+  else if (i == FTH_ZZ) return "FTH_ZZ";
+  else if (i == FTH_XY) return "FTH_XY";
+  else if (i == FTH_YZ) return "FTH_YZ";
+  else if (i == FTH_ZX) return "FTH_ZX";
+
+  else if (i == FF_XX) return "FF_XX";
+  else if (i == FF_YY) return "FF_YY";
+  else if (i == FF_ZZ) return "FF_ZZ";
+  else if (i == FF_XY) return "FF_XY";
+  else if (i == FF_YZ) return "FF_YZ";
+  else if (i == FF_ZX) return "FF_ZX";
+
+  else if (i == FPG_XX) return "FPG_XX";
+  else if (i == FPG_YY) return "FPG_YY";
+  else if (i == FPG_ZZ) return "FPG_ZZ";
+  else if (i == FPG_XY) return "FPG_XY";
+  else if (i == FPG_YZ) return "FPG_YZ";
+  else if (i == FPG_ZX) return "FPG_ZX";
+
+  else if (i == FeG_XX) return "FeG_XX";
+  else if (i == FeG_YY) return "FeG_YY";
+  else if (i == FeG_ZZ) return "FeG_ZZ";
+  else if (i == FeG_XY) return "FeG_XY";
+  else if (i == FeG_YZ) return "FeG_YZ";
+  else if (i == FeG_ZX) return "FeG_ZX";
+
+  else if (i == FP_XX) return "FP_XX";
+  else if (i == FP_YY) return "FP_YY";
+  else if (i == FP_ZZ) return "FP_ZZ";
+  else if (i == FP_XY) return "FP_XY";
+  else if (i == FP_YX) return "FP_YX";
+  else if (i == FP_YZ) return "FP_YZ";
+  else if (i == FP_ZY) return "FP_ZY";
+  else if (i == FP_ZX) return "FP_ZX";
+  else if (i == FP_XZ) return "FP_XZ";
+
+  else if (i == FeR_XX) return "FeR_XX";
+  else if (i == FeR_YY) return "FeR_YY";
+  else if (i == FeR_ZZ) return "FeR_ZZ";
+  else if (i == FeR_XY) return "FeR_XY";
+  else if (i == FeR_YZ) return "FeR_YZ";
+  else if (i == FeR_ZX) return "FeR_ZX";
+
+  else if (i == ZG) return "ZG";
+  else if (i == TIG) return "TIG";
+  else if (i == TIR) return "TIR";
+  else if (i == TT) return "TT";
+
+  else if (i == FfAM_XX) return "FfAM_XX";
+  else if (i == FfAM_YY) return "FfAM_YY";
+  else if (i == FfAM_ZZ) return "FfAM_ZZ";
+  else if (i == FfAM_XY) return "FfAM_XY";
+  else if (i == FfAM_YZ) return "FfAM_YZ";
+  else if (i == FfAM_ZX) return "FfAM_ZX";
+
+  else if (i == FpAM_XX) return "FpAM_XX";
+  else if (i == FpAM_YY) return "FpAM_YY";
+  else if (i == FpAM_ZZ) return "FpAM_ZZ";
+  else if (i == FpAM_XY) return "FpAM_XY";
+  else if (i == FpAM_YZ) return "FpAM_YZ";
+  else if (i == FpAM_ZX) return "FpAM_ZX";
+  else if (i == FeAM_XX) return "FeAM_XX";
+  else if (i == FeAM_YY) return "FeAM_YY";
+  else if (i == FeAM_ZZ) return "FeAM_ZZ";
+  else if (i == FeAM_XY) return "FeAM_XY";
+  else if (i == FeAM_YZ) return "FeAM_YZ";
+  else if (i == FeAM_ZX) return "FeAM_ZX";
+
+  else if (i == epsAM)   return "epsAM";
+  //phenomenologicalSMP
+  else if (i == USER1) return "USER1";
+  else if (i == USER2) return "USER2";
+  else if (i == USER3) return "USER3";
+  else if (i == USER4) return "USER4";
+  else if (i == USER5) return "USER5";
+  else if (i == USER6) return "USER6";
+  else if (i == USER7) return "USER7";
+  else if (i == USER8) return "USER8";
+  else if (i == USER9) return "USER9";
 
   else{
     Msg::Warning("This IP field %d is not defined in IPField::ToString(%d)",i,i);
@@ -1837,9 +1856,200 @@ double IPField::getIPcomp(const partDomain *ef,MElement *ele, const IPStateBase:
                             const int cmp,const nlsField::ElemValue ev,const int num) const{
   if(ev == nlsField::crude){ // value in a particular gauss point
     IPStateBase* ips = (*_AIPS->getIPstate(ele->getNum()))[num];
-    IPVariable *ipv = ips->getState(ws);
+    const IPVariable *ipv = ips->getState(ws);
     return ipv->get(cmp);
   }
+  else if (ev == nlsField::increment)
+  {
+    IPStateBase* ips = (*_AIPS->getIPstate(ele->getNum()))[num];
+    const IPVariable *ipv = ips->getState(ws);
+    const IPVariable *ipvprev = ips->getState(IPStateBase::previous);
+    
+    if (cmp == F_XX or cmp == F_XY or cmp == F_XZ or
+        cmp == F_YX or cmp == F_YY or cmp == F_YZ or
+        cmp == F_ZX or cmp == F_ZY or cmp == F_ZZ)
+    {
+      
+      static STensor3 F, Fprev, invFprev, DF, logDF;
+      F(0,0) = ipv->get(F_XX);
+      F(0,1) = ipv->get(F_XY);
+      F(0,2) = ipv->get(F_XZ);
+      F(1,0) = ipv->get(F_YX);
+      F(1,1) = ipv->get(F_YY);
+      F(1,2) = ipv->get(F_YZ);
+      F(2,0) = ipv->get(F_ZX);
+      F(2,1) = ipv->get(F_ZY);
+      F(2,2) = ipv->get(F_ZZ);
+      
+      Fprev(0,0) = ipvprev->get(F_XX);
+      Fprev(0,1) = ipvprev->get(F_XY);
+      Fprev(0,2) = ipvprev->get(F_XZ);
+      Fprev(1,0) = ipvprev->get(F_YX);
+      Fprev(1,1) = ipvprev->get(F_YY);
+      Fprev(1,2) = ipvprev->get(F_YZ);
+      Fprev(2,0) = ipvprev->get(F_ZX);
+      Fprev(2,1) = ipvprev->get(F_ZY);
+      Fprev(2,2) = ipvprev->get(F_ZZ);
+      
+      STensorOperation::inverseSTensor3(Fprev,invFprev);
+      STensorOperation::multSTensor3(F,invFprev,DF);
+      STensorOperation::logSTensor3(DF,-1,logDF);
+      if (cmp == F_XX) return logDF(0,0);
+      else if (cmp == F_XY) return logDF(0,1);
+      else if (cmp == F_XZ) return logDF(0,2);
+      else if (cmp == F_YX) return logDF(1,0);
+      else if (cmp == F_YY) return logDF(1,1);
+      else if (cmp == F_YZ) return logDF(1,2);
+      else if (cmp == F_ZX) return logDF(2,0);
+      else if (cmp == F_ZY) return logDF(2,1);
+      else if (cmp == F_ZZ) return logDF(2,2);
+    }
+    else if (cmp == FP_XX or cmp == FP_XY or cmp == FP_XZ or
+        cmp == FP_YX or cmp == FP_YY or cmp == FP_YZ or
+        cmp == FP_ZX or cmp == FP_ZY or cmp == FP_ZZ)
+    {
+      static STensor3 Fp, FPprev, invFPprev, DF, logDF;
+      Fp(0,0) = ipv->get(FP_XX);
+      Fp(0,1) = ipv->get(FP_XY);
+      Fp(0,2) = ipv->get(FP_XZ);
+      Fp(1,0) = ipv->get(FP_YX);
+      Fp(1,1) = ipv->get(FP_YY);
+      Fp(1,2) = ipv->get(FP_YZ);
+      Fp(2,0) = ipv->get(FP_ZX);
+      Fp(2,1) = ipv->get(FP_ZY);
+      Fp(2,2) = ipv->get(FP_ZZ);
+      
+      FPprev(0,0) = ipvprev->get(FP_XX);
+      FPprev(0,1) = ipvprev->get(FP_XY);
+      FPprev(0,2) = ipvprev->get(FP_XZ);
+      FPprev(1,0) = ipvprev->get(FP_YX);
+      FPprev(1,1) = ipvprev->get(FP_YY);
+      FPprev(1,2) = ipvprev->get(FP_YZ);
+      FPprev(2,0) = ipvprev->get(FP_ZX);
+      FPprev(2,1) = ipvprev->get(FP_ZY);
+      FPprev(2,2) = ipvprev->get(FP_ZZ);
+      
+      if (Fp.norm2() >0)
+      {
+        STensorOperation::inverseSTensor3(FPprev,invFPprev);
+        STensorOperation::multSTensor3(Fp,invFPprev,DF);
+        STensorOperation::logSTensor3(DF,-1,logDF);
+      }
+      else
+      {
+        STensorOperation::zero(logDF);
+      }
+      if (cmp == FP_XX) return logDF(0,0);
+      else if (cmp == FP_XY) return logDF(0,1);
+      else if (cmp == FP_XZ) return logDF(0,2);
+      else if (cmp == FP_YX) return logDF(1,0);
+      else if (cmp == FP_YY) return logDF(1,1);
+      else if (cmp == FP_YZ) return logDF(1,2);
+      else if (cmp == FP_ZX) return logDF(2,0);
+      else if (cmp == FP_ZY) return logDF(2,1);
+      else if (cmp == FP_ZZ) return logDF(2,2);
+    }
+    else
+    {
+      return ipv->get(cmp) - ipvprev->get(cmp);
+    }
+  }
+  else if (ev == nlsField::rate)
+  {
+    double timeStep = ef->getMaterialLaw()->getTimeStep();
+    IPStateBase* ips = (*_AIPS->getIPstate(ele->getNum()))[num];
+    const IPVariable *ipv = ips->getState(ws);
+    const IPVariable *ipvprev = ips->getState(IPStateBase::previous);
+    
+    if (cmp == F_XX or cmp == F_XY or cmp == F_XZ or
+        cmp == F_YX or cmp == F_YY or cmp == F_YZ or
+        cmp == F_ZX or cmp == F_ZY or cmp == F_ZZ)
+    {
+      
+      static STensor3 F, Fprev, invFprev, DF, logDF;
+      F(0,0) = ipv->get(F_XX);
+      F(0,1) = ipv->get(F_XY);
+      F(0,2) = ipv->get(F_XZ);
+      F(1,0) = ipv->get(F_YX);
+      F(1,1) = ipv->get(F_YY);
+      F(1,2) = ipv->get(F_YZ);
+      F(2,0) = ipv->get(F_ZX);
+      F(2,1) = ipv->get(F_ZY);
+      F(2,2) = ipv->get(F_ZZ);
+      
+      Fprev(0,0) = ipvprev->get(F_XX);
+      Fprev(0,1) = ipvprev->get(F_XY);
+      Fprev(0,2) = ipvprev->get(F_XZ);
+      Fprev(1,0) = ipvprev->get(F_YX);
+      Fprev(1,1) = ipvprev->get(F_YY);
+      Fprev(1,2) = ipvprev->get(F_YZ);
+      Fprev(2,0) = ipvprev->get(F_ZX);
+      Fprev(2,1) = ipvprev->get(F_ZY);
+      Fprev(2,2) = ipvprev->get(F_ZZ);
+      
+      STensorOperation::inverseSTensor3(Fprev,invFprev);
+      STensorOperation::multSTensor3(F,invFprev,DF);
+      STensorOperation::logSTensor3(DF,-1,logDF);
+      if (cmp == F_XX) return logDF(0,0)/timeStep;
+      else if (cmp == F_XY) return logDF(0,1)/timeStep;
+      else if (cmp == F_XZ) return logDF(0,2)/timeStep;
+      else if (cmp == F_YX) return logDF(1,0)/timeStep;
+      else if (cmp == F_YY) return logDF(1,1)/timeStep;
+      else if (cmp == F_YZ) return logDF(1,2)/timeStep;
+      else if (cmp == F_ZX) return logDF(2,0)/timeStep;
+      else if (cmp == F_ZY) return logDF(2,1)/timeStep;
+      else if (cmp == F_ZZ) return logDF(2,2)/timeStep;
+    }
+    else if (cmp == FP_XX or cmp == FP_XY or cmp == FP_XZ or
+        cmp == FP_YX or cmp == FP_YY or cmp == FP_YZ or
+        cmp == FP_ZX or cmp == FP_ZY or cmp == FP_ZZ)
+    {
+      static STensor3 Fp, FPprev, invFPprev, DF, logDF;
+      Fp(0,0) = ipv->get(FP_XX);
+      Fp(0,1) = ipv->get(FP_XY);
+      Fp(0,2) = ipv->get(FP_XZ);
+      Fp(1,0) = ipv->get(FP_YX);
+      Fp(1,1) = ipv->get(FP_YY);
+      Fp(1,2) = ipv->get(FP_YZ);
+      Fp(2,0) = ipv->get(FP_ZX);
+      Fp(2,1) = ipv->get(FP_ZY);
+      Fp(2,2) = ipv->get(FP_ZZ);
+      
+      FPprev(0,0) = ipvprev->get(FP_XX);
+      FPprev(0,1) = ipvprev->get(FP_XY);
+      FPprev(0,2) = ipvprev->get(FP_XZ);
+      FPprev(1,0) = ipvprev->get(FP_YX);
+      FPprev(1,1) = ipvprev->get(FP_YY);
+      FPprev(1,2) = ipvprev->get(FP_YZ);
+      FPprev(2,0) = ipvprev->get(FP_ZX);
+      FPprev(2,1) = ipvprev->get(FP_ZY);
+      FPprev(2,2) = ipvprev->get(FP_ZZ);
+      
+      if (Fp.norm2() >0)
+      {
+        STensorOperation::inverseSTensor3(FPprev,invFPprev);
+        STensorOperation::multSTensor3(Fp,invFPprev,DF);
+        STensorOperation::logSTensor3(DF,-1,logDF);
+      }
+      else
+      {
+        STensorOperation::zero(logDF);
+      }
+      if (cmp == FP_XX) return logDF(0,0)/timeStep;
+      else if (cmp == FP_XY) return logDF(0,1)/timeStep;
+      else if (cmp == FP_XZ) return logDF(0,2)/timeStep;
+      else if (cmp == FP_YX) return logDF(1,0)/timeStep;
+      else if (cmp == FP_YY) return logDF(1,1)/timeStep;
+      else if (cmp == FP_YZ) return logDF(1,2)/timeStep;
+      else if (cmp == FP_ZX) return logDF(2,0)/timeStep;
+      else if (cmp == FP_ZY) return logDF(2,1)/timeStep;
+      else if (cmp == FP_ZZ) return logDF(2,2)/timeStep;
+    }
+    else
+    {
+      return (ipv->get(cmp) - ipvprev->get(cmp))/timeStep;
+    }
+  }
   else{ // loop on all IPVariable of an element and return a particular value (max, min, mean)
     double valcmp =0.;
     double valcmpp;
diff --git a/NonLinearSolver/internalPoints/ipField.h b/NonLinearSolver/internalPoints/ipField.h
index 6d38d3d07780a0d2aac9828f609449ca10728bdc..6209023db53f0c2fcf049986fe134aeada06d5dd 100644
--- a/NonLinearSolver/internalPoints/ipField.h
+++ b/NonLinearSolver/internalPoints/ipField.h
@@ -76,12 +76,14 @@ class IPField : public elementsField {
                     STRAIN_XX, STRAIN_YY, STRAIN_ZZ, STRAIN_XY, STRAIN_YZ, STRAIN_XZ, HIGHSTRAIN_NORM,
                     HIGHSTRESS_NORM, GL_NORM, STRESS_NORM, P_STRESS_NORM , F_XX, F_XY, F_XZ, F_YX, F_YY,F_YZ,
                     F_ZX, F_ZY, F_ZZ, P_XX, P_XY, P_XZ,P_YX, P_YY, P_YZ, P_ZX, P_ZY, P_ZZ,
+                    S_XX, S_XY, S_XZ, S_YY, S_YZ, S_ZZ,
                     G_XXX, G_XXY, G_XXZ, G_XYX, G_XYY, G_XYZ,G_XZX, G_XZY, G_XZZ,
                     G_YXX, G_YXY, G_YXZ, G_YYX, G_YYY, G_YYZ,G_YZX, G_YZY, G_YZZ,
                     G_ZXX, G_ZXY, G_ZXZ, G_ZYX, G_ZYY, G_ZYZ,G_ZZX, G_ZZY, G_ZZZ,
                     Q_XXX, Q_XXY, Q_XXZ, Q_XYX, Q_XYY, Q_XYZ,Q_XZX, Q_XZY, Q_XZZ,
                     Q_YXX, Q_YXY, Q_YXZ, Q_YYX, Q_YYY, Q_YYZ,Q_YZX, Q_YZY, Q_YZZ,
                     Q_ZXX, Q_ZXY, Q_ZXZ, Q_ZYX, Q_ZYY, Q_ZYZ,Q_ZZX, Q_ZZY, Q_ZZZ,
+                    ISO_YIELD,ISO_YIELD_TENSILE, ISO_YIELD_COMPRESSION, ISO_YIELD_SHEAR,KIN_YIELD,
                     MTX_SVM,MTX_SIG_XX,MTX_SIG_YY,MTX_SIG_ZZ,MTX_SIG_XY,MTX_SIG_YZ,MTX_SIG_XZ,
                     INC_SVM,INC_SIG_XX,INC_SIG_YY,INC_SIG_ZZ,INC_SIG_XY,INC_SIG_YZ,INC_SIG_XZ,
                     TEMPERATURE,THERMALFLUX_X,THERMALFLUX_Y,THERMALFLUX_Z,
@@ -91,10 +93,10 @@ class IPField : public elementsField {
                     PRESSION, PLASTIC_POISSON_RATIO,PLASTICSTRAIN_COMPRESSION, PLASTICSTRAIN_TRACTION, PLASTICSTRAIN_SHEAR,
                     NONLOCAL_PLASTICSTRAIN,BACKSTRESS, JACOBIAN, ELASTIC_JACOBIAN, PLASTIC_JACOBIAN,
                     PLASTIC_RATE,FLOW_FACTOR_RATE, OCTAHEDRAL_SHEAR_STRAIN_RATE, OCTAHEDRAL_NORM_STRAIN_RATE,
-                    K_XX, K_YY, K_ZZ, K_XY, K_YZ, K_XZ,FAILURE_ONSET, GL_EQUIVALENT_STRAIN_RATE,
+                    K_XX, K_YY, K_ZZ, K_XY, K_YZ, K_XZ, KVM,FAILURE_ONSET, GL_EQUIVALENT_STRAIN_RATE,
                     NONLOCAL_FAILURE_PLASTICSTRAIN, FAILURE_PLASTICSTRAIN, DAMAGE_0, DAMAGE_1, LOCAL_EQUIVALENT_STRAINS, NONLOCAL_EQUIVALENT_STRAINS,
                     FIRST_PRINCIPAL_STRESS, SECOND_PRINCIPAL_STRESS, THIRD_PRINCIPAL_STRESS, GL_EFFECTIVE_STRAIN_RATE,
-                    DISP_JUMP_X,DISP_JUMP_Y,DISP_JUMP_Z,STRESS_TRIAXIALITY,ACTIVE_DAMAGING_ZONE,
+                    DISP_JUMP_X,DISP_JUMP_Y,DISP_JUMP_Z,STRESS_TRIAXIALITY,ACTIVE_DISSIPATION,
                     FIELD_CAPACITY, MECHANICAL_SOURCE, FIELD_SOURCE,INCOMPATIBLE_STRAIN_X,INCOMPATIBLE_STRAIN_Y,INCOMPATIBLE_STRAIN_Z,
                     COHESIVE_JUMP_X,COHESIVE_JUMP_Y,COHESIVE_JUMP_Z,DAMAGE_IS_BLOCKED,
                     DEFO_ENERGY,PLASTIC_ENERGY,IRREVERSIBLE_ENERGY,DAMAGE_ENERGY,
@@ -110,7 +112,6 @@ class IPField : public elementsField {
                     LIMIT_LOAD_FACTOR,
                     INC_VOLUME_RATIO, INC_ASPECT_RATIO_1, INC_ASPECT_RATIO_2, INC_R_XX, INC_R_XY, INC_R_XZ, INC_R_YX, INC_R_YY, INC_R_YZ,
                     INC_R_ZX, INC_R_ZY, INC_R_ZZ,
-
                     //phenomenologicalSMP
                     FTH_XX,     FTH_YY,     FTH_ZZ,     FTH_XY,     FTH_YZ,     FTH_ZX,
                     FF_XX,      FF_YY,      FF_ZZ,      FF_XY,      FF_YZ,      FF_ZX,
@@ -122,10 +123,11 @@ class IPField : public elementsField {
                     FfAM_XX,    FfAM_YY,    FfAM_ZZ,    FfAM_XY,    FfAM_YZ,    FfAM_ZX,
                     FpAM_XX,    FpAM_YY,    FpAM_ZZ,    FpAM_XY,    FpAM_YZ,    FpAM_ZX,
                     FeAM_XX,    FeAM_YY,    FeAM_ZZ,    FeAM_XY,    FeAM_YZ,    FeAM_ZX,
-                    epsAM
+                    epsAM,
                     //phenomenologicalSMP
-};
+                    USER1,USER2,USER3,USER4,USER5,USER6,USER7,USER8,USER9};
     enum  Operator { MEAN_VALUE=1, MIN_VALUE, MAX_VALUE, CRUDE_VALUE};
+    static std::string ToString(const int i);
 #ifndef SWIG
     // Struct for archiving
     struct ip2archive{
@@ -169,6 +171,12 @@ class IPField : public elementsField {
          case nlsField::max:
           oss.str("Max");
           break;
+         case nlsField::increment:
+          oss.str("Increment");
+          break;
+         case nlsField::rate:
+          oss.str("Rate");
+          break;
          default:
           oss.str("");
         }
@@ -223,6 +231,12 @@ class IPField : public elementsField {
          case 3:
           evalue=nlsField::max;
           break;
+         case 4:
+          evalue=nlsField::increment;
+          break;
+         case 5:
+          evalue=nlsField::rate;
+          break;
          default:
           evalue=nlsField::crude;
         }
@@ -257,6 +271,12 @@ class IPField : public elementsField {
          case 3:
           evalue=nlsField::max;
           break;
+         case 4:
+          evalue=nlsField::increment;
+          break;
+         case 5:
+          evalue=nlsField::rate;
+          break;
          default:
           evalue=nlsField::crude;
         }
@@ -323,8 +343,6 @@ class IPField : public elementsField {
   virtual void archive(const double time,const int step, const bool forceView);
   double getIPValueOnPhysical(const int dim, const int physical, const int ipVal) const;
 
-  static std::string ToString(const int i);
-
   AllIPState* getAips() {return _AIPS;}
   const AllIPState* getAips() const {return _AIPS;}
 
diff --git a/NonLinearSolver/internalPoints/ipGursonUMAT.cpp b/NonLinearSolver/internalPoints/ipGursonUMAT.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..9c970d420aded1289c50476d3c1bd8c1d77db712
--- /dev/null
+++ b/NonLinearSolver/internalPoints/ipGursonUMAT.cpp
@@ -0,0 +1,31 @@
+//
+// Description: storing class for gurson plasticity
+//
+//
+// Author:  <L. Noels>, (C) 2019
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+#include "ipGursonUMAT.h"
+#include "ipField.h"
+#include "restartManager.h"
+
+
+double IPGursonUMAT::get(int comp) const
+{
+  if(comp==IPField::LOCAL_POROSITY) 
+    return getFv();
+  else if(comp==IPField::DAMAGE) 
+    return getFv();
+  else if(comp==IPField::PLASTICSTRAIN)
+    return getMatrixEps();
+  else
+    return IPUMATInterface::get(comp);
+}
+
+void IPGursonUMAT::restart()
+{
+  IPUMATInterface::restart();
+ return;
+}
diff --git a/NonLinearSolver/internalPoints/ipGursonUMAT.h b/NonLinearSolver/internalPoints/ipGursonUMAT.h
new file mode 100644
index 0000000000000000000000000000000000000000..c448bdfda77d4e91a5c1bf39713c742d2547ef70
--- /dev/null
+++ b/NonLinearSolver/internalPoints/ipGursonUMAT.h
@@ -0,0 +1,52 @@
+//
+// Description: storing class for gurson umat interface 
+// Author:  <L. NOELS>, (C) 2019
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+
+#ifndef IPGURSONUMAT_H_
+#define IPGURSONUMAT_H_
+#include "ipUMATInterface.h"
+#include "STensor3.h"
+class IPGursonUMAT : public IPUMATInterface
+{
+ protected:
+
+ public: // All data public to avoid the creation of function to access
+
+ public:
+  IPGursonUMAT(int _nsdv, double eleSize) : IPUMATInterface(_nsdv, eleSize) 
+    {
+    }
+  IPGursonUMAT(const IPGursonUMAT &source) : IPUMATInterface(source)
+    {
+    }
+  IPGursonUMAT &operator = (const IPVariable &_source)
+  {
+      IPUMATInterface::operator=(_source);
+      return *this;
+  }
+  virtual ~IPGursonUMAT()
+  {
+  }
+  virtual IPVariable* clone() const {return new IPUMATInterface(*this);};
+  virtual void restart();
+  virtual double get(const int i) const;
+  virtual void   setFv(double f) { _statev[0]=f;}  
+  virtual double getFv() const { return _statev[0];}  
+  virtual void   setMatrixEps(double epsm) { _statev[1]=epsm;}  
+  virtual double getMatrixEps() const { return _statev[1];}  
+  virtual void   setMacroVolEps(double epsm) { _statev[2]=epsm;}  
+  virtual double getMacroVolEps() const { return _statev[2];}  
+  virtual void   setMacroDevEps(double epsm) { _statev[3]=epsm;}  
+  virtual double getMacroDevEps() const { return _statev[3];}
+  virtual void   setFp(double fp, int i, int j) { _statev[4+(i)*3+j]=fp;}  
+  virtual double getFp(int i, int j) const { return _statev[4+(i)*3+j];}
+
+ protected:
+  IPGursonUMAT(){}
+};
+
+#endif // IPGURSONUMAT_H_
diff --git a/NonLinearSolver/internalPoints/ipHardening.cpp b/NonLinearSolver/internalPoints/ipHardening.cpp
index 85438b8c4d40d493f34c15336604a96ae9687863..c3da71b2ca04b3d5e2b0fa7e183e75eebe0dec89 100644
--- a/NonLinearSolver/internalPoints/ipHardening.cpp
+++ b/NonLinearSolver/internalPoints/ipHardening.cpp
@@ -10,8 +10,8 @@
 #include "ipHardening.h"
 #include "restartManager.h"
 
-IPJ2IsotropicHardening::IPJ2IsotropicHardening():
-      R0(0.), R(0.), dR(0.), ddR(0.), integR(0.),_isSaturated(false),dRdT(false)
+IPJ2IsotropicHardening::IPJ2IsotropicHardening(const double R0_):
+      R0(R0_), R(R0_), dR(0.), ddR(0.), integR(0.),_isSaturated(false),dRdT(false)
 {
 
 }
@@ -19,7 +19,7 @@ IPJ2IsotropicHardening::IPJ2IsotropicHardening():
 IPJ2IsotropicHardening::IPJ2IsotropicHardening(const IPJ2IsotropicHardening &source):
       R0(source.R0), R(source.R), dR (source.dR), ddR (source.ddR),integR(source.integR),_isSaturated(source._isSaturated), dRdT(source.dRdT)
 {
-  
+
 }
 
 IPJ2IsotropicHardening &IPJ2IsotropicHardening::operator=(const IPJ2IsotropicHardening &src)
@@ -46,7 +46,7 @@ void IPJ2IsotropicHardening::restart()
   return;
 }
 
-IPPerfectlyPlasticJ2IsotropicHardening::IPPerfectlyPlasticJ2IsotropicHardening(): IPJ2IsotropicHardening()
+IPPerfectlyPlasticJ2IsotropicHardening::IPPerfectlyPlasticJ2IsotropicHardening(const double R0_): IPJ2IsotropicHardening(R0_)
 {
 
 }
@@ -76,7 +76,7 @@ void IPPerfectlyPlasticJ2IsotropicHardening::restart()
   IPJ2IsotropicHardening::restart();
 }
 
-IPPowerLawJ2IsotropicHardening::IPPowerLawJ2IsotropicHardening(): IPJ2IsotropicHardening()
+IPPowerLawJ2IsotropicHardening::IPPowerLawJ2IsotropicHardening(const double R0_): IPJ2IsotropicHardening(R0_)
 {
 
 }
@@ -106,7 +106,7 @@ IPJ2IsotropicHardening * IPPowerLawJ2IsotropicHardening::clone() const
 }
 
 
-IPExponentialJ2IsotropicHardening::IPExponentialJ2IsotropicHardening(): IPJ2IsotropicHardening()
+IPExponentialJ2IsotropicHardening::IPExponentialJ2IsotropicHardening(const double R0_): IPJ2IsotropicHardening(R0_)
 {
 
 }
@@ -136,7 +136,7 @@ IPJ2IsotropicHardening * IPExponentialJ2IsotropicHardening::clone() const
 }
 
 
-IPSwiftJ2IsotropicHardening::IPSwiftJ2IsotropicHardening(): IPJ2IsotropicHardening()
+IPSwiftJ2IsotropicHardening::IPSwiftJ2IsotropicHardening(const double R0_): IPJ2IsotropicHardening(R0_)
 {
 
 }
@@ -165,7 +165,7 @@ IPJ2IsotropicHardening * IPSwiftJ2IsotropicHardening::clone() const
   return new IPSwiftJ2IsotropicHardening(*this);
 }
 
-IPLinearExponentialJ2IsotropicHardening::IPLinearExponentialJ2IsotropicHardening(): IPJ2IsotropicHardening()
+IPLinearExponentialJ2IsotropicHardening::IPLinearExponentialJ2IsotropicHardening(const double R0_): IPJ2IsotropicHardening(R0_)
 {
 
 }
@@ -197,7 +197,7 @@ IPJ2IsotropicHardening * IPLinearExponentialJ2IsotropicHardening::clone() const
 
 
 /* IPLinearFollowedByExponentialJ2IsotropicHardening */
-IPLinearFollowedByExponentialJ2IsotropicHardening::IPLinearFollowedByExponentialJ2IsotropicHardening(): IPJ2IsotropicHardening()
+IPLinearFollowedByExponentialJ2IsotropicHardening::IPLinearFollowedByExponentialJ2IsotropicHardening(const double R0_): IPJ2IsotropicHardening(R0_)
 {
 }
 
@@ -229,7 +229,7 @@ IPJ2IsotropicHardening * IPLinearFollowedByExponentialJ2IsotropicHardening::clon
 
 
 /* IPLinearFollowedByPowerLawJ2IsotropicHardening */
-IPLinearFollowedByPowerLawJ2IsotropicHardening::IPLinearFollowedByPowerLawJ2IsotropicHardening(): IPJ2IsotropicHardening()
+IPLinearFollowedByPowerLawJ2IsotropicHardening::IPLinearFollowedByPowerLawJ2IsotropicHardening(const double R0_): IPJ2IsotropicHardening(R0_)
 {
 }
 
@@ -258,7 +258,7 @@ IPJ2IsotropicHardening * IPLinearFollowedByPowerLawJ2IsotropicHardening::clone()
 }
 
 
-IPLinearFollowedByMultiplePowerLawJ2IsotropicHardening::IPLinearFollowedByMultiplePowerLawJ2IsotropicHardening(): IPJ2IsotropicHardening()
+IPLinearFollowedByMultiplePowerLawJ2IsotropicHardening::IPLinearFollowedByMultiplePowerLawJ2IsotropicHardening(const double R0_): IPJ2IsotropicHardening(R0_)
 {
 }
 
@@ -287,7 +287,7 @@ IPJ2IsotropicHardening * IPLinearFollowedByMultiplePowerLawJ2IsotropicHardening:
 }
 
 
-IPPolynomialJ2IsotropicHardening::IPPolynomialJ2IsotropicHardening(): IPJ2IsotropicHardening()
+IPPolynomialJ2IsotropicHardening::IPPolynomialJ2IsotropicHardening(const double R0_): IPJ2IsotropicHardening(R0_)
 {
 
 }
@@ -316,7 +316,7 @@ IPJ2IsotropicHardening * IPPolynomialJ2IsotropicHardening::clone() const
   return new IPPolynomialJ2IsotropicHardening(*this);
 }
 
-IPTwoExpJ2IsotropicHaderning::IPTwoExpJ2IsotropicHaderning(): IPJ2IsotropicHardening()
+IPTwoExpJ2IsotropicHaderning::IPTwoExpJ2IsotropicHaderning(const double R0_): IPJ2IsotropicHardening(R0_)
 {
 
 }
diff --git a/NonLinearSolver/internalPoints/ipHardening.h b/NonLinearSolver/internalPoints/ipHardening.h
index 409208566e2c01be354e1d89820e9df7697b6791..52aea2a29a1e4c94902270e44536c830393349f6 100644
--- a/NonLinearSolver/internalPoints/ipHardening.h
+++ b/NonLinearSolver/internalPoints/ipHardening.h
@@ -27,15 +27,15 @@ protected:
     double integR;
     bool _isSaturated; // harderning modulus become 0 under some conditions
     double dRdT; // temeprature dependence
-    
+
  public:
-  IPJ2IsotropicHardening();
+  IPJ2IsotropicHardening(const double R0_);
   IPJ2IsotropicHardening(const IPJ2IsotropicHardening &source);
   virtual IPJ2IsotropicHardening &operator=(const IPJ2IsotropicHardening &source);
   virtual ~IPJ2IsotropicHardening(){}
   virtual void restart();
   virtual IPJ2IsotropicHardening * clone() const=0;
-  
+
   virtual bool& getRefToSaturationState() {return _isSaturated;};
   virtual bool isSaturated() const {return _isSaturated;};
 
@@ -51,7 +51,7 @@ protected:
     R=_r;
     dR=_dr;
     ddR=_ddr;
-    integR=_integR;      
+    integR=_integR;
     dRdT = _dRdT;
   }
 };
@@ -62,7 +62,7 @@ class IPPerfectlyPlasticJ2IsotropicHardening : public IPJ2IsotropicHardening
  protected:
 
  public:
-  IPPerfectlyPlasticJ2IsotropicHardening();
+  IPPerfectlyPlasticJ2IsotropicHardening(const double R0_);
   IPPerfectlyPlasticJ2IsotropicHardening(const IPPerfectlyPlasticJ2IsotropicHardening &source);
   virtual IPPerfectlyPlasticJ2IsotropicHardening &operator=(const IPJ2IsotropicHardening &source);
   virtual ~IPPerfectlyPlasticJ2IsotropicHardening(){}
@@ -75,7 +75,7 @@ class IPPowerLawJ2IsotropicHardening : public IPJ2IsotropicHardening
 
  protected:
  public:
-  IPPowerLawJ2IsotropicHardening();
+  IPPowerLawJ2IsotropicHardening(const double R0_);
   IPPowerLawJ2IsotropicHardening(const IPPowerLawJ2IsotropicHardening &source);
   virtual IPPowerLawJ2IsotropicHardening &operator=(const IPJ2IsotropicHardening &source);
   virtual ~IPPowerLawJ2IsotropicHardening(){}
@@ -90,7 +90,7 @@ class IPExponentialJ2IsotropicHardening : public IPJ2IsotropicHardening
  protected:
 
  public:
-  IPExponentialJ2IsotropicHardening();
+  IPExponentialJ2IsotropicHardening(const double R0_);
   IPExponentialJ2IsotropicHardening(const IPExponentialJ2IsotropicHardening &source);
   virtual IPExponentialJ2IsotropicHardening &operator=(const IPJ2IsotropicHardening &source);
   virtual ~IPExponentialJ2IsotropicHardening(){}
@@ -105,7 +105,7 @@ class IPSwiftJ2IsotropicHardening : public IPJ2IsotropicHardening
  protected:
 
  public:
-  IPSwiftJ2IsotropicHardening();
+  IPSwiftJ2IsotropicHardening(const double R0_);
   IPSwiftJ2IsotropicHardening(const IPSwiftJ2IsotropicHardening &source);
   virtual IPSwiftJ2IsotropicHardening &operator=(const IPJ2IsotropicHardening &source);
   virtual ~IPSwiftJ2IsotropicHardening(){}
@@ -119,7 +119,7 @@ class IPLinearExponentialJ2IsotropicHardening : public IPJ2IsotropicHardening
  protected:
 
  public:
-  IPLinearExponentialJ2IsotropicHardening();
+  IPLinearExponentialJ2IsotropicHardening(const double R0_);
   IPLinearExponentialJ2IsotropicHardening(const IPLinearExponentialJ2IsotropicHardening &source);
   virtual IPLinearExponentialJ2IsotropicHardening &operator=(const IPJ2IsotropicHardening &source);
   virtual ~IPLinearExponentialJ2IsotropicHardening(){}
@@ -136,7 +136,7 @@ class IPLinearFollowedByExponentialJ2IsotropicHardening : public IPJ2IsotropicHa
  protected:
   // nothing to add to IPJ2IsotropicHardening basis
  public:
-  IPLinearFollowedByExponentialJ2IsotropicHardening();
+  IPLinearFollowedByExponentialJ2IsotropicHardening(const double R0_);
   IPLinearFollowedByExponentialJ2IsotropicHardening(const IPLinearFollowedByExponentialJ2IsotropicHardening &source);
   virtual IPLinearFollowedByExponentialJ2IsotropicHardening &operator=(const IPJ2IsotropicHardening &source);
   virtual ~IPLinearFollowedByExponentialJ2IsotropicHardening(){}
@@ -153,7 +153,7 @@ class IPLinearFollowedByPowerLawJ2IsotropicHardening : public IPJ2IsotropicHarde
 
  protected:
  public:
-  IPLinearFollowedByPowerLawJ2IsotropicHardening();
+  IPLinearFollowedByPowerLawJ2IsotropicHardening(const double R0_);
   IPLinearFollowedByPowerLawJ2IsotropicHardening(const IPLinearFollowedByPowerLawJ2IsotropicHardening &source);
   virtual IPLinearFollowedByPowerLawJ2IsotropicHardening &operator=(const IPJ2IsotropicHardening &source);
   virtual ~IPLinearFollowedByPowerLawJ2IsotropicHardening(){}
@@ -167,7 +167,7 @@ class IPLinearFollowedByMultiplePowerLawJ2IsotropicHardening : public IPJ2Isotro
 
  protected:
  public:
-  IPLinearFollowedByMultiplePowerLawJ2IsotropicHardening();
+  IPLinearFollowedByMultiplePowerLawJ2IsotropicHardening(const double R0_);
   IPLinearFollowedByMultiplePowerLawJ2IsotropicHardening(const IPLinearFollowedByMultiplePowerLawJ2IsotropicHardening &source);
   virtual IPLinearFollowedByMultiplePowerLawJ2IsotropicHardening &operator=(const IPJ2IsotropicHardening &source);
   virtual ~IPLinearFollowedByMultiplePowerLawJ2IsotropicHardening(){}
@@ -181,7 +181,7 @@ class IPLinearFollowedByMultiplePowerLawJ2IsotropicHardening : public IPJ2Isotro
 
 class IPPolynomialJ2IsotropicHardening : public IPJ2IsotropicHardening{
   public:
-    IPPolynomialJ2IsotropicHardening();
+    IPPolynomialJ2IsotropicHardening(const double R0_);
     IPPolynomialJ2IsotropicHardening(const IPPolynomialJ2IsotropicHardening &source);
     virtual IPPolynomialJ2IsotropicHardening &operator=(const IPJ2IsotropicHardening &source);
     virtual ~IPPolynomialJ2IsotropicHardening(){}
@@ -191,7 +191,7 @@ class IPPolynomialJ2IsotropicHardening : public IPJ2IsotropicHardening{
 
 class IPTwoExpJ2IsotropicHaderning: public IPJ2IsotropicHardening{
   public:
-    IPTwoExpJ2IsotropicHaderning();
+    IPTwoExpJ2IsotropicHaderning(const double R0_);
     IPTwoExpJ2IsotropicHaderning(const IPTwoExpJ2IsotropicHaderning &source);
     virtual IPTwoExpJ2IsotropicHaderning &operator=(const IPJ2IsotropicHardening &source);
     virtual ~IPTwoExpJ2IsotropicHaderning(){}
diff --git a/NonLinearSolver/internalPoints/ipHyperelastic.cpp b/NonLinearSolver/internalPoints/ipHyperelastic.cpp
index dfc984da4cb41d7c710d16436366478c165e767e..918cf33e812b1c319e16c500ea34a67280ee7ac7 100644
--- a/NonLinearSolver/internalPoints/ipHyperelastic.cpp
+++ b/NonLinearSolver/internalPoints/ipHyperelastic.cpp
@@ -57,7 +57,6 @@ void IPHyperViscoElastic::restart() {
 
 IPHyperViscoElastoPlastic::IPHyperViscoElastoPlastic(const J2IsotropicHardening* comp,
                     const J2IsotropicHardening* trac,
-                    const J2IsotropicHardening* shear,
                     const kinematicHardening* kin, const int N):IPHyperViscoElastic(N),
                     _backsig(0),_Fp(1.),_epspbarre(0.),_nup(0.),
                     _epspCompression(0.),_epspTraction(0.),_epspShear(0.),
@@ -67,12 +66,10 @@ IPHyperViscoElastoPlastic::IPHyperViscoElastoPlastic(const J2IsotropicHardening*
 
   _ipCompression = NULL;
   _ipTraction = NULL;
-  _ipShear = NULL;
   _ipKinematic = NULL;
 
   if (comp!= NULL)  comp->createIPVariable(_ipCompression);
   if (trac != NULL) trac->createIPVariable(_ipTraction);
-  if (shear != NULL)  shear->createIPVariable(_ipShear);
   if (kin != NULL) kin->createIPVariable(_ipKinematic);
 };
 
@@ -92,11 +89,6 @@ IPHyperViscoElastoPlastic::IPHyperViscoElastoPlastic(const IPHyperViscoElastoPla
   else
    _ipTraction = NULL;
 
-  if (src._ipShear!= NULL)
-    _ipShear =dynamic_cast<IPJ2IsotropicHardening*> (src._ipShear->clone());
-  else
-    _ipShear = NULL;
-
   if (src._ipKinematic != NULL)
     _ipKinematic = dynamic_cast<IPKinematicHardening*>(src._ipKinematic->clone());
   else
@@ -121,11 +113,11 @@ IPHyperViscoElastoPlastic& IPHyperViscoElastoPlastic::operator =(const IPVariabl
     _DgammaDF = ps->_DgammaDF;
     _gF = ps->_gF;
     _dgFdF = ps->_dgFdF;
-    
+
     _plasticEnergy = ps->_plasticEnergy;
     _dissipationActive = ps->_dissipationActive;
     _dissipationBlocked = ps->_dissipationBlocked;
-    
+
     if ( ps->_ipCompression != NULL) {
       if (_ipCompression == NULL){
         _ipCompression = dynamic_cast<IPJ2IsotropicHardening*>(ps->_ipCompression->clone());
@@ -134,7 +126,7 @@ IPHyperViscoElastoPlastic& IPHyperViscoElastoPlastic::operator =(const IPVariabl
         _ipCompression->operator=(*dynamic_cast<const IPJ2IsotropicHardening*>(ps->_ipCompression));
       }
     }
-    
+
      if ( ps->_ipTraction != NULL) {
       if (_ipTraction == NULL){
         _ipTraction = dynamic_cast<IPJ2IsotropicHardening*>(ps->_ipTraction->clone());
@@ -143,16 +135,7 @@ IPHyperViscoElastoPlastic& IPHyperViscoElastoPlastic::operator =(const IPVariabl
         _ipTraction->operator=(*dynamic_cast<const IPJ2IsotropicHardening*>(ps->_ipTraction));
       }
     }
-    
-    if ( ps->_ipShear != NULL) {
-      if (_ipShear == NULL){
-        _ipShear = dynamic_cast<IPJ2IsotropicHardening*>(ps->_ipShear->clone());
-      }
-      else{
-        _ipShear->operator=(*dynamic_cast<const IPJ2IsotropicHardening*>(ps->_ipShear));
-      }
-    }
-    
+
     if ( ps->_ipKinematic != NULL) {
       if (_ipKinematic == NULL){
         _ipKinematic = dynamic_cast<IPKinematicHardening*>(ps->_ipKinematic->clone());
@@ -161,7 +144,7 @@ IPHyperViscoElastoPlastic& IPHyperViscoElastoPlastic::operator =(const IPVariabl
         _ipKinematic->operator=(*dynamic_cast<const IPKinematicHardening*>(ps->_ipKinematic));
       }
     }
-    
+
   }
   return *this;
 };
@@ -171,8 +154,6 @@ IPHyperViscoElastoPlastic::~IPHyperViscoElastoPlastic(){
   _ipCompression = NULL;
   if (_ipTraction != NULL) delete _ipTraction;
   _ipTraction = NULL;
-  if (_ipShear != NULL) delete _ipShear;
-  _ipShear = NULL;
   if (_ipKinematic!= NULL) delete _ipKinematic;
   _ipKinematic = NULL;
 };
@@ -184,8 +165,6 @@ void IPHyperViscoElastoPlastic::restart() {
     restartManager::restart(_ipCompression);
   if (_ipTraction != NULL)
     restartManager::restart(_ipTraction);
-  if (_ipShear != NULL)
-    restartManager::restart(_ipShear);
   if (_ipKinematic != NULL)
     restartManager::restart(_ipKinematic);
 
@@ -296,17 +275,6 @@ IPJ2IsotropicHardening& IPHyperViscoElastoPlastic::getRefToIPTractionHardening()
   return *_ipTraction;
 };
 
-const IPJ2IsotropicHardening& IPHyperViscoElastoPlastic::getConstRefToIPShearHardening() const{
-  if(_ipShear==NULL)
-      Msg::Error("IPHyperViscoElastoPlastic: _ipShear not initialized");
-  return *_ipShear;
-};
-IPJ2IsotropicHardening& IPHyperViscoElastoPlastic::getRefToIPShearHardening(){
-  if(_ipShear==NULL)
-      Msg::Error("IPHyperViscoElastoPlastic: _ipShear not initialized");
-  return *_ipShear;
-};
-
 const IPKinematicHardening& IPHyperViscoElastoPlastic::getConstRefToKinematicHardening() const{
   if (_ipKinematic == NULL)
     Msg::Error("IPHyperViscoElastoPlastic: _ipKinematic not initialized");
diff --git a/NonLinearSolver/internalPoints/ipHyperelastic.h b/NonLinearSolver/internalPoints/ipHyperelastic.h
index c060774750325500a1491caa3c859f779782ca90..f8131d2fae863af3bc8fc56abb2877af55ca8138 100644
--- a/NonLinearSolver/internalPoints/ipHyperelastic.h
+++ b/NonLinearSolver/internalPoints/ipHyperelastic.h
@@ -25,34 +25,34 @@ class IPHyperViscoElastic : public IPVariableMechanics{
     double _elasticEnergy; // elastic energy stored
     STensor3 _Ee; // elastic strain
     STensor3 _kirchhoff; // corotational Kirchhoff stress
-    
+
     double _irreversibleEnergy;
     STensor3 _DirreversibleEnergyDF;
-    
+
   public:
     IPHyperViscoElastic(const int N);
     IPHyperViscoElastic(const IPHyperViscoElastic& src);
     virtual IPHyperViscoElastic& operator=(const IPVariable& src);
     virtual ~IPHyperViscoElastic(){};
-    
+
     virtual IPVariable* clone() const{return new IPHyperViscoElastic(*this);};
-    
+
     virtual STensor3& getRefToElasticStrain() {return _Ee;};
     virtual const STensor3& getConstRefToElasticStrain() const {return _Ee;};
-    
+
     virtual STensor3& getRefToCorotationalKirchhoffStress() {return _kirchhoff;};
     virtual const STensor3& getConstRefToCorotationalKirchhoffStress() const {return _kirchhoff;};
-    
+
     virtual double defoEnergy() const{return _elasticEnergy;}
     virtual double& getRefToElasticEnergy() {return _elasticEnergy;};
     virtual double plasticEnergy() const{return 0.;}
-    
+
     virtual double irreversibleEnergy() const {return _irreversibleEnergy;};
     virtual double & getRefToIrreversibleEnergy() {return _irreversibleEnergy;};
-    
+
     virtual STensor3& getRefToDIrreversibleEnergyDF() {return _DirreversibleEnergyDF;};
     virtual const STensor3& getConstRefToDIrreversibleEnergyDF() const{return _DirreversibleEnergyDF;};
-    
+
     virtual void restart();
 };
 
@@ -60,10 +60,9 @@ class IPHyperViscoElastoPlastic : public IPHyperViscoElastic{
   public: // defined with public to free access
     IPJ2IsotropicHardening* _ipCompression; // ip in compression
     IPJ2IsotropicHardening* _ipTraction; // ip in traction
-    IPJ2IsotropicHardening* _ipShear; // ip in shear
     IPKinematicHardening* _ipKinematic;
 
-   
+
     STensor3 _DgammaDF; // DequivalentPlasticStrainDF
     STensor3 _backsig; // backstress
     STensor3 _Fe; // elastic strain
@@ -84,21 +83,21 @@ class IPHyperViscoElastoPlastic : public IPHyperViscoElastic{
     double _r;  // failure onset
     double _gF; //
     STensor3 _dgFdF;
-    
+
     double _plasticEnergy;
     bool _dissipationBlocked;
     bool _dissipationActive;
 
   public:
     IPHyperViscoElastoPlastic(const J2IsotropicHardening* comp,
-                    const J2IsotropicHardening* trac,const J2IsotropicHardening* shear,
+                    const J2IsotropicHardening* trac,
                     const kinematicHardening* kin, const int N);
     IPHyperViscoElastoPlastic(const IPHyperViscoElastoPlastic& src);
     virtual IPHyperViscoElastoPlastic& operator =(const IPVariable &source);
     virtual ~IPHyperViscoElastoPlastic();
 
     virtual IPVariable* clone() const{return new IPHyperViscoElastoPlastic(*this);};
-	
+
     virtual bool& getRefToDissipationActive(){return _dissipationActive;};
     virtual bool dissipationIsActive() const {return _dissipationActive;};
 
@@ -146,7 +145,7 @@ class IPHyperViscoElastoPlastic : public IPHyperViscoElastic{
 
     virtual const double getConstRefToPlasticPoissonRatio() const;
     virtual double& getRefToPlasticPoissonRatio();
-    
+
     virtual const double& getConstRefToPlasticDeformationRate() const;
     virtual double& getRefToPlasticDeformationRate();
 
@@ -156,12 +155,9 @@ class IPHyperViscoElastoPlastic : public IPHyperViscoElastic{
     virtual const IPJ2IsotropicHardening& getConstRefToIPTractionHardening() const;
     virtual IPJ2IsotropicHardening& getRefToIPTractionHardening();
 
-    virtual const IPJ2IsotropicHardening& getConstRefToIPShearHardening() const;
-    virtual IPJ2IsotropicHardening& getRefToIPShearHardening();
-
     virtual const IPKinematicHardening& getConstRefToKinematicHardening() const;
     virtual IPKinematicHardening& getRefToKinematicHardening();
-    
+
     virtual bool IPKinematicHardeningIsSaturated() const{
       if (_ipKinematic != NULL) return _ipKinematic->isSaturated();
       else return false;
@@ -169,7 +165,6 @@ class IPHyperViscoElastoPlastic : public IPHyperViscoElastic{
     virtual bool IPJ2IsotropicHardeningIsSaturated() const{
       if (_ipCompression!=NULL) return _ipCompression->isSaturated();
       else if (_ipTraction != NULL) return _ipTraction->isSaturated();
-      else if (_ipShear != NULL) return _ipShear->isSaturated();
       else return false;
     }
     virtual bool isSaturated() const{
@@ -177,24 +172,19 @@ class IPHyperViscoElastoPlastic : public IPHyperViscoElastic{
       if (IPJ2IsotropicHardeningIsSaturated()) return true;
       return false;
     }
-    
+
     virtual void saturate(const bool fl){
       if (_ipKinematic != NULL){
         _ipKinematic->getRefToSaturationState() = fl;
       }
-      
+
       if (_ipCompression != NULL){
         _ipCompression->getRefToSaturationState() = fl;
       }
-      
+
       if (_ipTraction != NULL){
         _ipTraction->getRefToSaturationState() = fl;
       }
-      
-      if (_ipShear != NULL){
-        _ipShear->getRefToSaturationState() = fl;
-      }
-    
     };
 };
 
diff --git a/NonLinearSolver/internalPoints/ipNonLocalDamage.cpp b/NonLinearSolver/internalPoints/ipNonLocalDamage.cpp
index 1d81adccbde1301d022819bdf4a974786fe432f9..a75a0ea64a3a47962f12dd5c707eb94e7828e3ca 100644
--- a/NonLinearSolver/internalPoints/ipNonLocalDamage.cpp
+++ b/NonLinearSolver/internalPoints/ipNonLocalDamage.cpp
@@ -211,9 +211,193 @@ void IPNonLocalDamage::restart()
   restartManager::restart(_elasticEne);
   restartManager::restart(_plasticEne);
   restartManager::restart(_dissipationBlocked);
+
+  restartManager::restart(pos_vfi);
+  restartManager::restart(pos_euler);
+  restartManager::restart(pos_aspR); 
+  restartManager::restart(pos_ME);
+  restartManager::restart(pos_Mnu);
+  restartManager::restart(pos_Msy0);
+  restartManager::restart(pos_Mhmod1);
+  restartManager::restart(pos_Mhmod2);
+  restartManager::restart(pos_Mhexp);
+  restartManager::restart(pos_DamParm1);
+  restartManager::restart(pos_DamParm2);
+
+  restartManager::restart(pos_INCDamParm1);
+  restartManager::restart(pos_INCDamParm2);
+
+  restartManager::restart(Randnum);
   return;
 }
 
+// MPI function to define value to be commmunicated between processes
+#if defined(HAVE_MPI)
+int IPNonLocalDamage::numberValuesToCommunicateMPI()const
+{   
+   int nb=Randnum;
+   if(pos_euler !=0)  
+     nb+=2;
+   //Msg::Error("Use %d values",nb);
+   return nb;
+}
+void IPNonLocalDamage::fillValuesToCommunicateMPI(double *arrayMPI)const
+{
+   //Msg::Error("Fill %d values",Randnum);
+   if(Randnum>0)
+   {
+     int i=0;
+     if(pos_vfi !=0)
+     {
+       arrayMPI[i]=_nldStatev[pos_vfi];
+       i++;
+     }
+     if(pos_aspR !=0)
+     {
+       arrayMPI[i]=_nldStatev[pos_aspR];
+       i++;
+     }
+     if(pos_ME !=0) 
+     {
+       arrayMPI[i]=_nldStatev[pos_ME];
+       i++;
+     }
+     if(pos_Mnu !=0) 
+     {
+       arrayMPI[i]=_nldStatev[pos_Mnu];
+       i++;
+     }
+     if(pos_Msy0 !=0) 
+     {
+       arrayMPI[i]=_nldStatev[pos_Msy0];
+       i++;
+     }
+     if(pos_Mhmod1 !=0) 
+     {
+       arrayMPI[i]=_nldStatev[pos_Mhmod1];
+       i++;
+     }
+     if(pos_Mhmod2 !=0) 
+     {
+       arrayMPI[i]=_nldStatev[pos_Mhmod2];
+       i++;
+     }
+     if(pos_Mhexp !=0)  
+     {
+       arrayMPI[i]=_nldStatev[pos_Mhexp];
+       i++;
+     }
+     if(pos_euler !=0)  
+     {
+       arrayMPI[i]=_nldStatev[pos_euler];
+       i++;
+       arrayMPI[i]=_nldStatev[pos_euler+1];
+       i++;
+       arrayMPI[i]=_nldStatev[pos_euler+2];
+       i++;
+     }
+     if(pos_DamParm1 !=0)  
+     {
+       arrayMPI[i]=_nldStatev[pos_DamParm1];
+       i++;
+     }
+     if(pos_DamParm2 !=0)  
+     {
+       arrayMPI[i]=_nldStatev[pos_DamParm2];
+       i++;
+     }
+     if(pos_INCDamParm1 !=0)  
+     {
+       arrayMPI[i]=_nldStatev[pos_INCDamParm1];
+       i++;
+     }
+     if(pos_INCDamParm2 !=0)  
+     {
+       arrayMPI[i]=_nldStatev[pos_INCDamParm2];
+       i++;
+     }
+   }
+};
+void IPNonLocalDamage::getValuesFromMPI(const double *arrayMPI)
+{
+   //Msg::Error("Get %d values",Randnum);
+   if(Randnum>0)
+   {
+     int i=0;
+     if(pos_vfi !=0)
+     {
+       _nldStatev[pos_vfi]=arrayMPI[i];
+       i++;
+     }
+     if(pos_aspR !=0)
+     {
+       _nldStatev[pos_aspR]=arrayMPI[i];
+       i++;
+     }
+     if(pos_ME !=0) 
+     {
+       _nldStatev[pos_ME]=arrayMPI[i];
+       i++;
+     }
+     if(pos_Mnu !=0) 
+     {
+       _nldStatev[pos_Mnu]=arrayMPI[i];
+       i++;
+     }
+     if(pos_Msy0 !=0) 
+     {
+       _nldStatev[pos_Msy0]=arrayMPI[i];
+       i++;
+     }
+     if(pos_Mhmod1 !=0) 
+     {
+       _nldStatev[pos_Mhmod1]=arrayMPI[i];
+       i++;
+     }
+     if(pos_Mhmod2 !=0) 
+     {
+       _nldStatev[pos_Mhmod2]=arrayMPI[i];
+       i++;
+     }
+     if(pos_Mhexp !=0)  
+     {
+       _nldStatev[pos_Mhexp]=arrayMPI[i];
+       i++;
+     }
+     if(pos_euler !=0)  
+     {
+       _nldStatev[pos_euler]=arrayMPI[i];
+       i++;
+       _nldStatev[pos_euler+1]=arrayMPI[i];
+       i++;
+       _nldStatev[pos_euler+2]=arrayMPI[i];
+       i++;
+     }
+     if(pos_DamParm1 !=0)  
+     {
+       _nldStatev[pos_DamParm1]=arrayMPI[i];
+       i++;
+     }
+     if(pos_DamParm2 !=0)  
+     {
+       _nldStatev[pos_DamParm2]=arrayMPI[i];
+       i++;
+     }
+     if(pos_INCDamParm1 !=0)  
+     {
+       _nldStatev[pos_INCDamParm1]=arrayMPI[i];
+       i++;
+     }
+     if(pos_INCDamParm2 !=0)  
+     {
+       _nldStatev[pos_INCDamParm2]=arrayMPI[i];
+       i++;
+     }
+   }
+
+};
+#endif // HAVE_MPI
+
 void IPNonLocalDamage::setCriticalDamage(const double DT, int idex){
   if(getPosIncMaxD()>0) //use MFH
   {
diff --git a/NonLinearSolver/internalPoints/ipNonLocalDamage.h b/NonLinearSolver/internalPoints/ipNonLocalDamage.h
index 9ab0028278972f163d63934b681665ffb105470d..b8d2a4f3655209a4a7b297b6b2618f092507091d 100644
--- a/NonLinearSolver/internalPoints/ipNonLocalDamage.h
+++ b/NonLinearSolver/internalPoints/ipNonLocalDamage.h
@@ -36,6 +36,22 @@ class IPNonLocalDamage : public IPVariableMechanics
   int _pos_inc_maxD;
   int _pos_mtx_maxD;
 
+// for stochastic
+  int pos_vfi;
+  int pos_euler;
+  int pos_aspR;
+  int pos_ME;
+  int pos_Mnu;
+  int pos_Msy0;
+  int pos_Mhmod1;
+  int pos_Mhmod2;
+  int pos_Mhexp;
+  int pos_DamParm1;
+  int pos_DamParm2;
+  int pos_INCDamParm1;
+  int pos_INCDamParm2;
+  int Randnum;
+
  public: // All data public to avoid the creation of function to access
 
 // x y z
@@ -79,7 +95,10 @@ class IPNonLocalDamage : public IPVariableMechanics
                             _nldFd_d_bar(0.), _nldpdFd(0.), _nldFddp(0.), _pos_str_mtx(-1), _pos_str_inc(-1),_pos_stn_mtx(-1),
                             _pos_stn_inc(-1), _pos_inc_vfi(-1), _pos_inc_ar(-1), _pos_inc_R (-1), _elasticEne(0.),  _pos_inc_Ja(-1),
                             _pos_mtx_Ja(-1), _pos_euler(-1), _pos_mtx_Dam(-1),_pos_inc_Dam(-1), _plasticEne(0.),_dissipationBlocked(false),  
-                            _pos_maxD(-1), _pos_inc_maxD(-1), _pos_mtx_maxD(-1)
+                            _pos_maxD(-1), _pos_inc_maxD(-1), _pos_mtx_maxD(-1), pos_vfi(0),
+                            pos_euler(0), pos_aspR(0), pos_ME(0), pos_Mnu(0), pos_Msy0(0), pos_Mhmod1(0),
+                            pos_Mhmod2(0), pos_Mhexp(0), pos_DamParm1(0), pos_DamParm2(0), 
+                            pos_INCDamParm1(0), pos_INCDamParm2(0), Randnum(0)
 
     {
        	mallocvector(&_nldStatev,_nldNsdv);
@@ -141,6 +160,26 @@ class IPNonLocalDamage : public IPVariableMechanics
        	mallocvector(&_nldStatev,_nldNsdv);
         copyvect(source._nldStatev,_nldStatev,_nldNsdv);
         _dissipationBlocked = source._dissipationBlocked;
+
+     pos_vfi = source.pos_vfi;
+     pos_euler = source.pos_euler;
+     pos_aspR = source.pos_aspR; 
+     pos_ME = source.pos_ME;
+     pos_Mnu = source.pos_Mnu;
+     pos_Msy0 = source.pos_Msy0;
+     pos_Mhmod1 = source.pos_Mhmod1;
+     pos_Mhmod2 = source.pos_Mhmod2;
+     pos_Mhexp = source.pos_Mhexp;
+     pos_DamParm1 = source.pos_DamParm1;
+     pos_DamParm2 = source.pos_DamParm2;
+
+     pos_INCDamParm1 = source.pos_INCDamParm1;
+     pos_INCDamParm2 = source.pos_INCDamParm2;
+
+     Randnum = source.Randnum;
+
+
+
     }
   IPNonLocalDamage &operator = (const IPVariable &_source)
   {
@@ -186,6 +225,24 @@ class IPNonLocalDamage : public IPVariableMechanics
       if(_nldNsdv !=source->_nldNsdv) Msg::Error("IPNonLocalDamage do not have the same number of internal variables");
       copyvect(source->_nldStatev,_nldStatev,_nldNsdv);
       _dissipationBlocked = source->_dissipationBlocked;
+
+     pos_vfi = source->pos_vfi;
+     pos_euler = source->pos_euler;
+     pos_aspR = source->pos_aspR; 
+     pos_ME = source->pos_ME;
+     pos_Mnu = source->pos_Mnu;
+     pos_Msy0 = source->pos_Msy0;
+     pos_Mhmod1 = source->pos_Mhmod1;
+     pos_Mhmod2 = source->pos_Mhmod2;
+     pos_Mhexp = source->pos_Mhexp;
+     pos_DamParm1 = source->pos_DamParm1;
+     pos_DamParm2 = source->pos_DamParm2;
+
+     pos_INCDamParm1 = source->pos_INCDamParm1;
+     pos_INCDamParm2 = source->pos_INCDamParm2;
+
+     Randnum = source->Randnum;
+
       return *this;
   }
   virtual ~IPNonLocalDamage()
@@ -257,6 +314,43 @@ class IPNonLocalDamage : public IPVariableMechanics
   virtual void restart();
 
 
+// for stochastic
+  virtual int getPos_vfi() const { return pos_vfi;};
+  virtual int getPos_euler() const { return pos_euler;};
+  virtual int getPos_aspR() const { return pos_aspR;};
+  virtual int getPos_ME() const { return pos_ME;};
+  virtual int getPos_Mnu() const { return pos_Mnu;};
+  virtual int getPos_Msy0() const { return pos_Msy0;};
+  virtual int getPos_Mhmod1() const { return pos_Mhmod1;};
+  virtual int getPos_Mhmod2() const { return pos_Mhmod2;};
+  virtual int getPos_Mhexp() const { return pos_Mhexp;};
+  virtual int getPos_DamParm1() const { return pos_DamParm1;};
+  virtual int getPos_DamParm2() const { return pos_DamParm2;};
+  virtual int getPos_INCDamParm1() const { return pos_INCDamParm1;};
+  virtual int getPos_INCDamParm2() const { return pos_INCDamParm2;};
+  virtual int getRandnum() const { return Randnum;};
+
+  virtual void setPos_vfi( int p ) { pos_vfi=p;};
+  virtual void setPos_euler( int p ) { pos_euler=p;};
+  virtual void setPos_aspR( int p ) { pos_aspR=p;};
+  virtual void setPos_ME( int p ) {  pos_ME=p;};
+  virtual void setPos_Mnu( int p ) {  pos_Mnu=p;};
+  virtual void setPos_Msy0( int p ) {  pos_Msy0=p;};
+  virtual void setPos_Mhmod1( int p ) {  pos_Mhmod1=p;};
+  virtual void setPos_Mhmod2( int p ) {  pos_Mhmod2=p;};
+  virtual void setPos_Mhexp( int p ) {  pos_Mhexp=p;};
+  virtual void setPos_DamParm1( int p ) {  pos_DamParm1=p;};
+  virtual void setPos_DamParm2( int p ) {  pos_DamParm2=p;};
+  virtual void setPos_INCDamParm1( int p ) {  pos_INCDamParm1=p;};
+  virtual void setPos_INCDamParm2( int p ) {  pos_INCDamParm2=p;};
+  virtual void setRandnum( int p ) {  Randnum=p;};
+
+  // MPI function to define value to be commmunicated between processes
+   #if defined(HAVE_MPI)
+  virtual int numberValuesToCommunicateMPI()const;
+  virtual void fillValuesToCommunicateMPI(double *arrayMPI)const;
+  virtual void getValuesFromMPI(const double *arrayMPI);
+  #endif // HAVE_MPI
 
 };
 
diff --git a/NonLinearSolver/internalPoints/ipNonLocalDamageHyperelastic.cpp b/NonLinearSolver/internalPoints/ipNonLocalDamageHyperelastic.cpp
index 3140ef947393329c896679de16f6758b59c5ad43..64431a50962a8f1d6bd06e3a9d42a95cd1179ca9 100644
--- a/NonLinearSolver/internalPoints/ipNonLocalDamageHyperelastic.cpp
+++ b/NonLinearSolver/internalPoints/ipNonLocalDamageHyperelastic.cpp
@@ -12,8 +12,8 @@
 #include "restartManager.h"
 
 IPHyperViscoElastoPlasticLocalDamage::IPHyperViscoElastoPlasticLocalDamage(const J2IsotropicHardening* comp,
-                    const J2IsotropicHardening* trac,const J2IsotropicHardening* shear, const kinematicHardening* kin, const int N,
-                    const DamageLaw *daml): IPHyperViscoElastoPlastic(comp,trac,shear,kin,N),
+                    const J2IsotropicHardening* trac, const kinematicHardening* kin, const int N,
+                    const DamageLaw *daml): IPHyperViscoElastoPlastic(comp,trac,kin,N),
                      _damageEnergy(0.)
 {
   ipvDam=NULL;
@@ -32,7 +32,7 @@ IPHyperViscoElastoPlasticLocalDamage::~IPHyperViscoElastoPlasticLocalDamage(){
 
 IPHyperViscoElastoPlasticLocalDamage::IPHyperViscoElastoPlasticLocalDamage(const IPHyperViscoElastoPlasticLocalDamage &source):
       IPHyperViscoElastoPlastic(source),_damageEnergy(source._damageEnergy){
-  
+
   ipvDam = NULL;
   if(source.ipvDam != NULL)
   {
@@ -45,7 +45,7 @@ IPHyperViscoElastoPlasticLocalDamage& IPHyperViscoElastoPlasticLocalDamage::oper
   if(src != NULL)
   {
     _damageEnergy = src->_damageEnergy;
-		
+
     if(src->ipvDam != NULL)
     {
 			if (ipvDam!= NULL)
@@ -70,8 +70,8 @@ void IPHyperViscoElastoPlasticLocalDamage::restart()
 
 
 IPHyperViscoElastoPlasticNonLocalDamage::IPHyperViscoElastoPlasticNonLocalDamage(const J2IsotropicHardening* comp,
-                    const J2IsotropicHardening* trac,const J2IsotropicHardening* shear, const kinematicHardening* kin, const int N,
-                    const CLengthLaw *cll, const DamageLaw *daml): IPHyperViscoElastoPlasticLocalDamage(comp,trac,shear,kin,N,daml),
+                    const J2IsotropicHardening* trac, const kinematicHardening* kin, const int N,
+                    const CLengthLaw *cll, const DamageLaw *daml): IPHyperViscoElastoPlasticLocalDamage(comp,trac,kin,N,daml),
                     _nonlocalPlasticStrain(0.), _DirreversibleEnergyDNonLocalVariable(0.)
 {
   ipvCL=NULL;
@@ -87,7 +87,7 @@ IPHyperViscoElastoPlasticNonLocalDamage::~IPHyperViscoElastoPlasticNonLocalDamag
 };
 
 IPHyperViscoElastoPlasticNonLocalDamage::IPHyperViscoElastoPlasticNonLocalDamage(const IPHyperViscoElastoPlasticNonLocalDamage &source):
-      IPHyperViscoElastoPlasticLocalDamage(source), _nonlocalPlasticStrain(source._nonlocalPlasticStrain), 
+      IPHyperViscoElastoPlasticLocalDamage(source), _nonlocalPlasticStrain(source._nonlocalPlasticStrain),
       _DirreversibleEnergyDNonLocalVariable(source._DirreversibleEnergyDNonLocalVariable){
   ipvCL = NULL;
   if(source.ipvCL != NULL)
@@ -113,7 +113,7 @@ IPHyperViscoElastoPlasticNonLocalDamage& IPHyperViscoElastoPlasticNonLocalDamage
 		else{
 			if(ipvCL != NULL) delete ipvCL; ipvCL = NULL;
 		}
-   
+
   }
   return *this;
 };
@@ -127,8 +127,8 @@ void IPHyperViscoElastoPlasticNonLocalDamage::restart()
 };
 
 IPHyperViscoElastoPlasticMultipleLocalDamage::IPHyperViscoElastoPlasticMultipleLocalDamage(const J2IsotropicHardening* comp,
-                const J2IsotropicHardening* trac,const J2IsotropicHardening* shear, const kinematicHardening* kin,
-                const int N, const std::vector<DamageLaw*>& dl): IPHyperViscoElastoPlastic(comp,trac,shear,kin,N),
+                const J2IsotropicHardening* trac,const kinematicHardening* kin,
+                const int N, const std::vector<DamageLaw*>& dl): IPHyperViscoElastoPlastic(comp,trac,kin,N),
                 _damageEnergy(0.){
   numNonLocalVariable = dl.size();
   ipvDam.clear();
@@ -185,9 +185,9 @@ void IPHyperViscoElastoPlasticMultipleLocalDamage::restart(){
 
 
 IPHyperViscoElastoPlasticMultipleNonLocalDamage::IPHyperViscoElastoPlasticMultipleNonLocalDamage(const J2IsotropicHardening* comp,
-                const J2IsotropicHardening* trac,const J2IsotropicHardening* shear, const kinematicHardening* kin,
-                const int N, const std::vector<CLengthLaw*>& cll, const std::vector<DamageLaw*>& dl): 
-                IPHyperViscoElastoPlasticMultipleLocalDamage(comp,trac,shear,kin,N,dl),
+                const J2IsotropicHardening* trac, const kinematicHardening* kin,
+                const int N, const std::vector<CLengthLaw*>& cll, const std::vector<DamageLaw*>& dl):
+                IPHyperViscoElastoPlasticMultipleLocalDamage(comp,trac,kin,N,dl),
                 _nonlocalEqPlasticStrain(0.),_nonlocalFailurePlasticity(0.){
   ipvCL.clear();
   _DirreversibleEnergyDNonLocalVariable.clear();
diff --git a/NonLinearSolver/internalPoints/ipNonLocalDamageHyperelastic.h b/NonLinearSolver/internalPoints/ipNonLocalDamageHyperelastic.h
index 071b291eea4625365c737c8eb4df04daafcc31ef..cc200f57f5f560ecd3b6a567f83bf565f2847aed 100644
--- a/NonLinearSolver/internalPoints/ipNonLocalDamageHyperelastic.h
+++ b/NonLinearSolver/internalPoints/ipNonLocalDamageHyperelastic.h
@@ -26,7 +26,7 @@ class IPHyperViscoElastoPlasticLocalDamage : public IPHyperViscoElastoPlastic
 
  public:
   IPHyperViscoElastoPlasticLocalDamage(const J2IsotropicHardening* comp,
-                    const J2IsotropicHardening* trac,const J2IsotropicHardening* shear, const kinematicHardening* kin,
+                    const J2IsotropicHardening* trac, const kinematicHardening* kin,
                     const int N, const DamageLaw *dl);
   virtual ~IPHyperViscoElastoPlasticLocalDamage();
 
@@ -34,7 +34,7 @@ class IPHyperViscoElastoPlasticLocalDamage : public IPHyperViscoElastoPlastic
   virtual IPHyperViscoElastoPlasticLocalDamage& operator=(const IPVariable &source);
 
   virtual IPVariable* clone() const{return new IPHyperViscoElastoPlasticLocalDamage(*this);}
-  
+
   virtual double damageEnergy() const {return _damageEnergy;};
   virtual double& getRefToDamageEnergy() {return _damageEnergy;};
 
@@ -96,7 +96,7 @@ class IPHyperViscoElastoPlasticNonLocalDamage : public IPHyperViscoElastoPlastic
 
  public:
   IPHyperViscoElastoPlasticNonLocalDamage(const J2IsotropicHardening* comp,
-                    const J2IsotropicHardening* trac,const J2IsotropicHardening* shear, const kinematicHardening* kin,
+                    const J2IsotropicHardening* trac, const kinematicHardening* kin,
                     const int N,
                     const CLengthLaw *cll, const DamageLaw *dl);
   virtual ~IPHyperViscoElastoPlasticNonLocalDamage();
@@ -105,7 +105,7 @@ class IPHyperViscoElastoPlasticNonLocalDamage : public IPHyperViscoElastoPlastic
   virtual IPHyperViscoElastoPlasticNonLocalDamage& operator=(const IPVariable &source);
 
   virtual IPVariable* clone() const{return new IPHyperViscoElastoPlasticNonLocalDamage(*this);}
-  
+
   virtual const double& getDIrreversibleEnergyDNonLocalVariable() const {return _DirreversibleEnergyDNonLocalVariable;};
 	virtual double& getRefToDIrreversibleEnergyDNonLocalVariable() {return _DirreversibleEnergyDNonLocalVariable;};
 
@@ -145,20 +145,20 @@ class IPHyperViscoElastoPlasticMultipleLocalDamage : public IPHyperViscoElastoPl
   protected:
     int numNonLocalVariable;
     std::vector<IPDamage*> ipvDam;
-    
+
     double _damageEnergy;
 
   public:
     IPHyperViscoElastoPlasticMultipleLocalDamage(const J2IsotropicHardening* comp,
-                    const J2IsotropicHardening* trac,const J2IsotropicHardening* shear, const kinematicHardening* kin,
+                    const J2IsotropicHardening* trac, const kinematicHardening* kin,
                     const int N, const std::vector<DamageLaw*>& dl);
     virtual ~IPHyperViscoElastoPlasticMultipleLocalDamage();
     IPHyperViscoElastoPlasticMultipleLocalDamage(const IPHyperViscoElastoPlasticMultipleLocalDamage& source);
     virtual IPHyperViscoElastoPlasticMultipleLocalDamage& operator=(const IPVariable& source);
-    
+
     virtual double damageEnergy() const {return _damageEnergy;};
     virtual double& getRefToDamageEnergy() {return _damageEnergy;};
-    
+
     virtual int getNumNonLocalVariable() const{return numNonLocalVariable;};
     virtual IPVariable* clone() const{return new IPHyperViscoElastoPlasticMultipleLocalDamage(*this);}
 
@@ -221,7 +221,7 @@ class IPHyperViscoElastoPlasticMultipleNonLocalDamage : public IPHyperViscoElast
 
   public:
     IPHyperViscoElastoPlasticMultipleNonLocalDamage(const J2IsotropicHardening* comp,
-                    const J2IsotropicHardening* trac,const J2IsotropicHardening* shear, const kinematicHardening* kin,
+                    const J2IsotropicHardening* trac, const kinematicHardening* kin,
                     const int N, const std::vector<CLengthLaw*>& cll, const std::vector<DamageLaw*>& dl);
     virtual ~IPHyperViscoElastoPlasticMultipleNonLocalDamage();
     IPHyperViscoElastoPlasticMultipleNonLocalDamage(const IPHyperViscoElastoPlasticMultipleNonLocalDamage& source);
@@ -229,14 +229,14 @@ class IPHyperViscoElastoPlasticMultipleNonLocalDamage : public IPHyperViscoElast
 
     virtual IPVariable* clone() const{return new IPHyperViscoElastoPlasticMultipleNonLocalDamage(*this);}
 
-    
+
     virtual const double& getDIrreversibleEnergyDNonLocalVariable(const int i) const {return _DirreversibleEnergyDNonLocalVariable[i];};
     virtual double& getRefToDIrreversibleEnergyDNonLocalVariable(const int i) {return _DirreversibleEnergyDNonLocalVariable[i];};
 
     virtual void restart();
     virtual double getCurrentPlasticStrain() const { return _epspbarre;}
     virtual double &getRefToCurrentPlasticStrain() { return _epspbarre;}
-    
+
     virtual double getEffectivePlasticStrain() const { return _nonlocalEqPlasticStrain;}
     virtual double &getRefToEffectivePlasticStrain() { return _nonlocalEqPlasticStrain;}
 
diff --git a/NonLinearSolver/internalPoints/ipTFA.cpp b/NonLinearSolver/internalPoints/ipTFA.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..efed9959c8bb4840d728dac8723876496cae0be5
--- /dev/null
+++ b/NonLinearSolver/internalPoints/ipTFA.cpp
@@ -0,0 +1,86 @@
+//
+// Description: storing class for TFA law
+//
+//
+// Author:  <Kevin Spilker>, (C) 2019
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+#include "ipTFA.h"
+#include "restartManager.h"
+#include  "STensorOperations.h"
+
+IPTFA::IPTFA() : IPVariableMechanics() {Msg::Error("Cannot construct default IPTFA");}
+
+IPTFA::IPTFA(const IPTFA &source) : IPVariableMechanics(source), _clustersNb(source._clustersNb)
+{
+  _ipv.resize(_clustersNb);
+  _strain.resize(_clustersNb);
+  _stress.resize(_clustersNb);
+  _plasticstrain_eq.resize(_clustersNb);
+  for(int i=0; i<_clustersNb; i++)
+  {
+    _strain[i]=source._strain[i];
+    _stress[i]=source._stress[i];
+    _plasticstrain_eq[i]=source._plasticstrain_eq[i];
+    if(source._ipv[i]!=NULL)
+      _ipv[i]=source._ipv[i]->clone();
+    else
+      _ipv[i]=NULL;
+  }
+
+}
+IPTFA& IPTFA::operator=(const IPVariable &source)
+{
+  IPVariableMechanics::operator=(source);
+  const IPTFA* src = dynamic_cast<const IPTFA*>(&source);
+  if (src != NULL)
+  {
+    _clustersNb = src->_clustersNb;
+    _ipv.resize(_clustersNb);
+    _strain.resize(_clustersNb);
+    _stress.resize(_clustersNb);
+    _plasticstrain_eq.resize(_clustersNb);
+    _clusterNb = src->_clusterNb;
+    for(int i=0; i<_clustersNb; i++)
+    {
+      _strain[i]=src->_strain[i];
+      _stress[i]=src->_stress[i];
+      _plasticstrain_eq[i]=src->_plasticstrain_eq[i];
+      if(src->_ipv[i]!=NULL)
+        _ipv[i]=src->_ipv[i]->clone();
+      else
+        _ipv[i]=NULL;
+    }
+  }
+  return *this;
+}
+
+void IPTFA::restart()
+{
+  IPVariableMechanics::restart();
+  restartManager::restart(_clustersNb);
+  for(std::vector<IPVariable*>::iterator it=_ipv.begin(); it!=_ipv.end(); it++)
+    (*it)->restart();
+  restartManager::restart(_strain);
+  restartManager::restart(_stress);
+  restartManager::restart(_plasticstrain_eq);
+  return;
+}
+
+IPTFA::IPTFA(int clustersNb) : IPVariableMechanics(), _clustersNb(clustersNb) 
+{
+  _ipv.resize(_clustersNb);
+  _strain.resize(_clustersNb);
+  _stress.resize(_clustersNb);
+  _plasticstrain_eq.resize(_clustersNb);
+  for(int i=0; i<_clustersNb; i++)
+  {
+    _ipv[i]=NULL;
+    STensorOperation::zero(_strain[i]);
+    STensorOperation::zero(_stress[i]);
+    STensorOperation::zero(_plasticstrain_eq[i]);
+  }
+}
+
diff --git a/NonLinearSolver/internalPoints/ipTFA.h b/NonLinearSolver/internalPoints/ipTFA.h
new file mode 100644
index 0000000000000000000000000000000000000000..fffef3af4a42ae38c6cbe7de30623a35f00c8a3b
--- /dev/null
+++ b/NonLinearSolver/internalPoints/ipTFA.h
@@ -0,0 +1,108 @@
+//
+// Description: storing class for TFA material law
+// Author:  <Kevin Spilker>, (C) 2019
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+
+#ifndef IPTFA_H_
+#define IPTFA_H_
+#include "ipvariable.h"
+#include "STensor3.h"
+class IPTFA : public IPVariableMechanics
+{
+ protected:
+   int _clustersNb; //total number of clusters
+   int _clusterNb;
+   std::vector<IPVariable*> _ipv; //underlying law ipv
+
+   std::vector<STensor3> _strain; //underlying law ipv
+   std::vector<STensor3> _stress;
+ public:
+  IPTFA(int clnb);
+  IPTFA(const IPTFA &source);
+  IPTFA& operator=(const IPVariable &source);
+  std::vector<double> _plasticstrain_eq;
+  virtual int getClustersNb() const { return _clustersNb;};
+  virtual int getClusterNb() const { return _clusterNb;};
+  virtual void restart();
+  virtual IPVariable* clone() const {return new IPTFA(*this);};
+  virtual ~IPTFA()
+  {
+    for(int i=0;i<_clustersNb;i++)
+    {
+      if(_ipv[i]!=NULL)
+        delete _ipv[i];
+    }
+  }
+  const IPVariable *getConstRefToIPv(int cl) const
+  {
+     if(cl>=_clustersNb) Msg::Error("IPTFA::getConstRefToIPv cluster %d is not defined",cl);
+     if(_ipv[cl]==NULL)  Msg::Error("IPTFA::getConstRefToIPv cluster %d is not initialized",cl);
+     return _ipv[cl];
+  }
+  IPVariable *getRefToIPv(int cl)
+  {
+     if(cl>=_clustersNb) Msg::Error("IPTFA::getRefToIPv cluster %d is not defined",cl);
+     if(_ipv[cl]==NULL)  Msg::Error("IPTFA::gettRefToIPv cluster %d is not initialized",cl);
+     return _ipv[cl];
+  }
+
+  const STensor3 &getConstRefToStrain(int cl) const
+  {
+     if(cl>=_clustersNb) Msg::Error("IPTFA::getConstRefToStrain cluster %d is not defined",cl);
+     return _strain[cl];
+  }
+  STensor3 &getRefToStrain(int cl)
+  {
+     if(cl>=_clustersNb) Msg::Error("IPTFA::getRefToStrain cluster %d is not defined",cl);
+     return _strain[cl];
+  }
+
+  const STensor3 &getConstRefToStress(int cl) const
+  {
+     if(cl>=_clustersNb) Msg::Error("IPTFA::getConstRefToStress cluster %d is not defined",cl);
+     return _stress[cl];
+  }
+
+  STensor3 &getRefToStress(int cl)
+  {
+     if(cl>=_clustersNb) Msg::Error("IPTFA::getRefToStress cluster %d is not defined",cl);
+     return _stress[cl];
+  }
+
+  const double &getConstRefToPlasticStrainEq(int cl) const
+  {
+     if(cl>=_clustersNb) Msg::Error("IPTFA::getConstRefToPlasticStrain cluster %d is not defined",cl);
+     return _plasticstrain_eq[cl];
+  }
+
+  double &getRefToPlasticStrainEq(int cl)
+  {
+     if(cl>=_clustersNb) Msg::Error("IPTFA::getRefToPlasticStrain cluster %d is not defined",cl);
+     return _plasticstrain_eq[cl];
+  }
+
+
+  const std::vector<IPVariable *> &getConstRefToIPv() const
+  {
+     return _ipv;
+  }
+  std::vector<IPVariable *>& getRefToIPv()
+  {
+     return _ipv;
+  }
+  void setIPVariable(int cl, IPVariable * ip)
+  {
+     if(cl>=_clustersNb) Msg::Error("IPTFA::setIPVariable cluster %d is not defined",cl);
+     if(_ipv[cl]!=NULL)  Msg::Error("IPTFA::setIPVariable cluster %d is already initialized",cl);
+     _ipv[cl]=ip;
+
+  }
+
+ private:
+  IPTFA();
+};
+
+#endif // IPTFA_H_
diff --git a/NonLinearSolver/internalPoints/ipvariable.cpp b/NonLinearSolver/internalPoints/ipvariable.cpp
index 3fddb41992fa5cde47def61fb8b240d591ead7c5..611624fe78c2d4c90e4c90d82dbc641a3c77e479 100644
--- a/NonLinearSolver/internalPoints/ipvariable.cpp
+++ b/NonLinearSolver/internalPoints/ipvariable.cpp
@@ -17,3 +17,13 @@
 void IPVariable::setLocation(const IPVariable::LOCATION loc) {
 	_onWhat = loc;
 };
+
+
+void IPVariable::get(const std::vector<int>& comp, std::vector<double>& val) const
+{
+  val.resize(comp.size());
+  for (int i=0; i< comp.size(); i++)
+  {
+    val[i] = get(comp[i]);
+  }
+}
\ No newline at end of file
diff --git a/NonLinearSolver/internalPoints/ipvariable.h b/NonLinearSolver/internalPoints/ipvariable.h
index 683ebf2f51cfa525aa964cd0042fc55bd375d98e..3c95715817720ab22dbb6de00fbd3ee31fbd3116 100644
--- a/NonLinearSolver/internalPoints/ipvariable.h
+++ b/NonLinearSolver/internalPoints/ipvariable.h
@@ -40,6 +40,7 @@ class IPVariable
     return *this;
   };
   virtual double get(const int i) const{return 0.;} // Allow to get any component defined in the ipvariable
+  virtual void get(const std::vector<int>& comp, std::vector<double>& val) const;
  #if defined(HAVE_MPI)
   // by default in MPI there is no value that are communicate between rank.
   // but you can communicate values by filling these functions for your IPVariable
diff --git a/NonLinearSolver/internalPoints/matrix_operations.cpp b/NonLinearSolver/internalPoints/matrix_operations.cpp
index d57adf7b4bda8b376debb07097f834099f921b8a..45b4dfce689142b891c2baceb3be15c9c6692e2e 100755
--- a/NonLinearSolver/internalPoints/matrix_operations.cpp
+++ b/NonLinearSolver/internalPoints/matrix_operations.cpp
@@ -1555,7 +1555,4 @@ double Determinant(double **a,int n)
 
 
 
-
-
-
 #endif
diff --git a/NonLinearSolver/materialLaw/CMakeLists.txt b/NonLinearSolver/materialLaw/CMakeLists.txt
index 778383651f2ad5e063f34d4d31a394845260b446..6b0ac6286cd2e0d7b9912f9ac05cb2523cd32e93 100644
--- a/NonLinearSolver/materialLaw/CMakeLists.txt
+++ b/NonLinearSolver/materialLaw/CMakeLists.txt
@@ -29,11 +29,13 @@ set(SRC
   mlawNonLocalDamage_Stoch.cpp
   mlawVUMATinterface.cpp
   mlawCrystalPlasticity.cpp
+  mlawGursonUMAT.cpp
   additionalFortran.f
   Ksub15.f
   Kevpm15.f
   ShearB.f
   ALAMEL15.f
+  gurson.f
   LD_utils.f
   mlawAnisotropic.cpp
   vumat.f
@@ -80,6 +82,7 @@ set(SRC
   cohesiveElasticPotential.cpp
   mlawAnisotropicStoch.cpp
   mlawClusterMaterialLaws.cpp
+  mlawTFAMaterialLaws.cpp
   mlawNonLocalPorousWithFailure.cpp
   #  src/op_eshelby.cpp
    # Headers without cpp change this ??
diff --git a/NonLinearSolver/materialLaw/DamageLaw.cpp b/NonLinearSolver/materialLaw/DamageLaw.cpp
index ee6502d3c13f0dba586573ba293b51d5861f0fbd..18d67b3df6f19202bb25cf7c883ff514ddd9be8c 100644
--- a/NonLinearSolver/materialLaw/DamageLaw.cpp
+++ b/NonLinearSolver/materialLaw/DamageLaw.cpp
@@ -384,7 +384,7 @@ void ThreeParametersExponentialDamageLaw::computeDamage(double p1, double p0, do
     double expbe = exp(-_beta*dp);
 		double piOverp = pinitial/p1;
 		double powPiOverp = pow(piOverp,_gamma);
-		
+
     D = 1.- powPiOverp*(1-_alpha + _alpha*expbe);
 
     dDdp = (1-_alpha + _alpha*expbe)*(_gamma*powPiOverp/p1) + powPiOverp*_alpha*_beta*expbe;
@@ -518,7 +518,7 @@ PowerBrittleDamagelaw::PowerBrittleDamagelaw(const int n, const double pi, const
 void PowerBrittleDamagelaw::setRegulizedFunction(const scalarFunction& fct){
   if (_regFunction) delete _regFunction;
   _regFunction = fct.clone();
-}; 
+};
 
 void PowerBrittleDamagelaw::setCriticalDamage(const double Dc){
   _Dc = Dc;
@@ -531,7 +531,7 @@ void PowerBrittleDamagelaw::setCriticalDamage(const double Dc){
 
 
 PowerBrittleDamagelaw::PowerBrittleDamagelaw(const PowerBrittleDamagelaw& src): DamageLaw(src),
-  _pi(src._pi),_pf(src._pf),_m(src._m),_n(src._n),_H(src._H){
+  _pi(src._pi),_pf(src._pf),_m(src._m),_n(src._n),_H(src._H),_Dc(src._Dc){
   _regFunction = NULL;
   if (src._regFunction != NULL){
     _regFunction = src._regFunction->clone();
@@ -547,6 +547,7 @@ PowerBrittleDamagelaw& PowerBrittleDamagelaw::operator=(const DamageLaw& src){
     _m = psrc->_m;
     _n = psrc->_n;
     _H = psrc->_H;
+    _Dc = psrc->_Dc;
 		if (_regFunction != NULL){
 			delete _regFunction;
     	_regFunction = NULL;
@@ -587,7 +588,7 @@ void PowerBrittleDamagelaw::computeDamage(double p1, double p0, double phiel, co
 
     double D = D0;                          // Current new values of damage
     double maxp = maxp0;                    // Current new values of memory variable
-    
+
     if ((p1>maxp)and (p1>pinitial)){
       double p1f = p1;
       double diffp1 = 1.;
@@ -600,14 +601,14 @@ void PowerBrittleDamagelaw::computeDamage(double p1, double p0, double phiel, co
 			if (valt > 0){
       	D = 1. - pow(valt,powval);
 			}
-			else 
+			else
 				D = 1.;
-			
+
 			if(D>_Dc)
 		  {
 		    D = _Dc;
 		  }
-			
+
       DeltaD = D - D0;
       dDdp = _H * pow(p1f,_m)*diffp1*pow(1.-D,-_n);
     }
diff --git a/NonLinearSolver/materialLaw/STensorOperations.cpp b/NonLinearSolver/materialLaw/STensorOperations.cpp
index 5a60c30f1536a868c723fcd527e7d2575e5c3f19..01c6387fd51911d387b951443dc4e2f13def6280 100644
--- a/NonLinearSolver/materialLaw/STensorOperations.cpp
+++ b/NonLinearSolver/materialLaw/STensorOperations.cpp
@@ -136,7 +136,7 @@ void STensorOperation::logSTensor3(const STensor3& a, const int order, STensor3&
   }
   else if (order == -1)
   { 
-    static STensor3 ainv;    
+    
     static fullMatrix<double> m(3, 3);
     static fullVector<double> eigenValReal(3);
     static fullVector<double> eigenValImag(3);
@@ -146,7 +146,7 @@ void STensorOperation::logSTensor3(const STensor3& a, const int order, STensor3&
     // Get eigen values and vectors
     a.getMat(m);
     m.eig(eigenValReal,eigenValImag,leftEigenVect,rightEigenVect,0);
-    
+        
     // Spectral sum for log function
     for (int i=0; i<3; i++){
       for (int j=0; j<3; j++){
@@ -155,7 +155,25 @@ void STensorOperation::logSTensor3(const STensor3& a, const int order, STensor3&
                     +log(eigenValReal(2)) *leftEigenVect(i,2)*rightEigenVect(j,2);
       }
     }
+    
+    /*
+    double x1, x2, x3;
+    static STensor3 E1, E2, E3;
+    STensorOperation::getEigenDecomposition(a,x1,x2,x3,E1,E2,E3);
+    double logx1(0), logx2(0),logx3(0.);
+    if (x1 >0) logx1 = log(x1);
+    if (x2 >0) logx2 = log(x2);
+    if (x3 >0) logx3 = log(x3);
+    for (int i=0; i<3; i++){
+      for (int j=0; j<3; j++){
+        
+        loga(i,j) =  logx1*E1(i,j) + logx2*E2(i,j) + logx3*E3(i,j);
+      }
+    }
+     */
+        
     // First derivative
+    static STensor3 ainv;    
     inverseSTensor3(a,ainv);
     if(dloga!=NULL)
     {
@@ -246,6 +264,7 @@ void STensorOperation::expSTensor3(const STensor3& a, const int order, STensor3&
   }
   else if (order == -1)
   {
+    
     static fullMatrix<double> m(3, 3);
     static fullVector<double> eigenValReal(3);
     static fullVector<double> eigenValImag(3);
@@ -264,6 +283,16 @@ void STensorOperation::expSTensor3(const STensor3& a, const int order, STensor3&
                     +exp(eigenValReal(2)) *leftEigenVect(i,2)*rightEigenVect(j,2);
       }
     }
+     
+    /* 
+    double x1, x2, x3;
+    static STensor3 E1, E2, E3;
+    STensorOperation::getEigenDecomposition(a,x1,x2,x3,E1,E2,E3);
+    for (int i=0; i<3; i++){
+      for (int j=0; j<3; j++){
+        expa(i,j) =  exp(x1)*E1(i,j) + exp(x2)*E2(i,j) + exp(x3)*E3(i,j);
+      }
+    }*/
     // First derivative
     if(dexpa!=NULL)
     {
diff --git a/NonLinearSolver/materialLaw/STensorOperations.h b/NonLinearSolver/materialLaw/STensorOperations.h
index 376e9031c5d00e0bca06cb6f763e39b19a589415..1b7866a12e6d0bb05ca5efa22f48c12864fbdb06 100644
--- a/NonLinearSolver/materialLaw/STensorOperations.h
+++ b/NonLinearSolver/materialLaw/STensorOperations.h
@@ -6,6 +6,7 @@
 #include "STensor43.h"
 #include "STensor53.h"
 #include "STensor63.h"
+#include "fullMatrix.h"
 #include <cmath>
 
 
@@ -57,6 +58,26 @@ namespace STensorOperation{
       }
     }
   };
+
+  inline void unity(STensor43& a){
+
+    for (int i=0; i<3; i++){
+      for (int j=0; j<3; j++){
+        for (int k=0; k<3; k++){
+          for (int l=0; l<3; l++){
+            a(i,j,k,l) = 0.;
+            if( (i==l) && (j==k) )  //|| ( (i==k) && (j==l) ) )
+              {a(i,j,k,l) += 0.5;}
+            //if( (i==l) && (i==k) && (i==l) && (i==k) )
+            if( (i==k) && (j==l) ) 
+              {a(i,j,k,l) += 0.5;}      
+          }
+        }
+      }
+    }
+  };
+
+
   inline void zero(STensor53& a){
     for (int i=0; i<3; i++){
       for (int j=0; j<3; j++){
@@ -85,6 +106,7 @@ namespace STensorOperation{
       }
     }
   };
+
   
   inline void scale(const STensor3& a, double x, STensor3& ax)
   {
@@ -179,14 +201,130 @@ namespace STensorOperation{
     }
     return val;
   };
-  
-  
-  inline void getThreeInvariantsSTensor3(const STensor3& a, double& I1, double& I2, double& I3){
-    I1 = a(0,0)+a(1,1)+a(2,2);
-    I2 = a(0,0)*a(1,1)+a(1,1)*a(2,2)+a(2,2)*a(0,0)-a(0,1)*a(1,0)-a(1,2)*a(2,1)-a(2,0)*a(0,2);
-    I3 = determinantSTensor3(a);
+
+  inline void fromSTensor3ToFullVector(const STensor3& a, fullVector<double> &vec)
+  {
+    vec.resize(6,true);
+
+    vec.set(0,a(0,0));
+    vec.set(1,a(1,1));
+    vec.set(2,a(2,2));
+    vec.set(3,a(0,1));
+    vec.set(4,a(0,2));
+    vec.set(5,a(1,2));
+
   };
-    
+  inline void fromFullVectorToSTensor3(const  fullVector<double> &vec, STensor3& a)
+  {
+    a(0,0)=vec(0);
+    a(0,1)=a(1,0)=vec(3);
+    a(0,2)=a(2,0)=vec(4);
+    a(1,1)=vec(1);
+    a(1,2)=a(2,1)=vec(5);
+    a(2,2)=vec(2);
+
+  };
+
+  inline void fromSTensor43ToFullMatrix(const STensor43& a, fullMatrix<double> &mat)
+  {
+    mat.resize(6,6,true);
+
+    mat.set(0,0,a(0,0,0,0));
+    mat.set(0,1,a(0,0,1,1));
+    mat.set(0,2,a(0,0,2,2));
+    mat.set(0,3,2*a(0,0,0,1));
+    mat.set(0,4,2*a(0,0,0,2));
+    mat.set(0,5,2*a(0,0,1,2));
+
+    mat.set(1,0,a(1,1,0,0));
+    mat.set(1,1,a(1,1,1,1));
+    mat.set(1,2,a(1,1,2,2));
+    mat.set(1,3,2*a(1,1,0,1));
+    mat.set(1,4,2*a(1,1,0,2));
+    mat.set(1,5,2*a(1,1,1,2));
+
+    mat.set(2,0,a(2,2,0,0));
+    mat.set(2,1,a(2,2,1,1));
+    mat.set(2,2,a(2,2,2,2));
+    mat.set(2,3,2*a(2,2,0,1));
+    mat.set(2,4,2*a(2,2,0,2));
+    mat.set(2,5,2*a(2,2,1,2));
+
+    mat.set(3,0,a(0,1,0,0));
+    mat.set(3,1,a(0,1,1,1));
+    mat.set(3,2,a(0,1,2,2));
+    mat.set(3,3,2*a(0,1,0,1));
+    mat.set(3,4,2*a(0,1,0,2));
+    mat.set(3,5,2*a(0,1,1,2));
+
+    mat.set(4,0,a(0,2,0,0));
+    mat.set(4,1,a(0,2,1,1));
+    mat.set(4,2,a(0,2,2,2));
+    mat.set(4,3,2*a(0,2,0,1));
+    mat.set(4,4,2*a(0,2,0,2));
+    mat.set(4,5,2*a(0,2,1,2));
+
+    mat.set(5,0,a(1,2,0,0));
+    mat.set(5,1,a(1,2,1,1));
+    mat.set(5,2,a(1,2,2,2));
+    mat.set(5,3,2*a(1,2,0,1));
+    mat.set(5,4,2*a(1,2,0,2));
+    mat.set(5,5,2*a(1,2,1,2));
+
+    //here some with 2
+  };
+  inline void fromFullMatrixToSTensor43(const fullMatrix<double> &mat,STensor43& a)
+  {
+    a(0,0,0,0)=mat(0,0);
+    a(0,0,1,1)=mat(0,1);
+    a(0,0,2,2)=mat(0,2);
+    a(0,0,0,1)=a(0,0,1,0)=mat(0,3)/2;
+    a(0,0,0,2)=a(0,0,2,0)=mat(0,4)/2;
+    a(0,0,1,2)=a(0,0,2,1)=mat(0,5)/2;
+
+
+    a(1,1,0,0)=mat(1,0);
+    a(1,1,1,1)=mat(1,1);
+    a(1,1,2,2)=mat(1,2);
+    a(1,1,0,1)=a(1,1,1,0)=mat(1,3)/2;
+    a(1,1,0,2)=a(1,1,2,0)=mat(1,4)/2;
+    a(1,1,1,2)=a(1,1,2,1)=mat(1,5)/2;
+
+
+    a(2,2,0,0)=mat(2,0);
+    a(2,2,1,1)=mat(2,1);
+    a(2,2,2,2)=mat(2,2);
+    a(2,2,0,1)=a(2,2,1,0)=mat(2,3)/2;
+    a(2,2,0,2)=a(2,2,2,0)=mat(2,4)/2;
+    a(2,2,1,2)=a(2,2,2,1)=mat(2,5)/2;
+
+
+    a(0,1,0,0)=a(1,0,0,0)=mat(3,0);
+    a(0,1,1,1)=a(1,0,1,1)=mat(3,1);
+    a(0,1,2,2)=a(1,0,2,2)=mat(3,2);
+    a(0,1,0,1)=a(0,1,1,0)=a(1,0,0,1)=a(1,0,1,0)=mat(3,3)/2;
+    a(0,1,0,2)=a(0,1,2,0)=a(1,0,0,2)=a(1,0,2,0)=mat(3,4)/2;
+    a(0,1,1,2)=a(0,1,2,1)=a(1,0,1,2)=a(1,0,2,1)=mat(3,5)/2;
+
+
+    a(0,2,0,0)=a(2,0,0,0)=mat(4,0);
+    a(0,2,1,1)=a(2,0,1,1)=mat(4,1);
+    a(0,2,2,2)=a(2,0,2,2)=mat(4,2);
+    a(0,2,0,1)=a(0,2,1,0)=a(2,0,0,1)=a(2,0,1,0)=mat(4,3)/2;
+    a(0,2,0,2)=a(0,2,2,0)=a(2,0,0,2)=a(2,0,2,0)=mat(4,4)/2;
+    a(0,2,1,2)=a(0,2,2,1)=a(2,0,1,2)=a(2,0,2,1)=mat(4,5)/2;
+
+
+    a(1,2,0,0)=a(2,1,0,0)=mat(5,0);
+    a(1,2,1,1)=a(2,1,1,1)=mat(5,1);
+    a(1,2,2,2)=a(2,1,2,2)=mat(5,2);
+    a(1,2,0,1)=a(1,2,1,0)=a(2,1,0,1)=a(2,1,1,0)=mat(5,3)/2;
+    a(1,2,0,2)=a(1,2,2,0)=a(2,1,0,2)=a(2,1,2,0)=mat(5,4)/2;
+    a(1,2,1,2)=a(1,2,2,1)=a(2,1,1,2)=a(2,1,2,1)=mat(5,5)/2;
+
+    //here some with 1/2
+  };
+
   inline void inverseSTensor3(const STensor3 &a, STensor3 &ainv)
   {
     double udet = 1./determinantSTensor3(a);
@@ -215,6 +353,17 @@ namespace STensorOperation{
     ainvT(2,2) =  (a(0,0) * a(1,1) - a(0,1) * a(1,0))* udet;
   };
 
+  inline void inverseSTensor43(const STensor43 &a, STensor43 &ainv)
+  {
+    //go to 6 by 6
+    fullMatrix<double> mat;
+    //invert
+    fromSTensor43ToFullMatrix(a,mat);
+    mat.invertInPlace();
+    //go back
+    fromFullMatrixToSTensor43(mat,ainv);
+  };
+
   inline bool invertFullMatrix4x4(const double m[16], double inv[16])
   {
     inv[0] = m[5]  * m[10] * m[15] -
@@ -341,6 +490,41 @@ namespace STensorOperation{
 }
 
 
+  inline void deviatorfunction(STensor43& a){
+    fullMatrix<double> mat(6,6);
+    mat.set(0,0,2./3.);
+    mat.set(1,1,2./3.);
+    mat.set(2,2,2./3.);
+    mat.set(0,1,-1./3.);
+    mat.set(0,2,-1./3.);
+    mat.set(1,0,-1./3.);
+    mat.set(1,2,-1./3.);
+    mat.set(2,0,-1./3.);
+    mat.set(2,1,-1./3.);
+    mat.set(3,3,1.);
+    mat.set(4,4,1.);
+    mat.set(5,5,1.);
+    
+    fromFullMatrixToSTensor43(mat,a);
+  };
+
+
+  inline void sphericalfunction(STensor43& a){
+    fullMatrix<double> mat(6,6);
+    mat.set(0,0,1./3.);
+    mat.set(1,1,1./3.);
+    mat.set(2,2,1./3.);
+    mat.set(0,1,1./3.);
+    mat.set(0,2,1./3.);
+    mat.set(1,0,1./3.);
+    mat.set(1,2,1./3.);
+    mat.set(2,0,1./3.);
+    mat.set(2,1,1./3.);
+    
+    fromFullMatrixToSTensor43(mat,a);
+  };
+
+
   inline void prod(const STensor3& a, const STensor3& b, const double alp, STensor43& c){
     for (int i=0; i<3; i++){
       for (int j=0; j<3; j++){
@@ -405,6 +589,16 @@ namespace STensorOperation{
     }
   };
 
+
+  inline void doubleContractionSTensor3(const STensor3& a, const STensor3&b, double& c){
+    c = 0.;
+    for (int i=0; i<3; i++){
+      for (int j=0; j<3; j++){
+        c += a(i,j)*b(i,j);
+      }
+    }
+  };
+
   inline void multSTensor3Add(const STensor3& a, const STensor3&b, const double alph, STensor3& c){
     for (int i=0; i<3; i++){
       for (int j=0; j<3; j++){
@@ -486,7 +680,213 @@ namespace STensorOperation{
       }
     }
   };
+
+
+
+  inline void contract4STensor43(const STensor43& a, const STensor43& b, double& c){
+    c=0.;
+    for (int i=0; i<3; i++){
+      for (int j=0; j<3; j++){
+        for (int k=0; k<3; k++){
+          for (int l=0; l<3; l++){
+                c += a(i,j,k,l)*b(i,j,k,l);
+          }
+        }
+      }
+    }
+  };
+
   
+  inline void multSTensor63_ind56_STensor43_ind12(const STensor63& a, const STensor43& b, STensor63& c){
+  //multiplication of 6th order and 4th order tensors, with summation over the indices 5 and 6 of the 6th order tensor and the first two indices of the 4th order tensor
+    for (int i=0; i<3; i++){
+      for (int j=0; j<3; j++){
+        for (int k=0; k<3; k++){
+          for (int l=0; l<3; l++){
+            for (int m=0; m<3; m++){
+              for (int n=0; n<3; n++){
+                c(i,j,k,l,m,n) = 0.;
+                for (int p=0; p<3; p++){
+                  for (int q=0; q<3; q++){
+                    c(i,j,k,l,m,n) += a(i,j,k,l,p,q)*b(p,q,m,n);
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  };
+
+
+  inline void multSTensor63_ind56_STensor43_ind34(const STensor63& a, const STensor43& b, STensor63& c){
+  //multiplication of 6th order and 4th order tensors, with summation over the indices 5 and 6 of the 6th order tensor and the last two indices of the 4th order tensor
+    for (int i=0; i<3; i++){
+      for (int j=0; j<3; j++){
+        for (int k=0; k<3; k++){
+          for (int l=0; l<3; l++){
+            for (int m=0; m<3; m++){
+              for (int n=0; n<3; n++){
+                c(i,j,k,l,m,n) = 0.;
+                for (int p=0; p<3; p++){
+                  for (int q=0; q<3; q++){
+                    c(i,j,k,l,m,n) += a(i,j,k,l,p,q)*b(m,n,p,q);
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  };
+
+
+  inline void multSTensor63_ind12_STensor43_ind12(const STensor63& a, const STensor43& b, STensor63& c){
+    //multiplication of 6th order and 4th order tensors, with summation over the indices 1 and 2 of the 6th order tensor and the first two indices of the 4th order tensor
+    for (int i=0; i<3; i++){
+      for (int j=0; j<3; j++){
+        for (int k=0; k<3; k++){
+          for (int l=0; l<3; l++){
+            for (int m=0; m<3; m++){
+              for (int n=0; n<3; n++){
+                c(m,n,i,j,k,l) = 0.;
+                for (int p=0; p<3; p++){
+                  for (int q=0; q<3; q++){
+                    c(m,n,i,j,k,l) += a(p,q,i,j,k,l)*b(p,q,m,n);
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  };
+
+  inline void multSTensor63_ind12_STensor43_ind34(const STensor63& a, const STensor43& b, STensor63& c){
+    //multiplication of 6th order and 4th order tensors, with summation over the indices 1 and 2 of the 6th order tensor and the last two indices of the 4th order tensor
+    for (int i=0; i<3; i++){
+      for (int j=0; j<3; j++){
+        for (int k=0; k<3; k++){
+          for (int l=0; l<3; l++){
+            for (int m=0; m<3; m++){
+              for (int n=0; n<3; n++){
+                c(m,n,i,j,k,l) = 0.;
+                for (int p=0; p<3; p++){
+                  for (int q=0; q<3; q++){
+                    c(m,n,i,j,k,l) += a(p,q,i,j,k,l)*b(m,n,p,q);
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  };
+
+
+
+  inline void multSTensor63_ind34_STensor43_ind12(const STensor63& a, const STensor43& b, STensor63& c){
+    //multiplication of 6th order and 4th order tensors, with summation over the indices 3 and 4 of the 6th order tensor and the first two indices of the 4th order tensor
+    for (int i=0; i<3; i++){
+      for (int j=0; j<3; j++){
+        for (int k=0; k<3; k++){
+          for (int l=0; l<3; l++){
+            for (int m=0; m<3; m++){
+              for (int n=0; n<3; n++){
+                c(i,j,m,n,k,l) = 0.;
+                for (int p=0; p<3; p++){
+                  for (int q=0; q<3; q++){
+                    c(i,j,m,n,k,l) += a(i,j,p,q,k,l)*b(p,q,m,n);
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  };
+
+  inline void multSTensor63_ind34_STensor43_ind34(const STensor63& a, const STensor43& b, STensor63& c){
+    //multiplication of 6th order and 4th order tensors, with summation over the indices 3 and 4 of the 6th order tensor and the last two indices of the 4th order tensor
+    for (int i=0; i<3; i++){
+      for (int j=0; j<3; j++){
+        for (int k=0; k<3; k++){
+          for (int l=0; l<3; l++){
+            for (int m=0; m<3; m++){
+              for (int n=0; n<3; n++){
+                c(i,j,m,n,k,l) = 0.;
+                for (int p=0; p<3; p++){
+                  for (int q=0; q<3; q++){
+                    c(i,j,m,n,k,l) += a(i,j,p,q,k,l)*b(m,n,p,q);
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  };
+
+  inline void multSTensor63_ind56_STensor3(const STensor63& a, const STensor3& b, STensor43& c){
+    for (int i=0; i<3; i++){
+      for (int j=0; j<3; j++){
+        for (int k=0; k<3; k++){
+          for (int l=0; l<3; l++){
+            c(i,j,k,l) = 0.;
+            for (int p=0; p<3; p++){
+              for (int q=0; q<3; q++){
+                c(i,j,k,l) += a(i,j,k,l,p,q)*b(p,q);
+              }
+            }
+          }
+        }
+      }
+    }
+  };
+
+
+  inline void multSTensor63_ind12_STensor3(const STensor63& a, const STensor3& b, STensor43& c){
+    for (int i=0; i<3; i++){
+      for (int j=0; j<3; j++){
+        for (int k=0; k<3; k++){
+          for (int l=0; l<3; l++){
+            c(i,j,k,l) = 0.;
+            for (int p=0; p<3; p++){
+              for (int q=0; q<3; q++){
+                c(i,j,k,l) += a(p,q,i,j,k,l)*b(p,q);
+              }
+            }
+          }
+        }
+      }
+    }
+  };
+
+  inline void multSTensor63_ind34_STensor3(const STensor63& a, const STensor3& b, STensor43& c){
+    for (int i=0; i<3; i++){
+      for (int j=0; j<3; j++){
+        for (int k=0; k<3; k++){
+          for (int l=0; l<3; l++){
+            c(i,j,k,l) = 0.;
+            for (int p=0; p<3; p++){
+              for (int q=0; q<3; q++){
+                c(i,j,k,l) += a(i,j,p,q,k,l)*b(p,q);
+              }
+            }
+          }
+        }
+      }
+    }
+  };
+
+
+
   inline void multSTensor43Add(const STensor43& a, const STensor43& b, const double alpha, STensor43& c){
     for (int i=0; i<3; i++){
       for (int j=0; j<3; j++){
@@ -579,6 +979,250 @@ namespace STensorOperation{
   };
   
 
+
+
+  inline void TensorProdSTensor43STensor3(STensor43& a, STensor3& b, STensor63& c){
+
+    for (int i=0; i<3; i++){
+      for (int j=0; j<3; j++){
+        for (int k=0; k<3; k++){
+          for (int l=0; l<3; l++){
+            for (int m=0; m<3; m++){
+              for (int n=0; n<3; n++){
+                c(i,j,k,l,m,n) = a(i,j,k,l)*b(m,n);
+              }
+            }
+          }
+        }
+      }
+    }
+
+
+
+  };
+
+  inline void TensorProdSTensor3STensor43(STensor43& a, STensor3& b, STensor63& c){
+
+    for (int i=0; i<3; i++){
+      for (int j=0; j<3; j++){
+        for (int k=0; k<3; k++){
+          for (int l=0; l<3; l++){
+            for (int m=0; m<3; m++){
+              for (int n=0; n<3; n++){
+                c(i,j,k,l,m,n) = b(i,j)*a(k,l,m,n);
+              }
+            }
+          }
+        }
+      }
+    }
+
+
+
+  };
+
+
+
+  inline void derivTensorProdSTensor43STensor3(STensor43& dNdeps, STensor3& N, STensor63& M){
+
+    for (int i=0; i<3; i++){
+      for (int j=0; j<3; j++){
+        for (int k=0; k<3; k++){
+          for (int l=0; l<3; l++){
+            for (int m=0; m<3; m++){
+              for (int n=0; n<3; n++){
+                M(i,j,k,l,m,n) = dNdeps(i,j,m,n)*N(k,l) + dNdeps(k,l,m,n)*N(i,j);
+              }
+            }
+          }
+        }
+      }
+    }
+
+
+
+  };
+
+
+
+  inline void STensor43Isotropization(const STensor43& a, STensor43& a_iso){
+    STensor3 I2;
+    STensor43 I_vol;
+    STensorOperation::unity(I2);
+    STensorOperation::prod(I2,I2,1.,I_vol);
+    I_vol *= 1./3.;
+    STensor43 I_dev;
+    STensorOperation::unity(I_dev);
+    I_dev -= I_vol;
+
+    STensor43 a_iso_vol(I_vol), a_iso_dev(I_dev);
+    double a_iso_vol_fac,a_iso_dev_fac;
+    STensorOperation::contract4STensor43(I_vol,a,a_iso_vol_fac);
+    STensorOperation::contract4STensor43(I_dev,a,a_iso_dev_fac);
+    a_iso_vol *= a_iso_vol_fac;
+    a_iso_dev *= a_iso_dev_fac;
+    a_iso_dev *= 1./5.;
+
+    a_iso = a_iso_vol + a_iso_dev;
+  };
+
+
+  inline void STensor43IsotropizationDerivBySTensor3(const STensor63& a, STensor63& a_iso_deriv){
+    STensor3 sphere_scalar_derivative, deviator_scalar_derivative;
+    STensor43 I_vol, I_dev;
+    STensor63 sphere_derivative, deviator_derivative;
+    sphericalfunction(I_vol);
+    deviatorfunction(I_dev);
+
+    for (int m=0; m<3; m++){
+      for (int n=0; n<3; n++){
+        sphere_scalar_derivative(m,n) = 0.;
+        for (int j=0; j<3; j++){
+          for (int l=0; l<3; l++){
+            sphere_scalar_derivative(m,n)   += 1./3.*a(l,l,j,j,m,n);
+            deviator_scalar_derivative(m,n) = -1*sphere_scalar_derivative(m,n);
+            for (int i=0; i<3; i++){
+              deviator_scalar_derivative(m,n) += a(i,l,l,i,m,n);
+            }
+          }
+        }
+      }
+    }
+
+    TensorProdSTensor43STensor3(I_vol,sphere_scalar_derivative,sphere_derivative);
+    TensorProdSTensor43STensor3(I_dev,deviator_scalar_derivative,deviator_derivative);
+
+    a_iso_deriv = deviator_derivative;
+    a_iso_deriv *= 1./5.;
+    a_iso_deriv += sphere_derivative;
+
+  };
+
+
+  inline void getThreeInvariantsSTensor3(const STensor3& a, double& I1, double& I2, double& I3){
+    I1 = trace(a);
+    static STensor3 aa;
+    multSTensor3(a,a,aa);
+    I2 = 0.5*(I1*I1-trace(aa));
+    I3 = determinantSTensor3(a);
+  };
+  
+  inline void getEigenDecomposition(const STensor3& a, double& x1, double& x2, double& x3, STensor3& E1, STensor3& E2, STensor3& E3)
+  {
+    // a = x1*E1+x2*E2+x3*E3
+    // if eigven values xi are duplicated, its related Ei is not vi\timesvi
+    
+    double I1,I2,I3;
+    getThreeInvariantsSTensor3(a,I1,I2,I3);
+
+    double Q = (I1*I1 - 3.*I2)/9.;
+    if (Q >0.)
+    {
+      double R = (-2.*I1*I1*I1 +9.*I1*I2-27.*I3)/54.;
+      double ff = R/(Q*sqrt(Q));
+      if (ff < -1.)
+      {
+        ff = -1.;
+      }
+      else if (ff >1)
+      {
+        ff = 1.;
+      }
+      double theta = acos(ff);
+      double sqrtQ = sqrt(Q);
+      double pi = 3.14159265358979323846;
+      x1 = -2.*sqrtQ*cos(theta/3.)+I1/3.;
+      x2 = -2.*sqrtQ*cos((theta+2.*pi)/3.)+I1/3.;
+      x3 = -2.*sqrtQ*cos((theta-2.*pi)/3.)+I1/3.;
+    }
+    else
+    {
+      x1 = I1/3.;
+      x2 = I1/3.;
+      x3 = I1/3.;
+    }
+    static STensor3 I(1.);
+    if ((x1==x2) and (x1 == x3))
+    {
+      E1 = I;
+      E1 *= (1./3);
+      E2 = E1;
+      E3 = E1;
+    }
+    else if ((x1==x2) and (x3!=x2))
+    {
+      for (int i=0; i< 3; i++)
+      {
+        for (int j=0; j<3; j++)
+        {
+          E3(i,j) = 0.;
+          for (int k=0; k<3; k++)
+          {
+            E3(i,j) += (a(i,k)-x2*I(i,k))*(a(k,j)-x1*I(k,j))/(x3-x1)/(x3-x2);
+          }
+        }
+      }
+      zero(E2);
+      E2.daxpy(I,0.5);
+      E2.daxpy(E3,-0.5);
+      E1 = E2;
+    }
+    else if ((x1 == x3) and (x2!=x1))
+    {
+      for (int i=0; i< 3; i++)
+      {
+        for (int j=0; j<3; j++)
+        {
+          E2(i,j) = 0.;
+          for (int k=0; k<3; k++)
+          {
+            E2(i,j) += (a(i,k)-x1*I(i,k))*(a(k,j)-x3*I(k,j))/(x2-x1)/(x2-x3);
+          }
+        }
+      }
+      zero(E3);
+      E3.daxpy(I,0.5);
+      E3.daxpy(E2,-0.5);
+      E1 = E3;
+    }
+    else if ((x2 == x3) and (x1!=x2))
+    {
+      for (int i=0; i< 3; i++)
+      {
+        for (int j=0; j<3; j++)
+        {
+          E1(i,j) = 0.;
+          for (int k=0; k<3; k++)
+          {
+            E1(i,j) += (a(i,k)-x2*I(i,k))*(a(k,j)-x3*I(k,j))/(x1-x2)/(x1-x3);
+          }
+        }
+      }
+      zero(E2);
+      E2.daxpy(I,0.5);
+      E2.daxpy(E1,-0.5);
+      E3 = E2;
+    }
+    else
+    {
+      for (int i=0; i< 3; i++)
+      {
+        for (int j=0; j<3; j++)
+        {
+          E1(i,j) = 0.;
+          E2(i,j) = 0.;
+          E3(i,j) = 0.;
+          for (int k=0; k<3; k++)
+          {
+            E1(i,j) += (a(i,k)-x2*I(i,k))*(a(k,j)-x3*I(k,j))/(x1-x2)/(x1-x3);
+            E2(i,j) += (a(i,k)-x1*I(i,k))*(a(k,j)-x3*I(k,j))/(x2-x1)/(x2-x3);
+            E3(i,j) += (a(i,k)-x2*I(i,k))*(a(k,j)-x1*I(k,j))/(x3-x1)/(x3-x2);
+          }
+        }
+      }
+    }
+  }
+
   // F = sum_{i=0, order) coeffs[i]*a^i
   bool polynomial(const STensor3& a, const int order, const fullVector<double>& coeffs, STensor3& F, STensor43* dF= NULL, STensor63* ddF=NULL);
   void logSTensor3(const STensor3& a, const int order, STensor3& loga, STensor43* dloga = NULL, STensor63* ddloga = NULL);
diff --git a/NonLinearSolver/materialLaw/elasticPotential.cpp b/NonLinearSolver/materialLaw/elasticPotential.cpp
index 19f23520c5f1fba344ffea5c88a72cc2fba5407b..df25934f30ed9f3e2e3500e5b334dd7597c4fe97 100644
--- a/NonLinearSolver/materialLaw/elasticPotential.cpp
+++ b/NonLinearSolver/materialLaw/elasticPotential.cpp
@@ -23,6 +23,7 @@ smallStrainLinearElasticPotential::smallStrainLinearElasticPotential(const int n
       }
     }
 	}
+	_Cel.print("_Cel");
 };
 smallStrainLinearElasticPotential::smallStrainLinearElasticPotential(const smallStrainLinearElasticPotential& src) : elasticPotential(src),
 	_E(src._E),_nu(src._nu),_K(src._K),_mu(src._mu), _Cel(src._Cel){};
@@ -56,7 +57,7 @@ void smallStrainLinearElasticPotential::constitutive(const STensor3& F, STensor3
 			E(i,j) += (F(i,j) + F(j,i))*0.5;
 		}
 	}
-	
+
 	for (int i=0; i<3;i++){
 		for (int j=0; j<3; j++){
       P(i,j) = 0.;
@@ -108,18 +109,18 @@ void smallStrainLinearElasticPotential::getLocalPositiveValForNonLocalEquation(c
   this->getLocalValForNonLocalEquation(F,val,stiff,DvalDF);
 };
 
-largeStrainAnisotropicPotential::largeStrainAnisotropicPotential(const int num, 
-                                    const double Ex, const double Ey, const double Ez, 
+largeStrainAnisotropicPotential::largeStrainAnisotropicPotential(const int num,
+                                    const double Ex, const double Ey, const double Ez,
                                     const double Vxy, const double Vxz, const double Vyz,
                                     const double MUxy, const double MUxz, const double MUyz,
                                     const double alpha, const double beta, const double gamma): elasticPotential(num){
-  const double Vyx= Vxy*Ey/Ex  ; 
-	const double Vzx= Vxz*Ez/Ex  ; 
+  const double Vyx= Vxy*Ey/Ex  ;
+	const double Vzx= Vxz*Ez/Ex  ;
 	const double Vzy= Vyz*Ez/Ey  ;
 	const double D=( 1-Vxy*Vyx-Vzy*Vyz-Vxz*Vzx-2*Vxy*Vyz*Vzx ) / ( Ex*Ey*Ez );
 
  	STensor43 ElasticityTensor(0.);
-        
+
  	ElasticityTensor(0,0,0,0)=( 1-Vyz*Vzy ) / (Ey*Ez*D );
  	ElasticityTensor(1,1,1,1)=( 1-Vxz*Vzx ) / (Ex*Ez*D );
 	ElasticityTensor(2,2,2,2)=( 1-Vyx*Vxy ) / (Ey*Ex*D );
@@ -141,7 +142,7 @@ largeStrainAnisotropicPotential::largeStrainAnisotropicPotential(const int num,
 	ElasticityTensor(0,2,0,2)=MUxz;ElasticityTensor(0,2,2,0)=MUxz;
 	ElasticityTensor(2,0,2,0)=MUxz;ElasticityTensor(2,0,0,2)=MUxz;
 
-  
+
 	double c1,c2,c3,s1,s2,s3;
 	double s1c2, c1c2;
 	double pi(3.14159265359);
@@ -158,7 +159,7 @@ largeStrainAnisotropicPotential::largeStrainAnisotropicPotential(const int num,
 
 	s1c2 = s1*c2;
 	c1c2 = c1*c2;
-  
+
   STensor3 R; //3x3 rotation matrix
 	R(0,0) = c3*c1 - s1c2*s3;
 	R(0,1) = c3*s1 + c1c2*s3;
@@ -189,10 +190,10 @@ largeStrainAnisotropicPotential::largeStrainAnisotropicPotential(const int num,
         }
       }
     }
-  } 
-	
+  }
+
   _Emax = std::max(Ex,std::max(Ey,Ez));
-  
+
 	//Init du _poissonMax
 	if (Vxy >=  Vxz && Vxy >= Vyz){
     _poissonMax=Vxy;
@@ -218,7 +219,7 @@ double largeStrainAnisotropicPotential::get(const STensor3& F) const{
       E(i,j) += 0.5*(F(0,i)*F(0,j)+F(1,i)*F(1,j)+F(2,i)*F(2,j));
     }
   }
-  
+
   double val = 0.;
   for (int i=0; i<3; i++){
     for (int j=0; j<3; j++){
@@ -239,7 +240,7 @@ void largeStrainAnisotropicPotential::constitutive(const STensor3& F, STensor3&
       E(i,j) += 0.5*(F(0,i)*F(0,j)+F(1,i)*F(1,j)+F(2,i)*F(2,j));
     }
   }
-  
+
   static STensor3 secondPK;
   for (int i=0; i<3; i++){
     for (int j=0; j<3; j++){
@@ -251,7 +252,7 @@ void largeStrainAnisotropicPotential::constitutive(const STensor3& F, STensor3&
       }
     }
   }
-  
+
   for (int i=0; i<3; i++){
     for (int j=0; j<3; j++){
       P(i,j) = F(i,0)*secondPK(0,j)+F(i,1)*secondPK(1,j)+F(i,2)*secondPK(2,j);
@@ -274,7 +275,7 @@ void largeStrainAnisotropicPotential::constitutive(const STensor3& F, STensor3&
         }
       }
     }
-  }  
+  }
 };
 
 void largeStrainAnisotropicPotential::getLocalValForNonLocalEquation(const STensor3& F, double& val, const bool stiff, STensor3* DvalDF) const{
@@ -317,10 +318,10 @@ void largeStrainAnisotropicPotential::getLocalPositiveValForNonLocalEquation(con
 
 largeStrainAnisotropicPotential::largeStrainAnisotropicPotential(const largeStrainAnisotropicPotential& src): elasticPotential(src),
           _Cel(src._Cel),_poissonMax(src._poissonMax){};
-          
-largeStrainTransverseIsotropicPotential::largeStrainTransverseIsotropicPotential(const int num, 
+
+largeStrainTransverseIsotropicPotential::largeStrainTransverseIsotropicPotential(const int num,
                                     const double ET, // inplane modulus
-                                    const double EL,  // longitudinal modulus 
+                                    const double EL,  // longitudinal modulus
                                     const double nuTT, // inplane Poisson ratio
                                     const double nuLT,  // inplane-longitudinal Possion ratio
                                     const double MUTT,  // inplane shear
@@ -331,7 +332,7 @@ largeStrainTransverseIsotropicPotential::largeStrainTransverseIsotropicPotential
   const double D=(1.+nuTT)*(1.-nuTT-2*nuTL*nuLT)/(ET*ET*EL);
 
  	STensor43 ElasticityTensor(0.);
-        
+
  	ElasticityTensor(0,0,0,0)=( 1-nuTL*nuLT ) / (ET*EL*D );
  	ElasticityTensor(1,1,1,1)=( 1-nuTL*nuLT ) / (ET*EL*D );
 	ElasticityTensor(2,2,2,2)=( 1-nuTT*nuTT ) / (ET*ET*D );
@@ -348,7 +349,7 @@ largeStrainTransverseIsotropicPotential::largeStrainTransverseIsotropicPotential
   ElasticityTensor(1,2,2,1)=MUTL;
 	ElasticityTensor(2,1,2,1)=MUTL;
   ElasticityTensor(2,1,1,2)=MUTL;
-  
+
   ElasticityTensor(0,2,0,2)=MUTL;
   ElasticityTensor(0,2,2,0)=MUTL;
 	ElasticityTensor(2,0,2,0)=MUTL;
@@ -375,7 +376,7 @@ largeStrainTransverseIsotropicPotential::largeStrainTransverseIsotropicPotential
 
 	s1c2 = s1*c2;
 	c1c2 = c1*c2;
-  
+
   STensor3 R; //3x3 rotation matrix
 	R(0,0) = c3*c1 - s1c2*s3;
 	R(0,1) = c3*s1 + c1c2*s3;
@@ -406,8 +407,8 @@ largeStrainTransverseIsotropicPotential::largeStrainTransverseIsotropicPotential
         }
       }
     }
-  } 
-	
+  }
+
   _Emax = std::max(ET,EL);
   _poissonMax = std::max(nuTT,std::max(nuTL,nuLT));
 };
@@ -424,7 +425,7 @@ double largeStrainTransverseIsotropicPotential::get(const STensor3& F) const{
       E(i,j) += 0.5*(F(0,i)*F(0,j)+F(1,i)*F(1,j)+F(2,i)*F(2,j));
     }
   }
-  
+
   double val = 0.;
   for (int i=0; i<3; i++){
     for (int j=0; j<3; j++){
@@ -445,7 +446,7 @@ void largeStrainTransverseIsotropicPotential::constitutive(const STensor3& F, ST
       E(i,j) += 0.5*(F(0,i)*F(0,j)+F(1,i)*F(1,j)+F(2,i)*F(2,j));
     }
   }
-  
+
   static STensor3 secondPK;
   for (int i=0; i<3; i++){
     for (int j=0; j<3; j++){
@@ -457,7 +458,7 @@ void largeStrainTransverseIsotropicPotential::constitutive(const STensor3& F, ST
       }
     }
   }
-  
+
   for (int i=0; i<3; i++){
     for (int j=0; j<3; j++){
       P(i,j) = F(i,0)*secondPK(0,j)+F(i,1)*secondPK(1,j)+F(i,2)*secondPK(2,j);
@@ -480,7 +481,7 @@ void largeStrainTransverseIsotropicPotential::constitutive(const STensor3& F, ST
         }
       }
     }
-  }  
+  }
 };
 
 void largeStrainTransverseIsotropicPotential::getLocalValForNonLocalEquation(const STensor3& F, double& val, const bool stiff, STensor3* DvalDF) const{
@@ -546,7 +547,7 @@ biLogarithmicElasticPotential::biLogarithmicElasticPotential(const biLogarithmic
 double biLogarithmicElasticPotential::get(const STensor3& F) const{
   double J = F.determinant();
   static STensor3 C, logC;
-  
+
   for (int i=0; i<3; i++)
     for (int j=0; j<3; j++)
       C(i,j) = F(0,i)*F(0,j)+F(1,i)*F(1,j)+F(2,i)*F(2,j);
@@ -555,7 +556,7 @@ double biLogarithmicElasticPotential::get(const STensor3& F) const{
   static STensor3 logCdev;
   double trlogC;
   STensorOperation::decomposeDevTr(logC, logCdev, trlogC);
-  
+
   double val = 0.5*_K*log(J)*log(J)+ 0.25*_mu*logCdev.dotprod();
   return val;
 };
@@ -637,7 +638,7 @@ void biLogarithmicElasticPotential::constitutive(const STensor3& F, STensor3& P,
           };
         };
       };
-      
+
 
       STensorOperation::zero(*L);
       for (int i=0; i<3; i++){
@@ -703,14 +704,14 @@ double biLogarithmicElasticPotential::getPositiveValue(const STensor3& F) const
   static STensor3 logCdev;
   double trlogC;
   STensorOperation::decomposeDevTr(logC, logCdev, trlogC);
-  
+
   if (J >=1.){
     return 0.5*_K*log(J)*log(J)+ 0.25*_mu*logCdev.dotprod();
   }
   else{
     return 0.25*_mu*logCdev.dotprod();
   }
-  
+
 };
 double biLogarithmicElasticPotential::getNegativeValue(const STensor3& F) const {
   double J = F.determinant();
@@ -721,7 +722,7 @@ void biLogarithmicElasticPotential::constitutivePositive(const STensor3& F, STen
   double J = F.determinant();
   double fact = 1.;
   if (J < 1.) fact = 0.;
-  
+
   STensor3 C, logC;
   for (int i=0; i<3; i++)
     for (int j=0; j<3; j++)
@@ -736,7 +737,7 @@ void biLogarithmicElasticPotential::constitutivePositive(const STensor3& F, STen
   STensorOperation::decomposeDevTr(logC, logCdev, trlogC);
 
   static STensor3 Svol, Sdev;
-  
+
   for (int i=0; i<3;i++){
     for (int j=0; j<3; j++){
       Svol(i,j) = _K*log(J)*invC(i,j);
@@ -770,7 +771,7 @@ void biLogarithmicElasticPotential::constitutivePositive(const STensor3& F, STen
         };
       };
     };
-    
+
 
     STensorOperation::zero(*L);
     for (int i=0; i<3; i++){
@@ -798,11 +799,11 @@ void biLogarithmicElasticPotential::constitutiveNegative(const STensor3& F, STen
         C(i,j) = F(0,i)*F(0,j)+F(1,i)*F(1,j)+F(2,i)*F(2,j);
     static STensor3 invC;
     STensorOperation::inverseSTensor3(C, invC);
-    
+
     static STensor3 Svol;
     Svol=(invC);
     Svol *= (_K*log(J));
-    
+
 		for (int i=0; i<3; i++){
 			for (int j=0; j<3; j++){
 				P(i,j) = F(i,0)*(Svol(0,j))+F(i,1)*(Svol(1,j))+F(i,2)*(Svol(2,j));
@@ -820,7 +821,7 @@ void biLogarithmicElasticPotential::constitutiveNegative(const STensor3& F, STen
           };
         };
       };
-      
+
 
       STensorOperation::zero(*L);
       for (int i=0; i<3; i++){
@@ -838,9 +839,9 @@ void biLogarithmicElasticPotential::constitutiveNegative(const STensor3& F, STen
         }
       }
 		}
-    
+
   }
-  else{  
+  else{
     STensorOperation::zero(P);
     if (stiff){
       STensorOperation::zero(*L);
@@ -850,7 +851,7 @@ void biLogarithmicElasticPotential::constitutiveNegative(const STensor3& F, STen
 void biLogarithmicElasticPotential::getLocalPositiveValForNonLocalEquation(const STensor3& F, double& val, const bool stiff, STensor3* DvalDF) const {
   double Y = getPositiveValue(F);
 	double E = getYoungModulus();
-  
+
 	val = sqrt(2*Y/E);
 	if (stiff){
 		STensorOperation::zero(*DvalDF);
@@ -912,7 +913,7 @@ double NeoHookeanElasticPotential::get(const STensor3& F) const{
       }
     }
   C *= (1./J2over3);
-  
+
   double val = 0.5*_K*log(J)*log(J) + 0.5*_mu*(C.trace()-3.);
   return val;
 };
@@ -930,7 +931,7 @@ void NeoHookeanElasticPotential::constitutive(const STensor3& F, STensor3& P, co
 		}
 
 		if (stiff){
-			
+
 			static STensor3 Pp;
 			for (int i=0; i<3; i++){
 				for (int j=0; j<3; j++){
@@ -952,16 +953,16 @@ void NeoHookeanElasticPotential::constitutive(const STensor3& F, STensor3& P, co
     double logJ = log(J);
     static STensor3 Finv;
     STensorOperation::inverseSTensor3(F, Finv);
-    
+
     static STensor3 C;
     for (int i=0; i<3; i++)
       for (int j=0; j<3; j++)
         C(i,j) = (F(0,i)*F(0,j)+F(1,i)*F(1,j)+F(2,i)*F(2,j));
-    
+
     double trC = C.trace();
     static STensor3 invC;
     STensorOperation::inverseSTensor3(C, invC);
-        
+
     static const STensor3 I(1.);
     static STensor3 Svol, Sdev;
     for (int i=0; i<3; i++){
@@ -970,16 +971,16 @@ void NeoHookeanElasticPotential::constitutive(const STensor3& F, STensor3& P, co
         Sdev(i,j) = (_mu/J2over3)*(I(i,j) - trC*invC(i,j)/3.);
       }
     }
-    
-    
+
+
     for (int i=0; i<3; i++){
       for (int j=0; j<3; j++){
         P(i,j) = F(i,0)*(Svol(0,j)+Sdev(0,j))+ F(i,1)*(Svol(1,j)+Sdev(1,j))+F(i,2)*(Svol(2,j)+Sdev(2,j));
       }
     }
-    
+
     if (stiff){
-      
+
       static STensor43 dSvoldC, dSdevdC;
       for (int i=0; i<3; i++){
         for (int j=0; j<3; j++){
@@ -988,12 +989,12 @@ void NeoHookeanElasticPotential::constitutive(const STensor3& F, STensor3& P, co
               dSvoldC(i,j,k,l) = 0.5*_K*invC(i,j)*invC(k,l) - 0.5*_K*log(J)*(invC(i,k)*invC(j,l)+invC(i,l)*invC(j,k));
               dSdevdC(i,j,k,l) = -Sdev(i,j)*invC(k,l)/3. - (_mu/J2over3)*invC(i,j)*I(k,l)/3. +
                                (_mu*trC/(6.*J2over3))*(invC(i,k)*invC(j,l)+invC(i,l)*invC(j,k));
-              
+
             };
           };
         };
       };
-      
+
       STensorOperation::zero(*L);
       for (int i=0; i<3; i++){
         for (int j=0; j<3; j++){
@@ -1053,7 +1054,7 @@ double NeoHookeanElasticPotential::getPositiveValue(const STensor3& F) const {
   for (int i=0; i<3; i++)
     for (int j=0; j<3; j++)
       C(i,j) = (F(0,i)*F(0,j)+F(1,i)*F(1,j)+F(2,i)*F(2,j))/J2over3;
-  
+
   double val = 0.;
   if (J >= 1.){
      val = 0.5*_K*log(J)*log(J) + 0.5*_mu*(C.trace()-3.);
@@ -1079,14 +1080,14 @@ void NeoHookeanElasticPotential::constitutivePositive(const STensor3& F, STensor
   for (int i=0; i<3; i++)
     for (int j=0; j<3; j++)
       C(i,j) = (F(0,i)*F(0,j)+F(1,i)*F(1,j)+F(2,i)*F(2,j));
-  
+
   double trC = C.trace();
   static STensor3 invC;
   STensorOperation::inverseSTensor3(C, invC);
-  
+
   static const STensor3 I(1.);
   static STensor3 Spos, Sdev;
-  
+
   for (int i=0; i<3; i++){
     for (int j=0; j<3; j++){
       Sdev(i,j) = (_mu/J2over3)*(I(i,j) - trC*invC(i,j)/3.);
@@ -1096,14 +1097,14 @@ void NeoHookeanElasticPotential::constitutivePositive(const STensor3& F, STensor
       }
     }
   }
-  
-  
+
+
   for (int i=0; i<3; i++){
     for (int j=0; j<3; j++){
       P(i,j) = F(i,0)*Spos(0,j)+ F(i,1)*Spos(1,j)+F(i,2)*Spos(2,j);
     }
   }
-  
+
   if (stiff){
     static STensor43 dSposdC;
     for (int i=0; i<3; i++){
@@ -1115,13 +1116,13 @@ void NeoHookeanElasticPotential::constitutivePositive(const STensor3& F, STensor
             if (J >=1.){
               dSposdC(i,j,k,l) += 0.5*_K*invC(i,j)*invC(k,l) - 0.5*_K*log(J)*(invC(i,k)*invC(j,l)+invC(i,l)*invC(j,k));
             }
-            
-            
+
+
           };
         };
       };
     };
-    
+
     STensorOperation::zero(*L);
     for (int i=0; i<3; i++){
       for (int j=0; j<3; j++){
@@ -1144,27 +1145,27 @@ void NeoHookeanElasticPotential::constitutiveNegative(const STensor3& F, STensor
   if (J < 1.){
     double logJ = log(J);
     static STensor3 C;
-    
+
     for (int i=0; i<3; i++)
       for (int j=0; j<3; j++)
         C(i,j) = (F(0,i)*F(0,j)+F(1,i)*F(1,j)+F(2,i)*F(2,j));
-    
+
     static STensor3 invC;
     STensorOperation::inverseSTensor3(C, invC);
     static STensor3 Svol;
     Svol=(invC);
     Svol*= (_K*logJ);
-    
-    
+
+
     for (int i=0; i<3; i++){
       for (int j=0; j<3; j++){
         P(i,j) = F(i,0)*Svol(0,j)+ F(i,1)*Svol(1,j)+F(i,2)*Svol(2,j);
       }
     }
-    
+
     if (stiff){
       static STensor43 dSvoldC;
-    
+
       for (int i=0; i<3; i++){
         for (int j=0; j<3; j++){
           for (int k=0; k<3; k++){
@@ -1174,7 +1175,7 @@ void NeoHookeanElasticPotential::constitutiveNegative(const STensor3& F, STensor
           };
         };
       };
-      
+
       STensorOperation::zero(*L);
       for (int i=0; i<3; i++){
         for (int j=0; j<3; j++){
@@ -1202,7 +1203,7 @@ void NeoHookeanElasticPotential::constitutiveNegative(const STensor3& F, STensor
 void NeoHookeanElasticPotential::getLocalPositiveValForNonLocalEquation(const STensor3& F, double& val, const bool stiff, STensor3* DvalDF) const {
   double Y = getPositiveValue(F);
 	double E = getYoungModulus();
-  
+
 	val = sqrt(2*Y/E);
 	if (stiff){
 		STensorOperation::zero(*DvalDF);
diff --git a/NonLinearSolver/materialLaw/gurson.f b/NonLinearSolver/materialLaw/gurson.f
new file mode 100644
index 0000000000000000000000000000000000000000..aa0d6d8fb776f8a9b2b84bba030beb3202494d7b
--- /dev/null
+++ b/NonLinearSolver/materialLaw/gurson.f
@@ -0,0 +1,581 @@
+C
+c     CAPSUL: CrystAl Plasticity UtiLities tool set 
+C     Multiscale Materials Modelling Group, IMDEA Materials
+C
+C     UMAT Viscoplastic Von Mises Model with flow rule by Peric (1993) MODEL 
+c     evpsvl.f
+C
+      SUBROUTINE umat_gurson(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,
+     &        RPL,DDSDDT,DRPLDE,DRPLDT,
+     &        STRAN,DSTRAN,TIM,DTIME,TEMP,DTEMP,PREDEF,DPRED, CMNAME,
+     &        NDI,NSHR,NTENS,NSTATV,PROPS,NPROPS,COORDS,DROT,PNEWDT,
+     &        CELENT,DFGRD0,DFGRD1,NOEL,NPT,LAYER,KSPT,KSTEP,KINC)
+
+
+c       INCLUDE 'ABA_PARAM.INC' 
+      implicit none
+      integer ntens, nstatv,nprops
+      CHARACTER*8 CMNAME
+      REAL*8 STRESS(NTENS),STATEV(NSTATV),
+     1     DDSDDE(NTENS,NTENS),DDSDDT(NTENS),DRPLDE(NTENS),
+     2     STRAN(NTENS),DSTRAN(NTENS),TIM(2),PREDEF(1),DPRED(1),
+     3     PROPS(NPROPS),COORDS(3),DROT(3),
+     4     DFGRD0(3,3),DFGRD1(3,3)
+
+      real*8 SSE, SPD, SCD, RPL, DTIME, TEMP, CELENT, DRPLDT
+      real*8 PNEWDT, DTEMP, R, dR, ddR
+      integer NDI, NSHR, NOEL, NPT, LAYER, KSPT, KSTEP, KINC
+
+
+      REAL*8 Fppr(3,3), Cepr(3,3), Ce(3,3), CeprINV(3,3),
+     & CeINV(3,3), FpprINV(3,3), FpprINVT(3,3), Ee(3,3),
+     & Eepr(3,3), DevEe(3,3), kcorDevPr(3,3), kcorDevFinal(3,3)
+      REAL*8 WR(1,3), WI(1,3), Fepr(3,3), FeprT(3,3), Fe(3,3),
+     &  FeT(3,3), FpT(3,3), FpINV(3,3), FpINVT(3,3)
+      REAL*8 TrEe, KT, ppr, pFinal, FpprT(3,3), ppk(3,3),
+     & ppk1(3,3), ppk2(3,3), ppk21(3,3), Tro3 
+
+
+c     MATERIAL PARAMETERS
+      real*8 lm,young,nu, q1, q2, q3, sy0, h_hard, h_exp, smuT
+      real*8 dens
+      integer  hardlawInd 
+c     INTERNAL VARIABLES
+      real*8 fvn, fv, epsmn, epsm, hatqn, hatq, eplMacron, eplMacro
+      real*8 Fpn(3,3), Fp(3,3)
+c
+      real*8 Floc(3,3),Floc_t(3,3), FlocINV(3,3), FlocINVT(3,3)
+      real*8 sigma(3,3),Fdet
+      integer i,j,k,ii,jj,kk,ll,pp,nn,mm,istep,iii,jjj
+
+
+      dens=props(1)
+      young=props(2)
+      nu=props(3)
+      smuT=young/(2.*(1+nu))
+      lm=young*nu/((1+nu)*(1.-2*nu))
+      KT = young / (3.*(1- 2.*nu))
+      q1=props(4)
+      q2=props(5)
+      q3=props(6)
+
+
+c      write(*,*) 'Material parameters: E=' , young , ', nu=', nu , 
+c     &                ', q1=' , q1 , ', q2=' , q2 , ', q3=' , q3
+
+      hardlawInd=props(8)
+      sy0=props(9)
+      h_hard=props(10)
+      h_exp=props(11)
+c      write(*,*) 'Hardening law: kind=',hardlawInd,', sy0=',sy0 ,
+c     &                ', h_hard=',h_hard,', h_exp=',h_exp
+
+
+c     porosity      
+      fvn=STATEV(1)
+c     equivalent matrix plastic strain      
+      epsmn=STATEV(2)
+c     macro volumetric plastic deformation = tr(Dp)
+      hatqn=STATEV(3)
+c     macro deviatoric plastic equivalent deformation sqrt(2/3*devDp:DevDp)
+      eplMacron=STATEV(4) 
+c     plastic strain
+      do,ii=1,3
+        do,jj=1,3
+          Fpn(ii,jj)=STATEV(4+(ii-1)*3+jj) 
+        enddo
+      enddo
+c      write(*,*) 'Internal variables step n: fv=',fvn, 
+c     &                    ', eps matrix =', epsmn, 
+c     &                    ', volumetric macro defo =', hatqn, 
+c     &                    ', deviatoric macro defo =', eplMacron 
+c      write(*,*) 'Fp =',Fpn(1,1),' ,', Fpn(1,2),' ,', Fpn(1,3), 
+c     &           'Fp =',Fpn(2,1),' ,', Fpn(2,2),' ,', Fpn(2,3),
+c     &           'Fp =',Fpn(3,1),' ,', Fpn(3,2),' ,', Fpn(3,3) 
+
+
+
+c     predictor of internal variables
+      fv=fvn
+      epsm=epsmn
+      hatq=hatqn
+      hatq=hatqn
+      eplMacro=eplMacron
+
+      do,i=1,3
+         do,j=1,3
+            Floc(i,j)=DFGRD1(i,j)
+            Floc_t(j,i)=DFGRD1(i,j)
+         enddo
+      enddo
+c      if(Floc(1,1).ne.1.) then
+c        Floc(1,1)=DFGRD1(1,1)
+c      endif
+c   code here
+
+c     Calculate inverse of Fppr
+      do,ii=1,3
+        do,jj=1,3
+          Fppr(ii,jj)=Fpn(ii,jj)
+        enddo
+      enddo
+
+      CALL M33INVT (Fppr, FpprINV, FpprINVT)
+      CALL M33T(Fppr,FpprT)
+c     Calculate Fepr 
+      CALL MATRIXMULT (Floc, FpprINV, Fepr)
+      CALL M33INVT(Floc, FlocINV, FlocINVT)
+
+c     Calculate Cepr
+      CALL M33T(Fepr,FeprT)
+      CALL CauchyElasPred(FeprT,Fepr,Cepr)  
+c     Find the Strain tensor predictor (Eepr)   
+      CALL StrainTensP (Cepr, Eepr)
+      CALL M33INV(Cepr, CeprINV)
+
+
+c    Find the elastic predictor
+      CALL DevTrace (Eepr, TrEe, devEe, Tro3)
+      CALL kcorcomp (devEe, TrEe, smuT, KT, kcorDevPr, pPr)
+c      PRINT*, 'kcorDev:'
+c      WRITE (UNIT=*, FMT='(3ES25.8)') kcorDev
+c      PRINT*, 'ppr:'
+c      WRITE (UNIT=*, FMT='(3ES25.8)') ppr
+c    Find the Kirchhoff stress
+c      CALL corKirchhoffStress(kcorDev, ppr, kCor)
+c      PRINT*, 'kCor:'
+c      WRITE (UNIT=*, FMT='(3ES25.8)') kCor
+
+
+c      CALL KirchhoffStress(ppr, Fe, Cepr, kcordev, kirch)
+c      CALL M33DET (Floc, Jacob)
+
+c      CALL calclogM(Jacob,logJacob)
+c      logJ = log(Jacob)
+
+c   HERE WE NEED TO CHECK YIELD SURFACE AND 
+c   PERFORM PLASTIC CORRECTION
+c   UPDATE FP
+
+      call harderningLawMatrix( hardlawInd , sy0 , h_hard , h_exp ,
+     &      epsm , R , dR , ddR )
+
+c 
+      do,ii=1,3
+        do,jj=1,3
+          Fp(ii,jj)=Fppr(ii,jj)
+        enddo
+      enddo
+
+
+c     Find Fe
+      CALL M33INVT (Fp, FpINV, FpINVT)
+      CALL M33T(Fp,FpT)
+      CALL MATRIXMULT (Floc, FpINV, Fe)
+c     Calculate Ce
+      CALL M33T(Fe,FeT)
+      CALL CauchyElasPred(FeT,Fe,Ce)  
+c     Find the Strain tensor predictor (Ee)   
+      CALL StrainTensP (Ce, Ee)
+      CALL M33INV(Ce, CeINV)
+
+c     Recompute stress
+      CALL DevTrace (Ee, TrEe, devEe, Tro3)
+      CALL kcorcomp (devEe, TrEe, smuT, KT, kcorDevFinal, pFinal)
+
+      ppk1= pFinal * FlocINVT
+      ppk21 = MATMUL(CeINV, kcorDevFinal)
+      ppk2 = MATMUL(MATMUL(Fe,ppk21), FpINVT)
+      ppk = ppk1 + ppk2
+      
+      
+      sigma=matmul(ppk,Floc_t)
+
+
+
+      Fdet=Floc(1,1)*Floc(2,2)*Floc(3,3)+
+     1 Floc(1,2)*Floc(2,3)*Floc(3,1)+
+     1 Floc(1,3)*Floc(2,1)*Floc(3,2)-
+     1 Floc(1,3)*Floc(2,2)*Floc(3,1)-
+     1 Floc(2,3)*Floc(3,2)*Floc(1,1)-
+     1 Floc(3,3)*Floc(1,2)*Floc(2,1)
+
+
+      do,ii=1,3
+        STRESS(ii)=sigma(ii,ii)/Fdet
+      enddo
+      STRESS(4)=sigma(1,2)/Fdet
+      STRESS(5)=sigma(1,3)/Fdet
+      STRESS(6)=sigma(2,3)/Fdet
+
+c    put back internal variables       
+      STATEV(1)=fv
+      STATEV(2)=epsm
+      STATEV(3)=hatqn  
+      STATEV(4)=eplMacron 
+      do,ii=1,3
+        do,jj=1,3
+          STATEV(4+(ii-1)*3+jj)=Fp(ii,jj) 
+        enddo
+      enddo
+    
+
+
+      return
+      end
+
+
+c     ****************************************************************
+      subroutine harderningLawMatrix( kindOfLaw , sy0 , h_hard , h_exp ,
+     &            epsm , R , dR , ddR ) 
+      implicit none
+c     =====  'ARGUMENTS:'
+      real*8 sy0, h_hard, h_exp, epsm, R, dR, ddR
+      integer kindOfLaw
+
+c     ====
+c     power law 
+      R=sy0
+      dR=0.
+      ddR=0.
+      if(kindOfLaw.eq.1 .and. epsm.gt.0.) then
+         R=sy0+h_hard*(epsm**h_exp);
+         dR=h_hard*(epsm**h_exp)/epsm;
+         ddR=dR*(h_exp-1.)/epsm;
+      end if
+    
+      end subroutine harderningLawMatrix
+
+      SUBROUTINE M33INV (A, AINV)
+      IMPLICIT NONE
+      INTEGER I,J
+      real*8 A(3,3), AINV(3,3)
+      real*8 EPS 
+      real*8 DET
+      real*8 COFACTOR(3,3)
+      EPS= 1.0D-10
+      DET =   A(1,1)*A(2,2)*A(3,3)  
+     &       - A(1,1)*A(2,3)*A(3,2)  
+     &       - A(1,2)*A(2,1)*A(3,3)  
+     &       + A(1,2)*A(2,3)*A(3,1)  
+     &       + A(1,3)*A(2,1)*A(3,2)  
+     &       - A(1,3)*A(2,2)*A(3,1)
+
+      IF (ABS(DET) .LE. EPS) THEN
+         AINV = 0.0D0
+C         OK_FLAG1 = .FALSE.
+         RETURN
+      END IF
+
+      COFACTOR(1,1) = +(A(2,2)*A(3,3)-A(2,3)*A(3,2))
+      COFACTOR(1,2) = -(A(2,1)*A(3,3)-A(2,3)*A(3,1))
+      COFACTOR(1,3) = +(A(2,1)*A(3,2)-A(2,2)*A(3,1))
+      COFACTOR(2,1) = -(A(1,2)*A(3,3)-A(1,3)*A(3,2))
+      COFACTOR(2,2) = +(A(1,1)*A(3,3)-A(1,3)*A(3,1))
+      COFACTOR(2,3) = -(A(1,1)*A(3,2)-A(1,2)*A(3,1))
+      COFACTOR(3,1) = +(A(1,2)*A(2,3)-A(1,3)*A(2,2))
+      COFACTOR(3,2) = -(A(1,1)*A(2,3)-A(1,3)*A(2,1))
+      COFACTOR(3,3) = +(A(1,1)*A(2,2)-A(1,2)*A(2,1))
+      
+
+C      AINV = TRANSPOSE(COFACTOR) / DET
+
+
+      DO I = 1, 3
+        DO J = 1, 3
+          AINV(J,I) = COFACTOR(I,J) / DET
+       END DO
+      END DO       
+
+C      OK_FLAG1 = .TRUE.
+
+      RETURN
+
+      END SUBROUTINE M33INV
+
+      SUBROUTINE M33INVT (A, AINV, AINVT)
+      IMPLICIT NONE
+      INTEGER I,J
+      real*8 A(3,3) , AINV(3,3)
+      real*8 AINVT(3,3)
+
+      real*8 EPS 
+      real*8 DET
+      real*8 COFACTOR(3,3)
+      EPS = 1.0D-10
+
+
+      DET =   A(1,1)*A(2,2)*A(3,3)  
+     &       - A(1,1)*A(2,3)*A(3,2)  
+     &       - A(1,2)*A(2,1)*A(3,3)  
+     &       + A(1,2)*A(2,3)*A(3,1)  
+     &       + A(1,3)*A(2,1)*A(3,2)  
+     &       - A(1,3)*A(2,2)*A(3,1)
+
+      IF (ABS(DET) .LE. EPS) THEN
+         AINVT = 0.0D0
+
+         RETURN
+      END IF
+
+      COFACTOR(1,1) = +(A(2,2)*A(3,3)-A(2,3)*A(3,2))
+      COFACTOR(1,2) = -(A(2,1)*A(3,3)-A(2,3)*A(3,1))
+      COFACTOR(1,3) = +(A(2,1)*A(3,2)-A(2,2)*A(3,1))
+      COFACTOR(2,1) = -(A(1,2)*A(3,3)-A(1,3)*A(3,2))
+      COFACTOR(2,2) = +(A(1,1)*A(3,3)-A(1,3)*A(3,1))
+      COFACTOR(2,3) = -(A(1,1)*A(3,2)-A(1,2)*A(3,1))
+      COFACTOR(3,1) = +(A(1,2)*A(2,3)-A(1,3)*A(2,2))
+      COFACTOR(3,2) = -(A(1,1)*A(2,3)-A(1,3)*A(2,1))
+      COFACTOR(3,3) = +(A(1,1)*A(2,2)-A(1,2)*A(2,1))
+
+      DO I = 1, 3
+        DO J = 1, 3
+          AINV(J,I) = COFACTOR(I,J) / DET
+
+       END DO
+      END DO       
+
+      DO I = 1, 3
+        DO J = 1, 3
+
+          AINVT(J,I) = AINV(I,J)
+       END DO
+      END DO       
+
+      RETURN
+
+      END SUBROUTINE M33INVT
+
+      SUBROUTINE MATRIXMULT(A,B,C)
+      IMPLICIT NONE
+      
+      REAL*8 A(3,3),B(3,3),C(3,3)
+
+      C = MATMUL (A,B)
+      
+      END SUBROUTINE MATRIXMULT
+
+      SUBROUTINE M33T (A, AT)
+      IMPLICIT NONE
+      INTEGER I,J
+      real*8 A(3,3) 
+      real*8 AT(3,3)
+
+      AT = TRANSPOSE(A)
+
+      RETURN
+
+      END SUBROUTINE M33T
+
+      SUBROUTINE CauchyElasPred(FeprT,Fepr,Cepr)
+      IMPLICIT NONE
+      INTEGER I,J
+      real*8 FeprT(3,3), Fepr(3,3), Cepr(3,3)
+
+      Cepr= MATMUL(FeprT,Fepr)
+
+      RETURN
+      END SUBROUTINE CauchyElasPred
+
+      SUBROUTINE StrainTensP (Cepr, Eepr)
+      IMPLICIT NONE
+      INTEGER LDVL, LDVR, LWORK, INFO
+      CHARACTER*1 JOBV 
+      real*8 WORK(12,3)
+
+      real*8 Cepr(3,3) 
+      real*8 WR(1,3), WI(1,3), logWR(1,3), logWI(1,3)
+      real*8 VL(3,3)
+      real*8 VR(3,3)
+      real*8 Eepr(3,3)
+      real*8 loga(3,3)  
+      INTEGER :: i,j
+
+c      LDVL=3
+c      LDVR=LDVL
+c      LWORK=12
+c      JOBV= 'V'
+
+c      CALL DGEEV( JOBV, JOBV, 3, Cepr, 3, WR, WI, VL, LDVL, VR, 
+c     &                       LDVR, WORK, LWORK, INFO )
+
+c      do i=1,3
+c            do j=1,3
+c                  loga(i,j)= log(WR(1,1)) * VL (i,1) * VR(j,1) 
+c     &                       +log(WR(1,2)) * VL (i,2) * VR(j,2) 
+c     &                       +log(WR(1,3)) * VL (i,3) * VR(j,3) 
+c            enddo
+c      enddo
+ 
+      call calclogM(Cepr,loga)
+
+
+c      do i=1,3
+c            do j=1,3
+c                  loga(i,j)= logWR(1,1) * VL (i,1) * VR(j,1) 
+c     &                       +logWR(1,2) * VL (i,2) * VR(j,2) 
+c     &                       +logWR(1,3) * VL (i,3) * VR(j,3) 
+c            enddo
+c      enddo
+ 
+     
+      Eepr= 0.5* loga
+
+      RETURN
+
+      END SUBROUTINE StrainTensP
+
+      SUBROUTINE DevTrace (Eepr, TrEe, devEe, Tro3)
+      IMPLICIT NONE
+
+      real*8 Eepr(3,3)
+      real*8 TrEe
+      real*8 DevEe(3,3)
+      real*8 Tro3
+      TrEe= Eepr(1,1) + Eepr(2,2) + Eepr(3,3)
+      
+      Tro3=TrEe/3.
+      devEe=Eepr
+      devEe(1,1)=devEe(1,1)-Tro3
+      devEe(2,2)=devEe(2,2)-Tro3
+      devEe(3,3)=devEe(3,3)-Tro3      
+      END SUBROUTINE DevTrace
+ 
+
+      SUBROUTINE kcorcomp (devEe, TrEe, smuT, KT, kcorDev, ppr)
+      IMPLICIT NONE
+      real*8 devEe(3,3)
+      real*8 kcorDev(3,3)
+      real*8 smuT, KT, TrEe, ppr
+
+
+      kcorDev = devEe *2. * smuT 
+      ppr = KT * TrEe
+
+      END SUBROUTINE kcorcomp
+
+
+      SUBROUTINE corKirchhoffStress(kcorDev, ppr, kCor)
+      IMPLICIT NONE
+      real*8 kcorDev(3,3) 
+      real*8 kCor(3,3)
+      real*8 ppr 
+
+
+      kCor= kcorDev
+      kCor(1,1)= kCor(1,1) + ppr
+      kCor(2,2)= kCor(2,2) + ppr
+      kCor(3,3)= kCor(3,3) + ppr
+      
+      END SUBROUTINE corKirchhoffStress
+
+      SUBROUTINE KirchhoffStress(ppr, Fe, Cepr, kcordev, kirch)
+      IMPLICIT NONE
+      real*8 kcorDev(3,3), Fe(3,3), Cepr(3,3) ,CeprINV(3,3)
+      real*8 kCor(3,3), mid(3,3), FeT(3,3), midl(3,3), kirch(3,3)
+      real*8 ppr 
+
+      CALL M33INV(Cepr,CeprINV)
+      CALL M33T(Fe,FeT)
+      mid = MATMUL(CeprINV,kcorDev)
+      midl = MATMUL(Fe,mid)
+      kirch = MATMUL(midl,FeT)
+      
+      kirch(1,1) = kirch(1,1) + ppr
+      kirch(2,2) = kirch(2,2) + ppr
+      kirch(3,3) = kirch(3,3) + ppr
+
+      END SUBROUTINE KirchhoffStress
+
+      
+      subroutine calclogM(M,logM)
+
+        implicit none
+
+        double precision,dimension(3,3)::M,logM,VL,VR,logMapo,VRinv
+        integer::n,INFO,LWORK,I,J
+
+       double precision,dimension(3)::WR,WI,logWR,ipiv
+       double precision,dimension(24)::WORK
+
+       n=3
+       LWORK=24
+
+
+        call DGEEV( 'N', 'V', n, M, n, WR, WI, VL, n, VR,
+     1                  n, WORK, LWORK, INFO )
+
+C Check if all eigenvalues are greater than zero
+
+      if (WR(1) .le. 0.D0) then
+       write(*,*) 'Unable to compute matrix logarithm!'
+      GOTO 111
+      end if
+
+       if (WR(2) .le. 0.D0) then
+         write(*,*) 'Unable to compute matrix logarithm!'
+         GOTO 111
+       end if
+
+        if (WR(3) .le. 0.D0) then
+          write(*,*) 'Unable to compute matrix logarithm!'
+          GOTO 111
+        end if
+
+       DO I = 1, 3
+         DO J = 1, 3
+             logMapo(I,J) = 0.D0
+         END DO
+        END DO
+
+C Then Mapo will be a diagonal matrix whose diagonal elements 
+C are eigenvalues of M. Replace each diagonal element of Mapo by its 
+C (natural) logarithm in order to obtain logMapo.
+
+       DO I = 1, 3
+         LogMapo(I,I)=log(WR(I))
+       END DO
+
+
+C Calculate inverse of V with LU Factorisation
+C Copy VR to VRinv
+        DO I = 1, 3
+         DO J = 1, 3
+             VRinv(I,J) = VR(I,J)
+         END DO
+       END DO
+
+        call dgetrf( n, n, VRinv, n, ipiv, info )
+c       write(*,*) 'INFO',INFO
+
+        call dgetri( n, VRinv, n, ipiv, WORK, LWORK, INFO )
+c        write(*,*) 'INFO',INFO
+
+C Build the logM Matrix
+        logM = matmul(matmul(VR,logMapo),VRinv)      
+
+      
+111    END SUBROUTINE calclogM
+
+      SUBROUTINE M33DET (A, Jacob)
+      IMPLICIT NONE
+      INTEGER I,J
+      real*8 A(3,3)
+
+      real*8 Jacob
+
+
+      Jacob =   A(1,1)*A(2,2)*A(3,3) 
+     &       - A(1,1)*A(2,3)*A(3,2)  
+     &       - A(1,2)*A(2,1)*A(3,3)  
+     &       + A(1,2)*A(2,3)*A(3,1)  
+     &       + A(1,3)*A(2,1)*A(3,2)  
+     &       - A(1,3)*A(2,2)*A(3,1)
+
+C      RETURN
+
+      END SUBROUTINE M33DET
+
+
+      return
+      end
diff --git a/NonLinearSolver/materialLaw/j2IsotropicHardening.cpp b/NonLinearSolver/materialLaw/j2IsotropicHardening.cpp
index a9274f30cdf4b6c65fa51f447f6a3c85b693f0b2..0ea6210aae3ca622c3473c7b116fc2a2dd2ba67c 100644
--- a/NonLinearSolver/materialLaw/j2IsotropicHardening.cpp
+++ b/NonLinearSolver/materialLaw/j2IsotropicHardening.cpp
@@ -81,7 +81,7 @@ PerfectlyPlasticJ2IsotropicHardening& PerfectlyPlasticJ2IsotropicHardening::oper
 void PerfectlyPlasticJ2IsotropicHardening::createIPVariable(IPJ2IsotropicHardening* &ipv) const
 {
   if(ipv != NULL) delete ipv;
-  ipv = new IPPerfectlyPlasticJ2IsotropicHardening();
+  ipv = new IPPerfectlyPlasticJ2IsotropicHardening(getYield0());
 }
 
 void PerfectlyPlasticJ2IsotropicHardening::hardening(double p0, const IPJ2IsotropicHardening &ipvprev, double p, IPJ2IsotropicHardening &ipv) const
@@ -210,7 +210,7 @@ PowerLawJ2IsotropicHardening& PowerLawJ2IsotropicHardening::operator=(const J2Is
 void PowerLawJ2IsotropicHardening::createIPVariable(IPJ2IsotropicHardening* &ipv) const
 {
   if(ipv != NULL) delete ipv;
-  ipv = new IPPowerLawJ2IsotropicHardening();
+  ipv = new IPPowerLawJ2IsotropicHardening(getYield0());
 }
 
 void PowerLawJ2IsotropicHardening::hardening(double p0, const IPJ2IsotropicHardening &ipvprev, double p, IPJ2IsotropicHardening &ipv) const
@@ -382,7 +382,7 @@ void ExponentialJ2IsotropicHardening::setTemperatureFunction_hexp(const scalarFu
 void ExponentialJ2IsotropicHardening::createIPVariable(IPJ2IsotropicHardening* &ipv) const
 {
   if(ipv != NULL) delete ipv;
-  ipv = new IPExponentialJ2IsotropicHardening();
+  ipv = new IPExponentialJ2IsotropicHardening(getYield0());
 }
 
 void ExponentialJ2IsotropicHardening::hardening(double p0, const IPJ2IsotropicHardening &ipvprev, double p, IPJ2IsotropicHardening &ipv) const
@@ -548,7 +548,7 @@ void EnhancedExponentialJ2IsotropicHardening::setTemperatureFunction_hexp(const
 void EnhancedExponentialJ2IsotropicHardening::createIPVariable(IPJ2IsotropicHardening* &ipv) const
 {
   if(ipv != NULL) delete ipv;
-  ipv = new IPExponentialJ2IsotropicHardening();
+  ipv = new IPExponentialJ2IsotropicHardening(getYield0());
 }
 
 void EnhancedExponentialJ2IsotropicHardening::hardening(double p0, const IPJ2IsotropicHardening &ipvprev, double p, IPJ2IsotropicHardening &ipv) const
@@ -566,15 +566,15 @@ void EnhancedExponentialJ2IsotropicHardening::hardening(double p0, const IPJ2Iso
     double tmp = exp(-_hexp*p);
     double tmp2 = pow(1.+_c*p,_n);
     R = getYield0()+_h*(1.-tmp)*tmp2;
-    double dtmp = -_hexp*tmp; 
+    double dtmp = -_hexp*tmp;
     double dtmp2 = (_c*_n)*pow(1.+_c*p,_n-1.);
-    
+
     dR = -_h*dtmp*tmp2 + _h*(1.-tmp)*dtmp2;
     double ddtmp = -_hexp*dtmp;
     double ddtmp2 = (_c*_n)*(_c*(_n-1))*pow(1.+_c*p,_n-2.);
-    
+
     ddR = -_h*ddtmp*tmp2 -_h*dtmp*dtmp2  - _h*dtmp*dtmp2+_h*(1.-tmp)*ddtmp2;
-    
+
     intR= ipvprev.getIntegR()+ R*(p-p0);
   }
   ipv.set(R0,R,dR,ddR,intR,dRdT);
@@ -597,7 +597,7 @@ J2IsotropicHardening * EnhancedExponentialJ2IsotropicHardening::clone() const
 ExponentialSeriesJ2IsotropicHardening::ExponentialSeriesJ2IsotropicHardening(const int num, const int n, double yield0) :
 					J2IsotropicHardening(num,yield0,true), _h(n,0.),_hexp(n,0.),_temFunc_h(n,NULL),_temFunc_hexp(n,NULL)
 {
-  
+
 }
 ExponentialSeriesJ2IsotropicHardening::ExponentialSeriesJ2IsotropicHardening(const ExponentialSeriesJ2IsotropicHardening &source) :
 					J2IsotropicHardening(source),_h(source._h),_hexp(source._hexp)
@@ -622,7 +622,7 @@ ExponentialSeriesJ2IsotropicHardening& ExponentialSeriesJ2IsotropicHardening::op
       if (_temFunc_h[i] != NULL) {delete _temFunc_h[i]; _temFunc_h[i] = NULL;}
       if (_temFunc_hexp[i] != NULL) {delete _temFunc_hexp[i]; _temFunc_hexp[i] = NULL;}
     }
-    
+
     _h = src->_h;
     _hexp = src->_hexp;
     int n = _h.size();
@@ -637,7 +637,7 @@ ExponentialSeriesJ2IsotropicHardening& ExponentialSeriesJ2IsotropicHardening::op
 }
 
 ExponentialSeriesJ2IsotropicHardening::~ExponentialSeriesJ2IsotropicHardening(){
-  // clear 
+  // clear
   for (int i=0; i< _h.size(); i++){
     if (_temFunc_h[i] != NULL) {delete _temFunc_h[i]; _temFunc_h[i] = NULL;}
     if (_temFunc_hexp[i] != NULL) {delete _temFunc_hexp[i]; _temFunc_hexp[i] = NULL;}
@@ -671,7 +671,7 @@ void ExponentialSeriesJ2IsotropicHardening::set(int i, double h, double hexp, co
 void ExponentialSeriesJ2IsotropicHardening::createIPVariable(IPJ2IsotropicHardening* &ipv) const
 {
   if(ipv != NULL) delete ipv;
-  ipv = new IPExponentialJ2IsotropicHardening();
+  ipv = new IPExponentialJ2IsotropicHardening(getYield0());
 }
 
 void ExponentialSeriesJ2IsotropicHardening::hardening(double p0, const IPJ2IsotropicHardening &ipvprev, double p, IPJ2IsotropicHardening &ipv) const
@@ -711,18 +711,18 @@ void ExponentialSeriesJ2IsotropicHardening::hardening(double p0, const IPJ2Isotr
   else{
     intR =getYield0(T)*p;
     dRdT = getDYield0DT(T);
-    int n = _h.size(); 
+    int n = _h.size();
     for (int i=0; i< n; i++){
       double hT=_h[i]*_temFunc_h[i]->getVal(T);
       double hexpT=_hexp[i]*_temFunc_hexp[i]->getVal(T);
-    
+
       double tmp = exp(-hexpT*p);
       R += hT*(1.-tmp);
       dR += hT*hexpT*tmp;
       ddR -= hT*hexpT*hexpT*tmp;
       intR += hT*p;
       if(fabs(hexpT)>0.) intR+=hT*(tmp-1)/(hexpT);
-      
+
       double dhdT=hT*_temFunc_h[i]->getDiff(T);
       double dhexpdT=hexpT*_temFunc_hexp[i]->getDiff(T);
       dRdT += dhdT*(1-tmp)+hT*(dhexpdT*p*tmp);
@@ -811,7 +811,7 @@ void SwiftJ2IsotropicHardening::setTemperatureFunction_hexp(const scalarFunction
 void SwiftJ2IsotropicHardening::createIPVariable(IPJ2IsotropicHardening* &ipv) const
 {
   if(ipv != NULL) delete ipv;
-  ipv = new IPSwiftJ2IsotropicHardening();
+  ipv = new IPSwiftJ2IsotropicHardening(getYield0());
 }
 
 void SwiftJ2IsotropicHardening::hardening(double p0, const IPJ2IsotropicHardening &ipvprev, double p, IPJ2IsotropicHardening &ipv) const
@@ -881,7 +881,7 @@ void SwiftJ2IsotropicHardening::hardening(double p0, const IPJ2IsotropicHardenin
       dRdT=getDYield0DT(T);
     }
     else{
-      double tmp = 1.+hT*(p-_p0);  
+      double tmp = 1.+hT*(p-_p0);
       dRdT= R*getDYield0DT(T)/getYield0(T) + R*dhexpdT*log(tmp) + R*hexpT*dhdT*(p-_p0)/tmp;
     }
   }
@@ -933,7 +933,7 @@ MultipleSwiftJ2IsotropicHardening::~MultipleSwiftJ2IsotropicHardening(){
 void MultipleSwiftJ2IsotropicHardening::createIPVariable(IPJ2IsotropicHardening* &ipv) const
 {
   if(ipv != NULL) delete ipv;
-  ipv = new IPSwiftJ2IsotropicHardening();
+  ipv = new IPSwiftJ2IsotropicHardening(getYield0());
 }
 
 void MultipleSwiftJ2IsotropicHardening::hardening(double p0, const IPJ2IsotropicHardening &ipvprev, double p, IPJ2IsotropicHardening &ipv) const
@@ -1109,7 +1109,7 @@ void LinearExponentialJ2IsotropicHardening::setTemperatureFunction_hexp(const sc
 void LinearExponentialJ2IsotropicHardening::createIPVariable(IPJ2IsotropicHardening* &ipv) const
 {
   if(ipv != NULL) delete ipv;
-  ipv = new IPLinearExponentialJ2IsotropicHardening();
+  ipv = new IPLinearExponentialJ2IsotropicHardening(getYield0());
 }
 
 void LinearExponentialJ2IsotropicHardening::hardening(double p0, const IPJ2IsotropicHardening &ipvprev, double p, IPJ2IsotropicHardening &ipv) const
@@ -1236,7 +1236,7 @@ LinearExponentialFollowedBySwiftLawJ2IsotropicHardening::~LinearExponentialFollo
 void LinearExponentialFollowedBySwiftLawJ2IsotropicHardening::createIPVariable(IPJ2IsotropicHardening* &ipv) const
 {
   if(ipv != NULL) delete ipv;
-  ipv = new IPLinearExponentialJ2IsotropicHardening();
+  ipv = new IPLinearExponentialJ2IsotropicHardening(getYield0());
 }
 
 void LinearExponentialFollowedBySwiftLawJ2IsotropicHardening::hardening(double p0, const IPJ2IsotropicHardening &ipvprev, double p, IPJ2IsotropicHardening &ipv) const
@@ -1443,7 +1443,7 @@ void LinearFollowedByExponentialJ2IsotropicHardening::setTemperatureFunction_hex
 void LinearFollowedByExponentialJ2IsotropicHardening::createIPVariable(IPJ2IsotropicHardening* &ipv) const
 {
   if(ipv != NULL) delete ipv;
-  ipv = new IPLinearFollowedByExponentialJ2IsotropicHardening();
+  ipv = new IPLinearFollowedByExponentialJ2IsotropicHardening(getYield0());
 }
 
 void LinearFollowedByExponentialJ2IsotropicHardening::hardening(double p0, const IPJ2IsotropicHardening &ipvprev, double p, IPJ2IsotropicHardening &ipv) const
@@ -1670,7 +1670,7 @@ void LinearFollowedByPowerLawJ2IsotropicHardening::setTemperatureFunction_hexp(c
 void LinearFollowedByPowerLawJ2IsotropicHardening::createIPVariable(IPJ2IsotropicHardening* &ipv) const
 {
   if(ipv != NULL) delete ipv;
-  ipv = new IPLinearFollowedByPowerLawJ2IsotropicHardening();
+  ipv = new IPLinearFollowedByPowerLawJ2IsotropicHardening(getYield0());
 }
 
 void LinearFollowedByPowerLawJ2IsotropicHardening::hardening(double p0, const IPJ2IsotropicHardening &ipvprev, double p, IPJ2IsotropicHardening &ipv) const
@@ -1790,7 +1790,7 @@ LinearFollowedByMultiplePowerLawJ2IsotropicHardening::~LinearFollowedByMultipleP
 void LinearFollowedByMultiplePowerLawJ2IsotropicHardening::createIPVariable(IPJ2IsotropicHardening* &ipv) const
 {
   if(ipv != NULL) delete ipv;
-  ipv = new IPLinearFollowedByMultiplePowerLawJ2IsotropicHardening();
+  ipv = new IPLinearFollowedByMultiplePowerLawJ2IsotropicHardening(getYield0());
 }
 
 void LinearFollowedByMultiplePowerLawJ2IsotropicHardening::hardening(double p0, const IPJ2IsotropicHardening &ipvprev, double p, IPJ2IsotropicHardening &ipv) const
@@ -1910,7 +1910,7 @@ void PolynomialJ2IsotropicHardening::setCoefficients(const int i, const double v
 void PolynomialJ2IsotropicHardening::createIPVariable(IPJ2IsotropicHardening* &ipv) const
 {
   if(ipv != NULL) delete ipv;
-  ipv = new IPPolynomialJ2IsotropicHardening();
+  ipv = new IPPolynomialJ2IsotropicHardening(getYield0());
 }
 
 void PolynomialJ2IsotropicHardening::hardening(double p0, const IPJ2IsotropicHardening &ipvprev, double p, IPJ2IsotropicHardening &ipv) const
@@ -2039,7 +2039,7 @@ void TwoExpJ2IsotropicHaderning::setTemperatureFunction_K(const scalarFunction&
 void TwoExpJ2IsotropicHaderning::createIPVariable(IPJ2IsotropicHardening* &ipv) const
 {
   if(ipv != NULL) delete ipv;
-  ipv = new IPTwoExpJ2IsotropicHaderning();
+  ipv = new IPTwoExpJ2IsotropicHaderning(getYield0());
 }
 
 void TwoExpJ2IsotropicHaderning::hardening(double p0, const IPJ2IsotropicHardening &ipvprev, double p, IPJ2IsotropicHardening &ipv) const
@@ -2158,7 +2158,7 @@ void TanhJ2IsotropicHardening::setTemperatureFunction_p0(const scalarFunction& T
 void TanhJ2IsotropicHardening::createIPVariable(IPJ2IsotropicHardening* &ipv) const
 {
   if(ipv != NULL) delete ipv;
-  ipv = new IPPolynomialJ2IsotropicHardening();
+  ipv = new IPPolynomialJ2IsotropicHardening(getYield0());
 }
 
 void TanhJ2IsotropicHardening::hardening(double p0, const IPJ2IsotropicHardening &ipvprev, double p, IPJ2IsotropicHardening &ipv) const
@@ -2253,7 +2253,7 @@ void TanhSeriesJ2IsotropicHardening::set(int i, double K, double p0){
 void TanhSeriesJ2IsotropicHardening::createIPVariable(IPJ2IsotropicHardening* &ipv) const
 {
   if(ipv != NULL) delete ipv;
-  ipv = new IPPolynomialJ2IsotropicHardening();
+  ipv = new IPPolynomialJ2IsotropicHardening(getYield0());
 }
 
 void TanhSeriesJ2IsotropicHardening::hardening(double p0, const IPJ2IsotropicHardening &ipvprev, double p, IPJ2IsotropicHardening &ipv) const
@@ -2465,7 +2465,7 @@ void LinearFollowedByExponentialFollowedByMultiplePowerLawJ2IsotropicHardening::
 void LinearFollowedByExponentialFollowedByMultiplePowerLawJ2IsotropicHardening::createIPVariable(IPJ2IsotropicHardening* &ipv) const
 {
   if(ipv != NULL) delete ipv;
-  ipv = new IPLinearFollowedByExponentialJ2IsotropicHardening();
+  ipv = new IPLinearFollowedByExponentialJ2IsotropicHardening(getYield0());
 }
 
 void LinearFollowedByExponentialFollowedByMultiplePowerLawJ2IsotropicHardening::hardening(double p0, const IPJ2IsotropicHardening &ipvprev, double p, IPJ2IsotropicHardening &ipv) const
@@ -2620,7 +2620,7 @@ J2IsotropicHardening* LinearFollowedByExponentialFollowedByMultiplePowerLawJ2Iso
 
 LinearFollowedByMultiplePowerLawJ2IsotropicHardening1::LinearFollowedByMultiplePowerLawJ2IsotropicHardening1(const LinearFollowedByMultiplePowerLawJ2IsotropicHardening1& src):
       J2IsotropicHardening(src),_H(src._H),_p1(src._p1),_n1(src._n1),_p2(src._p2),_n2(src._n2),_p3(src._p3),_n3(src._n3),_p4(src._p4),_n4(src._n4){}
-      
+
 LinearFollowedByMultiplePowerLawJ2IsotropicHardening1& LinearFollowedByMultiplePowerLawJ2IsotropicHardening1::operator =(const J2IsotropicHardening& src){
   J2IsotropicHardening::operator =(src);
   const LinearFollowedByMultiplePowerLawJ2IsotropicHardening1* psrc = dynamic_cast<const LinearFollowedByMultiplePowerLawJ2IsotropicHardening1*>(&src);
@@ -2638,7 +2638,7 @@ LinearFollowedByMultiplePowerLawJ2IsotropicHardening1& LinearFollowedByMultipleP
   return *this;
 }
 
-LinearFollowedByMultiplePowerLawJ2IsotropicHardening1::~LinearFollowedByMultiplePowerLawJ2IsotropicHardening1(){}; 
+LinearFollowedByMultiplePowerLawJ2IsotropicHardening1::~LinearFollowedByMultiplePowerLawJ2IsotropicHardening1(){};
 
 
 void LinearFollowedByMultiplePowerLawJ2IsotropicHardening1::createIPVariable(IPJ2IsotropicHardening* &ipv) const
@@ -2658,7 +2658,7 @@ void LinearFollowedByMultiplePowerLawJ2IsotropicHardening1::hardening(double p0,
     intR = ipvprev.getIntegR()+ R*(p-p0);
   }
   else{
-      
+
     double sy1 = getYield0() + _H*_p1;
     double sy2 = sy1*pow(_p2/_p1,_n1);
     double sy3 = sy2*pow(_p3/_p2,_n2);
@@ -2749,9 +2749,9 @@ void LinearFollowedByMultiplePowerLawJ2IsotropicHardening1::hardening(double p0,
       dRdT = getDYield0DT(T)*pow(p/_p4,_n4);
     }
   }
-  
+
   ipv.set(R,dR,ddR,intR,dRdT);
-  
+
 }
 
 //--------------------------------end
diff --git a/NonLinearSolver/materialLaw/mlaw.h b/NonLinearSolver/materialLaw/mlaw.h
index d6c2190f47597b3952d6563e2681978b2579c039..6a42fe864d60022633e250d79216c32e318a9fea 100644
--- a/NonLinearSolver/materialLaw/mlaw.h
+++ b/NonLinearSolver/materialLaw/mlaw.h
@@ -25,14 +25,14 @@ class materialLaw{
 
     enum matname{linearElasticPlaneStress,linearElasticPlaneStressWithDamage, linearElasticOrthotropicPlaneStress,
                  cohesiveLaw, fracture, nonLinearShell, j2linear, viscoelastic, EOS, transverseIsotropic, transverseIsoCurvature,
-                 transverseIsoYarnB, Anisotropic, AnisotropicStoch, nonLocalDamage, vumat, UMATInterface, crystalPlasticity,
+                 transverseIsoYarnB, Anisotropic, AnisotropicStoch, nonLocalDamage, vumat, UMATInterface, crystalPlasticity, gursonUMAT,
                  numeric, secondOrderElastic, j2smallstrain,nonLocalDamageGurson, nonLocalDamageThomason, nonLocalDamageGursonThomason,
                  nonLocalDamageJ2Hyper, nonLocalDamageIsotropicElasticity,
                  LinearThermoMechanics,J2ThermoMechanics,SMP,PhenomenologicalSMP,LinearElecTherMech,AnIsotropicElecTherMech,
                  hyperelastic, powerYieldLaw, powerYieldLawWithFailure,nonLocalDamagePowerYieldHyper,
                  localDamagePowerYieldHyperWithFailure,nonLocalDamagePowerYieldHyperWithFailure,ElecSMP,
                  ThermalConducter,AnIsotropicTherMech, localDamageJ2Hyper,linearElastic,nonLocalDamageGursonThermoMechanics,
-                 nonLocalDamageJ2SmallStrain,cluster};
+                 nonLocalDamageJ2SmallStrain,cluster,tfa,ANN};
 
 
  protected :
@@ -97,8 +97,10 @@ class materialLaw{
                             IPVariable *q1,              // updated array of internal variable (in ipvcur on output),
 			    STensor43 &Tangent,         // constitutive tangents (output)
 			    const bool stiff,
-                            STensor43* elasticTangent = NULL
-			    ) const=0;
+                            STensor43* elasticTangent = NULL,
+                            const bool dTangent=false,
+                            STensor63* dCalgdeps = NULL
+ 			    ) const=0;
 #endif
 };
 class materialLaw2LawsInitializer{
diff --git a/NonLinearSolver/materialLaw/mlawAnisotropic.cpp b/NonLinearSolver/materialLaw/mlawAnisotropic.cpp
index 1df9f7c35a620e38a61073f087c99d1b91bfe626..e4f0bd838f969932570399a8fe09fd271670e175 100644
--- a/NonLinearSolver/materialLaw/mlawAnisotropic.cpp
+++ b/NonLinearSolver/materialLaw/mlawAnisotropic.cpp
@@ -181,8 +181,15 @@ double mlawAnisotropic::soundSpeed() const
 }
 
 
-void mlawAnisotropic::constitutive(const STensor3& F0,const STensor3& Fn,STensor3 &P,
-                              const IPVariable *q0i, IPVariable *q1i,STensor43 &Tangent,const bool stiff, STensor43* elasticTangent) const
+void mlawAnisotropic::constitutive(const STensor3& F0,
+                                   const STensor3& Fn,STensor3 &P,
+                                   const IPVariable *q0i, 
+                                   IPVariable *q1i,
+                                   STensor43 &Tangent,
+                                   const bool stiff, 
+                                   STensor43* elasticTangent, 
+                                   const bool dTangent,
+                                   STensor63* dCalgdeps) const
 {
     const IPAnisotropic *q0 = dynamic_cast< const IPAnisotropic *> (q0i); 
     IPAnisotropic *q1 = dynamic_cast< IPAnisotropic *> (q1i);
diff --git a/NonLinearSolver/materialLaw/mlawAnisotropic.h b/NonLinearSolver/materialLaw/mlawAnisotropic.h
index 5b608c55f918399c90a9c1b9a157073ae1f3b6ed..5f17e0713fe0467e9a7fd8567643f83fdfa55d9a 100644
--- a/NonLinearSolver/materialLaw/mlawAnisotropic.h
+++ b/NonLinearSolver/materialLaw/mlawAnisotropic.h
@@ -66,7 +66,9 @@ public:
                             IPVariable *q1,              // updated array of internal variable (in ipvcur on output),
 			    STensor43 &Tangent,         // constitutive tangents (output)
 			    const bool stiff,
-			    STensor43* elasticTangent = NULL) const;
+			    STensor43* elasticTangent = NULL, 
+                            const bool dTangent =false,
+                            STensor63* dCalgdeps = NULL) const;
   const STensor43& getElasticityTensor() const { return _ElasticityTensor;};
  protected:
   virtual double deformationEnergy(const STensor3 &defo) const ;
diff --git a/NonLinearSolver/materialLaw/mlawAnisotropicStoch.cpp b/NonLinearSolver/materialLaw/mlawAnisotropicStoch.cpp
index a5a51751f67a4c0970c6414737d5efb9b9985f2c..7824e84b38366c66ba938e24d05e1888158f1f54 100644
--- a/NonLinearSolver/materialLaw/mlawAnisotropicStoch.cpp
+++ b/NonLinearSolver/materialLaw/mlawAnisotropicStoch.cpp
@@ -267,8 +267,15 @@ double mlawAnisotropicStoch::soundSpeed() const
 }
 
 
-void mlawAnisotropicStoch::constitutive(const STensor3& F0,const STensor3& Fn,STensor3 &P,
-                              const IPVariable *q0i, IPVariable *q1i,STensor43 &Tangent,const bool stiff, STensor43* elasticTangent) const
+void mlawAnisotropicStoch::constitutive(const STensor3& F0,
+                                        const STensor3& Fn,STensor3 &P,
+                                        const IPVariable *q0i, 
+                                        IPVariable *q1i,
+                                        STensor43 &Tangent,
+                                        const bool stiff, 
+                                        STensor43* elasticTangent, 
+                                        const bool dTangent,
+                                        STensor63* dCalgdeps) const
 {
     const IPAnisotropicStoch *q0= dynamic_cast<const IPAnisotropicStoch *> (q0i);
           IPAnisotropicStoch *q1= dynamic_cast<IPAnisotropicStoch *> (q1i);
diff --git a/NonLinearSolver/materialLaw/mlawAnisotropicStoch.h b/NonLinearSolver/materialLaw/mlawAnisotropicStoch.h
index 390003f2503a1b316109ab92dcbc58cf0a2d69d8..97d3bbda80614840b441a66ea15c383b369fa3ef 100644
--- a/NonLinearSolver/materialLaw/mlawAnisotropicStoch.h
+++ b/NonLinearSolver/materialLaw/mlawAnisotropicStoch.h
@@ -99,7 +99,9 @@ class mlawAnisotropicStoch : public materialLaw
                             IPVariable *q1,              // updated array of internal variable (in ipvcur on output),
 			    STensor43 &Tangent,         // constitutive tangents (output)
 			    const bool stiff,
-			    STensor43* elasticTangent = NULL) const;
+			    STensor43* elasticTangent = NULL, 
+                            const bool dTangent =false,
+                            STensor63* dCalgdeps = NULL) const;
 
   const STensor43& getElasticityTensor() const { return _ElasticityTensor;};
 
diff --git a/NonLinearSolver/materialLaw/mlawClusterMaterialLaws.cpp b/NonLinearSolver/materialLaw/mlawClusterMaterialLaws.cpp
index 0c4460c43c239a38bf6ffb3d20b4c08536473133..58683b1cfb64a2efd344890c8d7dd2f04b2f0b10 100644
--- a/NonLinearSolver/materialLaw/mlawClusterMaterialLaws.cpp
+++ b/NonLinearSolver/materialLaw/mlawClusterMaterialLaws.cpp
@@ -24,9 +24,13 @@ mlawClusterMaterialLaws::mlawClusterMaterialLaws(const int num, const char *clus
   if(!in) Msg::Error("Cannot open the file %s! Maybe is missing   ",clusterName);
   int elementnb, clusternb;
   //in >> elementnb; in>> clusternb; //to be corrected
-  in >> elementnb >> clusternb;
-  in.ignore(256,'\n');
-  _clusternb.insert(std::pair<int,int>(elementnb,clusternb));
+  //in >> elementnb >> clusternb;
+  while ( in >> elementnb >> clusternb )
+  //in.ignore(256,'\n');
+  //_clusternb.insert(std::pair<int,int>(elementnb,clusternb));
+  {
+   _clusternb.insert(std::pair<int,int>(elementnb,clusternb));
+  }
 
 }
 mlawClusterMaterialLaws::mlawClusterMaterialLaws(const mlawClusterMaterialLaws &source) :
@@ -118,7 +122,9 @@ void mlawClusterMaterialLaws::constitutive(
             IPVariable *q1i,             // updated array of internal variable (in ipvcur on output),
             STensor43 &Tangent,         // constitutive tangents (output)
             const bool stiff,         // if true compute the tangents
-           STensor43* elasticTangent) const
+            STensor43* elasticTangent, 
+            const bool dTangent,
+            STensor63* dCalgdeps) const
 {
 
 
@@ -131,7 +137,7 @@ void mlawClusterMaterialLaws::constitutive(
   IPVariable *ipv1 = q1->getRefToIPv();
   STensor3 Feig(Fn);
   //modify it to put eigen strain
-  STensor3 eig;
+  STensor3 eig,invEig;
   STensorOperation::unity(eig);
   bool find=false;
   for(std::map<int,STensor3>::const_iterator it = _eigen.begin(); it != _eigen.end(); ++it)
@@ -143,7 +149,9 @@ void mlawClusterMaterialLaws::constitutive(
       break;
     }
   }
-  Feig*=eig;  
+  //STensorOperation::inverseSTensor3(eig, invEig);
+  //Feig*=invEig;
+  Feig *= eig; 
   itmlaw->second->constitutive(F0,Feig,P,ipv0,ipv1,Tangent,stiff,elasticTangent);   
 
 }
diff --git a/NonLinearSolver/materialLaw/mlawClusterMaterialLaws.h b/NonLinearSolver/materialLaw/mlawClusterMaterialLaws.h
index 25dd652b1da206ab0a310de5b1fa4d0c0a291662..87fedc14a8e1642cab5cb7554a11c80d669fba36 100644
--- a/NonLinearSolver/materialLaw/mlawClusterMaterialLaws.h
+++ b/NonLinearSolver/materialLaw/mlawClusterMaterialLaws.h
@@ -49,7 +49,9 @@ class mlawClusterMaterialLaws : public materialLaw{
             IPVariable *q1,             // updated array of internal variable (in ipvcur on output),
             STensor43 &Tangent,         // constitutive tangents (output)
             const bool stiff,          // if true compute the tangents
-            STensor43* elasticTangent = NULL) const;
+            STensor43* elasticTangent = NULL, 
+            const bool dTangent =false,
+            STensor63* dCalgdeps = NULL) const;
 
 
     virtual materialLaw* clone() const {return new mlawClusterMaterialLaws(*this);};
diff --git a/NonLinearSolver/materialLaw/mlawCohesive.h b/NonLinearSolver/materialLaw/mlawCohesive.h
index 58faa19b53ca8b8ed4646038ae78587d30881b64..e0cc6b887aaf232345d9f6a048c46b9f0b96a468 100644
--- a/NonLinearSolver/materialLaw/mlawCohesive.h
+++ b/NonLinearSolver/materialLaw/mlawCohesive.h
@@ -53,7 +53,9 @@ class CohesiveLawBase : public materialLaw{
                             IPVariable *q1,              // updated array of internal variable (in ipvcur on output),
 			    STensor43 &Tangent,         // constitutive tangents (output)
 			    const bool stiff,
-                            STensor43* elasticTangent = NULL
+                            STensor43* elasticTangent = NULL, 
+                            const bool dTangent =false,
+                            STensor63* dCalgdeps = NULL
 			    ) const
     {
       Msg::Error("CohesiveLawBase::constitutive does not exist");
diff --git a/NonLinearSolver/materialLaw/mlawEOS.h b/NonLinearSolver/materialLaw/mlawEOS.h
index 7e62bed075d7213559cf02471445c1bd0a592bbe..d67be169d20e49369650e44f581df740923f7725 100644
--- a/NonLinearSolver/materialLaw/mlawEOS.h
+++ b/NonLinearSolver/materialLaw/mlawEOS.h
@@ -76,7 +76,9 @@ public:
                             IPVariable *q1,              // updated array of internal variable (in ipvcur on output),
 			    STensor43 &Tangent,         // constitutive tangents (output)
 			    const bool stiff,
-                            STensor43* elasticTangent = NULL
+                            STensor43* elasticTangent = NULL, 
+                            const bool dTangent =false,
+                            STensor63* dCalgdeps =NULL
 			    ) const
    {
      Msg::Error("mlawEOS: constitutive not defined");
diff --git a/NonLinearSolver/materialLaw/mlawGursonUMAT.cpp b/NonLinearSolver/materialLaw/mlawGursonUMAT.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..449ad9f31ca20d77b011b45a59c0b983b66cef2d
--- /dev/null
+++ b/NonLinearSolver/materialLaw/mlawGursonUMAT.cpp
@@ -0,0 +1,138 @@
+//
+// C++ Interface: material law
+//
+// Description: UMAT interface for crystal plasticity
+//
+//
+// Author:  <L. NOELS>, (C) 2019
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+#include <math.h>
+#include "MInterfaceElement.h"
+#include <fstream>
+#include "mlawGursonUMAT.h"
+#include "STensorOperations.h"
+
+#if !defined(F77NAME)
+#define F77NAME(x) (x##_)
+#endif
+
+extern "C" {
+  void F77NAME(umat_gurson)(double *STRESS, double *STATEV, double *DDSDDE, double *SSE, double *SPD, double *SCD,
+              double *RPL, double *DDSDDT, double *DRPLDE, double *DRPLDT,
+              double *STRAN, double *DSTRAN, double *TIM, double *DTIME, double *TEMP, double *DTEMP, double *PREDEF, double *DPRED, const char *CMNAME,
+              int *NDI, int*NSHR, int* NTENS, int*NSTATV, double *PROPS, int *NPROPS, double *COORDS, double *DROT, double *PNEWDT,
+              double *CELENT, double *DFGRD0, double *DFGRD1, int *NOEL, int *NPT, int *LAYER, int *KSPT, int *KSTEP, int *KINC);
+}
+
+
+
+mlawGursonUMAT::mlawGursonUMAT(const int num, const double temperature,
+                   const char *propName) : mlawUMATInterface(num,0.,propName)
+  {
+        _temperature=temperature;
+        //should depend on the umat: here we read the grains.inp file with 3 euler angle, 2 parameters equal to 1, and the number of internal variables (23)
+        std::ifstream in(propName);
+        if(!in) Msg::Error("Cannot open the file %s! Maybe is missing   ",propName);
+        std::string line;
+        std::getline(in, line,'\n'); 
+        nsdv=atoi(line.c_str());
+        std::getline(in, line,'\n'); 
+        nprops1=atoi(line.c_str());
+        std::cout << "number of internal variables: "<< nsdv << "; number of properties: "<< nprops1 << std::endl;
+        props=new double[nprops1];
+        int i=0;
+        while (std::getline(in, line,'\n') and i<nprops1) 
+        {
+          //std::cout << line << std::endl;
+          props[i]=atof(line.c_str());
+          std::cout << "property "<< i << ": "<< props[i] << std::endl;
+          i++;
+        }
+        in.close();
+        _rho=props[0];
+        double E0=props[1];
+        _nu0 = props[2];
+        _mu0 = E0/2./(1.+_nu0);
+        _fv0 = props[6];
+  }
+  mlawGursonUMAT::mlawGursonUMAT(const mlawGursonUMAT &source) :
+                                        mlawUMATInterface(source),_fv0(source._fv0)
+  {
+
+  }
+
+  mlawGursonUMAT& mlawGursonUMAT::operator=(const materialLaw &source)
+  {
+     mlawUMATInterface::operator=(source);
+     const mlawGursonUMAT* src =static_cast<const mlawGursonUMAT*>(&source);
+     _fv0 = src->_fv0;
+     return *this;
+  }
+
+  mlawGursonUMAT::~mlawGursonUMAT()
+  {
+
+  }
+void mlawGursonUMAT::createIPState(IPGursonUMAT *ivi, IPGursonUMAT *iv1, IPGursonUMAT *iv2) const
+{
+  ivi->setFv(_fv0);
+  iv1->setFv(_fv0);
+  iv2->setFv(_fv0);
+  for(int i=0;i<3;i++)
+  {
+    ivi->setFp(1.,i,i);
+    iv1->setFp(1.,i,i);
+    iv2->setFp(1.,i,i);
+  }
+
+  mlawUMATInterface::createIPState(ivi, iv1, iv2);
+
+}
+
+void mlawGursonUMAT::createIPVariable(IPGursonUMAT *ipv,const MElement *ele,const int nbFF,const IntPt *GP, const int gpt) const
+{
+  ipv->setFv(_fv0);
+  for(int i=0;i<3;i++)
+  {
+    ipv->setFp(1.,i,i);
+  }
+  mlawUMATInterface::createIPVariable(ipv, ele, nbFF,GP, gpt);
+}
+
+
+void mlawGursonUMAT::callUMAT(double *stress, double *statev, double **ddsdde, double &sse, double &spd, double &scd, double &rpl, 
+                                 double *ddsddt, double *drplde, double &drpldt, double *stran, double *dtsran,
+                                 double *tim, double timestep, double temperature, double deltaTemperature, double *predef, double *dpred,
+                                 const char *CMNAME, int &ndi, int &nshr, int tensorSize, 
+                                 int statevSize, double *prs, int matPropSize, double *coords, double **dRot,
+                                 double &pnewdt, double &celent, double **F0, double **F1, 
+                                 int &noel, int &npt, int &layer, int &kspt, int &kstep, int &kinc) const
+{
+  
+  double dRtmp[9];
+  double F0tmp[9];
+  double F1tmp[9];
+
+  double ddsddetmp[36]; 
+
+  convert3x3To9((const double**)dRot, dRtmp);
+  convert3x3To9((const double**)F0, F0tmp);
+  convert3x3To9((const double**)F1, F1tmp);
+
+  convert6x6To36((const double**)ddsdde,ddsddetmp);
+
+  F77NAME(umat_gurson)(stress, statev, ddsddetmp, &sse, &spd, &scd, &rpl,
+                   ddsddt, drplde, &drpldt, stran, dtsran,
+                   tim, &timestep, &temperature, &deltaTemperature, predef, dpred,
+                   CMNAME, &ndi, &nshr, &tensorSize, &statevSize, prs, &matPropSize, coords, dRtmp,
+                   &pnewdt, &celent, F0tmp, F1tmp, 
+                   &noel, &npt, &layer, &kspt, &kstep, &kinc);
+
+  convert9To3x3((const double*)dRtmp,dRot);
+  convert36To6x6((const double*)ddsddetmp,ddsdde);
+
+} 
+
diff --git a/NonLinearSolver/materialLaw/mlawGursonUMAT.h b/NonLinearSolver/materialLaw/mlawGursonUMAT.h
new file mode 100644
index 0000000000000000000000000000000000000000..51ac777c3d42a18464631a80bdb4f3453097a05a
--- /dev/null
+++ b/NonLinearSolver/materialLaw/mlawGursonUMAT.h
@@ -0,0 +1,56 @@
+//
+// C++ Interface: material law
+//
+// Description: UMAT interface for Gurson model
+//
+// Author:  <L. Noels>, (C) 2019
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+#ifndef MLAWGURSONUMAT_H_
+#define MLAWGURSONUMAT_H_
+#include "mlawUMATInterface.h"
+#include "ipGursonUMAT.h"
+
+class mlawGursonUMAT : public mlawUMATInterface 
+{
+
+ protected:
+  double _fv0; //initial porosity
+ public:
+  mlawGursonUMAT(const int num, const double temperature, const char *propName);
+
+ #ifndef SWIG
+  mlawGursonUMAT(const mlawGursonUMAT &source);
+  mlawGursonUMAT& operator=(const materialLaw &source);
+  virtual ~mlawGursonUMAT();
+  virtual materialLaw* clone() const {return new mlawGursonUMAT(*this);};
+  virtual void checkInternalState(IPVariable* ipv, const IPVariable* ipvprev) const{}; // do nothing
+  // function of materialLaw
+  virtual matname getType() const{return materialLaw::gursonUMAT;}
+
+  virtual void createIPState(IPStateBase* &ips,const bool* state_=NULL,const MElement *ele=NULL, const int nbFF_=0, const IntPt *GP=NULL, const int gpt = 0) const
+  {
+     Msg::Error("Cannot be called");
+  }
+
+  virtual void createIPState(IPGursonUMAT *ivi, IPGursonUMAT *iv1, IPGursonUMAT *iv2) const;
+  virtual void createIPVariable(IPGursonUMAT *ipv,const MElement *ele,const int nbFF, const IntPt *GP, const int gpt) const;
+  virtual void initLaws(const std::map<int,materialLaw*> &maplaw){}; // this law is initialized so nothing to do
+
+  virtual void callUMAT(double *stress, double *statev, double **ddsdde, double &sse, double &spd, double &scd, double &rpl, 
+                                 double *ddsddt, double *drplde, double &drpldt, double *stran, double *dtsran,
+                                 double *tim, double timestep, double temperature, double deltaTemperature, double *predef, double *dpred,
+                                 const char *CMNAME, int &ndi, int &nshr, int tensorSize, 
+                                 int statevSize, double *prs, int matPropSize, double *coords, double **dRot,
+                                 double &pnewdt, double &celent, double **F0, double **F1, 
+                                 int &noel, int &npt, int &layer, int &kspt, int &kstep, int &kinc) const;    
+
+  virtual const char* getCMNAME() const {return "Gurson";}
+  virtual double getDensity() const {return _rho;}
+
+ #endif // SWIG
+};
+
+#endif // MLAWCRYSTALPLASTICITY_H_
diff --git a/NonLinearSolver/materialLaw/mlawHyperelastic.cpp b/NonLinearSolver/materialLaw/mlawHyperelastic.cpp
index 79af81c4fc101edb78b57d15249b154e43530a1a..b839bc54b73f79caed3babc9cf34352ec39dc85f 100644
--- a/NonLinearSolver/materialLaw/mlawHyperelastic.cpp
+++ b/NonLinearSolver/materialLaw/mlawHyperelastic.cpp
@@ -16,10 +16,10 @@ void mlawHyperViscoElastic::setStrainOrder(const int order){
 };
 
 void mlawHyperViscoElastic::setViscoelasticMethod(const int method){
-  _viscoMethod = method;
-  if (_viscoMethod == 0)
+  _viscoMethod = (viscoelasticType)method;
+  if (_viscoMethod == Maxwell)
     Msg::Info("generalized maxwell model is used for viscoelasticity");
-  else if (_viscoMethod == 1)
+  else if (_viscoMethod == KelvinVoight)
     Msg::Info("generalized Voigt-Kelvin model is used for viscoelasticity");
   else
     Msg::Error("this method has not been implemented");
@@ -27,7 +27,7 @@ void mlawHyperViscoElastic::setViscoelasticMethod(const int method){
 
 void mlawHyperViscoElastic::setViscoElasticNumberOfElement(const int N){
   _N = N;
-  Msg::Info("Numer of Spring/Dashpot for generalized Maxwell model: %d",_N);
+  Msg::Info("Numer of Spring/Dashpot for viscoelastic model: %d",_N);
   _Ki.clear(); _ki.clear();
   _Gi.clear(); _gi.clear();
   _Ki.resize(_N);
@@ -118,7 +118,7 @@ double mlawHyperViscoElastic::deformationEnergy(const STensor3 &C) const
 mlawHyperViscoElastic::mlawHyperViscoElastic(const int num,const double E,const double nu, const double rho,
                           const bool matrixbyPerturbation, const double pert):
     materialLaw(num,true), _E(E),_nu(nu),_rho(rho),_tangentByPerturbation(matrixbyPerturbation),_perturbationfactor(pert),
-    _viscoMethod(0),_N(0.),_order(1),_Ki(0),_ki(0),_Gi(0),_gi(0){
+    _viscoMethod(Maxwell),_N(0.),_order(1),_Ki(0),_ki(0),_Gi(0),_gi(0){
 
   _lambda = (E*nu)/(1.+nu)/(1.-2.*nu);
   _mu = 0.5*E/(1.+nu);
@@ -168,7 +168,7 @@ void mlawHyperViscoElastic::updateViscoElasticFlow(const IPHyperViscoElastic *q0
   if ((_Ki.size() > 0) or (_Gi.size() > 0)){
 
     double dt = this->getTimeStep();
-    if (_viscoMethod == 0){
+    if (_viscoMethod == Maxwell){
       static STensor3 DE, devDE;
       static double trDE;
 
@@ -199,7 +199,7 @@ void mlawHyperViscoElastic::updateViscoElasticFlow(const IPHyperViscoElastic *q0
         Ke += _Ki[i]*ztak;
       }
     }
-    else if (_viscoMethod == 1){
+    else if (_viscoMethod == KelvinVoight){
       static STensor3 DK, devDK;
       static double trDK;
 
@@ -241,7 +241,7 @@ void mlawHyperViscoElastic::viscoElasticPredictor(const STensor3& Ee, const STen
     STensorOperation::decomposeDevTr(DE,devDE,trDE);
 
     double dt = this->getTimeStep();
-    if (_viscoMethod == 0){
+    if (_viscoMethod == Maxwell){
       Ge = _mu;
       Ke = _K;
       for (int i=0; i<_Gi.size(); i++){
@@ -281,7 +281,7 @@ void mlawHyperViscoElastic::viscoElasticPredictor(const STensor3& Ee, const STen
       q1->_kirchhoff(1,1) += p;
       q1->_kirchhoff(2,2) += p;
     }
-    else if (_viscoMethod == 1){
+    else if (_viscoMethod == KelvinVoight){
       double invGe = 1./_mu;
       STensor3 D(0.);
       for (int i=0; i<_Gi.size(); i++){
@@ -447,9 +447,15 @@ void mlawHyperViscoElastic::predictorCorrector_ViscoElastic(const STensor3& F0,
 
 };
 
-void mlawHyperViscoElastic::constitutive(const STensor3& F0, const STensor3& F, STensor3&P,
-                            const IPVariable *q0i, IPVariable *q1i,
-                            STensor43& Tangent, const bool stiff,STensor43* elasticTangent) const{
+void mlawHyperViscoElastic::constitutive(const STensor3& F0, 
+                                         const STensor3& F, STensor3&P,
+                                         const IPVariable *q0i, 
+                                         IPVariable *q1i,
+                                         STensor43& Tangent, 
+                                         const bool stiff,
+                                         STensor43* elasticTangent, 
+                                         const bool dTangent,
+                                         STensor63* dCalgdeps) const{
 
   const IPHyperViscoElastic *q0=dynamic_cast<const IPHyperViscoElastic *>(q0i);
   IPHyperViscoElastic *q1 = dynamic_cast<IPHyperViscoElastic *>(q1i);
@@ -489,10 +495,6 @@ void mlawPowerYieldHyper::setTractionHardening(const J2IsotropicHardening& trac)
   if (_traction) delete _traction;
   _traction = trac.clone();
 };
-void mlawPowerYieldHyper::setShearHardening(const J2IsotropicHardening& shear){
-  if (_shear) delete _shear;
-  _shear = shear.clone();
-};
 void mlawPowerYieldHyper::setKinematicHardening(const kinematicHardening& kin){
   if (_kinematic) delete _kinematic;
   _kinematic = kin.clone();
@@ -513,10 +515,6 @@ void mlawPowerYieldHyper::hardening(const IPHyperViscoElastoPlastic* q0, IPHyper
     _traction->hardening(q0->_epspTraction,*q0->_ipTraction, q->_epspTraction,*q->_ipTraction);
   }
 
-  if (_shear!= NULL && q->_ipShear!= NULL){
-    _shear->hardening(q0->_epspShear,*q0->_ipShear,q->_epspShear,*q->_ipShear);
-  }
-
   if (_kinematic!= NULL && q->_ipKinematic != NULL)
     _kinematic->hardening(q0->_epspbarre,*q0->_ipKinematic,q->_epspbarre,*q->_ipKinematic);
 };
@@ -562,7 +560,9 @@ void mlawPowerYieldHyper::constitutive(
   IPVariable *q1i,             // updated array of internal variable (in ipvcur on output),
   STensor43 &Tangent,         // constitutive tangents (output)
   const bool stiff,          // if true compute the tangents
-  STensor43* elasticTangent) const{
+  STensor43* elasticTangent,
+  const bool dTangent,
+  STensor63* dCalgdeps) const{
 
   const IPHyperViscoElastoPlastic *q0=dynamic_cast<const IPHyperViscoElastoPlastic *>(q0i);
   IPHyperViscoElastoPlastic *q1 = dynamic_cast<IPHyperViscoElastoPlastic *>(q1i);
@@ -1636,7 +1636,7 @@ void mlawPowerYieldHyper::predictorCorrector_associatedFlow(const STensor3& F, c
               }
             }
           }
-     
+
 
     STensor3& DirrEnergDF = q1->_DirreversibleEnergyDF;
     if (this->getSolver()->getPathFollowingLocalIncrementType() == nonLinearMechSolver::DEFO_ENERGY){
@@ -1725,8 +1725,7 @@ mlawPowerYieldHyper::mlawPowerYieldHyper(const int num,const double E,const doub
                         const bool matrixbyPerturbation, const double pert):
                         mlawHyperViscoElastic(num,E,nu,rho,matrixbyPerturbation,pert),_tol(tol),
                         _n(1.5),_nonAssociatedFlow(true),_b(0.3), _I4(1.,1.), _I(1.),
-                        _viscosity(NULL),_p(1.),_compression(NULL),_traction(NULL),_kinematic(NULL),
-                        _shear(NULL){
+                        _viscosity(NULL),_p(1.),_compression(NULL),_traction(NULL),_kinematic(NULL){
   _Idev = _I4;
    STensor3 mIon3(-1./3);
    STensor43 mIIon3;
@@ -1747,16 +1746,12 @@ mlawPowerYieldHyper::mlawPowerYieldHyper(const mlawPowerYieldHyper& src):mlawHyp
   _traction = NULL;
   if (src._traction) _traction = src._traction->clone();
 
-  _shear = NULL;
-  if (src._shear) _shear = src._shear->clone();
-
   _kinematic= NULL;
   if (src._kinematic) _kinematic = src._kinematic->clone();
 };
 
 mlawPowerYieldHyper::~mlawPowerYieldHyper(){
   if (_compression) delete _compression; _compression = NULL;
-  if (_shear) delete _shear; _shear = NULL;
   if (_traction) delete _traction; _traction = NULL;
   if (_kinematic) delete _kinematic; _kinematic = NULL;
   if (_viscosity) delete _viscosity; _viscosity = NULL;
@@ -1784,9 +1779,9 @@ void mlawPowerYieldHyper::setNonAssociatedFlow(const bool flag) {
 
 void mlawPowerYieldHyper::createIPState(IPStateBase* &ips,const bool* state_,const MElement *ele, const int nbFF_, const IntPt *GP, const int gpt) const
 {
-  IPVariable* ipvi = new IPHyperViscoElastoPlastic(_compression,_traction,_shear,_kinematic,_N);
-  IPVariable* ipv1 = new IPHyperViscoElastoPlastic(_compression,_traction,_shear,_kinematic,_N);
-  IPVariable* ipv2 = new IPHyperViscoElastoPlastic(_compression,_traction,_shear,_kinematic,_N);
+  IPVariable* ipvi = new IPHyperViscoElastoPlastic(_compression,_traction,_kinematic,_N);
+  IPVariable* ipv1 = new IPHyperViscoElastoPlastic(_compression,_traction,_kinematic,_N);
+  IPVariable* ipv2 = new IPHyperViscoElastoPlastic(_compression,_traction,_kinematic,_N);
   if(ips != NULL) delete ips;
   ips = new IP3State(state_,ipvi,ipv1,ipv2);
 };
diff --git a/NonLinearSolver/materialLaw/mlawHyperelastic.h b/NonLinearSolver/materialLaw/mlawHyperelastic.h
index 932bc19a203c91cc4785006bd055c865054cd284..bf5dae8959a9b751d91f4ae0751d0b0f01c79f3b 100644
--- a/NonLinearSolver/materialLaw/mlawHyperelastic.h
+++ b/NonLinearSolver/materialLaw/mlawHyperelastic.h
@@ -19,6 +19,8 @@
 
 
 class mlawHyperViscoElastic : public materialLaw{
+  public:
+    enum viscoelasticType{Maxwell=0,KelvinVoight=1};
   #ifndef SWIG
   protected:
     double _rho; // density
@@ -35,7 +37,7 @@ class mlawHyperViscoElastic : public materialLaw{
     bool _tangentByPerturbation; // flag for tangent by perturbation
 
      // viscoelastic data
-    int _viscoMethod; // viscoelastic method 0- generalized Maxwell model, 1- generalized Kelvin-Voight model
+    viscoelasticType _viscoMethod; // viscoelastic method 0- generalized Maxwell model, 1- generalized Kelvin-Voight model
     int _N; // number of elements
     std::vector<double> _Ki;
     std::vector<double> _ki;
@@ -96,7 +98,9 @@ class mlawHyperViscoElastic : public materialLaw{
             IPVariable *q1,             // updated array of internal variable (in ipvcur on output),
             STensor43 &Tangent,         // constitutive tangents (output)
             const bool stiff,          // if true compute the tangents
-           STensor43* elasticTangent = NULL) const;
+            STensor43* elasticTangent = NULL, 
+            const bool dTangent =false,
+            STensor63* dCalgdeps = NULL) const;
 
 
     virtual materialLaw* clone() const {return new mlawHyperViscoElastic(*this);};
@@ -121,7 +125,6 @@ class mlawPowerYieldHyper : public mlawHyperViscoElastic{
     // hardening data
     J2IsotropicHardening* _compression;
     J2IsotropicHardening* _traction;
-    J2IsotropicHardening* _shear;
     kinematicHardening* _kinematic;
 
     // yield surface option
@@ -178,7 +181,6 @@ class mlawPowerYieldHyper : public mlawHyperViscoElastic{
 
     void setCompressionHardening(const J2IsotropicHardening& comp);
     void setTractionHardening(const J2IsotropicHardening& trac);
-    void setShearHardening(const J2IsotropicHardening& shear);
     void setKinematicHardening(const kinematicHardening& kin);
     void setViscosityEffect(const viscosityLaw& v, const double p);
 
@@ -191,7 +193,6 @@ class mlawPowerYieldHyper : public mlawHyperViscoElastic{
 
     virtual J2IsotropicHardening* getConstRefToCompressionHardening() const {return _compression;};
     virtual J2IsotropicHardening* getConstRefToTractionHardening() const{return _traction;};
-    virtual J2IsotropicHardening* getConstRefToShearHardening() const {return _shear;};
     virtual kinematicHardening* getConstRefToKinematicHardening() const{return _kinematic;};
 
 
@@ -207,7 +208,9 @@ class mlawPowerYieldHyper : public mlawHyperViscoElastic{
             IPVariable *q1,             // updated array of internal variable (in ipvcur on output),
             STensor43 &Tangent,         // constitutive tangents (output)
             const bool stiff,          // if true compute the tangents
-           STensor43* elasticTangent = NULL) const;
+            STensor43* elasticTangent = NULL, 
+            const bool dTangent =false,
+            STensor63* dCalgdeps = NULL) const;
 
     virtual void checkInternalState(IPVariable* ipv, const IPVariable* ipvprev) const{}; // do nothing
     #endif // SWIG
diff --git a/NonLinearSolver/materialLaw/mlawHyperelasticDamage.cpp b/NonLinearSolver/materialLaw/mlawHyperelasticDamage.cpp
index b618dd2ac4f92db34f3d75a07d9239184100259b..66e9bd82afd550b2dba4bd6d66b800f47c88f11b 100644
--- a/NonLinearSolver/materialLaw/mlawHyperelasticDamage.cpp
+++ b/NonLinearSolver/materialLaw/mlawHyperelasticDamage.cpp
@@ -51,7 +51,9 @@ void mlawLocalDamageHyperelastic::constitutive(
 		IPVariable *qi,        // updated array of internal variable (in ipvcur on output),
 		STensor43 &dPdF,                             // constitutive tangents (output) // partial stress / partial strains
 		const bool stiff,                                // if true: compute the tangents analytically
-                STensor43* elasticTangent) const{
+                STensor43* elasticTangent, 
+                const bool dTangent,
+                STensor63* dCalgdeps) const{
 	// elastic law
         const IPLocalDamageIsotropicElasticity *q0 =dynamic_cast<const IPLocalDamageIsotropicElasticity *> (q0i);
 	IPLocalDamageIsotropicElasticity *q=dynamic_cast<IPLocalDamageIsotropicElasticity *> (qi);
@@ -146,7 +148,9 @@ void mlawLocalAnisotropicDamageHyperelastic::constitutive(
 		IPVariable *qi,        // updated array of internal variable (in ipvcur on output),
 		STensor43 &dPdF,                             // constitutive tangents (output) // partial stress / partial strains
 		const bool stiff,                                // if true: compute the tangents analytically
-                STensor43* elasticTangent ) const{
+                STensor43* elasticTangent, 
+                const bool dTangentdeps,
+                STensor63* dCalgdeps) const{
 	// elastic law
         const IPLocalDamageIsotropicElasticity *q0 =dynamic_cast<const IPLocalDamageIsotropicElasticity *> (q0i);
 	IPLocalDamageIsotropicElasticity *q=dynamic_cast<IPLocalDamageIsotropicElasticity *> (qi);
diff --git a/NonLinearSolver/materialLaw/mlawHyperelasticDamage.h b/NonLinearSolver/materialLaw/mlawHyperelasticDamage.h
index f77a1b6f3e482a227c0300329084bb6e924b625b..644b77bd75f6ab7139186d890b4f23d62ddd60e6 100644
--- a/NonLinearSolver/materialLaw/mlawHyperelasticDamage.h
+++ b/NonLinearSolver/materialLaw/mlawHyperelasticDamage.h
@@ -53,7 +53,9 @@ class mlawLocalDamageHyperelastic : public materialLaw {
         IPVariable *q1,        // updated array of internal variable (in ipvcur on output),
         STensor43 &L,                             // constitutive tangents (output) // partial stress / partial strains
         const bool stiff,                                // if true: compute the tangents analytically
-        STensor43* elasticTangent = NULL
+        STensor43* elasticTangent = NULL, 
+        const bool dTangent =false,
+        STensor63* dCalgdeps = NULL
     ) const;
 
 		#endif //SWIG
@@ -78,7 +80,9 @@ class mlawLocalAnisotropicDamageHyperelastic : public mlawLocalDamageHyperelasti
         IPVariable *q1,        // updated array of internal variable (in ipvcur on output),
         STensor43 &L,                             // constitutive tangents (output) // partial stress / partial strains
         const bool stiff,                                // if true: compute the tangents analytically
-        STensor43* elasticTangent = NULL
+        STensor43* elasticTangent = NULL, 
+        const bool dTangent =false,
+        STensor63* dCalgdeps = NULL
          ) const;
 
     #endif //SWIG
@@ -124,7 +128,9 @@ class mlawNonlocalDamageHyperelastic : public materialLaw {
         IPVariable *q1,        // updated array of internal variable (in ipvcur on output),
         STensor43 &L,                             // constitutive tangents (output) // partial stress / partial strains
         const bool stiff,                                // if true: compute the tangents analytically
-        STensor43* elasticTangent = NULL
+        STensor43* elasticTangent = NULL, 
+        const bool dTangent =false,
+        STensor63* dCalgdeps = NULL
          ) const
         {
           Msg::Error("mlawNonlocalDamageHyperelastic constitutive not defined");
diff --git a/NonLinearSolver/materialLaw/mlawJ2FullyCoupledThermoMechanics.cpp b/NonLinearSolver/materialLaw/mlawJ2FullyCoupledThermoMechanics.cpp
index 89523999ab58e850705d18d098a1ceee5908fc95..7e67f0f1a837ba35b0e8fafa7a0c829ebc29b45b 100644
--- a/NonLinearSolver/materialLaw/mlawJ2FullyCoupledThermoMechanics.cpp
+++ b/NonLinearSolver/materialLaw/mlawJ2FullyCoupledThermoMechanics.cpp
@@ -131,7 +131,9 @@ void mlawJ2FullyCoupledThermoMechanics::constitutive(const STensor3& F0,
                             IPVariable *q1i,             // current array of internal variable (in ipvcur on output),
                             STensor43 &Tangent,         // tangents (output)
                             const bool stiff,            // if true compute the tangents
-                           STensor43* elasticTangent) const{
+                            STensor43* elasticTangent, 
+                            const bool dTangent,
+                            STensor63* dCalgdeps) const{
   static SVector3 gradT, temp2;
   static STensor3 temp3;
   static STensor33 temp33;
diff --git a/NonLinearSolver/materialLaw/mlawJ2FullyCoupledThermoMechanics.h b/NonLinearSolver/materialLaw/mlawJ2FullyCoupledThermoMechanics.h
index f431156e3dbf0278340e43aabdc9c9d90c426c96..bc32278bcac16f91efcbda87a6ebd57ad69043eb 100644
--- a/NonLinearSolver/materialLaw/mlawJ2FullyCoupledThermoMechanics.h
+++ b/NonLinearSolver/materialLaw/mlawJ2FullyCoupledThermoMechanics.h
@@ -148,7 +148,9 @@ class mlawJ2FullyCoupledThermoMechanics : public materialLaw {
                             IPVariable *q1,             // current array of internal variable (in ipvcur on output),
                             STensor43 &Tangent,         // tangents (output)
                             const bool stiff,            // if true compute the tangents
-                            STensor43* elasticTangent = NULL) const;
+                            STensor43* elasticTangent = NULL, 
+                            const bool dTangent =false,
+                            STensor63* dCalgdeps = NULL) const;
     virtual void constitutive(const STensor3& F0,         // initial deformation gradient (input @ time n)
                             const STensor3& F1,         // updated deformation gradient (input @ time n+1)
                             STensor3 &P1,                // updated 1st Piola-Kirchhoff stress tensor (output)
diff --git a/NonLinearSolver/materialLaw/mlawJ2SmallStrains.cpp b/NonLinearSolver/materialLaw/mlawJ2SmallStrains.cpp
index 2c26b10336e390ea9bc2d12ecb7e63de180d5e80..efabdba0b9cf4765ea8ecd18af5d2a123af619f6 100644
--- a/NonLinearSolver/materialLaw/mlawJ2SmallStrains.cpp
+++ b/NonLinearSolver/materialLaw/mlawJ2SmallStrains.cpp
@@ -145,8 +145,16 @@ void mlawJ2SmallStrains::createIPState(IPStateBase* &ips,const bool* state_,cons
 }
 
 
-void mlawJ2SmallStrains::constitutive(const STensor3& F0,const STensor3& Fn,STensor3 &P,const IPVariable *q0,IPVariable *q1,
-                                      STensor43 &Tangent,const bool stiff,STensor43* elasticTangent) const
+void mlawJ2SmallStrains::constitutive(const STensor3& F0,
+                                      const STensor3& Fn,
+                                      STensor3 &P,
+                                      const IPVariable *q0,
+                                      IPVariable *q1,
+                                      STensor43 &Tangent,
+                                      const bool stiff,
+                                      STensor43* elasticTangent, 
+                                      const bool dTangent,
+                                      STensor63* dCalgdeps) const
 {
   ipJ2SmallStrains* ipvcur = static_cast<ipJ2SmallStrains*>(q1);
   const ipJ2SmallStrains* ipvprev = static_cast<const ipJ2SmallStrains*>(q0);
diff --git a/NonLinearSolver/materialLaw/mlawJ2SmallStrains.h b/NonLinearSolver/materialLaw/mlawJ2SmallStrains.h
index f4ba5474d788dfbdd251a04fedc6176fa8ca68a9..3038e50d3e7d9ca951625aada2947c0ebe02877a 100644
--- a/NonLinearSolver/materialLaw/mlawJ2SmallStrains.h
+++ b/NonLinearSolver/materialLaw/mlawJ2SmallStrains.h
@@ -141,8 +141,10 @@ class mlawJ2SmallStrains : public materialLaw
                             const IPVariable *q0,       // array of initial internal variable
                             IPVariable *q1,             // updated array of internal variable (in ipvcur on output),
                             STensor43 &Tangent,         // constitutive tangents (output)
-                            const bool stiff ,           // if true compute the tangents
-                           STensor43* elasticTangent = NULL) const;
+                            const bool stiff,           // if true compute the tangents
+                            STensor43* elasticTangent = NULL, 
+                            const bool dTangent =false,
+                            STensor63* dCalgdeps = NULL) const;
   #endif // SWIG
 };
 
diff --git a/NonLinearSolver/materialLaw/mlawJ2ThermoMechanics.cpp b/NonLinearSolver/materialLaw/mlawJ2ThermoMechanics.cpp
index 1a721f71ba326223cfd36eaa3f525b4fa384f2ec..9bb58047d9ffb1ffacca06bf02d6c1afe81110b0 100644
--- a/NonLinearSolver/materialLaw/mlawJ2ThermoMechanics.cpp
+++ b/NonLinearSolver/materialLaw/mlawJ2ThermoMechanics.cpp
@@ -192,8 +192,16 @@ void mlawJ2ThermoMechanics::createIPState(IPStateBase* &ips,const bool* state_,c
 }
 
 
-void mlawJ2ThermoMechanics::constitutive(const STensor3& F0,const STensor3& Fn,STensor3 &P,
-                              const IPJ2ThermoMechanics *q0, IPJ2ThermoMechanics *q1,STensor43 &Tangent,const bool stiff) const
+void mlawJ2ThermoMechanics::constitutive(const STensor3& F0,
+                                         const STensor3& Fn,
+                                         STensor3 &P,
+                                         const IPJ2ThermoMechanics *q0, 
+                                         IPJ2ThermoMechanics *q1,
+                                         STensor43 &Tangent,
+                                         const bool stiff, 
+                                         STensor43* elasticTangent, 
+                                         const bool dTangent,
+                                         STensor63* dCalgdeps) const
 {
 
   mlawJ2linear::constitutive(F0,Fn,P, q0, q1, Tangent, stiff);
diff --git a/NonLinearSolver/materialLaw/mlawJ2ThermoMechanics.h b/NonLinearSolver/materialLaw/mlawJ2ThermoMechanics.h
index f29c2948750c0ce0ba1d0d8b351359daa4a3aa01..c5817126af18fe308a2e58a0260d9d3f1c0b3fc4 100644
--- a/NonLinearSolver/materialLaw/mlawJ2ThermoMechanics.h
+++ b/NonLinearSolver/materialLaw/mlawJ2ThermoMechanics.h
@@ -59,7 +59,10 @@ public:
                             const IPJ2ThermoMechanics *q0,       // array of initial internal variable
                             IPJ2ThermoMechanics *q1,              // updated array of internal variable (in ipvcur on output),
 			    STensor43 &Tangent,         // constitutive tangents (output)
-			    const bool stiff
+			    const bool stiff,
+                            STensor43* elasticTangent = NULL, 
+                            const bool dTangent =false,
+                            STensor63* dCalgdeps = NULL
 			    ) const;
   virtual void constitutive(
                             const STensor3& F0,         // initial deformation gradient (input @ time n)
diff --git a/NonLinearSolver/materialLaw/mlawJ2VMSmallStrain.cpp b/NonLinearSolver/materialLaw/mlawJ2VMSmallStrain.cpp
index 5e0890473ca0d55fe27d21ca2935b51124256cb7..7b29932c82c3972dc9a96ea25db2c424873a5907 100644
--- a/NonLinearSolver/materialLaw/mlawJ2VMSmallStrain.cpp
+++ b/NonLinearSolver/materialLaw/mlawJ2VMSmallStrain.cpp
@@ -152,14 +152,16 @@ void mlawJ2VMSmallStrain::constitutive(const STensor3& F0,         // previous d
                             IPVariable *q1i,             // current array of internal variable (in ipvcur on output),
                             STensor43 &Tangent,         // tangents (output)
                             const bool stiff,            // if true compute the tangents
-                           STensor43* elasticTangent) const{
+                            STensor43* elasticTangent,
+                            const bool dTangent,
+                            STensor63* dCalgdeps) const{
 
   static STensor43 depsEldF;
   static STensor3 dpdF;
   IPJ2linear* q1 = static_cast<IPJ2linear*>(q1i);
   const IPJ2linear* q0 = static_cast<const IPJ2linear*>(q0i);
 
-  predictorCorector(F0,Fn,P,q0,q1,Tangent,depsEldF,dpdF,stiff,elasticTangent);
+  predictorCorector(F0,Fn,P,q0,q1,Tangent,depsEldF,dpdF,stiff,elasticTangent,dTangent,dCalgdeps);
 };
 
 
@@ -172,8 +174,9 @@ void mlawJ2VMSmallStrain::predictorCorector(const STensor3& F0,         // initi
                             STensor43& depsEldF,
                             STensor3& dpdF,
                             const bool stiff,
-                            STensor43* elasticTangent
-                            ) const {
+                            STensor43* elasticTangent,
+                            const bool dTangent,
+                            STensor63* dCalgdeps) const {
    // same state
   // plastic strain
   STensor3& Ep = q1->_j2lepsp;
@@ -234,12 +237,16 @@ void mlawJ2VMSmallStrain::predictorCorector(const STensor3& F0,         // initi
   _j2IH->hardening(q0->_j2lepspbarre, q0->getConstRefToIPJ2IsotropicHardening(), gamma, q1->getRefToIPJ2IsotropicHardening());
   double  Sy0   = q1->getConstRefToIPJ2IsotropicHardening().getR();
   double H    = q1->getConstRefToIPJ2IsotropicHardening().getDR();
+  double ddR  = q1->getConstRefToIPJ2IsotropicHardening().getDDR();
 
+
+  double deps;
   double VMCriterion = sigVMtr -Sy0;
   if (VMCriterion >0.){
     // plastic occurs
     int ite =0, maxite = 1000;
-    double deps = 0;
+    //double deps = 0;
+    deps = 0;
     double Sy = Sy0;
     while (fabs(VMCriterion/_j2IH->getYield0())> _tol){
       // plastic increment
@@ -248,6 +255,7 @@ void mlawJ2VMSmallStrain::predictorCorector(const STensor3& F0,         // initi
       _j2IH->hardening(q0->_j2lepspbarre, q0->getConstRefToIPJ2IsotropicHardening(), gamma+deps, q1->getRefToIPJ2IsotropicHardening());
       Sy   = q1->getConstRefToIPJ2IsotropicHardening().getR();
       H    = q1->getConstRefToIPJ2IsotropicHardening().getDR();
+      
 
       VMCriterion = sigVMtr - 3.*_mu*deps - Sy;
       ite ++;
@@ -305,12 +313,36 @@ void mlawJ2VMSmallStrain::predictorCorector(const STensor3& F0,         // initi
                       Tangent(i,j,k,l) -= _Cel(i,j,r,s)*N(r,s)*N(p,q)*_Cel(p,q,k,l)/(3.*_mu+H) + _Cel(i,j,r,s)*deps*dNdSigpr(r,s,p,q)*_Cel(p,q,k,l);
                     }
                   }
+                }
+              }
+            }
+          }
+        }
+      }
 
+      if (dTangent){
+        double h;
+        h = 3.*_mu+H;
+        static STensor63 dCalgodeps;
+        double fac1, fac2, fac3;
+        fac1 = 1.5/h/sigVMtr*(2.*_mu)*(2.*_mu)*(2.*_mu);
+        fac2 = (1./sigVMtr+ddR/h/h)*(2.*_mu)*(2.*_mu)*(2.*_mu)/h;
+        fac3 = (deps/sigVMtr-1/h)*(2.*_mu)*(2.*_mu)*(2.*_mu)/sigVMtr;
+        
+        for (int i=0; i<3; i++){
+          for (int j=0; j<3; j++){
+            for (int k=0; k<3; k++){
+              for (int l=0; l<3; l++){
+                for (int m=0; m<3; m++){
+                  for (int n=0; n<3; n++){
+                    dCalgodeps(i,j,k,l,m,n) = fac1 * _I4dev(i,j,k,l)*N(m,n) + fac2 * N(i,j)*N(k,l)*N(m,n) + fac3 * (1.5*(_I4dev(i,j,k,l)*N(m,n)+N(i,j)*_I4dev(k,l,m,n))-2.*N(i,j)*N(k,l)*N(m,n));
+                  }
                 }
               }
             }
           }
         }
+        (*dCalgdeps) = dCalgodeps;
       }
     }
   }
@@ -336,7 +368,49 @@ void mlawJ2VMSmallStrain::predictorCorector(const STensor3& F0,         // initi
         dpdF(i,j) = (q11._j2lepspbarre - q1->_j2lepspbarre)/_perturbationfactor;
       }
     }
-  }  
+    if (dTangent){
+      double h;
+      static STensor43 dNdeps, prodDevCel, I_dev;
+      static STensor63 dCalgodeps;
+      STensorOperation::deviatorfunction(I_dev);
+      static STensor3 N;
+      N = (devSigtr);
+      N*= (1.5/sigVMtr);
+      static STensor43 dNdSigpr;
+      for (int i=0; i<3; i++){
+        for (int j=0; j<3; j++){
+          for (int k=0; k<3; k++){
+            for (int l=0; l<3; l++){
+              dNdSigpr(i,j,k,l) = (1.5*I_dev(i,j,k,l) - N(i,j)*N(k,l))/sigVMtr;
+            }
+          }
+        }
+      }
+      STensorOperation::multSTensor43(dNdSigpr,Tangent,dNdeps);
+      STensorOperation::derivTensorProdSTensor43STensor3(dNdeps, N, dCalgodeps);
+      h = 3.*_mu+H;
+      double dCalgodeps_fac = - (2.*_mu)*(2.*_mu)/h;
+      dCalgodeps *= dCalgodeps_fac;
+      if(ddR > 0.)
+      {
+        static STensor3 N_Cel;
+        static STensor43 NprodN;
+        static STensor63 dCalgodeps_2;
+        double dCalgodeps_fac_2 = (2.*_mu)*(2.*_mu)/(h*h*h)*ddR;
+        STensorOperation::multSTensor3STensor43(N,_Cel,N_Cel);
+        STensorOperation::prod(N,N,1.,NprodN);
+        STensorOperation::TensorProdSTensor43STensor3(NprodN,N_Cel,dCalgodeps_2);
+        dCalgodeps_2 *= dCalgodeps_fac_2;
+        dCalgodeps += dCalgodeps_2;
+      }
+
+      (*dCalgdeps) = dCalgodeps;
+
+    }
+  }
+
+
+
 };
 
 double mlawJ2VMSmallStrain::deformationEnergy(const STensor3 &Ee) const
diff --git a/NonLinearSolver/materialLaw/mlawJ2VMSmallStrain.h b/NonLinearSolver/materialLaw/mlawJ2VMSmallStrain.h
index c50b7dc72ab94fe0d237bf94c68027046f132d55..5a0c6ed1af757cfa95a216dd60883aa6ab8b41f7 100644
--- a/NonLinearSolver/materialLaw/mlawJ2VMSmallStrain.h
+++ b/NonLinearSolver/materialLaw/mlawJ2VMSmallStrain.h
@@ -59,7 +59,7 @@ class mlawJ2VMSmallStrain : public materialLaw {
     virtual double density() const{return _rho;};
     virtual double shearModulus() const {return _mu;}
     virtual double bulkModulus() const {return _K;}
-		virtual double scaleFactor() const{return _mu;};
+    virtual double scaleFactor() const{return _mu;};
     // predictor-corrector estimation
     virtual void constitutive(const STensor3& F0,         // previous deformation gradient (input @ time n)
                             const STensor3& Fn,         // current deformation gradient (input @ time n+1)
@@ -68,7 +68,9 @@ class mlawJ2VMSmallStrain : public materialLaw {
                             IPVariable *q1,             // current array of internal variable (in ipvcur on output),
                             STensor43 &Tangent,         // tangents (output)
                             const bool stiff,            // if true compute the tangents
-                           STensor43* elasticTangent = NULL) const;
+                            STensor43* elasticTangent = NULL, 
+                            const bool dTangent =false,
+                            STensor63* dCalgdeps = NULL) const;
 
   protected:
       double deformationEnergy(const STensor3 &Ee) const;
@@ -81,7 +83,9 @@ class mlawJ2VMSmallStrain : public materialLaw {
                             STensor43& depsEldF,
                             STensor3& dpdF,
                             const bool stiff,
-                            STensor43* elasticTangent = NULL
+                            STensor43* elasticTangent = NULL, 
+                            const bool dTangent =false,
+                            STensor63* dCalgdeps = NULL
                             ) const;
 
 };
diff --git a/NonLinearSolver/materialLaw/mlawJ2linear.cpp b/NonLinearSolver/materialLaw/mlawJ2linear.cpp
index 08a5b409e8c5f2b388bcbccbcb94c844c27cf1dd..ffff1b2e9e5d07a7776b7b35443fa56ea9677cda 100644
--- a/NonLinearSolver/materialLaw/mlawJ2linear.cpp
+++ b/NonLinearSolver/materialLaw/mlawJ2linear.cpp
@@ -201,14 +201,22 @@ double mlawJ2linear::soundSpeed() const
 }
 
 
-void mlawJ2linear::constitutive(const STensor3& F0,const STensor3& Fn,STensor3 &P,const IPVariable *q0i,IPVariable *q1i,STensor43 &Tangent,
-                                const bool stiff, STensor43* elasticTangent) const
+void mlawJ2linear::constitutive(const STensor3& F0,
+                                const STensor3& Fn,
+                                STensor3 &P,
+                                const IPVariable *q0i,
+                                IPVariable *q1i,
+                                STensor43 &Tangent,
+                                const bool stiff, 
+                                STensor43* elasticTangent, 
+                                const bool dTangent,
+                                STensor63* dCalgdeps) const
 {
   const IPJ2linear* q0= dynamic_cast<const IPJ2linear*>(q0i);
         IPJ2linear* q1= dynamic_cast<IPJ2linear*>(q1i);
   static STensor43 dFpdF,dFedF;
   static STensor3 dpdF;
-  predictorCorector(F0,Fn,P,q0,q1,Tangent,dFpdF,dFedF,dpdF,stiff,elasticTangent);
+  predictorCorector(F0,Fn,P,q0,q1,Tangent,dFpdF,dFedF,dpdF,stiff,elasticTangent,dTangent,dCalgdeps);
 }
 
 
@@ -373,7 +381,9 @@ void mlawJ2linear::predictorCorector(const STensor3& F0,         // initial defo
                             STensor43& dFedF,
                             STensor3& dpdF,
                             const bool stiff,
-                            STensor43* elasticTangent
+                            STensor43* elasticTangent, 
+                            const bool dTangent,
+                            STensor63* dCalgdeps
                             ) const {
   const STensor3& Fp0 = q0->getConstRefToFp();
   STensor3& Fp = q->getRefToFp();
@@ -463,6 +473,7 @@ void mlawJ2linear::predictorCorector(const STensor3& F0,         // initial defo
           double pdot = Deps/this->getTimeStep();
           Sy += K*pow(pdot,_p);
           H += (dK*pow(pdot,_p) + K*_p*pow(pdot,_p-1.)/this->getTimeStep());
+          //Msg::Info("pdot=%e, p = %e, overstress = %e",pdot,_p,K*pow(pdot,_p));
         }
         VMcriterion = Seqpr - 3.*_mu*Deps -Sy;
 
diff --git a/NonLinearSolver/materialLaw/mlawJ2linear.h b/NonLinearSolver/materialLaw/mlawJ2linear.h
index 2debf374d619cc7632dff35fc5fe928615adbe86..16cc420f55caa065860c3a69e3288ec76ad25406 100644
--- a/NonLinearSolver/materialLaw/mlawJ2linear.h
+++ b/NonLinearSolver/materialLaw/mlawJ2linear.h
@@ -80,7 +80,9 @@ class mlawJ2linear : public materialLaw
                             IPVariable *q1,             // updated array of internal variable (in ipvcur on output),
                             STensor43 &Tangent,         // constitutive tangents (output)
                             const bool stiff,            // if true compute the tangents
-                            STensor43* elasticTangent = NULL
+                            STensor43* elasticTangent = NULL, 
+                            const bool dTangent =false,
+                            STensor63* dCalgdeps = NULL
                            ) const;
   virtual void tangent_full(
                              STensor43 &T_,
@@ -116,7 +118,9 @@ class mlawJ2linear : public materialLaw
                             STensor43& dFedF,
                             STensor3& dpdF,
                             const bool stiff,
-                            STensor43* elasticTangent = NULL
+                            STensor43* elasticTangent = NULL, 
+                            const bool dTangent =false,
+                            STensor63* dCalgdeps = NULL
                             ) const;
 
  #endif // SWIG
diff --git a/NonLinearSolver/materialLaw/mlawLinearThermoMechanics.cpp b/NonLinearSolver/materialLaw/mlawLinearThermoMechanics.cpp
index 646902ab39cf243909214356d9e6df203ec8e9b2..f2bd58eda8161011ea6f83d8df0e8fdfcfb2a36e 100644
--- a/NonLinearSolver/materialLaw/mlawLinearThermoMechanics.cpp
+++ b/NonLinearSolver/materialLaw/mlawLinearThermoMechanics.cpp
@@ -273,8 +273,15 @@ double mlawLinearThermoMechanics::soundSpeed() const
 }
 
 
-void mlawLinearThermoMechanics::constitutive(const STensor3& F0,const STensor3& Fn,STensor3 &P,
-                              const IPVariable *q0i, IPVariable *q1i,STensor43 &Tangent,const bool stiff,  STensor43* elasticTangent) const
+void mlawLinearThermoMechanics::constitutive(const STensor3& F0,
+                                             const STensor3& Fn,STensor3 &P,
+                                             const IPVariable *q0i, 
+                                             IPVariable *q1i,
+                                             STensor43 &Tangent,
+                                             const bool stiff,  
+                                             STensor43* elasticTangent, 
+                                             const bool dTangent,
+                                             STensor63* dCalgdeps) const
 {
     const IPLinearThermoMechanics *q0=dynamic_cast< const IPLinearThermoMechanics *> (q0i);
     IPLinearThermoMechanics *q1=dynamic_cast< IPLinearThermoMechanics *> (q1i);
diff --git a/NonLinearSolver/materialLaw/mlawLinearThermoMechanics.h b/NonLinearSolver/materialLaw/mlawLinearThermoMechanics.h
index 6706f36047611b3cfa037b075bd83279684db423..11351ea5dacb80fe0766cc53fb213b56a146263b 100644
--- a/NonLinearSolver/materialLaw/mlawLinearThermoMechanics.h
+++ b/NonLinearSolver/materialLaw/mlawLinearThermoMechanics.h
@@ -84,7 +84,9 @@ public:
                             IPVariable *q1,              // updated array of internal variable (in ipvcur on output),
 			    STensor43 &Tangent,         // constitutive tangents (output)
 			    const bool stiff,
-			     STensor43* elasticTangent = NULL) const;
+			    STensor43* elasticTangent = NULL, 
+                            const bool dTangent =false,
+                            STensor63* dCalgdeps = NULL) const;
   virtual void constitutive(
                             const STensor3& F0,         // initial deformation gradient (input @ time n)
                             const STensor3& Fn,         // updated deformation gradient (input @ time n+1)
diff --git a/NonLinearSolver/materialLaw/mlawLocalDamageJ2Hyper.cpp b/NonLinearSolver/materialLaw/mlawLocalDamageJ2Hyper.cpp
index 14fdbf6ef6185d1b35298ff905c3525f2b64e789..d358bbd43ead2162381e43f1f4bbf5bab2e3568e 100644
--- a/NonLinearSolver/materialLaw/mlawLocalDamageJ2Hyper.cpp
+++ b/NonLinearSolver/materialLaw/mlawLocalDamageJ2Hyper.cpp
@@ -70,8 +70,16 @@ double mlawLocalDamageJ2Hyper::soundSpeed() const
 }
 
 
-void mlawLocalDamageJ2Hyper::constitutive(const STensor3& F0,const STensor3& Fn,STensor3 &P,
-      const IPLocalDamageJ2Hyper *q0, IPLocalDamageJ2Hyper *q1,STensor43 &Tangent, const bool stiff) const
+void mlawLocalDamageJ2Hyper::constitutive(const STensor3& F0,
+                                          const STensor3& Fn,
+                                          STensor3 &P,
+                                          const IPLocalDamageJ2Hyper *q0, 
+                                          IPLocalDamageJ2Hyper *q1,
+                                          STensor43 &Tangent, 
+                                          const bool stiff, 
+                                          STensor43* elasticTangent,
+                                          const bool dTangent,
+                                          STensor63* dCalgdeps) const
 {
 
   static STensor43 dFpdF, dFedF;
diff --git a/NonLinearSolver/materialLaw/mlawLocalDamageJ2Hyper.h b/NonLinearSolver/materialLaw/mlawLocalDamageJ2Hyper.h
index 1d51d0e8b22820b567a4c7cbdb64c38c977e9c1f..328a89fd4bd537d4f17d46c1e800b70a48e767c5 100644
--- a/NonLinearSolver/materialLaw/mlawLocalDamageJ2Hyper.h
+++ b/NonLinearSolver/materialLaw/mlawLocalDamageJ2Hyper.h
@@ -50,7 +50,10 @@ class mlawLocalDamageJ2Hyper : public mlawJ2linear
                             const IPLocalDamageJ2Hyper *q0,       // array of initial internal variable
                             IPLocalDamageJ2Hyper *q1,             // updated array of internal variable (in ipvcur on output),
                             STensor43 &Tangent,         // constitutive tangents (output)
-                            const bool stiff            // if true compute the tangents
+                            const bool stiff, 
+                            STensor43* elasticTangent =NULL,
+                            const bool dTangent =false,
+                            STensor63* dCalgdeps = NULL          // if true compute the tangents
                            ) const;
 
  #endif // SWIG
diff --git a/NonLinearSolver/materialLaw/mlawNonLocalDamage.cpp b/NonLinearSolver/materialLaw/mlawNonLocalDamage.cpp
index c605ed1952414a1d75e1bd1632a17be8ea3522e8..698cc2f014fa809bcc3f10637a4b8d859cb1ad82 100644
--- a/NonLinearSolver/materialLaw/mlawNonLocalDamage.cpp
+++ b/NonLinearSolver/materialLaw/mlawNonLocalDamage.cpp
@@ -19,7 +19,8 @@
 
 
 mlawNonLocalDamage::mlawNonLocalDamage(const int num, const double rho,
-                   const char *propName) : materialLaw(num,true), _rho(rho)
+                   const char *propName) : materialLaw(num,true), _rho(rho), 
+                             _Dmax_Inc(0.99), _Dmax_Mtx(0.99)
   {
 	sq2 = sqrt(2.);
 
@@ -115,7 +116,10 @@ mlawNonLocalDamage::mlawNonLocalDamage(const int num, const double rho,
 
   }
   mlawNonLocalDamage::mlawNonLocalDamage(const mlawNonLocalDamage &source) :
-                                        materialLaw(source), _rho(source._rho), _mu0(source._mu0), _nu0(source._nu0)
+                                        materialLaw(source), _rho(source._rho), 
+                                        _mu0(source._mu0), _nu0(source._nu0),
+                                        _Dmax_Inc(source._Dmax_Inc), _Dmax_Mtx(source._Dmax_Mtx)
+
   {
 	sq2 = sqrt(2.);
 
@@ -215,7 +219,8 @@ mlawNonLocalDamage::mlawNonLocalDamage(const int num, const double rho,
      materialLaw::operator=(source);
      const mlawNonLocalDamage* src =static_cast<const mlawNonLocalDamage*>(&source);
      _rho = src->_rho;
-
+     _Dmax_Inc = src->_Dmax_Inc;
+     _Dmax_Mtx = src->_Dmax_Mtx;
 	sq2 = sqrt(2.);
         for(int i=0; i< 3; i++)
         {
@@ -324,7 +329,6 @@ void mlawNonLocalDamage::createIPState(IPNonLocalDamage *ivi, IPNonLocalDamage *
   double dpdFdtmp = 0.0;
   double dFddptmp = 0.0;
 
-  double Dmax=0.9999;
   ivi->setPosMaxD(mat->get_pos_maxD());
   ivi->setPosIncMaxD(mat->get_pos_inc_maxD());
   ivi->setPosMtxMaxD(mat->get_pos_mtx_maxD());
@@ -335,15 +339,15 @@ void mlawNonLocalDamage::createIPState(IPNonLocalDamage *ivi, IPNonLocalDamage *
   iv2->setPosIncMaxD(mat->get_pos_inc_maxD());
   iv2->setPosMtxMaxD(mat->get_pos_mtx_maxD());
 
-  ivi->setMaxD(Dmax);
-  ivi->setIncMaxD(Dmax);
-  ivi->setMtxMaxD(Dmax);
-  iv1->setMaxD(Dmax);
-  iv1->setIncMaxD(Dmax);
-  iv1->setMtxMaxD(Dmax);
-  iv2->setMaxD(Dmax);
-  iv2->setIncMaxD(Dmax);
-  iv2->setMtxMaxD(Dmax);
+  ivi->setMaxD(_Dmax_Mtx);
+  ivi->setIncMaxD(_Dmax_Inc);
+  ivi->setMtxMaxD(_Dmax_Mtx);
+  iv1->setMaxD(_Dmax_Mtx);
+  iv1->setIncMaxD(_Dmax_Inc);
+  iv1->setMtxMaxD(_Dmax_Mtx);
+  iv2->setMaxD(_Dmax_Mtx);
+  iv2->setIncMaxD(_Dmax_Inc);
+  iv2->setMtxMaxD(_Dmax_Mtx);
 
 
 
@@ -407,14 +411,13 @@ void mlawNonLocalDamage::createIPVariable(IPNonLocalDamage *&ipv,const MElement
   double dpdFdtmp = 0.0;
   double dFddptmp = 0.0;
 
-  double Dmax=0.9999;
   ipv->setPosMaxD(mat->get_pos_maxD());
   ipv->setPosIncMaxD(mat->get_pos_inc_maxD());
   ipv->setPosMtxMaxD(mat->get_pos_mtx_maxD());
 
-  ipv->setMaxD(Dmax);
-  ipv->setIncMaxD(Dmax);
-  ipv->setMtxMaxD(Dmax);
+  ipv->setMaxD(_Dmax_Mtx);
+  ipv->setIncMaxD(_Dmax_Inc);
+  ipv->setMtxMaxD(_Dmax_Mtx);
 
   mat->constbox(dstrn, strs_n, strs, stvi, stvi, Cref, dCref, tau, dtau, Calgo, 1., dpdE, strs_dDdp_bar, &SpBartmp, chara_Length, &dFd_d_bartmp, dstrs_dFd_bar, dFd_dE, chara_Length_INC, &dpdFdtmp, &dFddptmp, kinc, kstep, _timeStep);
 
@@ -448,7 +451,9 @@ double mlawNonLocalDamage::soundSpeed() const
 }
 
 void mlawNonLocalDamage::constitutive(const STensor3& F0,const STensor3& Fn,STensor3 &P,const IPVariable *ipvprevi,
-                                      IPVariable *ipvcuri,STensor43 &Tangent,const bool stiff,STensor43* elasticTangent) const
+                                      IPVariable *ipvcuri,STensor43 &Tangent,const bool stiff,STensor43* elasticTangent, 
+                                      const bool dTangent,
+                                      STensor63* dCalgdeps) const
 {
   if(elasticTangent!=NULL) Msg::Error(" mlawNonLocalDamage STensor43* elasticTangent not defined");
   const IPNonLocalDamage *ipvprev = dynamic_cast<const IPNonLocalDamage *> (ipvprevi);
diff --git a/NonLinearSolver/materialLaw/mlawNonLocalDamage.h b/NonLinearSolver/materialLaw/mlawNonLocalDamage.h
index 1b22ff8ef092729fb339811e769dd7567619b90f..e245e0aa26f48a7fbd2592fc1f3e05f38945a916 100644
--- a/NonLinearSolver/materialLaw/mlawNonLocalDamage.h
+++ b/NonLinearSolver/materialLaw/mlawNonLocalDamage.h
@@ -47,6 +47,8 @@ class mlawNonLocalDamage : public materialLaw
   int nsdv;
   int nlVar;
 
+  double _Dmax_Inc, _Dmax_Mtx;
+
   mutable double* dpdE;
   mutable double* strs_dDdp_bar;
   mutable double** chara_Length;
@@ -63,6 +65,11 @@ class mlawNonLocalDamage : public materialLaw
   mlawNonLocalDamage(const int num, const double rho, const char *propName);
   void setNumberOfNonLocalVariables(int nb) {nlVar=nb;}; //in case we want to combine two materials of different kind 
 
+  void setInitialDmax_Inc(double d) {_Dmax_Inc=d;};
+  void setInitialDmax_Mtx(double d) {_Dmax_Mtx=d;};
+  void setInitialDmax(double d) {_Dmax_Mtx=d;};
+
+
  #ifndef SWIG
   mlawNonLocalDamage(const mlawNonLocalDamage &source);
   mlawNonLocalDamage& operator=(const materialLaw &source);
@@ -97,7 +104,9 @@ class mlawNonLocalDamage : public materialLaw
                             IPVariable *q1,             // updated array of internal variable (in ipvcur on output),
                             STensor43 &Tangent,         // constitutive tangents (output)
                             const bool stiff,            // if true compute the tangents
-                           STensor43* elasticTangent = NULL) const;
+                            STensor43* elasticTangent = NULL, 
+                            const bool dTangent =false,
+                            STensor63* dCalgdeps = NULL) const;
 
   virtual void constitutive(
                             const STensor3& F0,         // initial deformation gradient (input @ time n)
diff --git a/NonLinearSolver/materialLaw/mlawNonLocalDamageHyperelastic.cpp b/NonLinearSolver/materialLaw/mlawNonLocalDamageHyperelastic.cpp
index 39e7c480d2e34cec0399a0ae4482899014438d51..22352a485b30f14e5c66400da297f4b66a9933fb 100644
--- a/NonLinearSolver/materialLaw/mlawNonLocalDamageHyperelastic.cpp
+++ b/NonLinearSolver/materialLaw/mlawNonLocalDamageHyperelastic.cpp
@@ -48,9 +48,9 @@ mlawNonLocalDamagePowerYieldHyper::~mlawNonLocalDamagePowerYieldHyper(){
 
 void mlawNonLocalDamagePowerYieldHyper::createIPState(IPStateBase* &ips,const bool* state_,const MElement *ele, const int nbFF_, const IntPt *GP, const int gpt) const
 {
-  IPVariable* ipvi = new IPHyperViscoElastoPlasticNonLocalDamage(_compression,_traction,_shear,_kinematic,_N,cLLaw,damLaw);
-  IPVariable* ipv1 = new IPHyperViscoElastoPlasticNonLocalDamage(_compression,_traction,_shear,_kinematic,_N,cLLaw,damLaw);
-  IPVariable* ipv2 = new IPHyperViscoElastoPlasticNonLocalDamage(_compression,_traction,_shear,_kinematic,_N,cLLaw,damLaw);
+  IPVariable* ipvi = new IPHyperViscoElastoPlasticNonLocalDamage(_compression,_traction,_kinematic,_N,cLLaw,damLaw);
+  IPVariable* ipv1 = new IPHyperViscoElastoPlasticNonLocalDamage(_compression,_traction,_kinematic,_N,cLLaw,damLaw);
+  IPVariable* ipv2 = new IPHyperViscoElastoPlasticNonLocalDamage(_compression,_traction,_kinematic,_N,cLLaw,damLaw);
   if(ips != NULL) delete ips;
   ips = new IP3State(state_,ipvi,ipv1,ipv2);
 }
@@ -68,9 +68,15 @@ double mlawNonLocalDamagePowerYieldHyper::soundSpeed() const
   return mlawPowerYieldHyper::soundSpeed();
 }
 
-void mlawNonLocalDamagePowerYieldHyper::constitutive(const STensor3& F0,const STensor3& Fn,STensor3 &P,const IPHyperViscoElastoPlasticNonLocalDamage *q0,
-	IPHyperViscoElastoPlasticNonLocalDamage *q1,STensor43 &Tangent,
-                                const bool stiff) const
+void mlawNonLocalDamagePowerYieldHyper::constitutive(const STensor3& F0,
+                                                     const STensor3& Fn,
+                                                     STensor3 &P,
+                                                     const IPHyperViscoElastoPlasticNonLocalDamage *q0,
+	                                             IPHyperViscoElastoPlasticNonLocalDamage *q1,
+                                                     STensor43 &Tangent,
+                                                     const bool stiff, 
+                                                     const bool dTangentdeps,
+                                                     STensor63* dCalgdeps) const
 {
   mlawPowerYieldHyper::constitutive(F0,Fn,P,q0,q1,Tangent,stiff);
 }
@@ -250,9 +256,9 @@ mlawLocalDamagePowerYieldHyperWithFailure::~mlawLocalDamagePowerYieldHyperWithFa
 
 void mlawLocalDamagePowerYieldHyperWithFailure::createIPState(IPStateBase* &ips,const bool* state_,const MElement *ele, const int nbFF_, const IntPt *GP, const int gpt) const
 {
-  IPVariable* ipvi = new IPHyperViscoElastoPlasticMultipleLocalDamage(_compression,_traction,_shear,_kinematic,_N,damLaw);
-  IPVariable* ipv1 = new IPHyperViscoElastoPlasticMultipleLocalDamage(_compression,_traction,_shear,_kinematic,_N,damLaw);
-  IPVariable* ipv2 = new IPHyperViscoElastoPlasticMultipleLocalDamage(_compression,_traction,_shear,_kinematic,_N,damLaw);
+  IPVariable* ipvi = new IPHyperViscoElastoPlasticMultipleLocalDamage(_compression,_traction,_kinematic,_N,damLaw);
+  IPVariable* ipv1 = new IPHyperViscoElastoPlasticMultipleLocalDamage(_compression,_traction,_kinematic,_N,damLaw);
+  IPVariable* ipv2 = new IPHyperViscoElastoPlasticMultipleLocalDamage(_compression,_traction,_kinematic,_N,damLaw);
   if(ips != NULL) delete ips;
   ips = new IP3State(state_,ipvi,ipv1,ipv2);
 }
@@ -472,9 +478,9 @@ mlawNonLocalDamagePowerYieldHyperWithFailure::~mlawNonLocalDamagePowerYieldHyper
 
 void mlawNonLocalDamagePowerYieldHyperWithFailure::createIPState(IPStateBase* &ips,const bool* state_,const MElement *ele, const int nbFF_, const IntPt *GP, const int gpt) const
 {
-  IPVariable* ipvi = new IPHyperViscoElastoPlasticMultipleNonLocalDamage(_compression,_traction,_shear,_kinematic,_N,cLLaw,damLaw);
-  IPVariable* ipv1 = new IPHyperViscoElastoPlasticMultipleNonLocalDamage(_compression,_traction,_shear,_kinematic,_N,cLLaw,damLaw);
-  IPVariable* ipv2 = new IPHyperViscoElastoPlasticMultipleNonLocalDamage(_compression,_traction,_shear,_kinematic,_N,cLLaw,damLaw);
+  IPVariable* ipvi = new IPHyperViscoElastoPlasticMultipleNonLocalDamage(_compression,_traction,_kinematic,_N,cLLaw,damLaw);
+  IPVariable* ipv1 = new IPHyperViscoElastoPlasticMultipleNonLocalDamage(_compression,_traction,_kinematic,_N,cLLaw,damLaw);
+  IPVariable* ipv2 = new IPHyperViscoElastoPlasticMultipleNonLocalDamage(_compression,_traction,_kinematic,_N,cLLaw,damLaw);
   if(ips != NULL) delete ips;
   ips = new IP3State(state_,ipvi,ipv1,ipv2);
 }
diff --git a/NonLinearSolver/materialLaw/mlawNonLocalDamageHyperelastic.h b/NonLinearSolver/materialLaw/mlawNonLocalDamageHyperelastic.h
index d946b0d4a6f60061c95e7da218fcc67ca326cfd4..5270212d26aff7ee566f7ba84d670f847cbbdc07 100644
--- a/NonLinearSolver/materialLaw/mlawNonLocalDamageHyperelastic.h
+++ b/NonLinearSolver/materialLaw/mlawNonLocalDamageHyperelastic.h
@@ -55,7 +55,9 @@ class mlawNonLocalDamagePowerYieldHyper : public mlawPowerYieldHyper{
                               const IPHyperViscoElastoPlasticNonLocalDamage *q0,       // array of initial internal variable
                               IPHyperViscoElastoPlasticNonLocalDamage *q1,             // updated array of internal variable (in ipvcur on output),
                               STensor43 &Tangent,         // constitutive tangents (output)
-                              const bool stiff            // if true compute the tangents
+                              const bool stiff, 
+                              const bool dTangentdeps,
+                              STensor63* dCalgdeps = NULL           // if true compute the tangents
                              ) const;
 
     virtual void constitutive(
diff --git a/NonLinearSolver/materialLaw/mlawNonLocalDamageIsotropicElasticity.h b/NonLinearSolver/materialLaw/mlawNonLocalDamageIsotropicElasticity.h
index 5cf165bc662e7d9b07f5cea8ad5d6c52587aa0d5..1473e810c8862c74fcfed32d26ea5fd94788b5f5 100644
--- a/NonLinearSolver/materialLaw/mlawNonLocalDamageIsotropicElasticity.h
+++ b/NonLinearSolver/materialLaw/mlawNonLocalDamageIsotropicElasticity.h
@@ -78,7 +78,9 @@ public:
                             IPVariable *q1,             // updated array of internal variable (in ipvcur on output),
                             STensor43 &Tangent,         // constitutive tangents (output)
                             const bool stiff,            // if true compute the tangents
-                           STensor43* elasticTangent = NULL) const
+                            STensor43* elasticTangent = NULL, 
+                            const bool dTangent =false,
+                            STensor63* dCalgdeps = NULL) const
     {
        Msg::Error(" mlawNonLocalDamageIsotropicElasticity: local constituve not defined");
     }
diff --git a/NonLinearSolver/materialLaw/mlawNonLocalDamageJ2Hyper.cpp b/NonLinearSolver/materialLaw/mlawNonLocalDamageJ2Hyper.cpp
index c65c2ed2167827a4be42af8fc245b386cdea8c04..a237a4ad1672f752cae842f6501f1dc39b09d801 100644
--- a/NonLinearSolver/materialLaw/mlawNonLocalDamageJ2Hyper.cpp
+++ b/NonLinearSolver/materialLaw/mlawNonLocalDamageJ2Hyper.cpp
@@ -108,9 +108,15 @@ double mlawNonLocalDamageJ2Hyper::soundSpeed() const
 }
 
 
-void mlawNonLocalDamageJ2Hyper::constitutive(const STensor3& F0,const STensor3& Fn,STensor3 &P,const IPNonLocalDamageJ2Hyper *q0,
-	IPNonLocalDamageJ2Hyper *q1,STensor43 &Tangent,
-                                const bool stiff) const
+void mlawNonLocalDamageJ2Hyper::constitutive(const STensor3& F0,
+                                             const STensor3& Fn,
+                                             STensor3 &P,
+                                             const IPNonLocalDamageJ2Hyper *q0,
+	                                     IPNonLocalDamageJ2Hyper *q1,
+                                             STensor43 &Tangent,
+                                             const bool stiff, 
+                                             const bool dTangentdeps,
+                                             STensor63* dCalgdeps) const
 {
   mlawJ2linear::constitutive(F0,Fn,P,q0,q1,Tangent,stiff);
 }
diff --git a/NonLinearSolver/materialLaw/mlawNonLocalDamageJ2Hyper.h b/NonLinearSolver/materialLaw/mlawNonLocalDamageJ2Hyper.h
index 39716e27b83223b2d25e20cbc0ea0ceb1143d59d..24f8f7b1f1927759b922a994fc77ce07602906c9 100644
--- a/NonLinearSolver/materialLaw/mlawNonLocalDamageJ2Hyper.h
+++ b/NonLinearSolver/materialLaw/mlawNonLocalDamageJ2Hyper.h
@@ -59,7 +59,9 @@ class mlawNonLocalDamageJ2Hyper : public mlawJ2linear
                             const IPNonLocalDamageJ2Hyper *q0,       // array of initial internal variable
                             IPNonLocalDamageJ2Hyper *q1,             // updated array of internal variable (in ipvcur on output),
                             STensor43 &Tangent,         // constitutive tangents (output)
-                            const bool stiff            // if true compute the tangents
+                            const bool stiff , 
+                            const bool dTangentdeps,
+                            STensor63* dCalgdeps = NULL           // if true compute the tangents
                            ) const;
 
   virtual void constitutive(
diff --git a/NonLinearSolver/materialLaw/mlawNonLocalDamageJ2SmallStrain.cpp b/NonLinearSolver/materialLaw/mlawNonLocalDamageJ2SmallStrain.cpp
index a36e72f79d91906bbf133caa7aca07f02e9f1760..9c98d3523bb67e7be8640dd50008f08ae525aef7 100644
--- a/NonLinearSolver/materialLaw/mlawNonLocalDamageJ2SmallStrain.cpp
+++ b/NonLinearSolver/materialLaw/mlawNonLocalDamageJ2SmallStrain.cpp
@@ -61,9 +61,15 @@ double mlawNonLocalDamageJ2SmallStrain::soundSpeed() const
 }
 
 
-void mlawNonLocalDamageJ2SmallStrain::constitutive(const STensor3& F0,const STensor3& Fn,STensor3 &P,const IPNonLocalDamageJ2Hyper *q0,
-	IPNonLocalDamageJ2Hyper *q1,STensor43 &Tangent,
-                                const bool stiff) const
+void mlawNonLocalDamageJ2SmallStrain::constitutive(const STensor3& F0,
+                                                   const STensor3& Fn,
+                                                   STensor3 &P,
+                                                   const IPNonLocalDamageJ2Hyper *q0,
+	                                           IPNonLocalDamageJ2Hyper *q1,
+                                                   STensor43 &Tangent,
+                                                   const bool stiff, 
+                                                   const bool dTangent,
+                                                   STensor63* dCalgdeps) const
 {
   mlawJ2VMSmallStrain::constitutive(F0,Fn,P,q0,q1,Tangent,stiff);
 }
diff --git a/NonLinearSolver/materialLaw/mlawNonLocalDamageJ2SmallStrain.h b/NonLinearSolver/materialLaw/mlawNonLocalDamageJ2SmallStrain.h
index a426e27f3f584d939e888c7cba3f8dc48b817042..15bd76fb48518e846198f64e0a8989aa22a60f88 100644
--- a/NonLinearSolver/materialLaw/mlawNonLocalDamageJ2SmallStrain.h
+++ b/NonLinearSolver/materialLaw/mlawNonLocalDamageJ2SmallStrain.h
@@ -58,8 +58,10 @@ class mlawNonLocalDamageJ2SmallStrain : public mlawJ2VMSmallStrain
                             const IPNonLocalDamageJ2Hyper *q0,       // array of initial internal variable
                             IPNonLocalDamageJ2Hyper *q1,             // updated array of internal variable (in ipvcur on output),
                             STensor43 &Tangent,         // constitutive tangents (output)
-                            const bool stiff            // if true compute the tangents
-                           ) const;
+                            const bool stiff,            // if true compute the tangents, 
+                            const bool dTangent =false,
+                            STensor63* dCalgdeps = NULL
+                            ) const;
 
   virtual void constitutive(
                             const STensor3& F0,         // initial deformation gradient (input @ time n)
diff --git a/NonLinearSolver/materialLaw/mlawNonLocalDamage_Stoch.cpp b/NonLinearSolver/materialLaw/mlawNonLocalDamage_Stoch.cpp
index a79efae2977530e1214f784b9c62c354483f9078..48ea38b2bc4eb9dec14900baba7248c6a54a7c59 100644
--- a/NonLinearSolver/materialLaw/mlawNonLocalDamage_Stoch.cpp
+++ b/NonLinearSolver/materialLaw/mlawNonLocalDamage_Stoch.cpp
@@ -372,7 +372,6 @@ void mlawNonLocalDamage_Stoch::createIPState(const SVector3 &GaussP, IPNonLocalD
   double dpdFdtmp = 0.0;
   double dFddptmp = 0.0;
 
-  double Dmax=0.9999;
   ivi->setPosMaxD(mat->get_pos_maxD());
   ivi->setPosIncMaxD(mat->get_pos_inc_maxD());
   ivi->setPosMtxMaxD(mat->get_pos_mtx_maxD());
@@ -383,17 +382,62 @@ void mlawNonLocalDamage_Stoch::createIPState(const SVector3 &GaussP, IPNonLocalD
   iv2->setPosIncMaxD(mat->get_pos_inc_maxD());
   iv2->setPosMtxMaxD(mat->get_pos_mtx_maxD());
 
-  ivi->setMaxD(Dmax);
-  ivi->setIncMaxD(Dmax);
-  ivi->setMtxMaxD(Dmax);
-  iv1->setMaxD(Dmax);
-  iv1->setIncMaxD(Dmax);
-  iv1->setMtxMaxD(Dmax);
-  iv2->setMaxD(Dmax);
-  iv2->setIncMaxD(Dmax);
-  iv2->setMtxMaxD(Dmax);
+  ivi->setMaxD(_Dmax_Mtx);
+  ivi->setIncMaxD(_Dmax_Inc);
+  ivi->setMtxMaxD(_Dmax_Mtx);
+  iv1->setMaxD(_Dmax_Mtx);
+  iv1->setIncMaxD(_Dmax_Inc);
+  iv1->setMtxMaxD(_Dmax_Mtx);
+  iv2->setMaxD(_Dmax_Mtx);
+  iv2->setIncMaxD(_Dmax_Inc);
+  iv2->setMtxMaxD(_Dmax_Mtx);
 
   if(Randnum !=0){
+      ivi->setPos_vfi(pos_vfi);
+      ivi->setPos_euler(pos_euler);
+      ivi->setPos_aspR(pos_aspR);
+      ivi->setPos_ME(pos_ME);
+      ivi->setPos_Mnu(pos_Mnu);
+      ivi->setPos_Msy0(pos_Msy0);
+      ivi->setPos_Mhmod1(pos_Mhmod1);
+      ivi->setPos_Mhmod2(pos_Mhmod2);
+      ivi->setPos_Mhexp(pos_Mhexp);
+      ivi->setPos_DamParm1(pos_DamParm1);
+      ivi->setPos_DamParm2(pos_DamParm2);
+      ivi->setPos_INCDamParm1(pos_INCDamParm1);
+      ivi->setPos_INCDamParm2(pos_INCDamParm2);
+      ivi->setRandnum(Randnum);
+
+      iv1->setPos_vfi(pos_vfi);
+      iv1->setPos_euler(pos_euler);
+      iv1->setPos_aspR(pos_aspR);
+      iv1->setPos_ME(pos_ME);
+      iv1->setPos_Mnu(pos_Mnu);
+      iv1->setPos_Msy0(pos_Msy0);
+      iv1->setPos_Mhmod1(pos_Mhmod1);
+      iv1->setPos_Mhmod2(pos_Mhmod2);
+      iv1->setPos_Mhexp(pos_Mhexp);
+      iv1->setPos_DamParm1(pos_DamParm1);
+      iv1->setPos_DamParm2(pos_DamParm2);
+      iv1->setPos_INCDamParm1(pos_INCDamParm1);
+      iv1->setPos_INCDamParm2(pos_INCDamParm2);
+      iv1->setRandnum(Randnum);
+
+      iv2->setPos_vfi(pos_vfi);
+      iv2->setPos_euler(pos_euler);
+      iv2->setPos_aspR(pos_aspR);
+      iv2->setPos_ME(pos_ME);
+      iv2->setPos_Mnu(pos_Mnu);
+      iv2->setPos_Msy0(pos_Msy0);
+      iv2->setPos_Mhmod1(pos_Mhmod1);
+      iv2->setPos_Mhmod2(pos_Mhmod2);
+      iv2->setPos_Mhexp(pos_Mhexp);
+      iv2->setPos_DamParm1(pos_DamParm1);
+      iv2->setPos_DamParm2(pos_DamParm2);
+      iv2->setPos_INCDamParm1(pos_INCDamParm1);
+      iv2->setPos_INCDamParm2(pos_INCDamParm2);
+      iv2->setRandnum(Randnum);   
+
     if(Reuler != NULL) Reuler->RandomGen(GaussP, &(stv1[pos_euler])); 
 
  
@@ -412,6 +456,7 @@ void mlawNonLocalDamage_Stoch::createIPState(const SVector3 &GaussP, IPNonLocalD
       if(pos_Mhexp !=0) stv1[pos_Mhexp] = Rprop[k++];
       if(pos_DamParm1 !=0) stv1[pos_DamParm1] = Rprop[k++];
       if(pos_DamParm2 !=0) stv1[pos_DamParm2] = Rprop[k];
+
    } 
       
    else if(_intpl != 0){
@@ -678,7 +723,12 @@ void mlawNonLocalDamage_Stoch::createIPState(const SVector3 &GaussP, IPNonLocalD
       std::mt19937 gen(rd()); 
       std::normal_distribution<double> d(0.0, 1.0); 
       // get random number with normal distribution using gen as random source
-      stv1[pos_INCDamParm1] = 100;// int(stv1[pos_vfi]*0.25*0.15*1000000/3.141592/3.5/3.5); 
+      if(pos_vfi != 0){
+      stv1[pos_INCDamParm1] = int(stv1[pos_vfi]*0.25*0.3/2.0*1000000/3.141592/3.5/3.5); 
+      }
+      else{
+      stv1[pos_INCDamParm1] = 100;
+      }
       stv1[pos_INCDamParm2] =  d(gen);
        }
     }
@@ -753,16 +803,30 @@ void mlawNonLocalDamage_Stoch::createIPVariable(const SVector3 &GaussP, IPNonLoc
   double dpdFdtmp = 0.0;
   double dFddptmp = 0.0;
 
-  double Dmax=0.9999;
   ipv->setPosMaxD(mat->get_pos_maxD());
   ipv->setPosIncMaxD(mat->get_pos_inc_maxD());
   ipv->setPosMtxMaxD(mat->get_pos_mtx_maxD());
 
-  ipv->setMaxD(Dmax);
-  ipv->setIncMaxD(Dmax);
-  ipv->setMtxMaxD(Dmax);
+  ipv->setMaxD(_Dmax_Mtx);
+  ipv->setIncMaxD(_Dmax_Inc);
+  ipv->setMtxMaxD(_Dmax_Mtx);
 
   if(Randnum !=0){
+      ipv->setPos_vfi(pos_vfi);
+      ipv->setPos_euler(pos_euler);
+      ipv->setPos_aspR(pos_aspR);
+      ipv->setPos_ME(pos_ME);
+      ipv->setPos_Mnu(pos_Mnu);
+      ipv->setPos_Msy0(pos_Msy0);
+      ipv->setPos_Mhmod1(pos_Mhmod1);
+      ipv->setPos_Mhmod2(pos_Mhmod2);
+      ipv->setPos_Mhexp(pos_Mhexp);
+      ipv->setPos_DamParm1(pos_DamParm1);
+      ipv->setPos_DamParm2(pos_DamParm2);
+      ipv->setPos_INCDamParm1(pos_INCDamParm1);
+      ipv->setPos_INCDamParm2(pos_INCDamParm2);
+      ipv->setRandnum(Randnum);
+
     if(Reuler != NULL) Reuler->RandomGen(GaussP, &(stv1[pos_euler])); 
 
     if(RMatProp !=NULL){
@@ -1046,9 +1110,14 @@ void mlawNonLocalDamage_Stoch::createIPVariable(const SVector3 &GaussP, IPNonLoc
       std::mt19937 gen(rd()); 
       std::normal_distribution<double> d(0.0, 1.0); 
       // get random number with normal distribution using gen as random source
-      stv1[pos_INCDamParm1] =  100;// int(stv1[pos_vfi]*0.25*0.15*1000000/3.141592/3.5/3.5);  
+      if(pos_vfi != 0){
+      stv1[pos_INCDamParm1] = int(stv1[pos_vfi]*0.25*0.3/2.0*1000000/3.141592/3.5/3.5); 
+      }
+      else{
+      stv1[pos_INCDamParm1] = 100;
+      }  
       stv1[pos_INCDamParm2] =  d(gen);
-       }
+      }
 
     }
   } 
diff --git a/NonLinearSolver/materialLaw/mlawNonLocalPorous.cpp b/NonLinearSolver/materialLaw/mlawNonLocalPorous.cpp
index 7048726c1653212074b2a5e4d2dab5e57496f453..47551f6144eab77295125525f79de6cd5f619341 100644
--- a/NonLinearSolver/materialLaw/mlawNonLocalPorous.cpp
+++ b/NonLinearSolver/materialLaw/mlawNonLocalPorous.cpp
@@ -446,60 +446,65 @@ double mlawNonLocalPorosity::lambda (double T) const
  return lambda;
 }
 
-double mlawNonLocalPorosity::getShearFactor(const STensor3& kcor, bool stiff, STensor3* DkDkcor) const{
-  // kw is a function of stress triaxiality
-  if (_triFunc_kw == NULL)
+double mlawNonLocalPorosity::getShearFactor(const STensor3& kcor, bool stiff, STensor3* DkDkcor) const
+{
+  // kw is a function of stress triaxiality and Lode
+  static STensor3 devKcor;
+  double pcor;
+  STensorOperation::decomposeDevTr(kcor,devKcor,pcor);
+  pcor /= 3.;
+  double kcorEqSq = 1.5*devKcor.dotprod();
+  double kcorEq = sqrt(kcorEqSq);
+  if (kcorEq >0)
   {
+    double J3 = STensorOperation::determinantSTensor3(devKcor);
+    double T = pcor/kcorEq;
+    double Xi = 27.*J3/(2.*kcorEq*kcorEq*kcorEq);
+    
+    double funcT = _triFunc_kw->getVal(T);
+    double funcXi = _LodeFunction->getVal(Xi);
+    
+    double realKw = _kw*funcT*funcXi;
     if (stiff)
     {
+      // ompute DTDkcor, DXiDkcor
+      static STensor3 DpcorDkcor, DkcorEqDkcor, DJ3Dkcor;
+      STensorOperation::diag(DpcorDkcor,1./3.);
+      DkcorEqDkcor = devKcor;
+      DkcorEqDkcor *= (1.5/kcorEq);
+      STensorOperation::multSTensor3(devKcor,devKcor,DJ3Dkcor);
+      DJ3Dkcor(0,0) -= (2.*kcorEqSq/9.);
+      DJ3Dkcor(1,1) -= (2.*kcorEqSq/9.);
+      DJ3Dkcor(2,2) -= (2.*kcorEqSq/9.);
+      
+      double DTDpcor = 1./kcorEq;
+      double DTDkcorEq = -T/kcorEq;
+      
+      double DXiDJ3 = Xi/J3;
+      double DXiDkcorEq = -3.*Xi/kcorEq;
+      
+      double DifffuncT = _triFunc_kw->getDiff(T);
+      double DifffuncXi = _LodeFunction->getDiff(Xi);
+      
+      double DrealKwDpcor = _kw*DifffuncT*DTDpcor*funcXi;
+      double DrealKwDkcorEq = _kw*DifffuncT*DTDkcorEq*funcXi + _kw*funcT*DifffuncXi*DXiDkcorEq;
+      double DrealKwDJ3 = _kw*funcT*DifffuncXi*DXiDJ3;
+      
       STensorOperation::zero(*DkDkcor);
+      DkDkcor->daxpy(DpcorDkcor,DrealKwDpcor);
+      DkDkcor->daxpy(DkcorEqDkcor,DrealKwDkcorEq);
+      DkDkcor->daxpy(DJ3Dkcor,DrealKwDJ3);
     }
-    return _kw;
+    return realKw;
   }
   else
   {
-    double stressTri;
-    //
-    static STensor3 devKcor;
-    double p;
-    STensorOperation::decomposeDevTr(kcor,devKcor,p);
-    p /= 3.;
-    double tenEq = sqrt(1.5*devKcor.dotprod());
-    if (p == 0.)
-    {
-      stressTri = 0.;
-    }
-    else 
-    {
-      if (tenEq > 0) 
-      {
-        stressTri = p/tenEq;
-      }
-      else
-      {
-        stressTri = 1e10;
-      }
-    }
-    double F = _kw*_triFunc_kw->getVal(stressTri); 
+    //Msg::Warning("stress equivalent is zero, kw effect is neglected");
     if (stiff)
     {
-      if (tenEq ==0.)
-      {
-        STensorOperation::zero(*DkDkcor);
-      }
-      else
-      {
-        double DFDT = _kw*_triFunc_kw->getDiff(stressTri);
-        double DFDp = DFDT/tenEq;
-        double DFDtenEq = -DFDT*stressTri/tenEq;
-        (*DkDkcor) = devKcor;
-        (*DkDkcor) *= (DFDtenEq*1.5/tenEq);
-        (*DkDkcor)(0,0) += (DFDp/3.);
-        (*DkDkcor)(1,1) += (DFDp/3.);
-        (*DkDkcor)(2,2) += (DFDp/3.);
-      }
+      STensorOperation::zero(*DkDkcor);
     }
-    return F;
+    return 0.;
   }
 };
 
@@ -4449,29 +4454,13 @@ void mlawNonLocalPorosity::localPorosityGrowth(IPNonLocalPorosity *q1,
     double v = 1.+DeltaHatQ;
 
     // Get shear part
-      // third inveriant
-    double J3 = 0.;
-    double Xi = 1.;
-    
-    static STensor3 devKcor;
-    double trKcor;
-    static STensor3 DkwDKcor;
-    //double kw = getShearFactor(q1->getConstRefToCorotationalKirchhoffStress(),true,&DkwDKcor);
-    // use previous to eastimate kw --
-    double kw = getShearFactor(q0->getConstRefToCorotationalKirchhoffStress());
-    
-    STensorOperation::decomposeDevTr(Kcor,devKcor,trKcor);
-    double kcorEq = sqrt(1.5*STensorOperation::doubledot(devKcor,devKcor));
-    double funcXi = 0.;
-    if (kw > 0. and DeltaHatD > 0. and kcorEq > 0)
+    static STensor3 DkwDkcor;
+    double kw = getShearFactor(Kcor,stiff,&DkwDkcor);
+    if (DeltaHatD > 0.)
     {
-      J3 = STensorOperation::determinantSTensor3(devKcor);
-      Xi = 27.*J3/(2.*kcorEq*kcorEq*kcorEq);
-      funcXi = _LodeFunction->getVal(Xi);
-      u += kw*funcXi*fVn*DeltaHatD;
-      v -= kw*funcXi*DeltaHatD;
+      u += kw*fVn*DeltaHatD;
+      v -= kw*DeltaHatD;
     }
-
     // get local porosity
     double DeltafV = u/v;
     // Regularise porosity growth and rates
@@ -4495,27 +4484,15 @@ void mlawNonLocalPorosity::localPorosityGrowth(IPNonLocalPorosity *q1,
       double DuDDeltaHatD = 0.;
       double DuDDeltaHatQ = (1- fVn);
       double DuDDeltaHatP = DDeltafVNucleationDhatP;
-      double DuDXi = 0.;
-      double DuDkw = 0.;
 
       double DvDDeltaHatD = 0.;
       double DvDDeltaHatQ = 1.;
       double DvDDeltaHatP = 0.;
-      double DvDXi = 0.;
-      double DvDkw = 0.;
 
-      if (kw > 0. and DeltaHatD >0.)
+      if (DeltaHatD >0.)
       {
-        DuDDeltaHatD = kw*funcXi*fVn;
-        DvDDeltaHatD = - kw*funcXi;
-        
-        double DfuncXiDXi = _LodeFunction->getDiff(Xi);
-        
-        DuDXi =  kw*fVn*DeltaHatD*DfuncXiDXi;
-        DvDXi = -kw*DeltaHatD*DfuncXiDXi;
-        
-        DuDkw = funcXi*fVn*DeltaHatD;
-        DvDkw = funcXi*DeltaHatD;
+        DuDDeltaHatD = kw*fVn;
+        DvDDeltaHatD = -kw;
       }
 
       *DDeltafVDDeltaHatD = (DuDDeltaHatD/v - DeltafV*DvDDeltaHatD/v);
@@ -4523,31 +4500,16 @@ void mlawNonLocalPorosity::localPorosityGrowth(IPNonLocalPorosity *q1,
       *DDeltafVDDeltaHatP = (DuDDeltaHatP/v - DeltafV*DvDDeltaHatP/v);
       
       STensorOperation::zero(*DDeltafVDKcor);
-
-      if (kw > 0. and DeltaHatD > 0. and kcorEq > 0.){
-        // Compute DDeltafVDKcor
-        static STensor3 DJ3devKcor;
-        STensorOperation::Ddeta_Da_sym(devKcor,J3,DJ3devKcor);
-        static STensor3 DkcorEqDdevKcor;
-        DkcorEqDdevKcor = devKcor;
-        DkcorEqDdevKcor *= (1.5/kcorEq);
-
-        double DXiDJ3 =  27./(2.*kcorEq*kcorEq*kcorEq);
-        double DXiDkcorEq = -3.*27.*J3/(2.*kcorEq*kcorEq*kcorEq*kcorEq);
-         
-        double DDeltafVDXi = (DuDXi/v - DeltafV*DvDXi/v);
-
-        static STensor3 DDeltafVDdevKcor;
-        DDeltafVDdevKcor =DkcorEqDdevKcor;
-        DDeltafVDdevKcor *= (DDeltafVDXi*DXiDkcorEq);
-        DDeltafVDdevKcor.daxpy(DJ3devKcor,DDeltafVDXi*DXiDJ3);
-        
-        STensorOperation::multSTensor3STensor43(DDeltafVDdevKcor,_I4dev,*DDeltafVDKcor);
+      if (DeltaHatD > 0.)
+      {
+        double DuDkw = fVn*DeltaHatD;
+        double DvDkw = -DeltaHatD;
         
-        double DDeltafVDkw = (DuDkw/v - DeltafV*DvDkw/v);
-        DDeltafVDKcor->daxpy(DkwDKcor,DDeltafVDkw);
+        double DDeltafVDkw = DuDkw/v - DeltafV*DvDkw/v;
+        DDeltafVDKcor->daxpy(DkwDkcor,DDeltafVDkw);
       }
-
+      
+      // update 
       *DDeltafVDDeltaHatD *= regularizedRate;
       *DDeltafVDDeltaHatQ *= regularizedRate;
       *DDeltafVDDeltaHatP *= regularizedRate;
@@ -4788,7 +4750,9 @@ void mlawNonLocalPorosity::constitutive(
                             IPVariable *_ipvcur,             // updated array of internal variable (in ipvcur on output),
                             STensor43 &Tangent,         // constitutive tangents (output)
                             const bool stiff ,
-                            STensor43* elasticTangent) const
+                            STensor43* elasticTangent, 
+                            const bool dTangentdeps,
+                            STensor63* dCalgdeps) const
 {
   if(elasticTangent!=NULL) Msg::Error("mlawNonLocalPorosity elasticTangent not computed");
   const IPNonLocalPorosity *ipvprev = dynamic_cast<const IPNonLocalPorosity *> (_ipvprev);       // array of initial internal variable
diff --git a/NonLinearSolver/materialLaw/mlawNonLocalPorous.h b/NonLinearSolver/materialLaw/mlawNonLocalPorous.h
index 8de90b2e23ce2930468c1f32aaab627036d5fff9..603b06f1ed328af22f6f24a6647d2e0a86779ee6 100644
--- a/NonLinearSolver/materialLaw/mlawNonLocalPorous.h
+++ b/NonLinearSolver/materialLaw/mlawNonLocalPorous.h
@@ -237,7 +237,9 @@ protected:
                               IPVariable *q1,             // updated array of internal variable (in ipvcur on output),
                               STensor43 &Tangent,         // constitutive tangents (output)
                               const bool stiff,           // if true compute the tangents
-                              STensor43* elasticTangent = NULL) const;
+                              STensor43* elasticTangent = NULL, 
+                              const bool dTangent =false,
+                              STensor63* dCalgdeps = NULL) const;
 
     virtual void constitutive(
                               const STensor3& F0,         // initial deformation gradient (input @ time n)
diff --git a/NonLinearSolver/materialLaw/mlawNonLocalPorousWithFailure.h b/NonLinearSolver/materialLaw/mlawNonLocalPorousWithFailure.h
index 63b66dafd0f18027c337c094f0c1fb1380dd7191..076b646853834649fd1569e0bab2cd5ae51224d0 100644
--- a/NonLinearSolver/materialLaw/mlawNonLocalPorousWithFailure.h
+++ b/NonLinearSolver/materialLaw/mlawNonLocalPorousWithFailure.h
@@ -95,7 +95,9 @@ class mlawNonLocalPorousWithCleavageFailure : public materialLaw{
                             IPVariable *q1,              // updated array of internal variable (in ipvcur on output),
 			    STensor43 &Tangent,         // constitutive tangents (output)
 			    const bool stiff,
-                            STensor43* elasticTangent = NULL
+                            STensor43* elasticTangent = NULL, 
+                            const bool dTangent =false,
+                            STensor63* dCalgdeps = NULL
 			    ) const
       {
         Msg::Error("mlawNonLocalPorousWithCleavageFailure constitutive not defined");
diff --git a/NonLinearSolver/materialLaw/mlawPhenomenologicalSMP.cpp b/NonLinearSolver/materialLaw/mlawPhenomenologicalSMP.cpp
index de7c5a416af1dceba151318d9f59e2a721c98a4b..ab132ebd23b9f8cb186a1d363823778e09649852 100644
--- a/NonLinearSolver/materialLaw/mlawPhenomenologicalSMP.cpp
+++ b/NonLinearSolver/materialLaw/mlawPhenomenologicalSMP.cpp
@@ -696,10 +696,6 @@ void mlawPhenomenologicalSMP::getUf(const double T, STensor3& Uf, const STensor3
     STensorOperation::multSTensor3(Uer,R,Uf);
 }
 
-
-
-
-
 void mlawPhenomenologicalSMP::constitutive(
     const STensor3      &F0,
     const STensor3      &Fn,
@@ -708,7 +704,9 @@ void mlawPhenomenologicalSMP::constitutive(
     IPVariable          *q1,
     STensor43           &Tangent,
     const bool          stiff,
-    STensor43           *elasticTangent) const
+    STensor43           *elasticTangent,
+    const bool dTangent,
+    STensor63* dCalgdeps) const
 {
 }
 
diff --git a/NonLinearSolver/materialLaw/mlawPhenomenologicalSMP.h b/NonLinearSolver/materialLaw/mlawPhenomenologicalSMP.h
index d626933235bd8b9cfa550ec885343bd565c4d3ec..6d2974f1ad49a5f3b75f84afc71029783574a4f5 100644
--- a/NonLinearSolver/materialLaw/mlawPhenomenologicalSMP.h
+++ b/NonLinearSolver/materialLaw/mlawPhenomenologicalSMP.h
@@ -509,6 +509,8 @@ public:
         STensor43        &Tangent,              // constitutive tangents (output)
         const bool       stiff,
         STensor43        *elasticTangent=NULL
+        const bool dTangent =false,
+        STensor63* dCalgdeps = NULL 
     ) const;
 
     virtual void constitutive(
diff --git a/NonLinearSolver/materialLaw/mlawSMP.cpp b/NonLinearSolver/materialLaw/mlawSMP.cpp
index 8240b8cecf8f623f64f6f0539eabbdd02db9275d..d45d20408121bb3a24031c8dfb9abcddf872196c 100644
--- a/NonLinearSolver/materialLaw/mlawSMP.cpp
+++ b/NonLinearSolver/materialLaw/mlawSMP.cpp
@@ -256,8 +256,16 @@ void mlawSMP::createIPState(IPStateBase* &ips,const bool* state_,const MElement
 }
 
 
-void mlawSMP::constitutive(const STensor3& F0,const STensor3& Fn,STensor3 &P,
-                              const IPSMP *q0, IPSMP *q1,STensor43 &Tangent,const bool stiff) const
+void mlawSMP::constitutive(const STensor3& F0,
+                           const STensor3& Fn,
+                           STensor3 &P,
+                           const IPSMP *q0, 
+                           IPSMP *q1,
+                           STensor43 &Tangent,
+                           const bool stiff, 
+                           STensor43* elasticTangent,
+                           const bool dTangent,
+                           STensor63* dCalgdeps) const
 {
   
 
diff --git a/NonLinearSolver/materialLaw/mlawSMP.h b/NonLinearSolver/materialLaw/mlawSMP.h
index 6b464b37ae1925e6920573a65e86ec2021caf459..3e1605ccbd5e74f39c91883fcaed4d092e038060 100644
--- a/NonLinearSolver/materialLaw/mlawSMP.h
+++ b/NonLinearSolver/materialLaw/mlawSMP.h
@@ -76,7 +76,10 @@ public:
                             const IPSMP *q0,       // array of initial internal variable
                             IPSMP *q1,              // updated array of internal variable (in ipvcur on output),
 			    STensor43 &Tangent,         // constitutive tangents (output)
-			    const bool stiff
+			    const bool stiff, 
+                            STensor43* elasticTangent = NULL, 
+                            const bool dTangent =false,
+                            STensor63* dCalgdeps = NULL
 			    ) const;
   virtual void constitutive(
                             const STensor3& F0,         // initial deformation gradient (input @ time n)
diff --git a/NonLinearSolver/materialLaw/mlawTFAMaterialLaws.cpp b/NonLinearSolver/materialLaw/mlawTFAMaterialLaws.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..20b1883e5876e66bbee04511c697882d8073f671
--- /dev/null
+++ b/NonLinearSolver/materialLaw/mlawTFAMaterialLaws.cpp
@@ -0,0 +1,810 @@
+//
+// C++ Interface: material law
+//
+// Description: clustering material law
+//
+//
+// Author:  <Kevin SPILKER>, (C) 2019
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+#include <math.h>
+#include "MInterfaceElement.h"
+#include <fstream>
+#include "mlawTFAMaterialLaws.h"
+#include "STensorOperations.h"
+#include "FiniteStrain.h"
+#include "matrix_operations.h"
+#include <iostream>
+using namespace std;
+
+
+mlawTFAMaterialLaws::mlawTFAMaterialLaws(const int num, double rho, const char *clusterVol) : materialLaw(num,true), _rho(rho)
+{
+  std::ifstream in(clusterVol);
+  if(!in) Msg::Error("Cannot open the file %s! Maybe is missing   ",clusterVol);
+  int clusternb;
+  double Vi_init;
+  while ( in >> clusternb >>  Vi_init)
+  {
+   _clusterV_init.insert(std::pair<int,double>(clusternb,Vi_init));
+  }
+
+  _mu=0.; //to be modified
+  _nu =0.3;
+}
+mlawTFAMaterialLaws::mlawTFAMaterialLaws(const mlawTFAMaterialLaws &source) :
+                                        materialLaw(source)
+{
+  _clusterV_init=source._clusterV_init;
+
+  _matlawnb=source._matlawnb; //give the material law number for cluster i
+  _matlawptr=source._matlawptr; //give the material law pointer for cluster i
+
+  _concentrationTensor=source._concentrationTensor; //give the concentration tensor for cluster i
+  _interactionTensor=source._interactionTensor; //give the interaction tensor for cluster i, j
+
+  _mu=source._mu;
+  _nu=source._nu;
+  _rho=source._rho;
+
+}
+
+mlawTFAMaterialLaws& mlawTFAMaterialLaws::operator=(const materialLaw &source)
+{
+  materialLaw::operator=(source);
+  const mlawTFAMaterialLaws* src =static_cast<const mlawTFAMaterialLaws*>(&source);
+  if(src!=NULL)
+  {
+    _clusterV_init=src->_clusterV_init; //give the cluster number for element i
+
+    _matlawnb=src->_matlawnb; //give the material law number for cluster i
+    _matlawptr=src->_matlawptr; //give the material law pointer for cluster i
+
+    _concentrationTensor=src->_concentrationTensor; //give the concentration tensor for cluster i
+    _interactionTensor=src->_interactionTensor; //give the interaction tensor for cluster i, j
+
+    _mu=src->_mu;
+    _nu=src->_nu;
+    _rho=src->_rho;
+  }
+  return *this;
+}
+
+mlawTFAMaterialLaws::~mlawTFAMaterialLaws()
+{
+  //for(std::map<int,IP3State*>::iterator it=_ipstates.begin(); it!=_ipstates.end(); it++)
+  //{
+  //  delete it->second;
+  //}
+  //_ipstates.clear();
+}
+
+
+void mlawTFAMaterialLaws::addTFAMaterialLaw(int clusterNb, int materialLawNb)   //void mlawTFAMaterialLaws::addTFAMaterialLaw(const char *matlaws)
+{
+  _matlawnb.insert(std::pair<int,int>(clusterNb,materialLawNb));
+
+  //std::ifstream in(matlaws);
+  //if(!in) Msg::Fatal("Cannot open the file %s! Maybe is missing   ",matlaws);
+  //int clusterNb, matlawNb;
+  //while ( in >> clusterNb >> materialLawNb )
+  //{
+   //_matlawnb.insert(std::pair<int,int>(clusterNb,materialLawNb));
+  //}
+}
+
+
+void mlawTFAMaterialLaws::readTFAConcentrationTensors(const char *concentrationTensors)
+{
+  std::ifstream in(concentrationTensors);
+  if(!in) Msg::Error("Cannot open the file %s! Maybe is missing   ",concentrationTensors);
+  int clusterNb;
+  double A_v_11, A_v_12, A_v_13, A_v_14, A_v_15, A_v_16, A_v_21, A_v_22, A_v_23, A_v_24, A_v_25, A_v_26, A_v_31, A_v_32, A_v_33, A_v_34, A_v_35, A_v_36, A_v_41, A_v_42, A_v_43, A_v_44, A_v_45, A_v_46, A_v_51, A_v_52, A_v_53, A_v_54, A_v_55, A_v_56, A_v_61, A_v_62, A_v_63, A_v_64, A_v_65, A_v_66;
+  STensor43 A;
+  while ( in >> clusterNb >> A_v_11 >> A_v_12 >> A_v_13 >> A_v_14 >> A_v_15 >> A_v_16 >> A_v_21 >> A_v_22 >> A_v_23 >> A_v_24 >> A_v_25 >> A_v_26 >> A_v_31 >> A_v_32 >> A_v_33 >> A_v_34 >> A_v_35 >> A_v_36  >> A_v_41 >> A_v_42 >> A_v_43 >> A_v_44 >> A_v_45 >> A_v_46 >> A_v_51 >> A_v_52 >> A_v_53 >> A_v_54 >> A_v_55 >> A_v_56 >> A_v_61 >> A_v_62 >> A_v_63 >> A_v_64 >> A_v_65 >> A_v_66 )
+  {
+   A(0,0,0,0)=A_v_11;
+   A(1,1,1,1)=A_v_22;
+   A(2,2,2,2)=A_v_33;
+   A(0,1,0,1)=A(0,1,1,0)=A(1,0,0,1)=A(1,0,1,0)=A_v_44/2;
+   A(0,2,0,2)=A(0,2,2,0)=A(2,0,0,2)=A(2,0,2,0)=A_v_55/2;
+   A(1,2,1,2)=A(1,2,2,1)=A(2,1,1,2)=A(2,1,2,1)=A_v_66/2;
+
+   A(0,0,1,1)=A_v_12;
+   A(0,0,2,2)=A_v_13;
+   A(0,0,0,1)=A(0,0,1,0)=A_v_14;
+   A(0,0,0,2)=A(0,0,2,0)=A_v_15;
+   A(0,0,1,2)=A(0,0,2,1)=A_v_16;
+
+   A(1,1,0,0)=A_v_21;
+   A(1,1,2,2)=A_v_23;
+   A(1,1,0,1)=A(1,1,1,0)=A_v_24;
+   A(1,1,0,2)=A(1,1,2,0)=A_v_25;
+   A(1,1,1,2)=A(1,1,2,1)=A_v_26;
+
+   A(2,2,0,0)=A_v_31;
+   A(2,2,1,1)=A_v_32;
+   A(2,2,0,1)=A(2,2,1,0)=A_v_34;
+   A(2,2,0,2)=A(2,2,2,0)=A_v_35;
+   A(2,2,1,2)=A(2,2,2,1)=A_v_36;
+
+   A(0,1,0,0)=A(1,0,0,0)=A_v_41/2;
+   A(0,1,1,1)=A(1,0,1,1)=A_v_42/2;
+   A(0,1,2,2)=A(1,0,2,2)=A_v_43/2;
+   A(0,1,0,2)=A(0,1,2,0)=A(1,0,0,2)=A(1,0,2,0)=A_v_45/2;
+   A(0,1,1,2)=A(0,1,2,1)=A(1,0,1,2)=A(1,0,2,1)=A_v_46/2;
+
+   A(0,2,0,0)=A(2,0,0,0)=A_v_51/2;
+   A(0,2,1,1)=A(2,0,1,1)=A_v_52/2;
+   A(0,2,2,2)=A(2,0,2,2)=A_v_53/2;
+   A(0,2,0,1)=A(0,2,1,0)=A(2,0,0,1)=A(2,0,1,0)=A_v_54/2;
+   A(0,2,1,2)=A(0,2,2,1)=A(2,0,1,2)=A(2,0,2,1)=A_v_56/2;
+
+   A(1,2,0,0)=A(2,1,0,0)=A_v_61/2;
+   A(1,2,1,1)=A(2,1,1,1)=A_v_62/2;
+   A(1,2,2,2)=A(2,1,2,2)=A_v_63/2;
+   A(1,2,0,1)=A(1,2,1,0)=A(2,1,0,1)=A(2,1,1,0)=A_v_64/2;
+   A(1,2,0,2)=A(1,2,2,0)=A(2,1,0,2)=A(2,1,2,0)=A_v_65/2;
+
+   _concentrationTensor.insert(std::pair<int,STensor43>(clusterNb,A));
+  }
+
+}
+
+void mlawTFAMaterialLaws::readTFAInteractionTensors(const char *interactionTensors)
+{
+  std::ifstream in(interactionTensors);
+  if(!in) Msg::Error("Cannot open the file %s! Maybe is missing   ",interactionTensors);
+  int clusterNb1, clusterNb2;
+  double D_v_11, D_v_12, D_v_13, D_v_14, D_v_15, D_v_16, D_v_21, D_v_22, D_v_23, D_v_24, D_v_25, D_v_26, D_v_31, D_v_32, D_v_33, D_v_34, D_v_35, D_v_36, D_v_41, D_v_42, D_v_43, D_v_44, D_v_45, D_v_46, D_v_51, D_v_52, D_v_53, D_v_54, D_v_55, D_v_56, D_v_61, D_v_62, D_v_63, D_v_64, D_v_65, D_v_66;
+  STensor43 D;
+  while ( in >> clusterNb1 >> clusterNb2 >> D_v_11 >> D_v_12 >> D_v_13 >> D_v_14 >> D_v_15 >> D_v_16 >> D_v_21 >> D_v_22 >> D_v_23 >> D_v_24 >> D_v_25 >> D_v_26 >> D_v_31 >> D_v_32 >> D_v_33 >> D_v_34 >> D_v_35 >> D_v_36  >> D_v_41 >> D_v_42 >> D_v_43 >> D_v_44 >> D_v_45 >> D_v_46 >> D_v_51 >> D_v_52 >> D_v_53 >> D_v_54 >> D_v_55 >> D_v_56 >> D_v_61 >> D_v_62 >> D_v_63 >> D_v_64 >> D_v_65 >> D_v_66 )
+  {
+   D(0,0,0,0)=D_v_11;
+   D(1,1,1,1)=D_v_22;
+   D(2,2,2,2)=D_v_33;
+   D(0,1,0,1)=D(0,1,1,0)=D(1,0,0,1)=D(1,0,1,0)=D_v_44/2;
+   D(0,2,0,2)=D(0,2,2,0)=D(2,0,0,2)=D(2,0,2,0)=D_v_55/2;
+   D(1,2,1,2)=D(1,2,2,1)=D(2,1,1,2)=D(2,1,2,1)=D_v_66/2;
+
+   D(0,0,1,1)=D_v_12;
+   D(0,0,2,2)=D_v_13;
+   D(0,0,0,1)=D(0,0,1,0)=D_v_14/2;
+   D(0,0,0,2)=D(0,0,2,0)=D_v_15/2;
+   D(0,0,1,2)=D(0,0,2,1)=D_v_16/2;
+
+   D(1,1,0,0)=D_v_21;
+   D(1,1,2,2)=D_v_23;
+   D(1,1,0,1)=D(1,1,1,0)=D_v_24/2;
+   D(1,1,0,2)=D(1,1,2,0)=D_v_25/2;
+   D(1,1,1,2)=D(1,1,2,1)=D_v_26/2;
+
+   D(2,2,0,0)=D_v_31;
+   D(2,2,1,1)=D_v_32;
+   D(2,2,0,1)=D(2,2,1,0)=D_v_34/2;
+   D(2,2,0,2)=D(2,2,2,0)=D_v_35/2;
+   D(2,2,1,2)=D(2,2,2,1)=D_v_36/2;
+
+   D(0,1,0,0)=D(1,0,0,0)=D_v_41;
+   D(0,1,1,1)=D(1,0,1,1)=D_v_42;
+   D(0,1,2,2)=D(1,0,2,2)=D_v_43;
+   D(0,1,0,2)=D(0,1,2,0)=D(1,0,0,2)=D(1,0,2,0)=D_v_45/2;
+   D(0,1,1,2)=D(0,1,2,1)=D(1,0,1,2)=D(1,0,2,1)=D_v_46/2;
+
+   D(0,2,0,0)=D(2,0,0,0)=D_v_51;
+   D(0,2,1,1)=D(2,0,1,1)=D_v_52;
+   D(0,2,2,2)=D(2,0,2,2)=D_v_53;
+   D(0,2,0,1)=D(0,2,1,0)=D(2,0,0,1)=D(2,0,1,0)=D_v_54/2;
+   D(0,2,1,2)=D(0,2,2,1)=D(2,0,1,2)=D(2,0,2,1)=D_v_56/2;
+
+   D(1,2,0,0)=D(2,1,0,0)=D_v_61;
+   D(1,2,1,1)=D(2,1,1,1)=D_v_62;
+   D(1,2,2,2)=D(2,1,2,2)=D_v_63;
+   D(1,2,0,1)=D(1,2,1,0)=D(2,1,0,1)=D(2,1,1,0)=D_v_64/2;
+   D(1,2,0,2)=D(1,2,2,0)=D(2,1,0,2)=D(2,1,2,0)=D_v_65/2;
+   pair a=std::pair<int,int>(clusterNb1,clusterNb2);
+   _interactionTensor.insert(std::pair<pair,STensor43>(a,D));
+  }
+
+}
+
+
+
+
+void mlawTFAMaterialLaws::initLaws(const std::map<int,materialLaw*> &maplaw)
+{
+  for(std::map<int,int>::const_iterator itcluster=_matlawnb.begin(); itcluster!=_matlawnb.end(); itcluster++)
+  {
+    int clusternb=itcluster->first;
+    int matlawnb=itcluster->second;
+
+
+    bool findlaw=false;
+    for(std::map<int,materialLaw*>::const_iterator it = maplaw.begin(); it != maplaw.end(); ++it)
+    {
+      int num = it->first;
+      if(num == matlawnb){
+        findlaw=true;
+        it->second->initLaws(maplaw);
+        _matlawptr.insert(std::pair<int, const materialLaw*>(clusternb,it->second->getConstNonLinearSolverMaterialLaw()));
+        break;
+      }
+    }
+    if(!findlaw) Msg::Error("The law is not initialize for cluster number %d and material law number %d",clusternb,matlawnb);
+  }
+}
+
+
+
+void mlawTFAMaterialLaws::constitutive(
+            const STensor3& F0,         // initial deformation gradient (input @ time n)
+            const STensor3& Fn,         // updated deformation gradient (input @ time n+1)
+            STensor3 &P,                // updated 1st Piola-Kirchhoff stress tensor (output)
+            const IPVariable *q0i,       // array of initial internal variable
+            IPVariable *q1i,             // updated array of internal variable (in ipvcur on output),
+            STensor43 &Tangent,         // constitutive tangents (output)
+            const bool stiff,         // if true compute the tangents
+            STensor43* elasticTangent,
+            const bool dTangent,
+            STensor63* dCalgdeps) const
+{
+
+   bool stiffAnalytical=true;
+   constitutiveAnalytical(F0,Fn,P,q0i,q1i,Tangent,         // constitutive tangents (output)
+            stiffAnalytical,elasticTangent,dTangent,dCalgdeps);
+
+   if(stiff and !stiffAnalytical)
+   {
+     IPVariable *qpert=q1i->clone();
+     double eps=1.e-8;
+     STensor43 TangentTmp;
+     for(int i=0;i<3; i++)
+     {
+       for(int j=0;j<3; j++)
+       {
+         STensor3 Fpert(Fn);
+         Fpert(i,j)+=eps;
+         STensor3 Ppert;
+         qpert->operator=(*q1i);
+         constitutiveAnalytical(F0,Fpert,Ppert,q0i,qpert,             // updated array of internal variable (in ipvcur on output),
+            TangentTmp, false, elasticTangent,
+            dTangent,dCalgdeps);
+
+         STensor3 Fpertm(Fn);
+         Fpertm(i,j)-=eps;
+         STensor3 Ppertm;
+         qpert->operator=(*q1i);
+         constitutiveAnalytical(F0, Fpertm, Ppertm, q0i, qpert,             // updated array of internal variable (in ipvcur on output),
+            TangentTmp,false, elasticTangent,  dTangent,dCalgdeps);
+
+        for(int k=0;k<3;k++)
+        {
+          for(int l=0;l<3;l++)
+          {
+             Tangent(k,l,i,j) = (Ppert(k,l)-Ppertm(k,l))/2./eps;
+          }
+        }
+      }
+    }
+    delete qpert;
+    //for comparison
+    STensor43 TangentAna;
+    constitutiveAnalytical(
+            F0, Fn, P, q0i, q1i, TangentAna, true, elasticTangent,
+            dTangent,dCalgdeps);
+    //Tangent.print("Numerical");
+    //TangentAna.print("Analytical");
+  }
+}
+
+void mlawTFAMaterialLaws::constitutiveAnalytical(
+            const STensor3& F0,         // initial deformation gradient (input @ time n)
+            const STensor3& Fn,         // updated deformation gradient (input @ time n+1)
+            STensor3 &P,                // updated 1st Piola-Kirchhoff stress tensor (output)
+            const IPVariable *q0i,       // array of initial internal variable
+            IPVariable *q1i,             // updated array of internal variable (in ipvcur on output),
+            STensor43 &Tangent,         // constitutive tangents (output)
+            const bool stiff,         // if true compute the tangents
+            STensor43* elasticTangent,
+            const bool dTangent,
+            STensor63* dCalgdeps) const
+{
+
+  static STensor3 _I;
+  STensorOperation::unity(_I);
+
+  STensor3 strain(Fn);
+  strain+=Fn.transpose();
+  strain*=0.5;
+  strain-=_I;
+
+  STensor3 strain0(F0);
+  strain0+=F0.transpose();
+  strain0*=0.5;
+  strain0-=_I;
+
+  const IPTFA *q0 = dynamic_cast<const IPTFA *> (q0i);
+  IPTFA *q1 = dynamic_cast<IPTFA *> (q1i);
+  int clustersNb=q1->getClustersNb();
+  if(clustersNb != _matlawnb.size()) Msg::Error("mlawTFAMaterialLaws::constitutive ipv not correctly initialized");
+
+  static fullMatrix<double> A_matrix(6*clustersNb,6);
+  fullVector<double> Res(6*clustersNb), DeltaEps(6*clustersNb);
+  fullMatrix<double> Jac(6*clustersNb, 6*clustersNb);
+  fullMatrix<double> invJac(6*clustersNb,6*clustersNb);
+  fullMatrix<double> A_in_fac(6*clustersNb, 6*clustersNb);
+  fullMatrix<double> B(6*clustersNb, 6*clustersNb);
+  fullMatrix<double> A_in_matrix(6*clustersNb,6);
+  fullMatrix<double> depsdE(6*clustersNb,6);
+  fullMatrix<double> DepsDE(6*clustersNb,6);
+  fullMatrix<double> dAidepsjDE(6*clustersNb,6*clustersNb);
+
+  double clusterV[clustersNb];
+
+
+  fullMatrix<double> A_in_i_fac_matrix(6,6);
+  fullMatrix<double> A_i_matrix(6,6);
+  fullMatrix<double> A_in_i_matrix(6,6);
+  fullMatrix<double> B_ip_matrix(6,6);
+  fullMatrix<double> B_qt_matrix(6,6);
+  fullMatrix<double> A_t_matrix(6,6);
+  fullMatrix<double> Jac_summandij_matrix(6,6);
+  fullMatrix<double> Jac_ij_matrix(6,6);
+
+  //initialize
+  STensor3 ds(strain);
+  ds-=strain0;
+
+  double refNorm=ds.norm2();
+  if (refNorm==0.) {refNorm=1.;}
+  //cout << refNorm; cout << '\n';
+
+  double V = 0.;
+  for(int i=0; i< clustersNb; i++)
+  {
+    const IPVariable *ipv0 = q0->getConstRefToIPv(i);
+    const STensor3  &strain0i = q0->getConstRefToStrain(i);
+    const STensor3  &stress0i = q0->getConstRefToStress(i);
+    IPVariable *ipv1 = q1->getRefToIPv(i);
+    STensor3  &straini = q1->getRefToStrain(i);
+    STensor3 &Pi=q1->getRefToStress(i);
+    straini=strain0i;
+    straini+=ds;
+    double volstraini = straini.trace();
+
+    std::map<int,double>::const_iterator Vi_pair=_clusterV_init.find(i);
+    clusterV[i]=Vi_pair->second;
+    double &Vi = clusterV[i];
+    Vi += Vi*volstraini;
+    V += Vi;
+  }
+
+
+  double depsvoli=0.;
+  double Vfi, Vfj;
+
+  static STensor43 I4;
+  STensorOperation::unity(I4);
+  int it;
+  it=0;
+  double tol=1.e-6;
+
+  double f = 0.;
+  while(f/refNorm > tol or it <1)
+  {
+    STensor3 Res_i;
+    STensorOperation::zero(Res_i);
+
+    for(int i=0; i< clustersNb; i++)
+    {
+
+      const IPVariable *ipv0 = q0->getConstRefToIPv(i);
+      const STensor3  &strain0i = q0->getConstRefToStrain(i);
+      IPVariable *ipv1 = q1->getRefToIPv(i);
+      STensor3  &straini = q1->getRefToStrain(i);
+      STensor3 dstraini(straini);
+      dstraini -= strain0i;
+      Res_i = dstraini;
+      fullVector<double> Res_i_vec(6);
+      STensorOperation::fromSTensor3ToFullVector(Res_i,Res_i_vec);
+      for(int k=0; k<6; k++)
+      {
+        double val=Res_i_vec(k);
+        int index = i*6+k;
+        Res.set(index,val);
+      }
+
+      double &Vi = clusterV[i];
+      Vfi=Vi*(1./V);
+
+      std::map<int,STensor43>::const_iterator A=_concentrationTensor.find(i);
+      const STensor43 &Ai = A->second;
+      STensorOperation::fromSTensor43ToFullMatrix(Ai,A_i_matrix);
+      for(int k=0; k<6; k++)
+      {
+        for(int l=0; l<6; l++)
+        {
+          double val=A_i_matrix(k,l);
+          int index1=k+ 6*i;
+          int index2=l;
+          A_matrix.set(index1,index2,val);
+        }
+      }
+
+
+      for(int j=0; j<clustersNb; j++)
+      {
+
+        const IPVariable *ipv0j = q0->getConstRefToIPv(j);
+        const STensor3  &strain0j = q0->getConstRefToStrain(j);
+        IPVariable *ipv1j = q1->getRefToIPv(j);
+        STensor3  &strainj = q1->getRefToStrain(j);
+        STensor3 &Pj=q1->getRefToStress(j);
+
+        std::map<int,const materialLaw *>::const_iterator itmlaw=_matlawptr.find(j);
+        const materialLaw *law=itmlaw->second;
+
+        static STensor43 Tangentj,elasticTangentj;
+        STensor3 F0j(strain0j), Fj(strainj);
+        F0j+=_I;
+        Fj+=_I;
+        law->constitutive(F0j,Fj,Pj,ipv0j,ipv1j,Tangentj,true,&elasticTangentj,false,NULL);
+
+        bool Tangent_isotropic;
+        Tangent_isotropic = false;
+        if(Tangent_isotropic)
+        {
+          STensor43 Tangentj_iso;
+          STensorOperation::STensor43Isotropization(Tangentj, Tangentj_iso);
+          Tangentj = Tangentj_iso;
+        }
+
+        std::map<std::pair<int,int>,STensor43>::const_iterator D=_interactionTensor.find(std::pair<int,int>(i,j));
+        const STensor43 &Dij = D->second;
+
+        static STensor43 Sj;
+        STensorOperation::inverseSTensor43(elasticTangentj, Sj);
+
+        STensor3 factorj;
+        STensor43 factorj_A_in,A_in_i_fac,A_in_summandij;
+
+        if (i==j){STensorOperation::unity(A_in_i_fac);}
+        else{STensorOperation::zero(A_in_i_fac);};
+
+        STensorOperation::multSTensor43(Sj,Tangentj,factorj_A_in);
+        factorj_A_in -= I4;
+
+        STensorOperation::multSTensor43(Dij, factorj_A_in, A_in_summandij);
+        A_in_i_fac -= A_in_summandij;
+        STensorOperation::fromSTensor43ToFullMatrix(A_in_i_fac,A_in_i_fac_matrix);
+        for(int k=0; k<6; k++)
+        {
+          for(int l=0; l<6; l++)
+          {
+            double val = A_in_i_fac_matrix(k,l);
+            int index1=k +6*i;
+            int index2=l +6*j;
+            A_in_fac.set(index1,index2,val);
+          }
+        }
+      }
+    }
+
+
+    bool isInverted = A_in_fac.invert(B);
+    if (!isInverted)
+    {
+      Msg::Error("A_in_fac Cannot be inverted");
+      //return false;
+    }
+
+
+    B.mult(A_matrix,A_in_matrix);		// B = {delta_rs*I + D_rs(S_s:Calg_s-I)}^-1   full matrix consisting of 4th-order tensors
+
+
+    for(int i=0; i<clustersNb; i++)
+    {
+      STensor3 dstrain_localized;
+      for(int k=0; k<6; k++)
+      {
+        for(int l=0; l<6; l++)
+        {
+          A_in_i_matrix(k,l)=A_in_matrix(i*6+k,l);
+        }
+      }
+      static STensor43 A_in_i;
+      STensorOperation::fromFullMatrixToSTensor43(A_in_i_matrix,A_in_i);
+      STensorOperation::multSTensor43STensor3(A_in_i,ds,dstrain_localized);
+      fullVector<double> Res_i_vec(6);
+      for(int k=0; k<6; k++)
+      {
+        Res_i_vec(k) = Res(i*6+k);
+      }
+      STensorOperation::fromFullVectorToSTensor3(Res_i_vec,Res_i);
+      Res_i -=  dstrain_localized;
+      STensorOperation::fromSTensor3ToFullVector(Res_i,Res_i_vec);
+      for(int k=0; k<6; k++)
+      {
+        double val=Res_i_vec(k);
+        int index = i*6+k;
+        Res.set(index,val);
+      }
+
+      static STensor43 Jac_ij,Jac_summandij;
+      for(int j=0; j<clustersNb; j++)
+      {
+        static STensor63 dAidepsj, dAidepsj_summand;
+        static STensor43 A_t;
+        STensorOperation::zero(dAidepsj);
+        for(int t=0; t<clustersNb; t++)
+        {
+          //calculation of matrix product {B}:{G}:{B} by summation
+          static STensor63 BGB_itj;
+          STensorOperation::zero(BGB_itj);
+          for(int q=0; q<clustersNb; q++)
+          {
+            static STensor43 Tangentq,elasticTangentq, Sq, Bip, Bqt;
+            static STensor63 dCalgdepsq, Gpqj, BG_summand, BG_iqj, BGB_summand;
+
+            const IPVariable *ipv0q = q0->getConstRefToIPv(q);
+            const STensor3  &strain0q = q0->getConstRefToStrain(q);
+            IPVariable *ipv1q = q1->getRefToIPv(q);
+            STensor3  &strainq = q1->getRefToStrain(q);
+            STensor3 &Pq=q1->getRefToStress(q);
+
+            std::map<int,const materialLaw *>::const_iterator itmlaw=_matlawptr.find(q);
+            const materialLaw *law=itmlaw->second;
+
+            STensor3 F0q(strain0q), Fq(strainq);
+            F0q+=_I;
+            Fq+=_I;
+
+            law->constitutive(F0q,Fq,Pq,ipv0q,ipv1q,Tangentq,true,&elasticTangentq,true,&dCalgdepsq);
+            STensorOperation::inverseSTensor43(elasticTangentq, Sq);
+
+            bool Tangent_isotropic;
+            Tangent_isotropic = false;
+            if(Tangent_isotropic)
+            {
+              STensor43 Tangentq_iso;
+              STensor63 dCalgisodepsq;
+              STensorOperation::STensor43Isotropization(Tangentq, Tangentq_iso);
+              STensorOperation::STensor43IsotropizationDerivBySTensor3(dCalgdepsq, dCalgisodepsq);
+              Tangentq = Tangentq_iso;
+              dCalgdepsq = dCalgisodepsq;
+            }
+
+            STensorOperation::zero(BG_iqj);
+            for(int p=0; p<clustersNb; p++)
+            {
+              std::map<std::pair<int,int>,STensor43>::const_iterator D=_interactionTensor.find(std::pair<int,int>(p,q));
+              const STensor43 &Dpq = D->second;
+              STensorOperation::multSTensor63_ind12_STensor43_ind34(dCalgdepsq,Sq,Gpqj);
+              STensorOperation::multSTensor63_ind12_STensor43_ind34(Gpqj,Dpq,Gpqj);		// G_pqs = D_pqs :S_q : dCalg_q_deps_s
+
+              for(int k=0; k<6; k++)
+              {
+                for(int l=0; l<6; l++)
+                {
+                  B_ip_matrix(k,l)=B(i*6+k,p*6+l);
+                }
+              }
+              STensorOperation::fromFullMatrixToSTensor43(B_ip_matrix,Bip);
+              STensorOperation::multSTensor63_ind12_STensor43_ind34(Gpqj,Bip,BG_summand);
+              BG_iqj += BG_summand;				// {BG}_rqs = {B}_rp : G_pqs sum over p
+            }
+            for(int k=0; k<6; k++)
+            {
+              for(int l=0; l<6; l++)
+              {
+                B_qt_matrix(k,l)=B(q*6+l,t*6+k);
+              }
+            }
+            STensorOperation::fromFullMatrixToSTensor43(B_qt_matrix,Bqt);
+            STensorOperation::multSTensor63_ind34_STensor43_ind12(BG_iqj,Bqt,BGB_summand);
+            BGB_itj += BGB_summand;				// {BGB}_rts = {BG}_rqs : {B}_qt  sum over q
+          }
+
+          for(int k=0; k<6; k++)
+          {
+            for(int l=0; l<6; l++)
+            {
+              A_t_matrix(k,l)=A_matrix(t*6+k,l);
+            }
+          }
+          STensorOperation::fromFullMatrixToSTensor43(A_t_matrix,A_t);
+          STensorOperation::multSTensor63_ind34_STensor43_ind12(BGB_itj,A_t,dAidepsj_summand);   // {dA_in_r_deps_s} = {BGB}_rts : {A}_t   sum over t
+          dAidepsj += dAidepsj_summand;
+        }
+
+        if (i==j){STensorOperation::unity(Jac_ij);}
+        else {STensorOperation::zero(Jac_ij);}
+        STensorOperation::multSTensor63_ind34_STensor3(dAidepsj, ds, Jac_summandij);
+        Jac_ij -= Jac_summandij;						   // {J}_rs = delta_rs*I - dA_in_r_deps_s : DE  Jacobian system components
+        STensorOperation::fromSTensor43ToFullMatrix(Jac_summandij,Jac_summandij_matrix);
+        STensorOperation::fromSTensor43ToFullMatrix(Jac_ij,Jac_ij_matrix);
+        for(int k=0; k<6; k++)
+        {
+          for(int l=0; l<6; l++)
+          {
+            double val=Jac_ij_matrix(k,l);
+            double val2=Jac_summandij_matrix(k,l);
+            int index1=k +6*i;
+            int index2=l +6*j;
+            Jac.set(index1,index2,val);						// {J}	Jacobian system,   full matrix consisting of 4th-order tensors
+            dAidepsjDE.set(index1,index2,val2);   				// {dA_in_r_deps_s : DE}   full matrix consisting of 4th-order tensors
+          }
+        }
+      }
+    }
+
+    bool isInverted2 = Jac.invert(invJac);
+    if (!isInverted2)
+    {
+      Msg::Error("Jacobian cannot be inverted");
+      //return false;
+    }
+
+    invJac.mult(Res, DeltaEps);
+
+    V = 0.;
+    for(int i=0; i< clustersNb; i++)
+    {
+      STensor3 depsi;
+      static fullVector<double> depsi_vec(6);
+      for(int k=0; k<6; k++)
+      {
+        depsi_vec(k)=DeltaEps(i*6+k);
+      }
+      STensorOperation::fromFullVectorToSTensor3(depsi_vec, depsi);
+
+      IPVariable *ipvi1 = q1->getRefToIPv(i);
+      STensor3  &straini = q1->getRefToStrain(i);
+
+      straini -= depsi;
+      depsvoli = depsi.trace();
+      double &Vi = clusterV[i];
+      Vi -= Vi*depsvoli;
+      V += Vi;
+    }
+    for(int i=0; i< clustersNb; i++)
+    {
+      double &Vi = clusterV[i];
+      Vfi=Vi*(1./V);
+    }
+    f = Res.norm()/clustersNb;
+    it+=1;
+    //cout << (f/refNorm); cout << '\n';
+  }
+  //cout << it; cout << '\n';
+
+  //after convergence: compute updated homogenized (macroscopic) stress + updated homogenized tangent
+
+  STensorOperation::zero(P);
+  STensorOperation::zero(Tangent);
+
+  invJac.mult(A_in_matrix, depsdE);
+  dAidepsjDE.mult(depsdE, DepsDE);
+  DepsDE.add(A_in_matrix);
+
+  for(int i=0; i< clustersNb; i++)
+  {
+    static STensor43 Tangent_summandi, Tangenti, DepsDE_i;
+
+    double &Vi = clusterV[i];
+    Vfi=Vi*(1./V);
+    std::map<int,const materialLaw *>::const_iterator itmlaw=_matlawptr.find(i);
+    const materialLaw *law=itmlaw->second;
+
+
+    const IPVariable *ipv0 = q0->getConstRefToIPv(i);
+    const STensor3  &strain0i = q0->getConstRefToStrain(i);
+    IPVariable *ipv1 = q1->getRefToIPv(i);
+    STensor3  &straini = q1->getRefToStrain(i);
+    STensor3 &Pi=q1->getRefToStress(i);
+
+    STensor3 F0i(strain0i), Fi(straini);
+    F0i+=_I;
+    Fi+=_I;
+    law->constitutive(F0i,Fi,Pi,ipv0,ipv1,Tangenti,true,NULL);
+
+    P+=Pi*Vfi;
+
+    fullMatrix<double> A_in_i_matrix(6,6);
+    fullMatrix<double> DepsDE_i_matrix(6,6);
+    for(int k=0; k<6; k++)
+    {
+      for(int l=0; l<6; l++)
+      {
+        A_in_i_matrix(k,l)=A_in_matrix(i*6+k,l);
+        DepsDE_i_matrix(k,l)=DepsDE(i*6+k,l);
+      }
+    }
+    STensorOperation::fromFullMatrixToSTensor43(DepsDE_i_matrix, DepsDE_i);
+    STensorOperation::multSTensor43(Tangenti, DepsDE_i, Tangent_summandi);
+
+    //Tangent_summandi.print("TANGENTI");
+    Tangent_summandi *= Vfi;
+
+    Tangent += Tangent_summandi;
+
+  }
+   //Fn.print("FFFFFFFFFFFFFFFFFFFF");
+   //P.print("STRESSSSSSSSSSSSS");
+   //Tangent.print("TANGENT");
+}
+
+
+
+
+
+
+
+
+
+
+void mlawTFAMaterialLaws::createIPState(IPTFA *ivi, IPTFA *iv1, IPTFA *iv2) const
+{
+  Msg::Error("mlawTFAMaterialLaws::createIPState(IPTFA *ivi, IPTFA *iv1, IPTFA *iv2 cannot be used without Ele");
+}
+void mlawTFAMaterialLaws::createIPVariable(IPTFA *&ipv,const MElement *ele,const int nbFF, const IntPt *GP, const int gpt) const
+{
+
+  //find the clusters nb
+  int clustersNb=_matlawnb.size();
+  ipv=new IPTFA(clustersNb);
+
+  for(int i=0; i<clustersNb; i++)
+  {
+    std::map<int,const materialLaw *>::const_iterator itmlaw=_matlawptr.find(i);
+    IPStateBase* ipslaw=NULL;
+    const bool state_=true;
+    itmlaw->second->createIPState(ipslaw, &state_,ele, nbFF, GP, gpt);
+    std::vector<IPVariable*> allIP;
+    ipslaw->getAllIPVariable(allIP);
+
+    IPVariable* iplawi=allIP[0]->clone();
+    ipv->setIPVariable(i, iplawi);
+    delete ipslaw;
+  }
+}
+
+void mlawTFAMaterialLaws::createIPState(IPStateBase* &ips,const bool* state_,const MElement *ele, const int nbFF_, const IntPt *GP, const int gpt) const
+{
+  //find the clusters nb
+  int clustersNb=_matlawnb.size();
+  if(ips != NULL) delete ips;
+  IPTFA *ipvi=new IPTFA(clustersNb);
+  IPTFA *ipv1=new IPTFA(clustersNb);
+  IPTFA *ipv2=new IPTFA(clustersNb);
+
+  for(int i=0; i<clustersNb; i++)
+  {
+    std::map<int,const materialLaw *>::const_iterator itmlaw=_matlawptr.find(i);
+
+    IPStateBase* ipslaw=NULL;
+    itmlaw->second->createIPState(ipslaw, state_,ele, nbFF_, GP, gpt);
+    std::vector<IPVariable*> allIP;
+    ipslaw->getAllIPVariable(allIP);
+
+    IPVariable* iplawi=allIP[0]->clone();
+    ipvi->setIPVariable(i, iplawi);
+
+    IPVariable* iplaw1=allIP[1]->clone();
+    ipv1->setIPVariable(i, iplaw1);
+
+    IPVariable* iplaw2=allIP[2]->clone();
+    ipv2->setIPVariable(i, iplaw2);
+    delete ipslaw;
+  }
+  ips = new IP3State(state_,ipvi,ipv1,ipv2);
+}
+
+double mlawTFAMaterialLaws::soundSpeed() const
+{
+  double E = 2.*_mu*(1.+_nu);
+  double factornu = (1.-_nu)/((1.+_nu)*(1.-2.*_nu));
+  return sqrt(E*factornu/_rho);
+}
diff --git a/NonLinearSolver/materialLaw/mlawTFAMaterialLaws.h b/NonLinearSolver/materialLaw/mlawTFAMaterialLaws.h
new file mode 100644
index 0000000000000000000000000000000000000000..ba77596036a7f13f46e66f5b0d7add13ebc3048f
--- /dev/null
+++ b/NonLinearSolver/materialLaw/mlawTFAMaterialLaws.h
@@ -0,0 +1,90 @@
+//
+// C++ Interface: material law
+//
+// Author:  <Kevin Spilker>, (C) 2019
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+#ifndef MLAWTFA_H_
+#define MLAWTFA_H_
+
+#include "mlaw.h"
+#include "STensor3.h"
+#include "STensor43.h"
+#include "STensor63.h"
+#include "ipTFA.h"
+
+class mlawTFAMaterialLaws : public materialLaw{
+
+  #ifndef SWIG
+  protected:
+    double  _mu, _nu, _rho;
+
+    std::map<int, int> _matlawnb; //give the material law number for cluster i
+    std::map<int, const materialLaw *> _matlawptr; //give the material law pointer for cluster i
+
+    std::map<int,STensor43> _concentrationTensor;
+    std::map<int,double> _clusterV_init;
+    typedef std::pair<int,int> pair;
+    std::map<pair,STensor43> _interactionTensor;
+
+  #endif // SWIG
+
+  public:
+    mlawTFAMaterialLaws(const int num, double rho, const char *clusterVol);
+    void addTFAMaterialLaw(int clusterNb, int materialLawNb);
+    void readTFAConcentrationTensors(const char *concentrationTensors);
+    void readTFAInteractionTensors(const char *interactionTensors);
+ 
+    #ifndef SWIG
+    mlawTFAMaterialLaws(const mlawTFAMaterialLaws& src);
+    mlawTFAMaterialLaws& operator=(const materialLaw &source);    
+    virtual ~mlawTFAMaterialLaws();
+
+    virtual matname getType() const{return materialLaw::tfa;}
+    virtual void initLaws(const std::map<int,materialLaw*> &maplaw); //need to fill  std::set<int, const materialLaw *> matlawptr
+
+    virtual void constitutive(
+            const STensor3& F0,         // initial deformation gradient (input @ time n)
+            const STensor3& Fn,         // updated deformation gradient (input @ time n+1)
+            STensor3 &P,                // updated 1st Piola-Kirchhoff stress tensor (output)
+            const IPVariable *q0,       // array of initial internal variable
+            IPVariable *q1,             // updated array of internal variable (in ipvcur on output),
+            STensor43 &Tangent,         // constitutive tangents (output)
+            const bool stiff,          // if true compute the tangents
+            STensor43* elasticTangent = NULL, 
+            const bool dTangent =false,
+            STensor63* dCalgdeps = NULL) const;
+
+    virtual void constitutiveAnalytical(
+            const STensor3& F0,         // initial deformation gradient (input @ time n)
+            const STensor3& Fn,         // updated deformation gradient (input @ time n+1)
+            STensor3 &P,                // updated 1st Piola-Kirchhoff stress tensor (output)
+            const IPVariable *q0,       // array of initial internal variable
+            IPVariable *q1,             // updated array of internal variable (in ipvcur on output),
+            STensor43 &Tangent,         // constitutive tangents (output)
+            const bool stiff,          // if true compute the tangents
+            STensor43* elasticTangent = NULL, 
+            const bool dTangent =false,
+            STensor63* dCalgdeps = NULL) const;
+
+
+    virtual materialLaw* clone() const {return new mlawTFAMaterialLaws(*this);};
+    virtual void checkInternalState(IPVariable* ipv, const IPVariable* ipvprev) const{}; // do nothing
+
+    virtual void createIPState(IPTFA *ivi, IPTFA *iv1, IPTFA *iv2) const;
+    virtual void createIPState(IPStateBase* &ips,const bool* state_=NULL,const MElement *ele=NULL, const int nbFF_=0, const IntPt *GP=NULL, const int gpt = 0) const;
+    virtual void createIPVariable(IPTFA *&ipv,const MElement *ele,const int nbFF, const IntPt *GP, const int gpt) const;
+
+    double soundSpeed() const;
+                 
+    bool withEnergyDissipation() const { Msg::Error("mlawTFAMaterialLaws does not have withEnergyDissipation"); }
+
+    virtual double shearModulus() const {return _mu;}
+    virtual double poissonRatio() const {return _nu;}
+    virtual double density() const{return _rho;};
+    #endif // SWIG
+};
+
+#endif //MLAWTFAMATERIALLAWS
diff --git a/NonLinearSolver/materialLaw/mlawThermalConducter.h b/NonLinearSolver/materialLaw/mlawThermalConducter.h
index 469ddd5cd533008cf2db98f5c9f6f8c4cda2bb96..75ecc8cafbb0e649c541fcc6ef819b2c8bb917c2 100644
--- a/NonLinearSolver/materialLaw/mlawThermalConducter.h
+++ b/NonLinearSolver/materialLaw/mlawThermalConducter.h
@@ -56,7 +56,9 @@ class mlawThermalConducter : public materialLaw
                             IPVariable *q1,              // updated array of internal variable (in ipvcur on output),
 			    STensor43 &Tangent,         // constitutive tangents (output)
 			    const bool stiff,
-                            STensor43* elasticTangent = NULL
+                            STensor43* elasticTangent = NULL, 
+                            const bool dTangent =false,
+                            STensor63* dCalgdeps = NULL
 			    ) const
    {
      Msg::Error("mlawThermalConducter::constitutive is not defined");
diff --git a/NonLinearSolver/materialLaw/mlawTransverseIsoYarnB.cpp b/NonLinearSolver/materialLaw/mlawTransverseIsoYarnB.cpp
index f221bfb447a7220687538c30d589adc738402c76..0e40a9a7064a35524dad15a48d1331c2a205417d 100644
--- a/NonLinearSolver/materialLaw/mlawTransverseIsoYarnB.cpp
+++ b/NonLinearSolver/materialLaw/mlawTransverseIsoYarnB.cpp
@@ -236,7 +236,9 @@ void mlawTransverseIsoYarnB::constitutive(const STensor3 &F0,
 					  IPVariable *q1i,       // internal point will be updated @ time n+1
                                           STensor43 &Tangent,
                                           const bool stiff,                // if true compute the tangents
-                                          STensor43* elasticTangent) const
+                                          STensor43* elasticTangent, 
+                                          const bool dTangent,
+                                          STensor63* dCalgdeps) const
 {     
         const IPTransverseIsoYarnB *q0 = dynamic_cast<const IPTransverseIsoYarnB *> (q0i);
         IPTransverseIsoYarnB *q1 = dynamic_cast<IPTransverseIsoYarnB *> (q1i);
diff --git a/NonLinearSolver/materialLaw/mlawTransverseIsoYarnB.h b/NonLinearSolver/materialLaw/mlawTransverseIsoYarnB.h
index 17f0bcb3bb6c8d8fdf4b2b33bb9b2133b703fb25..1d3df84ea01259ac99ce7f65aedd83e9d975d3a0 100644
--- a/NonLinearSolver/materialLaw/mlawTransverseIsoYarnB.h
+++ b/NonLinearSolver/materialLaw/mlawTransverseIsoYarnB.h
@@ -171,7 +171,9 @@ class mlawTransverseIsoYarnB: public materialLaw
 		            IPVariable *q1,       // internal point will be updated @ time n+1
                             STensor43 &Tangent,
                             const bool stiff,                // if true compute the tangents
-                            STensor43* elasticTangent = NULL) const;
+                            STensor43* elasticTangent = NULL, 
+                            const bool dTangent =false,
+                            STensor63* dCalgdeps = NULL) const;
 
  #endif // SWIG
 };
diff --git a/NonLinearSolver/materialLaw/mlawTransverseIsotropic.cpp b/NonLinearSolver/materialLaw/mlawTransverseIsotropic.cpp
index bd3e22e6b6a62d41d630dc68cb0b31f2e143d62c..b528d08ab570209fcc977de2967bc1649388cebb 100644
--- a/NonLinearSolver/materialLaw/mlawTransverseIsotropic.cpp
+++ b/NonLinearSolver/materialLaw/mlawTransverseIsotropic.cpp
@@ -83,8 +83,16 @@ double mlawTransverseIsotropic::soundSpeed() const
 }
 
 
-void mlawTransverseIsotropic::constitutive(const STensor3& F0,const STensor3& Fn,STensor3 &P,const IPVariable *q0i, IPVariable *q1i,STensor43 &Tangent,
-                                const bool stiff, STensor43* elasticTangent) const
+void mlawTransverseIsotropic::constitutive(const STensor3& F0,
+                                           const STensor3& Fn,
+                                           STensor3 &P,
+                                           const IPVariable *q0i, 
+                                           IPVariable *q1i,
+                                           STensor43 &Tangent,
+                                           const bool stiff, 
+                                           STensor43* elasticTangent, 
+                                           const bool dTangent,
+                                           STensor63* dCalgdeps) const
 {
   const IPTransverseIsotropic *q0 = dynamic_cast<const IPTransverseIsotropic *>(q0i);
   IPTransverseIsotropic *q1 = dynamic_cast<IPTransverseIsotropic *>(q1i);
diff --git a/NonLinearSolver/materialLaw/mlawTransverseIsotropic.h b/NonLinearSolver/materialLaw/mlawTransverseIsotropic.h
index 1b422f4b03cef618a2e95ee0cefff83462080c98..c36bbc9b9095c7df43427de1d951b5d6506618ed 100644
--- a/NonLinearSolver/materialLaw/mlawTransverseIsotropic.h
+++ b/NonLinearSolver/materialLaw/mlawTransverseIsotropic.h
@@ -65,8 +65,11 @@ class mlawTransverseIsotropic : public materialLaw
                             const IPVariable *q0,       // array of initial internal variable
                             IPVariable *q1,             // updated array of internal variable (in ipvcur on output),
                             STensor43 &Tangent,         // constitutive tangents (output)
-                            const bool stiff, STensor43* elasticTangent =NULL           // if true compute the tangents
-                           ) const;
+                            const bool stiff, 
+                            STensor43* elasticTangent =NULL,           // if true compute the tangents, 
+                            const bool dTangent =false,
+                            STensor63* dCalgdeps = NULL
+                            ) const;
  protected:
   virtual double deformationEnergy(const STensor3 &C, const SVector3 &A) const ;
  #endif // SWIG
diff --git a/NonLinearSolver/materialLaw/mlawUMATInterface.cpp b/NonLinearSolver/materialLaw/mlawUMATInterface.cpp
index 0011e6372ad84b2c4a1081d88264503c07cb9deb..41e7699f48a32f612aa4323982815d6ff36c80e6 100644
--- a/NonLinearSolver/materialLaw/mlawUMATInterface.cpp
+++ b/NonLinearSolver/materialLaw/mlawUMATInterface.cpp
@@ -300,8 +300,16 @@ double mlawUMATInterface::soundSpeed() const
 }
 
 
-void mlawUMATInterface::constitutive(const STensor3& F0,const STensor3& Fn,STensor3 &P,const IPVariable *ipvprevi,
-                                      IPVariable *ipvcuri,STensor43 &Tangent,const bool stiff,STensor43* elasticTangent) const
+void mlawUMATInterface::constitutive(const STensor3& F0,
+                                     const STensor3& Fn,
+                                     STensor3 &P,
+                                     const IPVariable *ipvprevi,
+                                     IPVariable *ipvcuri,
+                                     STensor43 &Tangent,
+                                     const bool stiff,
+                                     STensor43* elasticTangent, 
+                                     const bool dTangent,
+                                     STensor63* dCalgdeps) const
 {
   if(elasticTangent!=NULL) Msg::Error(" mlawUMATInterface:: STensor43* elasticTangent not defined");
   const IPUMATInterface *ipvprev = dynamic_cast<const IPUMATInterface *> (ipvprevi);
diff --git a/NonLinearSolver/materialLaw/mlawUMATInterface.h b/NonLinearSolver/materialLaw/mlawUMATInterface.h
index 48ee7155253d6ee2e7d1c1890127f94a3c8ba1f8..f96202ccdd73d32bdaa355a15a0f1c8f33b01bfa 100644
--- a/NonLinearSolver/materialLaw/mlawUMATInterface.h
+++ b/NonLinearSolver/materialLaw/mlawUMATInterface.h
@@ -85,7 +85,9 @@ class mlawUMATInterface : public materialLaw
                             IPVariable *q1,             // updated array of internal variable (in ipvcur on output),
                             STensor43 &Tangent,         // constitutive tangents (output)
                             const bool stiff,            // if true compute the tangents
-                            STensor43* elasticTangent = NULL) const;
+                            STensor43* elasticTangent = NULL, 
+                            const bool dTangent =false,
+                            STensor63* dCalgdeps = NULL) const;
 
   int getNsdv() const { return nsdv;}
 
diff --git a/NonLinearSolver/materialLaw/mlawVUMATinterface.cpp b/NonLinearSolver/materialLaw/mlawVUMATinterface.cpp
index a3e5ad493019b1a32229defdcd5a5977081e2b1a..d5db8839863b886f581c97aca063687cd3873b56 100644
--- a/NonLinearSolver/materialLaw/mlawVUMATinterface.cpp
+++ b/NonLinearSolver/materialLaw/mlawVUMATinterface.cpp
@@ -103,9 +103,16 @@ double mlawVUMATinterface::soundSpeed() const
 }
 
 
-void mlawVUMATinterface::constitutive(const STensor3& F0,const STensor3& Fn,STensor3 &P,const IPVariable *q0i,IPVariable *q1i,STensor43 &Tangent,
-                                const bool stiff,
-			    STensor43* elasticTangent) const
+void mlawVUMATinterface::constitutive(const STensor3& F0,
+                                      const STensor3& Fn,
+                                      STensor3 &P,
+                                      const IPVariable *q0i,
+                                      IPVariable *q1i,
+                                      STensor43 &Tangent,
+                                      const bool stiff,
+			              STensor43* elasticTangent, 
+                                      const bool dTangent,
+                                      STensor63* dCalgdeps) const
 {
   const IPVUMATinterface *q0 = dynamic_cast< const IPVUMATinterface * > (q0i);
   IPVUMATinterface *q1 = dynamic_cast< IPVUMATinterface * > (q1i);
diff --git a/NonLinearSolver/materialLaw/mlawVUMATinterface.h b/NonLinearSolver/materialLaw/mlawVUMATinterface.h
index 9f0405412878b1a5ae7d2e59e3764e74c11e25d3..59f47412d5655847cdcfee4a3dd8ea047db4e929 100644
--- a/NonLinearSolver/materialLaw/mlawVUMATinterface.h
+++ b/NonLinearSolver/materialLaw/mlawVUMATinterface.h
@@ -51,7 +51,9 @@ class mlawVUMATinterface : public materialLaw
                             IPVariable *q1,             // updated array of internal variable (in ipvcur on output),
                             STensor43 &Tangent,         // constitutive tangents (output)
                             const bool stiff ,           // if true compute the tangents
-			    STensor43* elasticTangent = NULL) const;
+			    STensor43* elasticTangent = NULL, 
+                            const bool dTangent =false,
+                            STensor63* dCalgdeps = NULL) const;
   int getNsdv() const { return _nsdv;}
  #endif // SWIG
 };
diff --git a/NonLinearSolver/materialLaw/mlawViscoelastic.cpp b/NonLinearSolver/materialLaw/mlawViscoelastic.cpp
index c7ad9db7b62f210a8712ae2d1d64d1b0d749c14b..13c7f056f8897ec1a11f8cf7d7c2a8d2c6ff140c 100644
--- a/NonLinearSolver/materialLaw/mlawViscoelastic.cpp
+++ b/NonLinearSolver/materialLaw/mlawViscoelastic.cpp
@@ -217,7 +217,16 @@ void mlawViscoelastic::initialKirchhoffStressTensor(const STensor3 &Fn, STensor3
 }
 
 
-void mlawViscoelastic::constitutive(const STensor3& F0,const STensor3& Fn,STensor3 &P, const IPVariable *IPvisprevi,IPVariable *IPvisi, STensor43 &Tangent, const bool stiff,STensor43* elasticTangent) const
+void mlawViscoelastic::constitutive(const STensor3& F0,
+                                    const STensor3& Fn,
+                                    STensor3 &P, 
+                                    const IPVariable *IPvisprevi,
+                                    IPVariable *IPvisi, 
+                                    STensor43 &Tangent, 
+                                    const bool stiff,
+                                    STensor43* elasticTangent, 
+                                    const bool dTangent,
+                                    STensor63* dCalgdeps) const
 {
     IPViscoelastic *IPvis = dynamic_cast<IPViscoelastic *>(IPvisi);
     const IPViscoelastic *IPvisprev=dynamic_cast<const IPViscoelastic *>(IPvisprevi);
diff --git a/NonLinearSolver/materialLaw/mlawViscoelastic.h b/NonLinearSolver/materialLaw/mlawViscoelastic.h
index 67fc285ab1b538adf5a7e1aa0e8e5f75167537dd..01eda5497af28ebbd51767b90a493be391e0714d 100644
--- a/NonLinearSolver/materialLaw/mlawViscoelastic.h
+++ b/NonLinearSolver/materialLaw/mlawViscoelastic.h
@@ -75,7 +75,9 @@ class mlawViscoelastic : public materialLaw
           IPVariable *IPvis,                        // current IP variable
           STensor43 &Tangent,         // constitutive tangents (output)
           const bool stiff,                              // if true compute the tangents
-          STensor43* elasticTangent=NULL)const;
+          STensor43* elasticTangent=NULL, 
+          const bool dTangent =false,
+          STensor63* dCalgdeps = NULL)const;
 
  protected:
 
diff --git a/NonLinearSolver/materialLaw/nonLocalDamageLaw.h b/NonLinearSolver/materialLaw/nonLocalDamageLaw.h
index 891ff4bc43d0e21c407e12187db2df7c64cf1c5b..7e511d2dc06d04e900dbb60df64011639159cfe7 100644
--- a/NonLinearSolver/materialLaw/nonLocalDamageLaw.h
+++ b/NonLinearSolver/materialLaw/nonLocalDamageLaw.h
@@ -45,7 +45,9 @@ class materialLawWithDamage : public materialLaw
                             IPVariable *q1,             // updated array of internal variable (in ipvcur on output),
                             STensor43 &Tangent,         // constitutive tangents (output)
                             const bool stiff,            // if true compute the tangents
-                           STensor43* elasticTangent = NULL) const=0;
+                            STensor43* elasticTangent = NULL, 
+                            const bool dTangentdeps,
+                            STensor63* dCalgdeps = NULL) const=0;
   */
   virtual void constitutive(
                             const STensor3& F0,         // initial deformation gradient (input @ time n)
diff --git a/NonLinearSolver/nlmechsolpy.i b/NonLinearSolver/nlmechsolpy.i
index 33329c3f56b008fd7fd5ce4da51434cc43d63fb0..643dc9ed02db9fe5ce561236988a198a2c55f4d8 100644
--- a/NonLinearSolver/nlmechsolpy.i
+++ b/NonLinearSolver/nlmechsolpy.i
@@ -43,6 +43,9 @@
   #include "CoalescenceLaw.h"
   #include "selectiveUpdate.h"
   #include "voidStateEvolutionLaw.h"
+  #include "MIMOFunction.h"
+  #include "NLSPythonFunction.h"
+  #include "vertexGroupOperation.h"
 %}
 
 %init%{
@@ -94,6 +97,8 @@
 %nodefaultctor LoadConcentrationFactorBasedCoalescenceLaw;
 %nodefaultctor selectiveUpdateBase;
 %nodefaultctor voidStateEvolutionLaw;
+%nodefaultctor MIMOFunction;
+%nodefaultctor vertexGroupOperation;
 
 %include "NonLinearSolverConfig.h"
 %include "simpleFunction.h"
@@ -140,3 +145,6 @@
 %include "CoalescenceLaw.h"
 %include "selectiveUpdate.h"
 %include "voidStateEvolutionLaw.h"
+%include "MIMOFunction.h"
+%include "NLSPythonFunction.h"
+%include "vertexGroupOperation.h"
diff --git a/NonLinearSolver/nlsolver/CMakeLists.txt b/NonLinearSolver/nlsolver/CMakeLists.txt
index 418b3e930875a6211adcb415b4de42a11516e297..678274776c5b2be27ceb33062568f7e376abe186 100644
--- a/NonLinearSolver/nlsolver/CMakeLists.txt
+++ b/NonLinearSolver/nlsolver/CMakeLists.txt
@@ -27,6 +27,8 @@ set(SRC
   endSchemeMonitoring.cpp
   interpolation.cpp
 	selectiveUpdate.cpp
+	MIMOFunction.cpp
+	vertexGroupOperation.cpp
 )
 
 file(GLOB HDR RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.h) 
diff --git a/NonLinearSolver/nlsolver/MIMOFunction.cpp b/NonLinearSolver/nlsolver/MIMOFunction.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..9d51332e52e3bab7906ac6b739c0ce2b4527f0ba
--- /dev/null
+++ b/NonLinearSolver/nlsolver/MIMOFunction.cpp
@@ -0,0 +1,43 @@
+// Description: class of function with multiple input, multiple output
+//
+//
+// Author:  <Van Dung NGUYEN>, (C) 2019
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+
+
+#include "MIMOFunction.h"
+
+LinearMIMOFunction::LinearMIMOFunction(int numR, int numC): MIMOFunction(), _K(numR,numC){};
+void LinearMIMOFunction::setValue(int i, int j, double val)
+{
+  if (i>= _K.size1() or j >= _K.size2())
+  {
+    Msg::Error("wrong input in LinearMIMOFunction::setValue");
+  }
+  _K(i,j) = val;
+}
+
+void LinearMIMOFunction::predict(const fullVector<double>& E1,
+                         const fullVector<double>& other,
+                         fullVector<double>& q1,
+                         fullVector<double>& S,
+                         bool diff,
+                         fullMatrix<double>* DSDE) const
+{
+  if (S.size() != _K.size1())
+  {
+    S.resize(_K.size1());
+  }
+  _K.mult(E1,S);
+  if (diff)
+  {
+    if (DSDE->size1()!= S.size() || DSDE->size2()!=E1.size())
+    {
+      DSDE->resize(S.size(),E1.size());
+    }
+    DSDE->setAll(_K);
+    //DSDE->print("kkkkk");
+  }
+}
diff --git a/NonLinearSolver/nlsolver/MIMOFunction.h b/NonLinearSolver/nlsolver/MIMOFunction.h
new file mode 100644
index 0000000000000000000000000000000000000000..808aa78bc61a232aa3d1fad182f9f039eac4a9e1
--- /dev/null
+++ b/NonLinearSolver/nlsolver/MIMOFunction.h
@@ -0,0 +1,61 @@
+// Description: class of function with multiple input, multiple output
+//
+//
+// Author:  <Van Dung NGUYEN>, (C) 2019
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+
+#ifndef MIMOFUNCTION_H_
+#define MIMOFUNCTION_H_
+
+#ifndef SWIG
+#include "fullMatrix.h"
+#endif // SWIG
+
+class MIMOFunction
+{
+  #ifndef SWIG
+  public:
+    MIMOFunction(){}
+    MIMOFunction(const MIMOFunction& src){}
+    virtual ~MIMOFunction(){}
+
+    virtual MIMOFunction* clone() const = 0;
+    //
+    // function [S,q1,DSDE] = funct(E,other)
+    //  other =  other input parameters than E
+    // output E1- strain, S-stress, DSDE- tangent operator, q1 -history
+    // other and q1 are not necessarily the same size
+    virtual void predict(const fullVector<double>& E1,
+                         const fullVector<double>& other,
+                         fullVector<double>& q1,
+                         fullVector<double>& S,
+                         bool diff,
+                         fullMatrix<double>* DSDE) const = 0;
+  #endif // SWIG
+};
+
+class LinearMIMOFunction : public MIMOFunction
+{
+  #ifndef SWIG
+  fullMatrix<double> _K;
+  #endif // SWIG
+
+  public:
+    LinearMIMOFunction(int numR, int numC);
+    void setValue(int i, int j, double val);
+    #ifndef SWIG
+    LinearMIMOFunction(const LinearMIMOFunction& src): MIMOFunction(src),_K(src._K){}
+    virtual ~LinearMIMOFunction(){}
+    virtual MIMOFunction* clone() const {return new LinearMIMOFunction(*this);};
+    virtual void predict(const fullVector<double>& E1,
+                         const fullVector<double>& other,
+                         fullVector<double>& q1,
+                         fullVector<double>& S,
+                         bool diff,
+                         fullMatrix<double>* DSDE) const;
+    #endif // SWIG
+};
+
+#endif // MIMOFUNCTION_H_
diff --git a/NonLinearSolver/nlsolver/NLSPythonFunction.h b/NonLinearSolver/nlsolver/NLSPythonFunction.h
new file mode 100644
index 0000000000000000000000000000000000000000..b32199b8ea0a8b1412dba06b8e840d5cfa6e4627
--- /dev/null
+++ b/NonLinearSolver/nlsolver/NLSPythonFunction.h
@@ -0,0 +1,238 @@
+//
+// C++ Interface: terms
+//
+// Description: python function
+//
+//
+// Author:  <Van Dung NGUYEN>, (C) 2019
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+#ifndef _NLSPYTHONFUNCTION_
+#define _NLSPYTHONFUNCTION_
+#include "timeFunction.h"
+#include "MIMOFunction.h"
+
+/**
+ * Class for python user defined function
+ * The user has to define in it driver a
+ * def my_function(x,y,z,t,extra=None)
+ *     ...
+ *     return <a float>
+ * where extra is a python tuple that contains
+ * extra python argument for the function
+ */
+ #undef HAVE_DLOPEN
+ #include <Python.h>
+class PythonBCfunctionDouble : public simpleFunctionTime<double>
+{
+ protected:
+  PyObject* _pyFunction;
+  PyObject* _pyArgs; // Assume that is a tuple
+ public:
+  PythonBCfunctionDouble(PyObject* pyfunc, PyObject* args) : simpleFunctionTime<double>(),
+                                                       _pyFunction(pyfunc), _pyArgs(args){}
+ #ifndef SWIG
+  PythonBCfunctionDouble(const PythonBCfunctionDouble &src) : simpleFunctionTime<double>(src),
+                                                  _pyFunction(src._pyFunction),
+                                                  _pyArgs(src._pyArgs){}
+  virtual ~PythonBCfunctionDouble(){}
+  virtual double operator() (double x, double y, double z) const {
+    PyObject* tuple = Py_BuildValue("ddddO",x, y, z, this->time,_pyArgs);
+    PyObject* returnVal = PyObject_Call(_pyFunction,tuple,NULL);
+    return PyFloat_AsDouble(returnVal);
+  }
+ #endif // SWIG
+};
+
+/**
+ * Class for python user defined function
+ * def my_function(input, other)
+ *     ...
+ *     return (output, q1, DoutDint)
+ */
+
+class MIMOFunctionPython : public MIMOFunction
+{
+ protected:
+  PyObject *_pyFunc;
+ public:
+  MIMOFunctionPython(PyObject* pyfunc):MIMOFunction(),_pyFunc(pyfunc){}
+ #ifndef SWIG
+  MIMOFunctionPython(const MIMOFunctionPython &src) : MIMOFunction(src),_pyFunc(src._pyFunc){}
+  virtual ~MIMOFunctionPython(){}
+  virtual MIMOFunction* clone() const {return new MIMOFunctionPython(_pyFunc);};
+  virtual void predict(const fullVector<double>& E1,
+                       const fullVector<double>& other,
+                       fullVector<double>& q1,
+                       fullVector<double>& S,
+                       bool diff,
+                       fullMatrix<double>* DSDE) const
+  {
+    // data size
+    int Esize = E1.size();
+    int Qsize = other.size();
+    //
+    PyObject *pyargsE =  PyList_New(Esize);
+    std::vector<PyObject*> vecEVal(Esize,NULL);
+    for (int i = 0; i < Esize; i++)
+    {
+      vecEVal[i] = PyFloat_FromDouble(E1(i));
+      if (PyList_SetItem(pyargsE, i, vecEVal[i])!=0)
+      {
+        Msg::Error("cannot insert python object");
+        Msg::Exit(0);
+      }
+    }
+    PyObject *pyargsQ =  PyList_New(Qsize);
+    std::vector<PyObject*> vecQVal(Qsize,NULL);
+    for (int i = 0; i < Qsize; i++)
+    {
+      vecQVal[i] = PyFloat_FromDouble(other(i));
+      if (PyList_SetItem(pyargsQ, i, vecQVal[i])!=0)
+      {
+        Msg::Error("cannot insert python object");
+        Msg::Exit(0);
+      }
+    }
+
+    PyObject *pArgTuple = PyTuple_New(2);
+    PyTuple_SetItem(pArgTuple, 0, pyargsE);
+    PyTuple_SetItem(pArgTuple, 1, pyargsQ);
+    // call function
+    PyObject *result = PyObject_CallObject(_pyFunc, pArgTuple);
+    if (!result)
+    {
+      Msg::Error("python function cannot be called");
+      Msg::Exit(0);
+    }
+    else if (!PyTuple_Check(result))
+    {
+      Msg::Error("output of python must be a tuple");
+      Msg::Exit(0);
+    }
+
+    if (PyTuple_Size(result)!=3)
+    {
+      Msg::Error("output of python must be a tuple of 3 elements");
+      Msg::Exit(0);
+    }
+
+    // first result
+    PyObject* out1 = PyTuple_GetItem(result,0);
+    if (!PyList_Check(out1))
+    {
+      Msg::Error("first output is not a python list");
+      Msg::Exit(0);
+    }
+    int out1Size= PyList_Size(out1);
+    if (S.size() != out1Size)
+    {
+      S.resize(out1Size);
+    }
+    for (int i=0; i< out1Size; i++)
+    {
+      PyObject* val= PyList_GetItem(out1,i);
+      if (!val)
+      {
+        Msg::Error("cannot get value from list");
+        Msg::Exit(0);
+      }
+      S(i)= PyFloat_AsDouble(val);
+    }
+    //S.print("output vector");
+
+    // second result
+    PyObject* out2 = PyTuple_GetItem(result,1);
+    if (!PyList_Check(out2))
+    {
+      Msg::Error("second output is not a python list");
+      Msg::Exit(0);
+    }
+    int out2Size  =PyList_Size(out2);
+    if (q1.size() != out2Size)
+    {
+      q1.resize(out2Size);
+    }
+    for (int i=0; i< out2Size; i++)
+    {
+      PyObject* val= PyList_GetItem(out2,i);
+      if (!val)
+      {
+        Msg::Error("cannot get value from list");
+        Msg::Exit(0);
+      }
+      q1(i)= PyFloat_AsDouble(val);
+    }
+
+    if (diff)
+    {
+      // third result
+      PyObject* out3 = PyTuple_GetItem(result,2);
+      if (!PyList_Check(out3))
+      {
+        Msg::Error("third output is not a python list");
+        Msg::Exit(0);
+      }
+      if (DSDE->size1()!= out1Size or DSDE->size2()!=Esize)
+      {
+        DSDE->resize(out1Size,Esize);
+      }
+      for (int i=0; i <out1Size; i++)
+      {
+        PyObject* row= PyList_GetItem(out3,i);
+        if (row)
+        {
+          if (!PyList_Check(row))
+          {
+            Msg::Error("third output is not a python list of list");
+            Msg::Exit(0);
+          }
+          for (int j=0; j< Esize; j++)
+          {
+            PyObject* val= PyList_GetItem(row,j);
+            if (val)
+            {
+              (*DSDE)(i,j) =PyFloat_AsDouble(val);
+            }
+            else
+            {
+              Msg::Error("cannot get item from list");
+              Msg::Exit(0);
+            }
+          }
+        }
+        else
+        {
+          Msg::Error("cannot get row from python list");
+          Msg::Exit(0);
+        }
+      }
+      //DSDE->print("DoDi");
+    }
+
+    Py_DECREF(result);
+    Py_DECREF(pArgTuple);
+    Py_DECREF(pyargsE);
+    if (Qsize > 0)
+    {
+      Py_DECREF(pyargsQ);
+    }
+
+    for (int i=0; i< Esize; i++)
+    {
+      Py_DECREF(vecEVal[i]);
+    }
+    for (int i=0; i< Qsize; i++)
+    {
+      Py_DECREF(vecQVal[i]);
+    }
+  }
+ #endif // SWIG
+
+};
+
+
+#endif //  _NLSPYTHONFUNCTION_
+
diff --git a/NonLinearSolver/nlsolver/nonLinearMechSolver.cpp b/NonLinearSolver/nlsolver/nonLinearMechSolver.cpp
index d013cd69c2d009faa08edd6d7fa95cc217b0fb8e..1c6c1621305d53d2c27f93791a18242893b35479 100644
--- a/NonLinearSolver/nlsolver/nonLinearMechSolver.cpp
+++ b/NonLinearSolver/nlsolver/nonLinearMechSolver.cpp
@@ -28,7 +28,6 @@
 #include "MPoint.h"
 #include "ipstate.h"
 #include "ipField.h"
-#include "timeFunction.h"
 #include "GModel.h"
 #include "explicitHulbertChungPETSc.h"
 #include "explicitHulbertChungBLAS.h"
@@ -41,7 +40,7 @@
 #include "solverAlgorithms.h"
 #include "quadratureRules.h"
 #include "MPoint.h"
-#include "timeFunction.h"
+#include "NLSPythonFunction.h"
 #include "pbcDofManager.h"
 #include "staticDofManager.h"
 #include "dofManagerMultiSystems.h"
@@ -183,6 +182,8 @@ _enumMinus(0),
 _enumPlus(0),
 _gnum(0),
 
+_sucessMicroSolve(false),
+
 _macroTime(1.),
 _macroTimeStep(1.),
 _macroStep(1),
@@ -335,7 +336,7 @@ nonLinearMechSolver::nonLinearMechSolver(const nonLinearMechSolver& src):
 _dim(src._dim), _tag(src._tag),
 _mpiUserDom(src._mpiUserDom),
 _workingRank(src._workingRank), // current working rank
-_mpiDofManager(src._mpiDofManager), // true -> parallelization of dofManager. 
+_mpiDofManager(src._mpiDofManager), // true -> parallelization of dofManager.
 _isPartitioned(src._isPartitioned), // true if FE mesh is partitioned
   // the mapRank is created from number of proc available and number of mesh partion,
 _mapRanks(),
@@ -434,6 +435,8 @@ _enumMinus(0),
 _enumPlus(0),
 _gnum(0),
 
+_sucessMicroSolve(false),
+
 _macroTime(1.),
 _macroTimeStep(1.),
 _macroStep(1),
@@ -522,7 +525,7 @@ _elasticDPDFTangentFile(NULL)
     {
       add = true;
     }
-      
+
     if (add)
     {
       addDomain(src.domainVector[i]->clone());
@@ -561,7 +564,7 @@ nonLinearMechSolver* nonLinearMechSolver::clone(const std::string mshFile, int t
     {
       add = true;
     }
-      
+
     if (add)
     {
       sv->addDomain(domainVector[i]->clone());
@@ -576,9 +579,9 @@ nonLinearMechSolver* nonLinearMechSolver::clone(const std::string mshFile, int t
   return sv;
 };
 
-nonLinearMechSolver* nonLinearMechSolver::clone(int tag, bool isParallel, 
-                      const std::string mshFile, 
-                      std::vector<partDomain*>& allDom, 
+nonLinearMechSolver* nonLinearMechSolver::clone(int tag, bool isParallel,
+                      const std::string mshFile,
+                      std::vector<partDomain*>& allDom,
                       std::vector<materialLaw*>& allMat) const
 {
   nonLinearMechSolver* sv = new nonLinearMechSolver(tag,isParallel);
@@ -598,7 +601,7 @@ nonLinearMechSolver* nonLinearMechSolver::clone(int tag, bool isParallel,
   copyBCsToOtherSolver(sv);
   return sv;
 }
-  
+
 void nonLinearMechSolver::copyOptionsToOtherSolver(nonLinearMechSolver* sv) const
 {
   sv->whatSolver = whatSolver; //  Solver used to solve
@@ -610,40 +613,40 @@ void nonLinearMechSolver::copyOptionsToOtherSolver(nonLinearMechSolver* sv) cons
 
   /*FOR EXPLICIT SCHEME*/
   sv->_explicitOpts = _explicitOpts;
-  
+
   /* FOR MULTI SYSTEM */
   /* MultiSystems solve */
   sv->_vcompBySys = _vcompBySys;
   sv->_vschemeBySys = _vschemeBySys;
-  
+
   /*FOR QUASI-STATIC AND IMPLICIT SCHEMES*/
-  sv->_numstepImpl = _numstepImpl; // Number of steps 
+  sv->_numstepImpl = _numstepImpl; // Number of steps
   sv->_tol = _tol;
   sv->_absTol = _absTol; // relative and absolute tolerance for iteration
   sv->_stiffEstimation = _stiffEstimation;
   sv->_stiffnessModification = _stiffnessModification; // true if recalculate stiffness matrix
   sv->_iterativeNR = _iterativeNR; // true if using iterative procedure
   sv->_lineSearch = _lineSearch;
-  
+
   /*FOR CH DYNAMIC SCHEME*/
   sv->_implicitOpts = _implicitOpts;
-  
+
   /*FOR PATH FOLLOWING*/
   sv->_pathFollowing = _pathFollowing; // true to activate path following
   //_pathFollowingMethod holds the method of path following, 0- GLOBAL_ARC_LENGTH_BASED , 1 - LOCAL_BASED, and 2- HYPERELLIPTIC_BASED
-  //GLOBAL_ARC_LENGTH_BASED based on the general path following constraint type 
+  //GLOBAL_ARC_LENGTH_BASED based on the general path following constraint type
   //
   //LOCAL_BASED is a combination of LOAD CONTROL+ DISSIPATION CONTROL after the onset of dissipation
   //
   //HYPERELLIPTIC_BASED uses several particular DOFs insteads of all DOF used in GLOBAL_ARC_LENGTH_BASED to build the path following constraint
-  // 
-  sv->_pathFollowingMethod = _pathFollowingMethod; 
+  //
+  sv->_pathFollowingMethod = _pathFollowingMethod;
 
-  // if _pathFollowingMethod=GLOBAL_ARC_LENGTH_BASED or HYPERELLIPTIC_BASED is used, 
+  // if _pathFollowingMethod=GLOBAL_ARC_LENGTH_BASED or HYPERELLIPTIC_BASED is used,
   sv->_macroControlTypePathFollowing = _macroControlTypePathFollowing; // control type
   sv->_correctionMethodPathFollowing = _correctionMethodPathFollowing; // correction method
-  sv->_tranversalCriterionPathFollowing = _tranversalCriterionPathFollowing; // method to correctly estimate load paramater in the predictor of path following constrain as two solutions exists 
-  sv->_solverTypePathFollowing = _solverTypePathFollowing; // solve method two use, 
+  sv->_tranversalCriterionPathFollowing = _tranversalCriterionPathFollowing; // method to correctly estimate load paramater in the predictor of path following constrain as two solutions exists
+  sv->_solverTypePathFollowing = _solverTypePathFollowing; // solve method two use,
   sv->_pathFollowingEqRatio = _pathFollowingEqRatio; // equa ratio
   sv->_hyperellipticControlComp = _hyperellipticControlComp; // comp used in hyperelliptic control
   //
@@ -653,7 +656,7 @@ void nonLinearMechSolver::copyOptionsToOtherSolver(nonLinearMechSolver* sv) cons
   sv->_pathFollowingIncrementType = _pathFollowingIncrementType;
   sv->_pathFollowingLocation = _pathFollowingLocation;
   //
-  
+
   /*TIME STEP AND PATHFOLLOWING STEP MANAGEMENT*/
   // time step adaptation if solver fails, always consider
   sv->_maxNRite = _maxNRite; // if this number of iteration is reached the time step is reduce
@@ -668,13 +671,13 @@ void nonLinearMechSolver::copyOptionsToOtherSolver(nonLinearMechSolver* sv) cons
   sv->_minimalTimeStep = _minimalTimeStep; // minimal time step
   sv->_numNROptimal = _numNROptimal; // num optimal
   sv->_expNROptimal = _expNROptimal;
-  
+
   // for path following increment (arc-length or local == dissipation increment)
   sv->_localStep = _localStep; // to local cr control
   sv->_localStepPrev = _localStepPrev;
   sv->_localStepMinimal = _localStepMinimal;
   sv->_localStepMaximal = _localStepMaximal;
-  
+
   sv->_arcLengthStep = _arcLengthStep; // for arc-length control
   sv->_arcLengthStepPrev = _arcLengthStepPrev;
   sv->_arcLengthStepMinimal = _arcLengthStepMinimal;
@@ -688,7 +691,7 @@ void nonLinearMechSolver::copyOptionsToOtherSolver(nonLinearMechSolver* sv) cons
   //std::string _restartMshFileName;
   //bool _resetRestart; //to avoid restart when shitfing schemes
   //bool _disableResetRestart; //to allow restat in battery only
-  
+
   /*FOR CRACK*/
    // physical entities that are initialy broken
   sv->initbrokeninter = initbrokeninter;
@@ -705,7 +708,7 @@ void nonLinearMechSolver::copyOptionsToOtherSolver(nonLinearMechSolver* sv) cons
     sv->postproFragment(_fragmentationName);
   }
 
- 
+
   /* FOR ARCHIVING*/
   // std vector to archive a node displacement
   //std::vector<unknownField::archiveNode> anoded;
@@ -714,8 +717,8 @@ void nonLinearMechSolver::copyOptionsToOtherSolver(nonLinearMechSolver* sv) cons
     const unknownField::archiveNode& ar = *it;
     sv->anoded.emplace_back(ar.physnum,ar.nodenum,ar._comp,ar.wc,ar.nstep);
   };
-  
-  // std::vector to archive a force 
+
+  // std::vector to archive a force
   //std::vector<archiveForce> vaf;
   for (std::vector<archiveForce>::const_iterator it = vaf.begin(); it != vaf.end(); it++)
   {
@@ -741,9 +744,9 @@ void nonLinearMechSolver::copyOptionsToOtherSolver(nonLinearMechSolver* sv) cons
   // for archiving energy and fracture energy
   sv->_energyComputation = _energyComputation;  // equal to 0 if no energy is saved; >0 if energy is saved with _energyComputation as interval step of archiving
   sv->_fractureEnergyComputation = _fractureEnergyComputation; // equal to 0 if no energy is saved; >0 if energy is saved with _energyComputation as interval step of archiving
-  
 
-  /*FOR VIEW*/ 
+
+  /*FOR VIEW*/
   // view of unknown --> disp file
   //std::vector<nlsField::dataBuildView> unknownView;
   for (std::vector<nlsField::dataBuildView>::const_iterator it = unknownView.begin(); it!= unknownView.end(); it++)
@@ -758,7 +761,7 @@ void nonLinearMechSolver::copyOptionsToOtherSolver(nonLinearMechSolver* sv) cons
     const nlsField::dataBuildView& ar = *it;
     sv->ipView.emplace_back(ar.viewname,ar.comp,ar.ev,ar.nbstepArch);
   }
-  // view of energy field --> energy file, but it is not 
+  // view of energy field --> energy file, but it is not
   //std::vector<nlsField::dataBuildView> energyView;
   for (std::vector<nlsField::dataBuildView>::const_iterator it = energyView.begin(); it!= energyView.end(); it++)
   {
@@ -766,7 +769,7 @@ void nonLinearMechSolver::copyOptionsToOtherSolver(nonLinearMechSolver* sv) cons
     sv->energyView.emplace_back(ar.viewname,ar.comp,ar.ev,ar.nbstepArch);
   }
   sv->nsba=nsba; // number of step between two view
- 
+
   /* SWITCH scheme data */
   sv->_previousScheme= _previousScheme; // to known the previous used scheme for switch
   //bool _previousInit; // To known if the initialization as already be made by an other scheme
@@ -801,7 +804,7 @@ void nonLinearMechSolver::copyOptionsToOtherSolver(nonLinearMechSolver* sv) cons
   {
     sv->setGlobalErosionCheck(true,_erosionGlobalCriterion);
   }
-  
+
   /*EIGEN SOLVER*/
   sv->_eigOpts = _eigOpts;
   //std::vector<nlsField::dataBuildView> _eigview;
@@ -810,7 +813,7 @@ void nonLinearMechSolver::copyOptionsToOtherSolver(nonLinearMechSolver* sv) cons
     const nlsField::dataBuildView& ar = *it;
     sv->_eigview.emplace_back(ar.viewname,ar.comp,ar.ev,ar.nbstepArch);
   }
-  
+
   /*DEFORMED MESH TO FILE*/
   sv->_isWriteDeformedMeshToFile = _isWriteDeformedMeshToFile; // write deformed mesh to file
 
@@ -820,8 +823,9 @@ void nonLinearMechSolver::copyOptionsToOtherSolver(nonLinearMechSolver* sv) cons
   sv->_enumMinus = _enumMinus;
   sv->_enumPlus = _enumPlus;
   sv->_gnum =_gnum;
-  
-  
+
+  sv->_sucessMicroSolve = _sucessMicroSolve;
+
   // time and time step
   sv->_macroTimeStep = _macroTimeStep; // for law which works on increment. (Use only in so no getTimeStep function)
   sv->_macroTime = _macroTime; // To save results vs time
@@ -832,8 +836,8 @@ void nonLinearMechSolver::copyOptionsToOtherSolver(nonLinearMechSolver* sv) cons
   sv->_controlType = _controlType;
   // micro flag--> true if microsolver is used
   sv->_microFlag = _microFlag;
-  sv->_multiscaleFlag = _multiscaleFlag; // to know if a multiscale analysis is performed, to be true with both micro and marco solver 
-  
+  sv->_multiscaleFlag = _multiscaleFlag; // to know if a multiscale analysis is performed, to be true with both micro and marco solver
+
   //stress flag and tangent flag
   sv->_stressflag = _stressflag; // true if homogenized stress is estimated
   sv->_tangentflag = _tangentflag; // true if homogenizd tangnent is estimated
@@ -853,7 +857,7 @@ void nonLinearMechSolver::copyOptionsToOtherSolver(nonLinearMechSolver* sv) cons
   sv->_rho = _rho;  // homogenized density
   sv->_rveVolume = _rveVolume; // rve volume
 
-  
+
   sv->_damageIsBlocked = _damageIsBlocked;
   sv->_solverIsBroken = _solverIsBroken;
   sv->_maximalLostEllipticityCriterion = _maximalLostEllipticityCriterion; // maximal value
@@ -862,7 +866,7 @@ void nonLinearMechSolver::copyOptionsToOtherSolver(nonLinearMechSolver* sv) cons
   //
   sv->_failureBCIsSwitched = _failureBCIsSwitched; // true if FailureBC is switsched after failure,
   sv->_failureBasedOnPreviousState = _failureBasedOnPreviousState;
-  sv->_GModelIsRotated = _GModelIsRotated; 
+  sv->_GModelIsRotated = _GModelIsRotated;
   sv->_checkFailureOnset = _checkFailureOnset; //
   sv->_checkWithNormal = _checkWithNormal; //
   sv->_damageToCohesiveJump = _damageToCohesiveJump; // true if extracting cohsive law
@@ -898,7 +902,7 @@ void nonLinearMechSolver::copyBCsToOtherSolver(nonLinearMechSolver* sv) const
     neu._NeumannBCType = bc._NeumannBCType;
     neu._f= bc._f;
     neu._comp=bc._comp;
-    
+
     if(neu.onWhat==nonLinearBoundaryCondition::ON_VERTEX)
     {
       neu.g = new groupOfElements (0, neu._tag);
@@ -932,7 +936,7 @@ void nonLinearMechSolver::copyBCsToOtherSolver(nonLinearMechSolver* sv) const
     diri._comp = bc._comp;
     diri._f = bc._f;
     diri._mycondition = bc._mycondition;
-    
+
     if(diri.onWhat==nonLinearBoundaryCondition::ON_VERTEX)
     {
       diri.g = new groupOfElements (0, diri._tag);
@@ -953,7 +957,7 @@ void nonLinearMechSolver::copyBCsToOtherSolver(nonLinearMechSolver* sv) const
     {
       diri.g = new groupOfElements (3, diri._tag);
     }
-    
+
   }
   // all periodic groups
   //std::list<nonLinearPeriodicBCBetweenTwoGroups> allPeriodic;
@@ -978,7 +982,7 @@ void nonLinearMechSolver::copyBCsToOtherSolver(nonLinearMechSolver* sv) const
       pbc.g1 = new groupOfElements (2, pbc.phys1);
       pbc.g2 = new groupOfElements (2, pbc.phys2);
     }
-    
+
     groupOfElements grv1(0,pbc.physVer1);
     groupOfElements grv2(0,pbc.physVer2);
     if (grv1.vsize() > 0 and grv2.vsize() > 0)
@@ -1014,7 +1018,7 @@ void nonLinearMechSolver::copyBCsToOtherSolver(nonLinearMechSolver* sv) const
       pbc.g1 = new groupOfElements (2, pbc.phys1);
       pbc.g2 = new groupOfElements (2, pbc.phys2);
     }
-    
+
     groupOfElements grv1(0,pbc.physVer1);
     groupOfElements grv2(0,pbc.physVer2);
     if (grv1.vsize() > 0 and grv2.vsize() > 0)
@@ -1039,7 +1043,7 @@ void nonLinearMechSolver::copyBCsToOtherSolver(nonLinearMechSolver* sv) const
     sameDispBC.comp = bc.comp;
     sameDispBC.tagRoot = bc.tagRoot;
     sameDispBC.fac = bc.fac;
-  
+
     sameDispBC.gRoot = new groupOfElements(0,sameDispBC.tagRoot);
     if(sameDispBC.onWhat==nonLinearBoundaryCondition::ON_VERTEX)
     {
@@ -1058,7 +1062,7 @@ void nonLinearMechSolver::copyBCsToOtherSolver(nonLinearMechSolver* sv) const
       sameDispBC.g = new groupOfElements(3,sameDispBC._tag);
     }
   }
-  
+
   // all samedisp bc between two groups
   //std::list<nonLinearSameDisplacementBCBetweenTwoGroups> allSameDispBetweenTwoGroups;
   for (std::list<nonLinearSameDisplacementBCBetweenTwoGroups>::const_iterator it = allSameDispBetweenTwoGroups.begin(); it!= allSameDispBetweenTwoGroups.end(); it++)
@@ -1087,14 +1091,14 @@ void nonLinearMechSolver::copyBCsToOtherSolver(nonLinearMechSolver* sv) const
       sameDispBC.g1 = new groupOfElements(2,sameDispBC.phys1);
       sameDispBC.g2 = new groupOfElements(2,sameDispBC.phys2);
     }
-  
+
   }
   // fix on face
   //std::list<nonLinearFixOnFaceBC> allFixAllFace;
   for (std::list<nonLinearFixOnFaceBC>::const_iterator it = allFixAllFace.begin(); it != allFixAllFace.end(); it++)
   {
     const nonLinearFixOnFaceBC& bc = *it;
-    
+
     sv->allFixAllFace.emplace_back(bc.A,bc.B,bc.C,bc.D);
     nonLinearFixOnFaceBC& fixBC = sv->allFixAllFace.back();
     fixBC.onWhat = bc.onWhat;
@@ -1127,7 +1131,7 @@ void nonLinearMechSolver::copyBCsToOtherSolver(nonLinearMechSolver* sv) const
     uc._tag = bc._tag;
     uc._comp=bc._comp;
     uc._tag=bc._tag;
-    
+
     if (uc.onWhat == nonLinearBoundaryCondition::ON_VERTEX)
     {
       uc.g = new groupOfElements (0, uc._tag);
@@ -1174,7 +1178,7 @@ void nonLinearMechSolver::copyBCsToOtherSolver(nonLinearMechSolver* sv) const
   for (std::list<initialCondition>::const_iterator it = allinitial.begin(); it!= allinitial.end(); it++)
   {
     const initialCondition& bc = *it;
-    
+
     sv->allinitial.emplace_back(bc._comp,bc._mycondition);
     initialCondition& initc = sv->allinitial.back();
     initc.onWhat = bc.onWhat;
@@ -1214,27 +1218,27 @@ void nonLinearMechSolver::copyBCsToOtherSolver(nonLinearMechSolver* sv) const
     const nonLinearNeumannBC& bc = *it;
     sv->allTheta.emplace_back();
     nonLinearNeumannBC& neu = sv->allTheta.back();
-    
+
     neu._tag = bc._tag;
     neu._comp = bc._comp;
     neu.onWhat = nonLinearBoundaryCondition::UNDEF;
     neu.g = new groupOfElements(1,neu._tag);
     neu._f = bc._f;
   }
-  
+
   // dirichlet BC on rigid surface (prescribed the motion of gravity center)
   //std::list<rigidContactBC> allContactBC;
   for (std::list<rigidContactBC>::const_iterator it = allContactBC.begin(); it != allContactBC.end(); it++)
   {
     const rigidContactBC& bc = *it;
-    
+
     sv->allContactBC.emplace_back(bc._tag);
     rigidContactBC& diri = sv->allContactBC.back();
     diri.onWhat = nonLinearBoundaryCondition::RIGIDCONTACT;
     diri._comp = bc._comp;
     diri._f = bc._f;
   };
-  
+
   //micro BC
   if (_microBC)
   {
@@ -1965,6 +1969,7 @@ void nonLinearMechSolver::init(){
   {
     this->initArchiveForce();
     this->initPathFollowingArchiving();
+    this->initArchiveInternalForce();
   }
   else
   {
@@ -1983,6 +1988,11 @@ void nonLinearMechSolver::init(){
       }
       this->initArchiveForce();
     }
+    for (std::list<archiveInternalForce>::iterator it = vafIntenal.begin(); it!= vafIntenal.end(); it++)
+    {
+      it->clear();
+    }
+    this->initArchiveInternalForce();
 
     for (std::list<IntegralVolume>::iterator it = _dataVolumeIntegral.begin(); it!= _dataVolumeIntegral.end(); it++)
     {
@@ -2003,7 +2013,7 @@ void nonLinearMechSolver::moveFiles(const std::string &dirName, const std::strin
     if(Msg::GetCommSize() > 1)
     {
        // get the host name of each rank
-       const char* myhostname = GetEnvironmentVar("HOSTNAME");
+       const char* myhostname = (GetEnvironmentVar("HOSTNAME")).c_str();
        if(myhostname==NULL)
        {
          //Msg::Info("Hostname does not exist use rank");
@@ -2141,6 +2151,8 @@ void nonLinearMechSolver::initAllBCsOnDofs(){
 		this->applyFixOnFace();
     //periodic BC
 		this->applyPBCBetweenTwoGroups();
+    
+    this->applyLinearConstraintBetweenTwoGroups();
 
 		// for pbc
 		if (_testFlag){
@@ -2306,6 +2318,7 @@ void nonLinearMechSolver::endOfScheme(const double curtime, const int step)
   _energField->archive(curtime,step,true);
 
   forceArchiving(curtime,step,true);
+  internalForceArchiving(curtime,step,true);
   this->IPVolumeIntegralArchiving(curtime,step,true);
   this->IPDataOnPhysicalArchiving(curtime,step,true);
 
@@ -2403,6 +2416,7 @@ void nonLinearMechSolver::oneStepPostSolve(const double curtime, const int numst
 
   this->crackTracking(curtime);
   this->forceArchiving(curtime,numstep,false);   // Edge force value;
+  this->internalForceArchiving(curtime,numstep,false);
   this->pathFollowingArchiving(curtime,numstep);
 
   this->IPVolumeIntegralArchiving(curtime,numstep,false);
@@ -2662,6 +2676,104 @@ void nonLinearMechSolver::restartDefoDefoContact()
   }
 }
 
+void nonLinearMechSolver::initArchiveInternalForce()
+{
+  for (std::list<archiveInternalForce>::iterator itf = vafIntenal.begin(); itf != vafIntenal.end(); itf++)
+  {
+    archiveInternalForce& af =  *itf;
+    printf("init archiving internal force at physical %d dim %d\n",af.phys,af.dim);
+    groupOfElements g(af.dim, af.phys);
+    if (g.vsize() > 0)
+    {
+      af.openFile(getFileSavingPrefix());
+      fprintf(af.FP,"Time");
+    }
+    for (groupOfElements::vertexContainer::const_iterator itv = g.vbegin(); itv != g.vend(); itv++)
+    {
+      MVertex* v  = *itv;
+      std::map<archiveInternalForce::elementDomain,int>& sharedElements = af.sharedElements[v->getNum()];
+      fprintf(af.FP,";F_%d_X;F_%d_Y;F_%d_Z",v->getNum(),v->getNum(),v->getNum());
+      
+      for (int i=0; i< domainVector.size(); i++)
+      {
+        partDomain* dom = domainVector[i];
+        for (groupOfElements::elementContainer::iterator ite = dom->g_cbegin(); ite != dom->g_cend(); ite++)
+        {
+          MElement* e = *ite;
+          for (int iv=0; iv < e->getNumVertices(); iv++)
+          {
+            if (e->getVertex(iv)->getNum() == v->getNum())
+            {
+              sharedElements.insert(std::pair<archiveInternalForce::elementDomain,int>(archiveInternalForce::elementDomain(dom,e),iv));
+            }
+          } 
+        }
+      }
+
+    }
+    if (g.vsize() > 0)
+    {
+      fprintf(af.FP,"\n");
+    }
+  }
+}
+
+void nonLinearMechSolver::internalForceArchiving(const double curtime,const int numstep, const bool forceSave)
+{
+  for (std::list<archiveInternalForce>::iterator itf = vafIntenal.begin(); itf != vafIntenal.end(); itf++)
+  {
+    archiveInternalForce& af =  *itf;
+    if (numstep > af.lastSaveStep)
+    {
+      if((numstep%(af.nstep)==0 or forceSave))
+      {
+        af.lastSaveStep = numstep;
+        fprintf(af.FP,"%e",curtime);
+        fprintf(af.FPTotal,"%e",curtime);
+        // getData
+        double FXtol = 0.;
+        double FYtol = 0.;
+        double FZtol = 0.;
+        for (std::map<int,std::map<archiveInternalForce::elementDomain,int> >::iterator its = af.sharedElements.begin(); its != af.sharedElements.end(); its++)
+        {
+          double FX(0.), FY(0.), FZ(0.);
+          int vnum = its->first;
+          std::map<archiveInternalForce::elementDomain,int>&  eleDom = its->second;
+          for (std::map<archiveInternalForce::elementDomain,int>::iterator iteled = eleDom.begin(); iteled != eleDom.end(); iteled++)
+          {
+            partDomain* dom = iteled->first.dom;
+            MElement* ele = iteled->first.ele;
+            int vertexPos = iteled->second;
+            
+            std::vector<Dof> R;
+            dom->getFunctionSpace()->getKeys(ele,R);
+            IntPt *GP;
+            int npts = dom->getBulkGaussIntegrationRule()->getIntPoints(ele, &GP);
+            
+            fullVector<double> val;
+            dom->getLinearBulkTerm()->get(ele,npts,GP,val);
+            
+            int nbFF = ele->getNumShapeFunctions();
+            FX += val(vertexPos);
+            FY += val(vertexPos+nbFF);
+            FZ += val(vertexPos+2*nbFF);
+          }
+          
+          FXtol += FX;
+          FYtol += FY;
+          FZtol += FZ;
+          //printf("internal force at node %d is FX = %e FY = %e FZ = %e\n",vnum,FX,FY,FZ);
+          fprintf(af.FP,";%e;%e;%e",FX,FY,FZ);
+        }
+        fprintf(af.FP,"\n");
+        fflush(af.FP);
+        fprintf(af.FPTotal,";%e;%e;%e\n",FXtol,FYtol,FZtol);
+        fflush(af.FPTotal);
+      }
+    }
+  }
+};
+
 
 std::string nonLinearMechSolver::getFileSavingPrefix() const
 {
@@ -5420,6 +5532,26 @@ void nonLinearMechSolver::blastPressureBC(const int numphys,const double p0,cons
   this->blastPressureBC("Face",numphys,p0,p1,plexp,t0,t1);
 };
 
+void nonLinearMechSolver::archivingInternalForceOnPhysicalGroup(const std::string onwhat, const int numphys,const int nstep)
+{
+  static std::string node("Node");
+  static std::string edge("Edge");
+  static std::string face("Face");
+  static std::string volu("Volume");
+  int dim=0;
+  if(onwhat == node )
+    dim = 0;
+  else if(onwhat == edge)
+    dim = 1;
+  else if(onwhat == face)
+    dim = 2;
+  else if(onwhat == volu)
+    dim = 3;
+  int ns = nstep;
+  if (nstep <1) ns = 1;
+  vafIntenal.emplace_back(numphys,dim,ns);
+}
+
 void nonLinearMechSolver::archivingForceOnPhysicalGroup(const std::string onwhat, const int numphys, const int comp,const int nstep){
   // get the node of the edge
   static std::string node("Node");
@@ -5843,12 +5975,88 @@ void nonLinearMechSolver::constraintBC(std::string onwhat, const int numphys, co
     uc.g = new groupOfElements(3, numphys);
     uc.onWhat=nonLinearBoundaryCondition::ON_VOLUME;
   }
-  else Msg::Error("Impossible to prescribe a constraint on a %s\n",onwhat.c_str());
+  else Msg::Error("Impossible to prescribe a constraint on a %s in constraintBC\n",onwhat.c_str());
   uc._comp=comp;
   uc._tag=numphys;
 
 }
 
+void nonLinearMechSolver::linearConstraintBCBetweenTwoGroups(std::string onwhat, const int physMater, const int physSlave, const int comp, const double slFactor,
+                                                    const linearCombinationOfVertices* rh,
+                                                    const vertexGroupOperation* op,
+                                                    const setInt* exclVertices)
+{
+  Msg::Info("linear constraint BC comp %d on physical %d physical %d",comp,physMater,physSlave);
+  allLinearConstraintBC.emplace_back();
+  
+  nonLinearLinearConstraintBCBetweenTwoGroups& bc = allLinearConstraintBC.back();
+  
+  if(onwhat=="Node"){
+    bc.gMaster = new groupOfElements (0, physMater);
+    if (physSlave > 0)
+      bc.gSlave = new groupOfElements (0, physSlave);
+    else
+      bc.gSlave = new groupOfElements ();
+    bc.onWhat=nonLinearBoundaryCondition::ON_VERTEX;
+  }
+  else if(onwhat=="Edge"){
+    bc.gMaster = new groupOfElements (1, physMater);
+    if (physSlave > 0)
+      bc.gSlave = new groupOfElements (1, physSlave);
+    else
+      bc.gSlave = new groupOfElements ();
+    bc.onWhat=nonLinearBoundaryCondition::ON_EDGE;
+  }
+  else if(onwhat=="Face"){
+    bc.gMaster = new groupOfElements (2, physMater);
+    if (physSlave > 0)
+      bc.gSlave = new groupOfElements (2, physSlave);
+    else
+      bc.gSlave = new groupOfElements ();
+    bc.onWhat=nonLinearBoundaryCondition::ON_FACE;
+  }
+  else if(onwhat=="Volume"){
+    bc.gMaster = new groupOfElements (3, physMater);
+    if (physSlave > 0)
+      bc.gSlave = new groupOfElements (3, physSlave);
+    else
+      bc.gSlave = new groupOfElements ();
+    bc.onWhat=nonLinearBoundaryCondition::ON_VOLUME;
+  }
+  else Msg::Error("Impossible to prescribe a constraint on a %s in linearConstraintBCBetweenTwoGroups\n",onwhat.c_str());
+  
+  bc.comp = comp;
+  if (rh !=NULL)
+  {
+    bc.rightHandSide = rh->clone();
+  }
+  else
+  {
+    Msg::Error("linearCombinationOfVertices must be set");
+    Msg::Exit(0);
+  }
+  if (op!=NULL)
+  {
+    bc.vgOperation = op->clone();
+  }
+  else
+  {
+    bc.vgOperation = new vertexGroupOperation_trivial();
+  }
+  bc.slaveFactor = slFactor;
+  if (exclVertices != NULL)
+  {
+    bc.excludedVertices.copyData(*exclVertices);
+  }
+}
+
+void nonLinearMechSolver::linearConstraintBCBetweenTwoGroups(std::string onwhat, const int physMater, const int comp, 
+                                                    const linearCombinationOfVertices* rh,
+                                                    const setInt* exclVertices)
+{  
+  linearConstraintBCBetweenTwoGroups(onwhat,physMater,0,comp,0.,rh,NULL,exclVertices);
+}
+
 void nonLinearMechSolver::periodicBC(std::string onwhat, const int phys1, const int phys2, const int v1, const int v2, const int comp){
   Msg::Info("Periodic BC comp %d on physical %d physical %d  versur vertex %d %d",comp,phys1,phys2,v1,v2);
 
@@ -5867,7 +6075,7 @@ void nonLinearMechSolver::periodicBC(std::string onwhat, const int phys1, const
     pbc.g2 = new groupOfElements (2, phys2);
     pbc.onWhat=nonLinearBoundaryCondition::ON_FACE;
   }
-  else Msg::Error("Impossible to prescribe a constraint on a %s\n",onwhat.c_str());
+  else Msg::Error("Impossible to prescribe a constraint on a %s in periodicBC\n",onwhat.c_str());
 
 	groupOfElements grv1(0,v1);
 	groupOfElements grv2(0,v2);
@@ -5952,7 +6160,7 @@ void nonLinearMechSolver::sameDisplacementBC(std::string onwhat, const int phy,
     bc.g = new groupOfElements(3,phy);
   }
   else{
-    Msg::Error("Impossible to prescribe a constraint on a %s\n",onwhat.c_str());
+    Msg::Error("Impossible to prescribe a constraint on a %s in sameDisplacementBC\n",onwhat.c_str());
   }
 }
 
@@ -5986,7 +6194,7 @@ void nonLinearMechSolver::sameDisplacementBCBetweenTwoGroups(std::string onwhat,
     bc.g2 = new groupOfElements(2,phy2);
   }
   else{
-    Msg::Error("Impossible to prescribe a constraint on a %s\n",onwhat.c_str());
+    Msg::Error("Impossible to prescribe a constraint on a %s in sameDisplacementBCBetweenTwoGroups\n",onwhat.c_str());
   }
 };
 
@@ -6017,7 +6225,7 @@ void nonLinearMechSolver::fixOnFace(std::string onwhat, const int phy, const dou
     bc.g = new groupOfElements(3,phy);
   }
   else{
-    Msg::Error("Impossible to prescribe a constraint on a %s\n",onwhat.c_str());
+    Msg::Error("Impossible to prescribe a constraint on a %s in fixOnFace\n",onwhat.c_str());
   }
 
 
@@ -6052,7 +6260,7 @@ void nonLinearMechSolver::symetryBC(std::string onwhat, const int phy){
     bc.D = -(n(0)*p1.x()+n(1)*p1.y()+n(2)*p1.z());
   }
   else{
-    Msg::Error("Impossible to prescribe a constraint on a %s\n",onwhat.c_str());
+    Msg::Error("Impossible to prescribe a constraint on a %s in symetryBC\n",onwhat.c_str());
   }
 };
 
@@ -6600,7 +6808,7 @@ void nonLinearMechSolver::archivingIPOnPhysicalGroup(std::string onwhat, const i
   else if(onwhat==volume){
      dim =3;
   }
-  else Msg::Error("Impossible to prescribe a constraint on a %s\n",onwhat.c_str());
+  else Msg::Error("Impossible to archive on a %s\n",onwhat.c_str());
   vaip.push_back(IPField::ip2archive(dim, numphys,ipval,elemval,nstep));
 }
 
@@ -8876,6 +9084,11 @@ void nonLinearMechSolver::internalPointBuildView(const std::string vname,const i
    case 3 :
     ev_ = nlsField::max;
     break;
+   case 4 :
+    ev_ = nlsField::increment;
+    break;
+   case 5 :
+    ev_ = nlsField::rate;
    default:
     ev_ = nlsField::mean;
   }
@@ -9044,6 +9257,121 @@ void nonLinearMechSolver::fixDofCorner(){
   }
 };
 
+void nonLinearMechSolver::applyLinearConstraintBetweenTwoGroups()
+{
+  if (isDgDomain())
+  {
+    if (allLinearConstraintBC.size() > 0)
+    {
+      Msg::Error("linear constraint BC between two groups is not implemented");
+      Msg::Exit(0);
+      
+    }
+  }
+  else
+  {
+    FunctionSpaceBase* sp = domainVector[0]->getFunctionSpace();
+    for (std::list<nonLinearLinearConstraintBCBetweenTwoGroups>::iterator itbc=allLinearConstraintBC.begin(); itbc!=allLinearConstraintBC.end(); itbc++)
+    {
+      nonLinearLinearConstraintBCBetweenTwoGroups& bc = *itbc;
+      const linearCombinationOfVertices* rh = bc.rightHandSide;
+      const setInt& excludeVertices = bc.excludedVertices;
+      double factNeg = bc.slaveFactor;
+      // get right hand side term
+      std::vector<int> comp(1,bc.comp);
+      std::vector<std::pair<Dof,double> > Rroot;
+      for (std::map<MVertex*,std::pair<int,double> >::const_iterator itvroot = rh->combinationV.begin(); itvroot != rh->combinationV.end(); itvroot++)
+      {
+        MVertex* vr = itvroot->first;
+        const std::pair<int,double>& compFact = itvroot->second;
+        //
+        std::vector<Dof> R;
+        std::vector<int> compR(1,compFact.first);
+        getKeysFromVertex(sp,vr,compR,R);
+        Rroot.push_back(std::pair<Dof,double>(R[0],compFact.second));
+      }
+      
+      for (groupOfElements::vertexContainer::const_iterator itvmaster = bc.gMaster->vbegin(); itvmaster != bc.gMaster->vend(); itvmaster++)
+      {
+        MVertex* vmaster = *itvmaster;
+        if (rh->combinationV.find(vmaster) == rh->combinationV.end() and !(excludeVertices.included(vmaster->getNum())))
+        {
+          SPoint3 pp;
+          bc.vgOperation->apply(vmaster,pp);
+          MElement* eleSlave = NULL;
+          for (groupOfElements::elementContainer::iterator ite = bc.gSlave->begin(); ite != bc.gSlave->end(); ite++)
+          {
+            MElement* es = *ite;
+            if (es->getDim() == 0)
+            {
+              eleSlave = es;
+            }
+            else if (isInside(pp,es)){
+              eleSlave = es;
+              Msg::Info("found slave element %d for vertex %d",eleSlave->getNum(),vmaster->getNum());
+              break;
+            }
+          }
+          
+          std::vector<MVertex*> vv;
+          int size = 0;
+          std::vector<double> fVal;
+          if (eleSlave != NULL)
+          {
+            SPoint3 point;
+            size = eleSlave->getNumVertices();
+            eleSlave->getVertices(vv);
+
+            if (eleSlave->getDim() == 0)
+            {
+              point = vv[0]->point();
+            }
+            else if (eleSlave->getDim() == 1)
+            {
+              point = project(pp,vv[0]->point(),vv[1]->point());
+            }
+            else if (eleSlave->getDim() == 2)
+            {
+              point = project(pp,vv[0]->point(),vv[1]->point(),vv[2]->point());
+            };
+
+            double xyz[3]={point[0],point[1],point[2]};
+            double uvw[3];
+            eleSlave->xyz2uvw(xyz,uvw);
+
+            fVal.resize(size);
+            eleSlave->getShapeFunctions(uvw[0],uvw[1],uvw[2],&fVal[0]);
+          }
+
+          std::vector<Dof> RMaster, RSlave;
+          getKeysFromVertex(sp,vmaster,comp,RMaster);
+          for (int iv=0; iv < size; iv++)
+          {
+            getKeysFromVertex(sp,vv[iv],comp,RSlave);
+          }
+
+          if (!pAssembler->isConstrained(RMaster[0]) and !pAssembler->isFixed(RMaster[0]))
+          {
+            DofAffineConstraint<double> cons;
+            cons.shift = 0.;
+            for (int ivf=0; ivf< size; ivf++)
+            {
+              cons.linear.push_back(std::pair<Dof,double>(RSlave[ivf],factNeg*fVal[ivf]));
+            }
+            
+            for (int ivf = 0; ivf < Rroot.size(); ivf++)
+            {
+              cons.linear.push_back(Rroot[ivf]);
+            }
+            pAssembler->setLinearConstraint(RMaster[0],cons);
+          }
+        }
+        
+      }
+    }
+  }
+};
+
 void nonLinearMechSolver::applyPBCBetweenTwoGroups(){
 	// create pbcmap
 	if (isDgDomain()){
@@ -12320,6 +12648,14 @@ void nonLinearMechSolver::resetSolverToInitialStep(){
 
   // homogenized data
   (*_currentState) = (*_initialState);
+
+  if (_damageIsBlocked){
+    _ipf->blockDissipation(IPStateBase::current,true);
+  }
+  else{
+    _ipf->blockDissipation(IPStateBase::current,false);
+  }
+
 };
 
 void nonLinearMechSolver::prepareForNextMicroSolve(){
@@ -12699,10 +13035,12 @@ void nonLinearMechSolver::initMicroSolver(){
 	}
 };
 
-double nonLinearMechSolver::microSolve(){
+bool nonLinearMechSolver::microSolve(){
   double time = 0;
   this->resetSolverToInitialStep();
-  if (_microBC->notSameState(_sameStateCriterion,_absTol)){
+  if (_microBC->notSameState(_sameStateCriterion,_absTol))
+  {
+    _sucessMicroSolve = false;
     if (_outputFile)
       fprintf(_outputFile,"Solving in procs %d \n",Msg::GetCommRank());
     // solve system
@@ -12715,12 +13053,19 @@ double nonLinearMechSolver::microSolve(){
     else
       Msg::Error("This scheme is not implemented");
 
-    this->extractAverageProperties(_tangentflag);
+    if (_sucessMicroSolve)
+    {
+      this->extractAverageProperties(_tangentflag);
+    }
 
     if (_outputFile)
       fflush(_outputFile);
   }
-  return time;
+  else
+  {
+    _sucessMicroSolve = true;
+  }
+  return _sucessMicroSolve;
 };
 
 void nonLinearMechSolver::OneStep(const int numstep){
@@ -12764,12 +13109,11 @@ double nonLinearMechSolver::solveMicroSolverSNL(){
   double tolend = 0.000001*dendtime; // OTHERWISE LAST STEP CAN BE DONE TWICE ??
   double toldtmax = 0.000001*dtmax; // IDEM (PRECISION PROBLEM)
   int numberTimeStepReduction=0;
-  bool isSuccess = true;
-
   if (_pathFollowing){
     _pAl->computeLoadVector();
   }
   _currentStep = 0;
+  _sucessMicroSolve = false;
 
   bool willFinish = false;
   while(fabs(curtime-dendtime) > tolend ){
@@ -12816,6 +13160,8 @@ double nonLinearMechSolver::solveMicroSolverSNL(){
       }
       else if (control<0){
         Msg::Error("path following is not converge %s !",getFileSavingPrefix().c_str());
+        _sucessMicroSolve = false;
+        break;
       }
     }
     else
@@ -12839,6 +13185,7 @@ double nonLinearMechSolver::solveMicroSolverSNL(){
     if(niteNR == _maxNRite) // time step reduction
     {
        numberTimeStepReduction ++;
+       _sucessMicroSolve = false;
        if(numberTimeStepReduction > _maxAttemptStepReduction) // end of simulation
        {
          if (_outputFile)
@@ -12847,9 +13194,9 @@ double nonLinearMechSolver::solveMicroSolverSNL(){
          break;
        }
        if (_outputFile)
-        fprintf(_outputFile,"Convergence of Newton-Raphson failed %s --> reduced time step",
+        fprintf(_outputFile,"Convergence of Newton-Raphson failed %s --> reduced time step\n",
                     getFileSavingPrefix().c_str());
-       Msg::Warning("Convergence of Newton-Raphson failed %s --> reduced time step",
+       printf("Convergence of Newton-Raphson failed %s --> reduced time step\n",
                     getFileSavingPrefix().c_str());
        curtime = lasttime;
        dt /= _timeStepFactorReduction;
@@ -12878,9 +13225,9 @@ double nonLinearMechSolver::solveMicroSolverSNL(){
       else if ((niteNR <= _niteTimeStepIncrease) && fabs(dtmax-dt) > toldtmax)// increase time step if convergence in a few iteration
       {
          if (_outputFile)
-          fprintf(_outputFile,"Time step is increased due to convergence of Newton-Raphson in less than %d %s ",_niteTimeStepIncrease,
+          fprintf(_outputFile,"Time step is increased due to convergence of Newton-Raphson in less than %d %s\n",_niteTimeStepIncrease,
                       getFileSavingPrefix().c_str());
-         Msg::Warning("Time step is increased due to convergence of Newton-Raphson in less than %d %s",_niteTimeStepIncrease,
+          printf("Time step is increased due to convergence of Newton-Raphson in less than %d %s\n",_niteTimeStepIncrease,
                       getFileSavingPrefix().c_str());
          numberTimeStepReduction --;
          dt *= _timeStepFactorReduction;
@@ -12902,6 +13249,7 @@ double nonLinearMechSolver::solveMicroSolverSNL(){
       {
         this->nextStep(curtime,_currentStep);
       }
+      _sucessMicroSolve = true;
     }
     if(_pathFollowing)
     {
@@ -12914,6 +13262,7 @@ double nonLinearMechSolver::solveMicroSolverSNL(){
       if (willFinish) {
         dendtime = 1.;
         pathSys->setControlType(_macroControlTypePathFollowing);
+        _sucessMicroSolve = true;
         break;
       }
     }
@@ -12977,6 +13326,7 @@ double nonLinearMechSolver::solveMicroSolverStaticLinear(){
 
    /* end of scheme */
   _currentStep = step;
+  _sucessMicroSolve = true;
   return curtime;
 };
 
diff --git a/NonLinearSolver/nlsolver/nonLinearMechSolver.h b/NonLinearSolver/nlsolver/nonLinearMechSolver.h
index 709caf77bcac1ac52a2e75397904aa669e0ceee7..85de824009e8c2e78dae444d93d30dae486e6679 100644
--- a/NonLinearSolver/nlsolver/nonLinearMechSolver.h
+++ b/NonLinearSolver/nlsolver/nonLinearMechSolver.h
@@ -191,6 +191,96 @@ class IntegralVolume
     }
 };
 
+class archiveInternalForce
+{
+  public:
+    class elementDomain 
+    {
+      public:
+        partDomain* dom;
+        MElement* ele;
+      elementDomain(partDomain* d, MElement* e): dom(d),ele(e){}
+      ~elementDomain(){}
+      bool operator<(const elementDomain &other) const
+      {
+        if(dom->getPhysical() < other.dom->getPhysical()) return true;
+        if(dom->getPhysical() > other.dom->getPhysical()) return false;
+        if(ele->getNum() < other.ele->getNum()) return true;
+        return false;
+      }
+      bool operator==(const elementDomain &other) const
+      {
+        return (dom->getPhysical() == other.dom->getPhysical() && ele->getNum() == other.ele->getNum());
+      }
+    };
+  
+  
+    int phys;
+    int dim;
+    int nstep;
+    FILE *FP;
+    FILE *FPTotal;
+    int lastSaveStep;
+    std::map<int,std::map<elementDomain,int> > sharedElements;
+    
+    archiveInternalForce(int p, int d, int ns) : phys(p), dim(d),  nstep(ns), FP(NULL), FPTotal(NULL),
+                          lastSaveStep(0){ if (nstep <1) nstep=1;}
+    ~archiveInternalForce()
+    {
+      if(FP!=NULL)
+        fclose(FP);
+      FP=NULL;
+      if (FPTotal!=NULL) 
+        fclose(FPTotal); 
+      FPTotal=NULL;
+    }
+    void openFile(const std::string prefix)
+    {
+      std::string s = "";
+      if (dim == 0) s = "Node";
+      else if (dim == 1) s = "Line";
+      else if (dim == 2) s = "Face";
+      else if (dim == 3) s = "Volume";
+      std::ostringstream oss;
+      oss << phys;
+      s += oss.str();
+      
+      std::string s2 ="";
+     #if defined(HAVE_MPI)
+      if(Msg::GetCommSize() != 1){
+        oss.str("");
+        oss << Msg::GetCommRank();
+        s2 += "_part"+oss.str();
+      }
+     #endif // HAVE_MPI
+      std::string fname =prefix+"internalForceOnPhysical"+s+s2+".csv";
+      FP = fopen(fname.c_str(),"w");
+      
+      fname =prefix+"totalInternalForceOnPhysical"+s+s2+".csv";
+      FPTotal = fopen(fname.c_str(),"w");
+    }
+    void clear()
+    {
+      lastSaveStep = 0;
+      if (FP!=NULL) 
+      {
+        fclose(FP); FP=NULL;
+      }
+      if (FPTotal!=NULL)
+      {
+        fclose(FPTotal); FPTotal=NULL;
+      }
+    }
+
+    void resetArchiving(const std::string prefix)
+    {
+      lastSaveStep = 0;
+      if(FP!=NULL) fclose(FP);
+      if (FPTotal!=NULL) fclose(FPTotal);
+      openFile(prefix); 
+    }
+};
+
 class implicitSolverOptions
 {
   public:
@@ -507,9 +597,13 @@ class nonLinearMechSolver
   std::list<nonLinearNeumannBC> allTheta;
   // dirichlet BC on rigid surface (prescribed the motion of gravity center)
   std::list<rigidContactBC> allContactBC;
+  // general linear constrait BC
+  std::list<nonLinearLinearConstraintBCBetweenTwoGroups> allLinearConstraintBC;
 
  
   /* FOR ARCHIVING*/
+  // archivng internal force at nodes
+  std::list<archiveInternalForce> vafIntenal;
   // std vector to archive a node displacement
   std::vector<unknownField::archiveNode> anoded;
   // std::vector to archive a force 
@@ -566,7 +660,7 @@ class nonLinearMechSolver
   /*FOR MULTISCALE ANALYSIS*/
   // Element number and Integration point number
   int _enumMinus,_enumPlus, _gnum;
-  
+  bool _sucessMicroSolve;
   
   // time and time step
   double _macroTimeStep; // for law which works on increment. (Use only in so no getTimeStep function)
@@ -732,6 +826,8 @@ class nonLinearMechSolver
 
   void initCornerBC();
   void fixDofCorner();
+  
+  void applyLinearConstraintBetweenTwoGroups();
 
   // For Onelab
   void createOnelabViewOption(const std::string &fname,const int displayType) const;
@@ -745,6 +841,9 @@ class nonLinearMechSolver
   void checkElementErosion(const IPStateBase::whichState ws);
   void writeDisturbedMeshByEigenVector(eigenSolver& eigS, int numberMode, double fact);
   void writeDeformedMesh(int step);
+  
+  void initArchiveInternalForce();
+  void internalForceArchiving(const double curtime,const int numstep, const bool forceSave);
   #endif // SWIG
  public:
   nonLinearMechSolver(int tag,bool isParallel=true);
@@ -915,6 +1014,17 @@ class nonLinearMechSolver
   void velocityBC(std::string onwhat, const int numphys, const int comp, elementFilter *filter, simpleFunctionTime<double> *fct);
   void accelerationBC(std::string onwhat, const int numphys, const int comp, const double value);
   void constraintBC(std::string onwhat, const int numphys, const int comp);
+  
+  // contraint with (vertex[comp] in physMater) =  slFactor*(vertex[comp] in physSlave) + rh
+  // op is an operation  to match a vertex in physMater with a vertex in  physSlave
+  void linearConstraintBCBetweenTwoGroups(std::string onwhat, const int physMater, const int physSlave, const int comp, const double slFactor,
+                                                    const linearCombinationOfVertices* rh,
+                                                    const vertexGroupOperation* op,
+                                                    const setInt* exclVertices);
+  // contraint with (vertex[comp] in physMater) =  rh
+  void linearConstraintBCBetweenTwoGroups(std::string onwhat, const int physMater, const int comp,
+                                                    const linearCombinationOfVertices* rh,
+                                                    const setInt* exclVertices);
 
 	void periodicBC(std::string onwhat, const int phys1, const int phys2, const int v1, const int v2, const int comp);
   void averagePeriodicBC(std::string onwhat, const int phys1, const int phys2, const int v1, const int v2, const int comp);
@@ -948,7 +1058,7 @@ class nonLinearMechSolver
   void pressureOnPhysicalGroupBC(std::string onwhat, const int numphys, simpleFunctionTime<double> *fct);
   
   
-
+  void archivingInternalForceOnPhysicalGroup(const std::string onwhat, const int numphys,const int nstep=1);
   void archivingForceOnPhysicalGroup(const std::string onwhat, const int numphys, const int comp,const int nstep=1);
   void archivingRigidContactForce(const int numphys, const int comp,const int nstep=1);
   void archivingNodeDisplacement(const int num, const int comp,const int nstep=1);
@@ -1135,7 +1245,7 @@ class nonLinearMechSolver
   void setMicroProblemIndentification(int ele, int gpt);
   void setMicroProblemIndentification(int eleMinus, int elePlus, int gpt);
   void initMicroSolver();
-  double microSolve();
+  bool microSolve();
 
   void prepareForNextMicroSolve();
   void archiveData(const double curtime, const int numstep, const bool forceView);
diff --git a/NonLinearSolver/nlsolver/staticDofManager.h b/NonLinearSolver/nlsolver/staticDofManager.h
index 397e5c297144b53291e3472670e5db1e4c2f3cdb..5de95460ac5646dfb288b7237d66890121516115 100644
--- a/NonLinearSolver/nlsolver/staticDofManager.h
+++ b/NonLinearSolver/nlsolver/staticDofManager.h
@@ -1298,6 +1298,19 @@ staticDofManager(linearSystem< typename dofManager<T>::dataMat> *l,staticDofMana
       if(itRHS != RHSfixed.end()) {
         af.fval += itRHS->second; // Fext
       }
+      else
+      {
+        typename std::map<Dof,int>::const_iterator itunk = this->unknown.find(*itD);
+        if(itunk != this->unknown.end())
+        {
+          if (_NLScurrent != NULL)
+          {
+            double ff;
+            _NLScurrent->getFromRightHandSidePlus(itunk->second,ff);
+            af.fval += ff; // get from external force
+          }
+        }
+      }
     }
   };
   virtual void getForces(std::vector<archiveForce> &vaf) const{
diff --git a/NonLinearSolver/nlsolver/timeFunction.h b/NonLinearSolver/nlsolver/timeFunction.h
index e05ba4ff661f11d46d9e07a6059b64e496bae1ef..f2e7437aee113598a3bc1f5fdeef57fc60f77af9 100644
--- a/NonLinearSolver/nlsolver/timeFunction.h
+++ b/NonLinearSolver/nlsolver/timeFunction.h
@@ -34,7 +34,7 @@ class simpleFunctionTimeWithConstant : public simpleFunctionTime<scalar>{
 class simpleFunctionTimeWithScalarFunction: public simpleFunctionTime<double>{
   protected:
     scalarFunction* _fct;
-    
+
   public:
     simpleFunctionTimeWithScalarFunction(const scalarFunction& fct):simpleFunctionTime<double>(){
       _fct = fct.clone();
@@ -459,7 +459,7 @@ class centrifugalForce : public simpleFunctionTime<double>
   const SPoint3 _direction;
   const int _comp; // to known if vx(=0) or vy(=1) has to be returned
   const double _rho; // density
-  mutable double _w,_rw2; // in this function, w is rad/s and is the value to be reached at time =t0 
+  mutable double _w,_rw2; // in this function, w is rad/s and is the value to be reached at time =t0
  public:
   centrifugalForce(const double rho,const double w,const double t,const int comp) : simpleFunctionTime<double>(w,true,0.), _t0(t),
                                                                      _origin(0.,0.,0.), _direction(0.,0.,1.), _comp(comp), _w(0.), _rho(rho), _rw2(0.){}
@@ -474,7 +474,7 @@ class centrifugalForce : public simpleFunctionTime<double>
    }
  #ifndef SWIG
   centrifugalForce(const centrifugalForce &source) : simpleFunctionTime<double>(source), _t0(source._t0),
-                                                         _origin(source._origin), 
+                                                         _origin(source._origin),
                                                          _direction(source._direction),_comp(source._comp), _w(0.), _rho(source._rho), _rw2(0){}
   virtual ~centrifugalForce(){}
   virtual void setTime(const double t)
@@ -538,7 +538,7 @@ class PiecewisePositionFunctionTime : public simpleFunctionTime<double>{
     #ifndef SWIG
     mutable std::vector<double> dfunc; // cache for derivatives for cubic spline
     #endif //SWIG
-  
+
   public:
     PiecewisePositionFunctionTime(const int comp,  const int interpM= 0, bool td = true, double t = 1.): simpleFunctionTime<double>(0,td,t),var(0),func(0),
       component(comp),interpMethod(interpM),dfunc(0){}
@@ -572,7 +572,7 @@ class PiecewisePositionFunctionTime : public simpleFunctionTime<double>{
       else{
         Msg::Error("component = %d must be correctly defined by (0 == X, 1 == Y, 2 === Z)",component);
       }
-      
+
       int N = func.size();
       if (interpMethod == 0){
         fval = interpolationMethod::interp_linear(val,&var[0],&func[0],N);
@@ -597,7 +597,7 @@ class PiecewisePositionFunctionTime : public simpleFunctionTime<double>{
       else{
         Msg::Error("interp method %d has not been implemented in PiecewisePositionFunctionTime",interpMethod);
       }
-      
+
       if (this->timeDependency){
         return time*fval;
       }
@@ -610,7 +610,7 @@ class exponentialFunctionTime : public simpleFunctionTime<double>{
   // f = a+b*exp(c*t)
   protected:
     double _a, _b, _c;
-    
+
   public:
     exponentialFunctionTime(const double a, const double b, const double c): simpleFunctionTime<double>(0,true,0),_a(a),_b(b),_c(c){}
     #ifndef SWIG
@@ -619,7 +619,7 @@ class exponentialFunctionTime : public simpleFunctionTime<double>{
       return _a+_b*exp(_c*time);
     };
     #endif //SWIG
-  
+
 };
 
 class LinearFunctionTime : public simpleFunctionTime<double>{
@@ -766,38 +766,5 @@ class BCfunctionBendWings : public simpleFunctionTime<double>
     }
   #endif //SWIG
 };
-
-/**
- * Class for python user defined function
- * The user has to define in it driver a
- * def my_function(x,y,z,t,extra=None)
- *     ...
- *     return <a float>
- * where extra is a python tuple that contains
- * extra python argument for the function
- */
- #undef HAVE_DLOPEN
- #include<Python.h>
-class PythonBCfunctionDouble : public simpleFunctionTime<double>
-{
- protected:
-  PyObject* _pyFunction;
-  PyObject* _pyArgs; // Assume that is a tuple
- public:
-  PythonBCfunctionDouble(PyObject* pyfunc, PyObject* args) : simpleFunctionTime<double>(),
-                                                       _pyFunction(pyfunc), _pyArgs(args){}
- #ifndef SWIG
-  PythonBCfunctionDouble(const PythonBCfunctionDouble &src) : simpleFunctionTime<double>(src),
-                                                  _pyFunction(src._pyFunction),
-                                                  _pyArgs(src._pyArgs){}
-  virtual ~PythonBCfunctionDouble(){}
-  virtual double operator() (double x, double y, double z) const {
-    PyObject* tuple = Py_BuildValue("ddddO",x, y, z, this->time,_pyArgs);
-    PyObject* returnVal = PyObject_Call(_pyFunction,tuple,NULL);
-    return PyFloat_AsDouble(returnVal);
-  }
- #endif // SWIG
-};
-
 #endif // TIMEFUNCTION
 
diff --git a/NonLinearSolver/nlsolver/vertexGroupOperation.cpp b/NonLinearSolver/nlsolver/vertexGroupOperation.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..234c8b568484d38fe3d054e3ae3583d6d251f71c
--- /dev/null
+++ b/NonLinearSolver/nlsolver/vertexGroupOperation.cpp
@@ -0,0 +1,111 @@
+//
+//
+// Description: operation for vertex
+//
+// Author:  <Van Dung NGUYEN>, (C) 2019
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+
+
+#include "vertexGroupOperation.h"
+#include "numericalFunctions.h"
+
+void setInt::copyData(const setInt& src)
+{
+  values.clear();
+  values.insert(src.values.begin(),src.values.end());
+}
+void setInt::insertPhysical(int dim, int phys)
+{
+  groupOfElements g(dim,phys);
+  for (groupOfElements::vertexContainer::const_iterator it = g.vbegin(); it != g.vend(); it++)
+  {
+    MVertex* v = *it;
+    insert(v->getNum());
+  }
+}
+
+void setInt::insert(int i)
+{
+  values.insert(i);
+};
+
+void setInt::clear()
+{
+  values.clear();
+};
+
+bool setInt::included(const int i) const
+{
+  return values.find(i) != values.end();
+}
+
+void linearCombinationOfVertices::setVertex(int verphy, int comp, double fact)
+{
+  groupOfElements g(0,verphy);
+  if (g.size() >0)
+  {
+    MVertex* v = *(g.vbegin());
+    combinationV[v] = std::pair<int,double>(comp,fact);
+  }
+  else
+  {
+    Msg::Error("physical %d has no element",verphy);
+  }
+}
+
+void linearCombinationOfVertices::clear()
+{
+  combinationV.clear();
+}
+
+vertexGroupOperation_trivial::vertexGroupOperation_trivial(): 
+    vertexGroupOperation(){}
+vertexGroupOperation_trivial::vertexGroupOperation_trivial(const vertexGroupOperation_trivial& src) : 
+    vertexGroupOperation(src){}
+vertexGroupOperation_trivial::~vertexGroupOperation_trivial(){}
+
+void vertexGroupOperation_trivial::apply(const MVertex* vmaster, SPoint3& p) const
+{
+  p[0] = vmaster->x();
+  p[1] = vmaster->y();
+  p[2] = vmaster->z();
+}
+
+vertexGroupOperation_symmetric::vertexGroupOperation_symmetric(double aa, double bb, double cc, double dd): 
+    vertexGroupOperation(),
+    a(aa),b(bb),c(cc),d(dd){}
+vertexGroupOperation_symmetric::vertexGroupOperation_symmetric(const vertexGroupOperation_symmetric& src) : 
+    vertexGroupOperation(src), a(src.a),b(src.b),c(src.c),d(src.d){}
+vertexGroupOperation_symmetric::~vertexGroupOperation_symmetric(){}
+
+void vertexGroupOperation_symmetric::apply(const MVertex* vmaster, SPoint3& p) const
+{
+  SPoint3 pp = project(vmaster->point(),a,b,c,d);
+  p[0] = 2.*pp[0]-vmaster->x();
+  p[1] = 2.*pp[1]-vmaster->y();
+  p[2] = 2.*pp[2]-vmaster->z();
+}
+
+
+vertexGroupOperation_periodic::vertexGroupOperation_periodic(double aa, double bb, double cc): 
+    vertexGroupOperation(),
+    Lx(aa),Ly(bb),Lz(cc){}
+    
+void vertexGroupOperation_periodic::setPeriodicityVector(double x, double y, double z)
+{
+  Lx = x; Ly=y; Lz = z;
+  Msg::Info("set periodicity %e %e %e",x,y,z);
+};
+
+vertexGroupOperation_periodic::vertexGroupOperation_periodic(const vertexGroupOperation_periodic& src) : 
+    vertexGroupOperation(src), Lx(src.Lx),Ly(src.Ly),Lz(src.Lz){}
+vertexGroupOperation_periodic::~vertexGroupOperation_periodic(){}
+
+void vertexGroupOperation_periodic::apply(const MVertex* vmaster, SPoint3& p) const
+{
+  p[0] = vmaster->x() - Lx;
+  p[1] = vmaster->y() - Ly;
+  p[2] = vmaster->z() - Lz;
+}
\ No newline at end of file
diff --git a/NonLinearSolver/nlsolver/vertexGroupOperation.h b/NonLinearSolver/nlsolver/vertexGroupOperation.h
new file mode 100644
index 0000000000000000000000000000000000000000..ad03118f7ea2e432a83c6873d3dbab86547ade4d
--- /dev/null
+++ b/NonLinearSolver/nlsolver/vertexGroupOperation.h
@@ -0,0 +1,109 @@
+//
+//
+// Description: operation for vertex
+//
+// Author:  <Van Dung NGUYEN>, (C) 2019
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+
+#ifndef VERTEXGROUPOPERATION_H_
+#define VERTEXGROUPOPERATION_H_
+
+#ifndef SWIG
+#include "groupOfElements.h"
+#endif // SWIG
+
+class setInt
+{
+  public: 
+    setInt(){};
+    ~setInt(){};
+    void insert(int i);
+    void insertPhysical(int dim, int phys);
+    void clear();
+    bool included(const int i) const;
+    void copyData(const setInt& src);
+    #ifndef SWIG
+    std::set<int> values;
+    setInt(const setInt& src): values(src.values){}
+    setInt* clone() const {return new setInt(*this);};
+    #endif //SWIG
+};
+
+class linearCombinationOfVertices
+{
+  public:
+    linearCombinationOfVertices(){}
+    void setVertex(int verphy, int comp, double fact);
+    void clear();
+    #ifndef SWIG
+    std::map<MVertex*,std::pair<int,double> > combinationV;
+    linearCombinationOfVertices(const linearCombinationOfVertices& src): combinationV(src.combinationV){}
+    ~linearCombinationOfVertices(){};
+    linearCombinationOfVertices* clone() const {return new linearCombinationOfVertices(*this);};
+    #endif //SWIG
+};
+
+class vertexGroupOperation
+{
+  #ifndef SWIG
+  public:
+    vertexGroupOperation(){}
+    vertexGroupOperation(const vertexGroupOperation& src){}
+    virtual ~vertexGroupOperation(){}
+    virtual void apply(const MVertex* master, SPoint3& p) const = 0;
+    virtual vertexGroupOperation* clone() const = 0;
+  #endif // SWIG
+};
+
+class vertexGroupOperation_trivial : public vertexGroupOperation
+{
+  #ifndef SWIG
+  public:
+    vertexGroupOperation_trivial();
+    vertexGroupOperation_trivial(const vertexGroupOperation_trivial& src);
+    virtual ~vertexGroupOperation_trivial();
+    virtual void apply(const MVertex* master, SPoint3& p) const;
+    virtual vertexGroupOperation* clone() const {return new vertexGroupOperation_trivial();};
+  #endif // SWIG
+};
+
+
+class vertexGroupOperation_symmetric : public vertexGroupOperation
+{
+  // symmetric plane
+  protected:
+    #ifndef SWIG
+    double a, b, c, d; // to define surface a*x +b*y +c*z +d = 0
+    #endif //SWIG
+  public:
+    vertexGroupOperation_symmetric(double aa, double bb, double cc, double dd);
+    #ifndef SWIG
+    vertexGroupOperation_symmetric(const vertexGroupOperation_symmetric& src);
+    virtual ~vertexGroupOperation_symmetric();
+    virtual void apply(const MVertex* master, SPoint3& p) const;
+    virtual vertexGroupOperation* clone() const {return new vertexGroupOperation_symmetric(a,b,c,d);};
+    #endif // SWIG
+};
+
+
+class vertexGroupOperation_periodic: public vertexGroupOperation
+{
+  // symmetric plane
+  protected:
+    #ifndef SWIG
+    double Lx, Ly, Lz; // to define vector of periodicity  Lx, Ly, Lz
+    #endif //SWIG
+  public:
+    vertexGroupOperation_periodic(double nx, double ny, double nz);
+    void setPeriodicityVector(double x, double y, double z);
+    #ifndef SWIG
+    vertexGroupOperation_periodic(const vertexGroupOperation_periodic& src);
+    virtual ~vertexGroupOperation_periodic();
+    virtual void apply(const MVertex* master, SPoint3& p) const;
+    virtual vertexGroupOperation* clone() const {return new vertexGroupOperation_periodic(Lx,Ly,Lz);};
+    #endif // SWIG
+};
+
+#endif // VERTEXGROUPOPERATION_H_
\ No newline at end of file
diff --git a/NonLinearSolver/periodicBC/highOrderTensor.h b/NonLinearSolver/periodicBC/highOrderTensor.h
index ea0debc9b4af03af13433ce585628925585a686e..4a569fec63446613cfa02b2a032132c6e5dfd2ce 100644
--- a/NonLinearSolver/periodicBC/highOrderTensor.h
+++ b/NonLinearSolver/periodicBC/highOrderTensor.h
@@ -39,8 +39,8 @@ class Tensor11{
     static FILE* createFile(const std::string filename){
       FILE* file = fopen(filename.c_str(),"w");
       std::string str = "Time";
-      fprintf(file,"%s;",str.c_str());
-      str = "Comp."+ int2str(0) +";";
+      fprintf(file,"%s",str.c_str());
+      str = ";Comp."+ int2str(0);
       fprintf(file,"%s",str.c_str());
       fprintf(file,"\n");
       fflush(file);
@@ -50,8 +50,8 @@ class Tensor11{
       if (file == NULL)
         Msg::Error("File pointer is null Vector3");
       else{
-        fprintf(file,"%.16g;",time);
-        fprintf(file,"%.16g;",ten);
+        fprintf(file,"%.16g",time);
+        fprintf(file,";%.16g",ten);
         fprintf(file,"\n");
         fflush(file);
       }
@@ -70,12 +70,12 @@ class Tensor13{
     static FILE* createFile(const std::string filename){
       FILE* file = fopen(filename.c_str(),"w");
       std::string str = "Time";
-      fprintf(file,"%s;",str.c_str());
+      fprintf(file,"%s",str.c_str());
       for (int idex = 0; idex <3; idex++){
         int i;
         Tensor13::getIntsFromIndex(idex,i);
-        str = "Comp."+ int2str(i) +";";
-        fprintf(file,"%s",str.c_str());
+        str = "Comp."+ int2str(i);
+        fprintf(file,";%s",str.c_str());
       }
       fprintf(file,"\n");
       fflush(file);
@@ -85,11 +85,11 @@ class Tensor13{
       if (file == NULL)
         Msg::Error("File pointer is null Vector3");
       else{
-        fprintf(file,"%.16g;",time);
+        fprintf(file,"%.16g",time);
         for (int idex=0; idex<3; idex++){
           int i;
           Tensor13::getIntsFromIndex(idex,i);
-          fprintf(file,"%.16g;",ten(i));
+          fprintf(file,";%.16g",ten(i));
         }
         fprintf(file,"\n");
         fflush(file);
@@ -111,12 +111,12 @@ class Tensor23{
     static FILE* createFile(const std::string filename){
       FILE* file = fopen(filename.c_str(),"w");
       std::string str = "Time";
-      fprintf(file,"%s;",str.c_str());
+      fprintf(file,"%s",str.c_str());
       for (int idex = 0; idex <9; idex++){
         int i,j;
         Tensor23::getIntsFromIndex(idex,i,j);
-        str = "Comp."+ int2str(i) + ""+int2str(j)+";";
-        fprintf(file,"%s",str.c_str());
+        str = "Comp."+ int2str(i) + ""+int2str(j);
+        fprintf(file,";%s",str.c_str());
       }
       fprintf(file,"\n");
       fflush(file);
@@ -126,11 +126,11 @@ class Tensor23{
       if (file == NULL)
         Msg::Error("File pointer is null Tensor3");
       else{
-        fprintf(file,"%.16g;",time);
+        fprintf(file,"%.16g",time);
         for (int idex=0; idex<9; idex++){
           int i,j;
           Tensor23::getIntsFromIndex(idex,i,j);
-          fprintf(file,"%.16g;",ten(i,j));
+          fprintf(file,";%.16g",ten(i,j));
         }
         fprintf(file,"\n");
         fflush(file);
@@ -153,12 +153,12 @@ class Tensor33{
 		static FILE* createFile(const std::string filename){
       FILE* file = fopen(filename.c_str(),"w");
       std::string str = "Time";
-      fprintf(file,"%s;",str.c_str());
+      fprintf(file,"%s",str.c_str());
       for (int idex = 0; idex< 27; idex++){
         int i,j,k;
         Tensor33::getIntsFromIndex(idex,i,j,k);
-        str = "Comp."+ int2str(i) + ""+int2str(j)+""+int2str(k)+";";
-        fprintf(file,"%s",str.c_str());
+        str = "Comp."+ int2str(i) + ""+int2str(j)+""+int2str(k);
+        fprintf(file,";%s",str.c_str());
       }
       fprintf(file,"\n");
       fflush(file);
@@ -168,11 +168,11 @@ class Tensor33{
 		  if (file == NULL)
         Msg::Error("File pointer is null Tensor33");
       else{
-        fprintf(file,"%.16g;",time);
+        fprintf(file,"%.16g",time);
         for (int idex=0; idex<27; idex++){
           int i,j,k;
           Tensor33::getIntsFromIndex(idex,i,j,k);
-          fprintf(file,"%.16g;",ten(i,j,k));
+          fprintf(file,";%.16g",ten(i,j,k));
         }
         fprintf(file,"\n");
         fflush(file);
@@ -195,12 +195,12 @@ class Tensor43{
 		static FILE* createFile(const std::string filename){
       FILE* file = fopen(filename.c_str(),"w");
       std::string str = "Time";
-      fprintf(file,"%s;",str.c_str());
+      fprintf(file,"%s",str.c_str());
       for (int idex=0; idex<81; idex++){
         int i,j,k, l;
         Tensor43::getIntsFromIndex(idex,i,j,k,l);
-        str = "Comp."+int2str(i) +""+ int2str(j)+""+int2str(k)+""+int2str(l)+";";
-        fprintf(file,"%s",str.c_str());
+        str = "Comp."+int2str(i) +""+ int2str(j)+""+int2str(k)+""+int2str(l);
+        fprintf(file,";%s",str.c_str());
       }
       fprintf(file,"\n");
       fflush(file);
@@ -210,11 +210,11 @@ class Tensor43{
 		  if (file == NULL)
         Msg::Error("File pointer is null Tensor43");
       else{
-        fprintf(file,"%.16g;",time);
+        fprintf(file,"%.16g",time);
         for (int idex =0; idex<81; idex++){
           int i,j,k,l;
           Tensor43::getIntsFromIndex(idex,i,j,k,l);
-          fprintf(file,"%.16g;",ten(i,j,k,l));
+          fprintf(file,";%.16g",ten(i,j,k,l));
         }
         fprintf(file,"\n");
         fflush(file);
@@ -241,12 +241,12 @@ class Tensor53{
 		static FILE* createFile(const std::string filename){
       FILE* file = fopen(filename.c_str(),"w");
       std::string str = "Time";
-      fprintf(file,"%s;",str.c_str());
+      fprintf(file,"%s",str.c_str());
       for (int idex=0; idex<243; idex++){
         int i,j,k, l, m;
         Tensor53::getIntsFromIndex(idex,i,j,k,l,m);
-        str = "Comp."+int2str(i) +""+ int2str(j)+""+int2str(k)+""+int2str(l)+""+int2str(m)+""+";";
-        fprintf(file,"%s",str.c_str());
+        str = "Comp."+int2str(i) +""+ int2str(j)+""+int2str(k)+""+int2str(l)+""+int2str(m);
+        fprintf(file,";%s",str.c_str());
       }
       fprintf(file,"\n");
       fflush(file);
@@ -256,11 +256,11 @@ class Tensor53{
 		  if (file == NULL)
         Msg::Error("File pointer is null Tensor53");
       else{
-        fprintf(file,"%.16g;",time);
+        fprintf(file,"%.16g",time);
         for (int idex =0; idex < 243; idex ++){
           int i,j,k,l,m;
           Tensor53::getIntsFromIndex(idex,i,j,k,l,m);
-          fprintf(file,"%.16g;",ten(i,j,k,l,m));
+          fprintf(file,";%.16g",ten(i,j,k,l,m));
         }
         fprintf(file,"\n");
         fflush(file);
@@ -287,12 +287,12 @@ class Tensor63{
     static FILE* createFile(const std::string filename){
       FILE* file = fopen(filename.c_str(),"w");
       std::string str = "Time";
-      fprintf(file,"%s;",str.c_str());
+      fprintf(file,"%s",str.c_str());
       for (int idex=0; idex<729; idex++){
         int i,j,k, l, m, n;
         Tensor63::getIntsFromIndex(idex,i,j,k,l,m,n);
-        str= "Comp."+int2str(i) +""+ int2str(j)+""+int2str(k)+""+int2str(l)+""+int2str(m)+""+int2str(n)+";";
-        fprintf(file,"%s",str.c_str());
+        str= "Comp."+int2str(i) +""+ int2str(j)+""+int2str(k)+""+int2str(l)+""+int2str(m)+""+int2str(n);
+        fprintf(file,";%s",str.c_str());
       }
       fprintf(file,"\n");
       fflush(file);
@@ -302,11 +302,11 @@ class Tensor63{
 		  if (file == NULL)
         Msg::Error("File pointer is null Tensor63");
       else{
-        fprintf(file,"%.16g;",time);
+        fprintf(file,"%.16g",time);
         for (int idex=0; idex<729; idex++){
           int i,j,k,l,m,n;
           Tensor63::getIntsFromIndex(idex,i,j,k,l,m,n);
-          fprintf(file,"%.16g;",ten(i,j,k,l,m,n));
+          fprintf(file,";%.16g",ten(i,j,k,l,m,n));
         }
         fprintf(file,"\n");
         fflush(file);
diff --git a/NonLinearSolver/periodicBC/numericalFunctions.h b/NonLinearSolver/periodicBC/numericalFunctions.h
index 8923dfb905adc21cd22298855149c7563a35c7ec..396948758ca7048ee7f67cb62bcf1127f3e4a7a3 100644
--- a/NonLinearSolver/periodicBC/numericalFunctions.h
+++ b/NonLinearSolver/periodicBC/numericalFunctions.h
@@ -131,6 +131,12 @@ inline SPoint3 project(const SPoint3 &P, const SPoint3 &A, const SPoint3& B, con
   return temp;
 };
 
+inline SPoint3 project(const SPoint3& P, double a, double b, double c, double d)
+{
+  double t = -(a*P[0]+b*P[1]+c*P[2]+d)/(a*a+b*b+c*c);
+  return SPoint3(P[0]+t*a,P[1]+t*b,P[2]+t*c);
+}
+
 inline double distance(const SPoint3& P, const SPoint3 &A, const SPoint3&  B){
   SPoint3 H=project(P,A,B);
   double temp=P.distance(H);
@@ -265,5 +271,29 @@ static void printToFile(const fullVector<double>& vec, const std::string filenam
   }
 	fclose(file);
 }
+
+static bool isInside(const SPoint3& P, MElement* e){
+  int dim = e->getDim();
+  std::vector<MVertex*> vv;
+  e->getVertices(vv);
+
+  SPoint3 pp;
+  if (dim == 1){
+    pp = project(P,vv[0]->point(), vv[1]->point());
+  }
+  else if (dim ==2){
+    pp = project(P,vv[0]->point(), vv[1]->point(),vv[2]->point());
+  }
+
+  double xyz[3] = {pp[0],pp[1],pp[2]};
+  double uvw[3];
+
+  e->xyz2uvw(xyz,uvw);
+  if (e->isInside(uvw[0],uvw[1],uvw[2])){
+    return true;
+  }
+  else return false;
+
+};
 
 #endif // NUMERICALFUNCTIONS_H_
diff --git a/cm3apps/install.txt b/cm3apps/install.txt
index 870114a20fa891e272d3889108d7130d1d79aabb..cdafee4b06dcf9b0a6251819fc5011d0d9459ce6 100644
--- a/cm3apps/install.txt
+++ b/cm3apps/install.txt
@@ -570,6 +570,15 @@ and add the following line at the beginning of the file
 It seems that is a problem with the version of gcc (from internet)          
 <folder where you compile>/src/dgshell_wrap.cxx maybe you have to replace #include<Python.h> by #include</usr/include/python2.6/Python.h>
 
+        On Centos, there is a problem with fltk
+        add manually “-lfltk_gl” to 
+        cm3Libraries/[dgshell/cm3apps/DG3D]/[release/debug]/NonLinearSolver/gmsh/CMakeFiles/gmsh.dir/link.txt 
+        and
+        cm3Libraries/[dgshell/cm3apps/DG3D]/[release/debug]/NonLinearSolver/gmsh/CMakeFiles/shared.dir/link.txt 
+after “ccmake ..” prior to “make”
+ 
+
+
       11) launch the tests: the test suite uses ctest so once the compilation is finished you can launch the test with
             ctest -j <number of processor>
 the other useful option for ctest are
diff --git a/dG3D/benchmarks/ANNTest/CMakeLists.txt b/dG3D/benchmarks/ANNTest/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..b8940a7653174e4af5c42c21594bde2de1f2cdb0
--- /dev/null
+++ b/dG3D/benchmarks/ANNTest/CMakeLists.txt
@@ -0,0 +1,12 @@
+# test file
+
+set(PYFILE macro.py)
+
+set(FILES2DELETE 
+  macro.msh
+  disp*.msh
+  stress*.msh
+  *.csv
+)
+
+add_cm3python_test(${PYFILE} "${FILES2DELETE}")
diff --git a/dG3D/benchmarks/ANNTest/macro.geo b/dG3D/benchmarks/ANNTest/macro.geo
new file mode 100644
index 0000000000000000000000000000000000000000..9904580ae3c24582403a2aa7d6ef661af2ebdc99
--- /dev/null
+++ b/dG3D/benchmarks/ANNTest/macro.geo
@@ -0,0 +1,46 @@
+mm = 1.;
+L1 = 200*mm;
+L2 = 200*mm;
+L3 = 200*mm;
+L4 = 200*mm;
+
+lsca1 = L1/5.;
+lsca2 = 0.2*lsca1;
+
+Point(1) = {0,0,0,lsca1};
+Point(2) = {L1,0,0,lsca1};
+Point(3) = {L1,L2+0.7*L4,0,lsca2};
+Point(4) = {L1,L2+L4,0,lsca2*2};
+Point(5) = {-L3,L2+L4,0,lsca1};
+Point(6) = {-L3,L2,0,lsca1};
+Point(7) = {0,L2,0,lsca2};
+//+
+Line(1) = {1, 2};
+//+
+Line(2) = {2, 3};
+//+
+Line(3) = {3, 4};
+//+
+Line(4) = {4, 5};
+//+
+Line(5) = {5, 6};
+//+
+Line(6) = {6, 7};
+//+
+Line(7) = {7, 1};
+//+
+Line Loop(1) = {5, 6, 7, 1, 2, 3, 4};
+//+
+Plane Surface(1) = {1};
+//+
+Extrude {0, 0, 50*mm} {
+  Surface{1}; Layers{2}; Recombine;
+}
+//+
+Physical Volume(11) = {1};
+//+
+Physical Surface(45) = {31};
+//+
+Physical Surface(46) = {19};
+//+
+Physical Surface(47) = {43};
diff --git a/dG3D/benchmarks/ANNTest/macro.msh b/dG3D/benchmarks/ANNTest/macro.msh
new file mode 100644
index 0000000000000000000000000000000000000000..37456d344a75e3b6d7f6ce25c7ed26c611f5d1c2
--- /dev/null
+++ b/dG3D/benchmarks/ANNTest/macro.msh
@@ -0,0 +1,5130 @@
+$MeshFormat
+4.1 0 8
+$EndMeshFormat
+$Entities
+14 21 9 1
+1 0 0 0 0 
+2 200 0 0 0 
+3 200 340 0 0 
+4 200 400 0 0 
+5 -200 400 0 0 
+6 -200 200 0 0 
+7 0 200 0 0 
+8 -200 400 50 0 
+9 -200 200 50 0 
+13 0 200 50 0 
+17 0 0 50 0 
+21 200 0 50 0 
+25 200 340 50 0 
+29 200 400 50 0 
+1 0 0 0 200 0 0 0 2 1 -2 
+2 200 0 0 200 340 0 0 2 2 -3 
+3 200 340 0 200 400 0 0 2 3 -4 
+4 -200 400 0 200 400 0 0 2 4 -5 
+5 -200 200 0 -200 400 0 0 2 5 -6 
+6 -200 200 0 0 200 0 0 2 6 -7 
+7 0 0 0 0 200 0 0 2 7 -1 
+9 -200 200 50 -200 400 50 0 2 8 -9 
+10 -200 200 50 0 200 50 0 2 9 -13 
+11 0 0 50 0 200 50 0 2 13 -17 
+12 0 0 50 200 0 50 0 2 17 -21 
+13 200 0 50 200 340 50 0 2 21 -25 
+14 200 340 50 200 400 50 0 2 25 -29 
+15 -200 400 50 200 400 50 0 2 29 -8 
+17 -200 400 0 -200 400 50 0 2 5 -8 
+18 -200 200 0 -200 200 50 0 2 6 -9 
+22 0 200 0 0 200 50 0 2 7 -13 
+26 0 0 0 0 0 50 0 2 1 -17 
+30 200 0 0 200 0 50 0 2 2 -21 
+34 200 340 0 200 340 50 0 2 3 -25 
+38 200 400 0 200 400 50 0 2 4 -29 
+1 -200 0 0 200 400 0 0 7 5 6 7 1 2 3 4 
+19 -200 200 0 -200 400 50 1 46 4 5 18 -9 -17 
+23 -200 200 0 0 200 50 0 4 6 22 -10 -18 
+27 0 0 0 0 200 50 0 4 7 26 -11 -22 
+31 0 0 0 200 0 50 1 45 4 1 30 -12 -26 
+35 200 0 0 200 340 50 0 4 2 34 -13 -30 
+39 200 340 0 200 400 50 0 4 3 38 -14 -34 
+43 -200 400 0 200 400 50 1 47 4 4 17 -15 -38 
+44 -200 0 50 200 400 50 0 7 9 10 11 12 13 14 15 
+1 -200 0 0 200 400 50 1 11 9 -1 44 19 23 27 31 35 39 43 
+$EndEntities
+$Nodes
+45 1536 1 1536
+0 1 0 1
+1
+0 0 0
+0 2 0 1
+2
+200 0 0
+0 3 0 1
+3
+200 340 0
+0 4 0 1
+4
+200 400 0
+0 5 0 1
+5
+-200 400 0
+0 6 0 1
+6
+-200 200 0
+0 7 0 1
+7
+0 200 0
+0 8 0 1
+8
+-200 400 50
+0 9 0 1
+9
+-200 200 50
+0 13 0 1
+10
+0 200 50
+0 17 0 1
+11
+0 0 50
+0 21 0 1
+12
+200 0 50
+0 25 0 1
+13
+200 340 50
+0 29 0 1
+14
+200 400 50
+1 1 0 4
+15
+16
+17
+18
+39.99999999982826 0 0
+79.9999999996801 0 0
+119.9999999996147 0 0
+159.9999999997812 0 0
+1 2 0 17
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+200 36.35125925689169 0
+200 69.59330906240545 0
+200 99.99208850742717 0
+200 127.7907877804374 0
+200 153.2117989910438 0
+200 176.4584902910972 0
+200 197.7168374240186 0
+200 217.1569064535206 0
+200 234.9342182590514 0
+200 251.1909989864629 0
+200 266.0572958324242 0
+200 279.652044465864 0
+200 292.0839993928202 0
+200 303.4526208203002 0
+200 313.8488581860498 0
+200 323.3558800146683 0
+200 332.0497411576821 0
+1 3 0 5
+36
+37
+38
+39
+40
+200 347.3477238163854 0
+200 355.5952640805158 0
+200 364.8528146716959 0
+200 375.244063023785 0
+200 386.9078466015912 0
+1 4 0 15
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+184.2827328262972 400 0
+167.6390919107019 400 0
+150.0144838099412 400 0
+131.3510851739152 400 0
+111.5876664287795 400 0
+90.65939953130243 400 0
+68.49762565099897 400 0
+45.02964422270631 400 0
+20.17846241130243 400 0
+-6.137439128805994 400 0
+-34.00439676655603 400 0
+-63.51382513234677 400 0
+-94.76252924602255 400 0
+-127.8530272257794 400 0
+-162.893861062444 400 0
+1 5 0 4
+56
+57
+58
+59
+-200 360.0000000002553 0
+-200 320.0000000005107 0
+-200 280.0000000007661 0
+-200 240.0000000003131 0
+1 6 0 10
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+-165.9719214547829 200 0
+-136.5754806314233 200 0
+-111.1802506529853 200 0
+-89.24163169709811 200 0
+-70.28912866913581 200 0
+-53.91629414173863 200 0
+-39.77200333481375 200 0
+-27.55292685721756 200 0
+-16.99701660713612 200 0
+-7.877896651386038 200 0
+1 7 0 10
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+0 192.1221033486929 0
+0 183.0029833930467 0
+0 172.4470731430999 0
+0 160.2279966656763 0
+0 146.0837058589706 0
+0 129.7108713318493 0
+0 110.7583683039709 0
+0 88.81974934813695 0
+0 63.42451936961834 0
+0 34.02807854582008 0
+1 9 0 4
+80
+81
+82
+83
+-200 360.0000000002553 50
+-200 320.0000000005107 50
+-200 280.0000000007661 50
+-200 240.0000000003131 50
+1 10 0 10
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+-165.9719214547829 200 50
+-136.5754806314233 200 50
+-111.1802506529853 200 50
+-89.24163169709811 200 50
+-70.28912866913581 200 50
+-53.91629414173863 200 50
+-39.77200333481375 200 50
+-27.55292685721756 200 50
+-16.99701660713612 200 50
+-7.877896651386038 200 50
+1 11 0 10
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+0 192.1221033486929 50
+0 183.0029833930467 50
+0 172.4470731430999 50
+0 160.2279966656763 50
+0 146.0837058589706 50
+0 129.7108713318493 50
+0 110.7583683039709 50
+0 88.81974934813695 50
+0 63.42451936961834 50
+0 34.02807854582008 50
+1 12 0 4
+104
+105
+106
+107
+39.99999999982826 0 50
+79.9999999996801 0 50
+119.9999999996147 0 50
+159.9999999997812 0 50
+1 13 0 17
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+200 36.35125925689169 50
+200 69.59330906240545 50
+200 99.99208850742717 50
+200 127.7907877804374 50
+200 153.2117989910438 50
+200 176.4584902910972 50
+200 197.7168374240186 50
+200 217.1569064535206 50
+200 234.9342182590514 50
+200 251.1909989864629 50
+200 266.0572958324242 50
+200 279.652044465864 50
+200 292.0839993928202 50
+200 303.4526208203002 50
+200 313.8488581860498 50
+200 323.3558800146683 50
+200 332.0497411576821 50
+1 14 0 5
+125
+126
+127
+128
+129
+200 347.3477238163854 50
+200 355.5952640805158 50
+200 364.8528146716959 50
+200 375.244063023785 50
+200 386.9078466015912 50
+1 15 0 15
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+184.2827328262972 400 50
+167.6390919107019 400 50
+150.0144838099412 400 50
+131.3510851739152 400 50
+111.5876664287795 400 50
+90.65939953130243 400 50
+68.49762565099897 400 50
+45.02964422270631 400 50
+20.17846241130243 400 50
+-6.137439128805994 400 50
+-34.00439676655603 400 50
+-63.51382513234677 400 50
+-94.76252924602255 400 50
+-127.8530272257794 400 50
+-162.893861062444 400 50
+1 17 0 1
+145
+-200 400 25
+1 18 0 1
+146
+-200 200 25
+1 22 0 1
+147
+0 200 25
+1 26 0 1
+148
+0 0 25
+1 30 0 1
+149
+200 0 25
+1 34 0 1
+150
+200 340 25
+1 38 0 1
+151
+200 400 25
+2 1 0 440
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+86.92997807549386 272.5398246609194 0
+-1.845975077333043 290.4828936694857 0
+95.03748830577612 177.6288230764258 0
+129.7271303450724 326.8581009618439 0
+-98.99637119244331 296.8330764703095 0
+54.34735034077209 222.115014617429 0
+135.3295135109188 227.8139565306641 0
+45.03448555436638 178.7705809763952 0
+69.30032904988111 117.4879099116565 0
+-3.938948325693019 246.3589226983871 0
+66.61065825963699 335.6772474367513 0
+162.0542437207244 351.7886894355649 0
+39.7789243619006 263.9007608501281 0
+155.5500252245591 283.7885078597757 0
+-46.7616832436957 245.6608745126196 0
+166.9659218920727 318.6023691003588 0
+22.07364805495225 225.2223176213374 0
+94.65108024689235 232.9340824107713 0
+136.0903926554102 123.7784497410866 0
+146.6237530163064 177.2262526150338 0
+115.4627528253289 295.1114465518832 0
+10.57052772550609 346.4215124102847 0
+-51.19522588386188 332.0985673101427 0
+43.56193024712998 141.6365135892354 0
+25.85738457239741 196.9298874482127 0
+34.11522071117154 307.6356818040284 0
+119.2607971838104 259.4643934946539 0
+-21.94059913817574 226.9284393003819 0
+161.5294321453812 249.9243769785628 0
+67.4499122961717 250.4045759063591 0
+127.7797312191989 361.054100274312 0
+85.66249858112566 308.8936607733846 0
+-49.92839475289242 289.7489461559057 0
+179.5443790191545 335.8980909892921 0
+79.26915441471499 205.2574929802419 0
+176.9043961286525 370.2299182725147 0
+114.4008745306427 208.5075844990519 0
+59.56674288014521 289.8520326165412 0
+-95.69236768644957 245.5298438572586 0
+68.1307104700626 151.9963527823363 0
+110.9420927265907 60.3979501775725 0
+95.43536469695968 341.4703204144132 0
+-0.3420234254187363 223.9706530021379 0
+55.13584218432781 57.83147588339808 0
+40.89162287975475 240.3292657403581 0
+166.6314440260113 218.1061415269372 0
+179.0184389086513 298.718642799868 0
+22.96938263827372 169.4457061660833 0
+10.91325482111704 269.2984162864417 0
+47.85748900974684 200.4360870910087 0
+18.51381310810968 246.0320554597151 0
+177.81998805256 273.5012218948986 0
+183.523464852949 351.752220316229 0
+-22.25275378590845 269.8706158779726 0
+100.3656285257885 142.7084975383061 0
+147.9896254814815 308.7524803056875 0
+-97.46068700038899 348.9078404334107 0
+66.15795162970028 184.4720888051837 0
+33.63933151110373 102.026071653551 0
+-147.2239549682952 266.4009783328775 0
+152.1897945935446 376.3311237926879 0
+74.68453831557642 366.8658746154462 0
+109.3904569692351 316.1189491713359 0
+14.47428210538401 208.8907601017696 0
+142.524688398092 263.6001549023065 0
+41.89015229795443 361.044860264292 0
+151.1461807842349 332.3069057738082 0
+74.72200245714978 232.2915635721619 0
+-17.21610160364253 325.3093783193129 0
+156.4840203781309 89.66538928625931 0
+184.4817023841507 318.2058917887191 0
+164.3181959965111 146.0416777402377 0
+85.77180161875157 250.4268320398284 0
+-22.89189302148828 363.2656971363705 0
+138.735697701621 203.1629675861398 0
+38.24900633011953 216.4911343079566 0
+121.4778697145869 182.0927259130383 0
+-146.0023362824234 325.5444569106996 0
+12.74577029197836 189.2640252991976 0
+130.9987113778268 154.6289515310685 0
+-12.43745662926108 214.0956053097911 0
+-25.56815577574629 247.9406449326575 0
+26.88510253016961 286.298955241161 0
+109.002033530114 276.6476836805871 0
+-61.49039731687344 223.0638719861939 0
+170.7522715549734 190.7886502210183 0
+115.3313316988033 237.7057213830695 0
+102.0373780053269 372.2541013409489 0
+103.6995808991383 108.8716001069061 0
+66.20738010157879 271.0246205928433 0
+9.259517814804784 317.1617534167852 0
+133.5837473964461 281.7790874642839 0
+-68.64667274342067 264.1880672010495 0
+139.9435782084522 352.7703372281192 0
+-43.68920691848556 221.3854341872494 0
+60.21994430906854 310.2350832594555 0
+40.79105259681809 332.111699196494 0
+-124.5327204528797 230.2361031136782 0
+126.5455287030451 308.1006672480942 0
+94.41773459600353 290.2891665218889 0
+66.45031765362738 207.0174701364531 0
+42.52866764274705 156.7163974569556 0
+160.9870083799573 302.5764917459732 0
+20.54323371811547 146.0280707064119 0
+23.84491283607116 118.9317856441936 0
+9.836150184915113 236.7902265378426 0
+178.9258569773027 234.623815500797 0
+56.88404471710212 238.403085728407 0
+120.8542264809939 348.2077200847156 0
+27.85240832143786 179.9707278230519 0
+-4.832361452822046 266.1077733931639 0
+149.6674400249979 244.6200195484073 0
+-28.22227084083961 302.6815578902989 0
+181.920982493625 255.3553833157212 0
+94.87339168219452 217.2963031880259 0
+98.46698987392224 194.2252326527781 0
+101.5648573781447 258.0232859957135 0
+144.6819004546819 44.23209774593604 0
+49.99889556341516 255.4941972138608 0
+186.3833793106452 381.0759548126877 0
+157.655136880412 269.7122869318577 0
+-70.54552670974488 310.946737842854 0
+188.1100400543327 336.1604954029319 0
+175.4833044429091 111.3374760680668 0
+89.6068312126605 323.8922164460756 0
+86.18745526610863 80.64838509182209 0
+-140.4542696495127 361.0451189610943 0
+17.63864648772741 369.1756352370702 0
+-69.90108762729501 366.0345074850528 0
+161.6576363441156 339.2579488603936 0
+77.69620772972867 287.1898236906435 0
+188.2613826700527 284.3729297644517 0
+44.05212438384836 285.5509178463987 0
+-88.11500237850464 222.1796850394365 0
+64.7644284378176 166.0685924463517 0
+35.13014597696588 229.427988415308 0
+12.24536212905205 198.9537019104137 0
+4.014314100398186 213.3566256125446 0
+111.9434587846098 163.8933842515345 0
+-27.06070246968827 211.6423177600877 0
+80.31946761311349 172.705749271557 0
+-9.628828804384245 233.2198039440134 0
+-46.56807949344874 264.5746679709374 0
+28.91170356941772 255.282509832093 0
+31.00553071870667 67.68260632076115 0
+83.2596682506684 130.9922255795619 0
+185.4095501687265 361.0746550553399 0
+28.14037066594199 208.6721159481743 0
+-158.0526569503168 235.7460121219165 0
+125.7043050162406 248.5027465829397 0
+41.81448116693959 189.8741141172565 0
+187.0701849603392 306.1598084678718 0
+12.2230812518706 172.8567136041262 0
+177.678800895451 166.2270365963777 0
+167.7511036109824 285.5594412573662 0
+135.159085573007 296.7689588561836 0
+173.7093080797574 344.7561935229901 0
+63.26618875583571 136.0152394156748 0
+83.2375350875197 191.0300717467658 0
+161.0464157924185 234.8689338507018 0
+120.1893623452322 221.9502413474028 0
+165.8936759095731 384.5533496980346 0
+133.9836080619496 380.3122131514867 0
+6.865155315226477 255.9324769657851 0
+91.89653828216248 160.7549029737168 0
+129.5446032518579 100.7882377788658 0
+-65.13190334998137 243.1180525373405 0
+74.02476659302236 218.8034506974655 0
+104.5810828957702 301.0203588108271 0
+88.78986562828175 35.00709116341936 0
+148.624938579874 218.4322589111619 0
+13.50371680714045 299.0959010615858 0
+54.84791193534658 378.8127461963253 0
+11.70669419659199 220.7195947385318 0
+64.39260728768224 82.82524655486634 0
+53.58124232782706 267.8421778235202 0
+183.0331914078373 206.7525996360077 0
+-116.2169450786251 268.8699571800341 0
+79.05064877276945 347.8994369461802 0
+102.7531111000576 245.1976105986878 0
+157.3105335236736 203.5472763070651 0
+48.60797980397444 300.3233792699978 0
+162.814236601417 365.724291584954 0
+30.33002026893303 40.33213550120646 0
+153.6957368477237 319.5159572802438 0
+25.52763546166952 236.8094792745733 0
+122.9013856410317 272.0464530223888 0
+115.6326525114473 328.9524509784886 0
+24.9728719161998 266.6634407019705 0
+174.2802023217623 309.1702473670656 0
+192.3368700288052 327.8828936199377 0
+75.85445619749134 260.5052233049278 0
+174.4993926737941 358.1564592126311 0
+52.59650010961262 188.1595423572546 0
+191.7971253832731 343.9790738575904 0
+-72.86332416592219 284.7141621717169 0
+-48.36596809532659 311.5839761419103 0
+45.15237112470624 122.1727522733357 0
+117.0281597338917 374.5616233842051 0
+61.50766874921069 354.3557922057897 0
+36.03840041941216 198.8708723683465 0
+150.6486521942011 359.8984729257062 0
+-88.72376426519571 268.8942949456747 0
+76.00923687916128 244.4667316421691 0
+106.5541885337173 223.447047111526 0
+49.69098594320698 213.0197512933385 0
+48.27336217794971 231.3907425801347 0
+175.3954456312701 325.6741622623068 0
+-35.37458883020307 233.2788716691012 0
+188.8798375792572 273.2989384089891 0
+13.64551070327079 160.9970478784866 0
+46.02185228212728 317.2967909044941 0
+73.04347244615177 319.3677220822396 0
+84.53484726660703 225.175456315065 0
+-12.4775980414682 279.9895676441719 0
+-116.5123874714367 321.4513156828882 0
+-129.073628184786 295.4644141943474 0
+-44.14193243088081 377.4883174872433 0
+-9.9091533182812 344.7456330659264 0
+142.8809203996163 322.8320515623951 0
+27.78530897694089 323.4421573073828 0
+138.5681951454366 337.2266669175927 0
+-168.0769407019322 293.2444205814639 0
+-74.32256489224594 338.3067399420135 0
+12.07252320067854 283.9796329871758 0
+34.9482233848904 171.0489066468835 0
+71.10797876211453 299.2448447212166 0
+-3.83856033208486 207.4215110069667 0
+86.72955225609019 381.5714578613906 0
+124.7161813610393 197.7073032130787 0
+120.8141031107244 31.94030600954405 0
+151.6043628548301 161.8276206139543 0
+-7.316038063191105 309.7470133946634 0
+-4.567213483291249 377.0958321337476 0
+109.2496382709414 356.343296647972 0
+-14.5337101802225 254.6800758361508 0
+144.7039692290211 276.1153402812161 0
+-112.0388667346044 373.0254846331554 0
+-169.9560752758295 345.0789215656445 0
+170.1972827120067 60.44344369310014 0
+71.07334028757911 197.20493481154 0
+107.4315053368151 185.8254279217423 0
+150.0563887029054 295.5612825331462 0
+130.5501930111884 262.2987535084999 0
+54.80671259011251 25.26511360983525 0
+-27.95393749970001 285.6612919799531 0
+62.69984064829485 228.6138666427094 0
+14.43260595311533 102.6871678471708 0
+-30.09310151647676 339.8765985429455 0
+151.1709710369359 345.0252403992953 0
+189.3138847826586 295.6769280159791 0
+55.20478568158561 151.1664390042978 0
+106.2918469043942 288.030960193572 0
+132.7508397933067 215.6883050751242 0
+163.4013145310558 328.0445757359277 0
+168.4414467615773 261.9366743121021 0
+140.1684477101883 367.6470012794193 0
+21.35333389539323 216.3029504612673 0
+29.27551904473911 343.7187449834056 0
+-106.7077757090188 222.0890934051445 0
+84.48739444677952 237.6820822233829 0
+192.201932469971 353.2502708224708 0
+0.7659686900344564 277.9716567960877 0
+31.46117499818853 382.6823115867254 0
+185.7180984822303 222.3147362752628 0
+133.2482082373865 170.9385273228495 0
+115.5604588323648 305.1875240153176 0
+91.19785338627733 361.0674146377251 0
+6.80114801946721 245.1215227423808 0
+66.25767691886549 239.9939474046688 0
+-175.8269148046903 256.7043616824062 0
+19.57412714690565 201.6930743386521 0
+59.58809439336216 197.3967335992801 0
+153.4570448326631 257.9406621168512 0
+135.6592933519886 187.0576236790889 0
+-21.83132700194957 237.8954644619648 0
+90.57841828463549 260.4917668340041 0
+188.8586529158268 244.1483916664509 0
+193.9616016160356 318.8748469470378 0
+-49.51892458490963 210.7805443878118 0
+177.122706095177 389.6265949489487 0
+143.5860528970498 142.7185012909102 0
+29.49809129553786 155.05518521116 0
+114.5951219498991 126.4084411222005 0
+150.5172674989028 110.0807077400237 0
+121.8479442581393 317.3351431440988 0
+61.71517397833493 259.3999296155209 0
+-11.25190220676462 222.0178918754376 0
+103.0776677368183 385.7436646750896 0
+17.84493048911485 258.5985331429066 0
+182.2567599091506 139.8845395603765 0
+97.36395630180985 312.393733904279 0
+35.81905092042928 295.5972222143395 0
+96.86031018863048 279.9423974959205 0
+5.033218898525131 188.025487654398 0
+160.6004307053633 177.2186323286236 0
+11.63390829669948 136.5559125594147 0
+29.80835669847496 220.0331469024824 0
+79.76905229014329 333.692338735137 0
+-74.21353175008733 214.3513973585123 0
+190.5089607174592 368.7835742020214 0
+183.1149355078822 343.0232125792234 0
+-36.14293439210918 210.0793545063865 0
+-0.4015615838493365 236.3766992036981 0
+0.4626465534218314 332.2146695072123 0
+-12.33852645407734 205.7761547110514 0
+146.3195253933518 233.0573132378916 0
+6.270402760419723 204.2889954335569 0
+180.9499566718451 84.79269878491631 0
+108.0357159189294 87.19929238576583 0
+33.64782523749238 275.6380473653139 0
+112.7186135927165 251.4804080386693 0
+76.57113671723417 276.3840891916819 0
+135.6122811781592 73.30944717758963 0
+142.9317889920845 287.4368741691176 0
+92.29183568190618 243.330984018205 0
+-33.33938751456261 258.2477270645468 0
+121.1063599078229 287.1155043918265 0
+45.13817015380284 222.4889262428334 0
+103.236731749491 327.597914035707 0
+51.73795937476723 341.7662202127788 0
+-91.56750745325196 323.2891420742952 0
+20.83266952757781 17.77180329270968 0
+-46.29687269159066 355.3821522469584 0
+154.3976427975022 388.3322595662991 0
+193.6240886712313 360.7113157664088 0
+56.23202938649898 278.5360168198804 0
+-62.10271140543722 210.1546056470412 0
+49.6624975612889 166.9266239889585 0
+61.53435214646646 216.3154853231191 0
+-50.58508710851068 232.3468473417028 0
+-19.30365205037856 208.3610523646077 0
+-56.90161356704563 255.4467712695485 0
+130.7834379041726 345.5891685332683 0
+-4.472867487149274 215.9062161980069 0
+49.48351931105579 244.9258882013415 0
+-30.89963248410058 220.8387942127538 0
+9.713227103036289 150.4389759186361 0
+-35.01853358802947 322.3100156409221 0
+157.8941142118547 128.2447481574869 0
+-1.174108040103017 360.0916179225915 0
+110.2371301980847 265.3357836465251 0
+190.1586376924362 391.0736367208813 0
+187.5390024820203 187.2702655252496 0
+70.59290525902182 382.4552166746442 0
+7.68237880915623 180.3669981406156 0
+173.6528203012305 25.15990453770258 0
+183.9736874235427 328.7643068126376 0
+20.71584364968019 276.9551243056451 0
+-165.6954784473477 372.4456568585622 0
+22.29297783815787 188.4072183227871 0
+84.72448087929894 295.9285262296028 0
+-181.5177351123655 221.2490224139019 0
+85.36825794817848 214.5271306241877 0
+31.36939110505685 244.818718894667 0
+120.6105402858663 141.7895599616276 0
+-115.788656858974 243.0013887779554 0
+189.7241616250885 263.8807676876992 0
+139.8054983902886 252.7522890012546 0
+-38.74744057258523 274.7341154612069 0
+-22.34857496620447 383.5699693514723 0
+99.19545460918386 268.8301237189449 0
+123.5030744014923 298.7331404301542 0
+169.6486099249078 296.2781421917267 0
+159.8006300284853 312.1473455623295 0
+21.27473378982907 309.864202461164 0
+83.30290865034593 147.3455818037436 0
+87.6079017687502 116.1395185303793 0
+126.6410452067817 235.4162150049413 0
+18.21373313032452 180.3098322833647 0
+173.4537978476885 246.8095959373892 0
+5.21225385760607 196.0610516743465 0
+40.07234279843347 250.7918901220747 0
+80.72815849549841 61.0510434365317 0
+18.54312439569827 195.0495814638526 0
+86.79766477713716 282.9114445671182 0
+169.6827010895561 205.0240323521827 0
+26.31956495174799 299.6983925564557 0
+-140.7032464703003 221.2466464511295 0
+104.6705662435309 235.1227126884393 0
+17.22929638946679 232.652093421357 0
+170.7416167210707 334.726194274182 0
+178.2307298803876 288.8014354015306 0
+-123.7551316922303 214.2862110349991 0
+97.99000768017316 126.6590364892933 0
+55.64317265855716 176.8794857148288 0
+18.73227157594583 81.18890617034367 0
+91.82258147696328 205.4001833105146 0
+-16.43324763355657 292.3787768562272 0
+-57.00026782204577 274.1575459599951 0
+165.7636648331419 275.2036584035446 0
+-124.7305923041963 343.5174504305637 0
+-88.72670737861463 378.113864462119 0
+135.8780906972786 312.1668769532028 0
+193.1026977921051 312.1084052419958 0
+36.30442390691286 181.6674704321361 0
+39.9952504736855 207.4979922017649 0
+-135.262330730767 247.2324447360472 0
+59.75343852172084 299.9397799261352 0
+93.34995065080163 301.7050892479965 0
+68.0699667237087 283.3572461829719 0
+57.13034287652111 325.3829609737454 0
+-172.0881632850743 320.0082267577138 0
+29.0390745863767 136.7300366639585 0
+174.8124910919654 379.873595255502 0
+-3.510044537581288 255.908435584929 0
+94.5920048126991 251.4940958972878 0
+123.3219619325762 388.7756287269557 0
+160.7986271686624 292.7527731175975 0
+-77.42835120103496 233.578918928737 0
+-12.65042194530749 242.7452685128119 0
+57.02424782928196 206.8371054886399 0
+102.2674845411123 206.2380572067303 0
+113.2166558325793 195.6691996685413 0
+7.292216164079107 229.2462546514494 0
+9.105212883201014 120.2346198179101 0
+151.6136633089877 189.8335671228282 0
+-79.92690472431345 253.23066279368 0
+175.2808180573139 317.9131676296125 0
+142.1008756016298 390.6387589665475 0
+124.7090580676015 208.7788894435715 0
+194.8225070878186 336.0174207422608 0
+31.43386480627034 189.3060580434816 0
+110.833192619761 339.7457248716436 0
+55.82755195794508 102.210127144711 0
+-20.18316962644134 217.6963652618069 0
+137.2445545904299 240.3604233176831 0
+124.1075122328543 336.7735907761922 0
+134.8527967351558 271.1679578357391 0
+17.49148464131733 56.06329215645545 0
+43.12218920595189 82.29407228793852 0
+77.68281069070041 159.7742358555411 0
+15.47070402308254 332.5917675250141 0
+58.6315371308242 248.1036040116931 0
+45.48208458315577 274.4590852465802 0
+143.8297647732065 20.26646165863653 0
+-34.76406068186607 244.5301197015307 0
+9.182232634094035 387.0606278226651 0
+167.3080869550105 374.414336816248 0
+82.15016316406211 99.34029710372958 0
+2 19 0 4
+592
+593
+594
+595
+-200 360.0000000002553 25
+-200 320.0000000005107 25
+-200 280.0000000007661 25
+-200 240.0000000003131 25
+2 23 0 10
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+-165.9719214547829 200 25
+-136.5754806314233 200 25
+-111.1802506529853 200 25
+-89.24163169709811 200 25
+-70.28912866913581 200 25
+-53.91629414173863 200 25
+-39.77200333481375 200 25
+-27.55292685721756 200 25
+-16.99701660713612 200 25
+-7.877896651386038 200 25
+2 27 0 10
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+0 192.1221033486929 25
+0 183.0029833930467 25
+0 172.4470731430999 25
+0 160.2279966656763 25
+0 146.0837058589706 25
+0 129.7108713318493 25
+0 110.7583683039709 25
+0 88.81974934813695 25
+0 63.42451936961834 25
+0 34.02807854582008 25
+2 31 0 4
+616
+617
+618
+619
+39.99999999982826 0 25
+79.9999999996801 0 25
+119.9999999996147 0 25
+159.9999999997812 0 25
+2 35 0 17
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+200 36.35125925689169 25
+200 69.59330906240545 25
+200 99.99208850742717 25
+200 127.7907877804374 25
+200 153.2117989910438 25
+200 176.4584902910972 25
+200 197.7168374240186 25
+200 217.1569064535206 25
+200 234.9342182590514 25
+200 251.1909989864629 25
+200 266.0572958324242 25
+200 279.652044465864 25
+200 292.0839993928202 25
+200 303.4526208203002 25
+200 313.8488581860498 25
+200 323.3558800146683 25
+200 332.0497411576821 25
+2 39 0 5
+637
+638
+639
+640
+641
+200 347.3477238163854 25
+200 355.5952640805158 25
+200 364.8528146716959 25
+200 375.244063023785 25
+200 386.9078466015912 25
+2 43 0 15
+642
+643
+644
+645
+646
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+184.2827328262972 400 25
+167.6390919107019 400 25
+150.0144838099412 400 25
+131.3510851739152 400 25
+111.5876664287795 400 25
+90.65939953130243 400 25
+68.49762565099897 400 25
+45.02964422270631 400 25
+20.17846241130243 400 25
+-6.137439128805994 400 25
+-34.00439676655603 400 25
+-63.51382513234677 400 25
+-94.76252924602255 400 25
+-127.8530272257794 400 25
+-162.893861062444 400 25
+2 44 0 440
+657
+658
+659
+660
+661
+662
+663
+664
+665
+666
+667
+668
+669
+670
+671
+672
+673
+674
+675
+676
+677
+678
+679
+680
+681
+682
+683
+684
+685
+686
+687
+688
+689
+690
+691
+692
+693
+694
+695
+696
+697
+698
+699
+700
+701
+702
+703
+704
+705
+706
+707
+708
+709
+710
+711
+712
+713
+714
+715
+716
+717
+718
+719
+720
+721
+722
+723
+724
+725
+726
+727
+728
+729
+730
+731
+732
+733
+734
+735
+736
+737
+738
+739
+740
+741
+742
+743
+744
+745
+746
+747
+748
+749
+750
+751
+752
+753
+754
+755
+756
+757
+758
+759
+760
+761
+762
+763
+764
+765
+766
+767
+768
+769
+770
+771
+772
+773
+774
+775
+776
+777
+778
+779
+780
+781
+782
+783
+784
+785
+786
+787
+788
+789
+790
+791
+792
+793
+794
+795
+796
+797
+798
+799
+800
+801
+802
+803
+804
+805
+806
+807
+808
+809
+810
+811
+812
+813
+814
+815
+816
+817
+818
+819
+820
+821
+822
+823
+824
+825
+826
+827
+828
+829
+830
+831
+832
+833
+834
+835
+836
+837
+838
+839
+840
+841
+842
+843
+844
+845
+846
+847
+848
+849
+850
+851
+852
+853
+854
+855
+856
+857
+858
+859
+860
+861
+862
+863
+864
+865
+866
+867
+868
+869
+870
+871
+872
+873
+874
+875
+876
+877
+878
+879
+880
+881
+882
+883
+884
+885
+886
+887
+888
+889
+890
+891
+892
+893
+894
+895
+896
+897
+898
+899
+900
+901
+902
+903
+904
+905
+906
+907
+908
+909
+910
+911
+912
+913
+914
+915
+916
+917
+918
+919
+920
+921
+922
+923
+924
+925
+926
+927
+928
+929
+930
+931
+932
+933
+934
+935
+936
+937
+938
+939
+940
+941
+942
+943
+944
+945
+946
+947
+948
+949
+950
+951
+952
+953
+954
+955
+956
+957
+958
+959
+960
+961
+962
+963
+964
+965
+966
+967
+968
+969
+970
+971
+972
+973
+974
+975
+976
+977
+978
+979
+980
+981
+982
+983
+984
+985
+986
+987
+988
+989
+990
+991
+992
+993
+994
+995
+996
+997
+998
+999
+1000
+1001
+1002
+1003
+1004
+1005
+1006
+1007
+1008
+1009
+1010
+1011
+1012
+1013
+1014
+1015
+1016
+1017
+1018
+1019
+1020
+1021
+1022
+1023
+1024
+1025
+1026
+1027
+1028
+1029
+1030
+1031
+1032
+1033
+1034
+1035
+1036
+1037
+1038
+1039
+1040
+1041
+1042
+1043
+1044
+1045
+1046
+1047
+1048
+1049
+1050
+1051
+1052
+1053
+1054
+1055
+1056
+1057
+1058
+1059
+1060
+1061
+1062
+1063
+1064
+1065
+1066
+1067
+1068
+1069
+1070
+1071
+1072
+1073
+1074
+1075
+1076
+1077
+1078
+1079
+1080
+1081
+1082
+1083
+1084
+1085
+1086
+1087
+1088
+1089
+1090
+1091
+1092
+1093
+1094
+1095
+1096
+86.92997807549386 272.5398246609194 50
+-1.845975077333043 290.4828936694857 50
+95.03748830577612 177.6288230764258 50
+129.7271303450724 326.8581009618439 50
+-98.99637119244331 296.8330764703095 50
+54.34735034077209 222.115014617429 50
+135.3295135109188 227.8139565306641 50
+45.03448555436638 178.7705809763952 50
+69.30032904988111 117.4879099116565 50
+-3.938948325693019 246.3589226983871 50
+66.61065825963699 335.6772474367513 50
+162.0542437207244 351.7886894355649 50
+39.7789243619006 263.9007608501281 50
+155.5500252245591 283.7885078597757 50
+-46.7616832436957 245.6608745126196 50
+166.9659218920727 318.6023691003588 50
+22.07364805495225 225.2223176213374 50
+94.65108024689235 232.9340824107713 50
+136.0903926554102 123.7784497410866 50
+146.6237530163064 177.2262526150338 50
+115.4627528253289 295.1114465518832 50
+10.57052772550609 346.4215124102847 50
+-51.19522588386188 332.0985673101427 50
+43.56193024712998 141.6365135892354 50
+25.85738457239741 196.9298874482127 50
+34.11522071117154 307.6356818040284 50
+119.2607971838104 259.4643934946539 50
+-21.94059913817574 226.9284393003819 50
+161.5294321453812 249.9243769785628 50
+67.4499122961717 250.4045759063591 50
+127.7797312191989 361.054100274312 50
+85.66249858112566 308.8936607733846 50
+-49.92839475289242 289.7489461559057 50
+179.5443790191545 335.8980909892921 50
+79.26915441471499 205.2574929802419 50
+176.9043961286525 370.2299182725147 50
+114.4008745306427 208.5075844990519 50
+59.56674288014521 289.8520326165412 50
+-95.69236768644957 245.5298438572586 50
+68.1307104700626 151.9963527823363 50
+110.9420927265907 60.3979501775725 50
+95.43536469695968 341.4703204144132 50
+-0.3420234254187363 223.9706530021379 50
+55.13584218432781 57.83147588339808 50
+40.89162287975475 240.3292657403581 50
+166.6314440260113 218.1061415269372 50
+179.0184389086513 298.718642799868 50
+22.96938263827372 169.4457061660833 50
+10.91325482111704 269.2984162864417 50
+47.85748900974684 200.4360870910087 50
+18.51381310810968 246.0320554597151 50
+177.81998805256 273.5012218948986 50
+183.523464852949 351.752220316229 50
+-22.25275378590845 269.8706158779726 50
+100.3656285257885 142.7084975383061 50
+147.9896254814815 308.7524803056875 50
+-97.46068700038899 348.9078404334107 50
+66.15795162970028 184.4720888051837 50
+33.63933151110373 102.026071653551 50
+-147.2239549682952 266.4009783328775 50
+152.1897945935446 376.3311237926879 50
+74.68453831557642 366.8658746154462 50
+109.3904569692351 316.1189491713359 50
+14.47428210538401 208.8907601017696 50
+142.524688398092 263.6001549023065 50
+41.89015229795443 361.044860264292 50
+151.1461807842349 332.3069057738082 50
+74.72200245714978 232.2915635721619 50
+-17.21610160364253 325.3093783193129 50
+156.4840203781309 89.66538928625931 50
+184.4817023841507 318.2058917887191 50
+164.3181959965111 146.0416777402377 50
+85.77180161875157 250.4268320398284 50
+-22.89189302148828 363.2656971363705 50
+138.735697701621 203.1629675861398 50
+38.24900633011953 216.4911343079566 50
+121.4778697145869 182.0927259130383 50
+-146.0023362824234 325.5444569106996 50
+12.74577029197836 189.2640252991976 50
+130.9987113778268 154.6289515310685 50
+-12.43745662926108 214.0956053097911 50
+-25.56815577574629 247.9406449326575 50
+26.88510253016961 286.298955241161 50
+109.002033530114 276.6476836805871 50
+-61.49039731687344 223.0638719861939 50
+170.7522715549734 190.7886502210183 50
+115.3313316988033 237.7057213830695 50
+102.0373780053269 372.2541013409489 50
+103.6995808991383 108.8716001069061 50
+66.20738010157879 271.0246205928433 50
+9.259517814804784 317.1617534167852 50
+133.5837473964461 281.7790874642839 50
+-68.64667274342067 264.1880672010495 50
+139.9435782084522 352.7703372281192 50
+-43.68920691848556 221.3854341872494 50
+60.21994430906854 310.2350832594555 50
+40.79105259681809 332.111699196494 50
+-124.5327204528797 230.2361031136782 50
+126.5455287030451 308.1006672480942 50
+94.41773459600353 290.2891665218889 50
+66.45031765362738 207.0174701364531 50
+42.52866764274705 156.7163974569556 50
+160.9870083799573 302.5764917459732 50
+20.54323371811547 146.0280707064119 50
+23.84491283607116 118.9317856441936 50
+9.836150184915113 236.7902265378426 50
+178.9258569773027 234.623815500797 50
+56.88404471710212 238.403085728407 50
+120.8542264809939 348.2077200847156 50
+27.85240832143786 179.9707278230519 50
+-4.832361452822046 266.1077733931639 50
+149.6674400249979 244.6200195484073 50
+-28.22227084083961 302.6815578902989 50
+181.920982493625 255.3553833157212 50
+94.87339168219452 217.2963031880259 50
+98.46698987392224 194.2252326527781 50
+101.5648573781447 258.0232859957135 50
+144.6819004546819 44.23209774593604 50
+49.99889556341516 255.4941972138608 50
+186.3833793106452 381.0759548126877 50
+157.655136880412 269.7122869318577 50
+-70.54552670974488 310.946737842854 50
+188.1100400543327 336.1604954029319 50
+175.4833044429091 111.3374760680668 50
+89.6068312126605 323.8922164460756 50
+86.18745526610863 80.64838509182209 50
+-140.4542696495127 361.0451189610943 50
+17.63864648772741 369.1756352370702 50
+-69.90108762729501 366.0345074850528 50
+161.6576363441156 339.2579488603936 50
+77.69620772972867 287.1898236906435 50
+188.2613826700527 284.3729297644517 50
+44.05212438384836 285.5509178463987 50
+-88.11500237850464 222.1796850394365 50
+64.7644284378176 166.0685924463517 50
+35.13014597696588 229.427988415308 50
+12.24536212905205 198.9537019104137 50
+4.014314100398186 213.3566256125446 50
+111.9434587846098 163.8933842515345 50
+-27.06070246968827 211.6423177600877 50
+80.31946761311349 172.705749271557 50
+-9.628828804384245 233.2198039440134 50
+-46.56807949344874 264.5746679709374 50
+28.91170356941772 255.282509832093 50
+31.00553071870667 67.68260632076115 50
+83.2596682506684 130.9922255795619 50
+185.4095501687265 361.0746550553399 50
+28.14037066594199 208.6721159481743 50
+-158.0526569503168 235.7460121219165 50
+125.7043050162406 248.5027465829397 50
+41.81448116693959 189.8741141172565 50
+187.0701849603392 306.1598084678718 50
+12.2230812518706 172.8567136041262 50
+177.678800895451 166.2270365963777 50
+167.7511036109824 285.5594412573662 50
+135.159085573007 296.7689588561836 50
+173.7093080797574 344.7561935229901 50
+63.26618875583571 136.0152394156748 50
+83.2375350875197 191.0300717467658 50
+161.0464157924185 234.8689338507018 50
+120.1893623452322 221.9502413474028 50
+165.8936759095731 384.5533496980346 50
+133.9836080619496 380.3122131514867 50
+6.865155315226477 255.9324769657851 50
+91.89653828216248 160.7549029737168 50
+129.5446032518579 100.7882377788658 50
+-65.13190334998137 243.1180525373405 50
+74.02476659302236 218.8034506974655 50
+104.5810828957702 301.0203588108271 50
+88.78986562828175 35.00709116341936 50
+148.624938579874 218.4322589111619 50
+13.50371680714045 299.0959010615858 50
+54.84791193534658 378.8127461963253 50
+11.70669419659199 220.7195947385318 50
+64.39260728768224 82.82524655486634 50
+53.58124232782706 267.8421778235202 50
+183.0331914078373 206.7525996360077 50
+-116.2169450786251 268.8699571800341 50
+79.05064877276945 347.8994369461802 50
+102.7531111000576 245.1976105986878 50
+157.3105335236736 203.5472763070651 50
+48.60797980397444 300.3233792699978 50
+162.814236601417 365.724291584954 50
+30.33002026893303 40.33213550120646 50
+153.6957368477237 319.5159572802438 50
+25.52763546166952 236.8094792745733 50
+122.9013856410317 272.0464530223888 50
+115.6326525114473 328.9524509784886 50
+24.9728719161998 266.6634407019705 50
+174.2802023217623 309.1702473670656 50
+192.3368700288052 327.8828936199377 50
+75.85445619749134 260.5052233049278 50
+174.4993926737941 358.1564592126311 50
+52.59650010961262 188.1595423572546 50
+191.7971253832731 343.9790738575904 50
+-72.86332416592219 284.7141621717169 50
+-48.36596809532659 311.5839761419103 50
+45.15237112470624 122.1727522733357 50
+117.0281597338917 374.5616233842051 50
+61.50766874921069 354.3557922057897 50
+36.03840041941216 198.8708723683465 50
+150.6486521942011 359.8984729257062 50
+-88.72376426519571 268.8942949456747 50
+76.00923687916128 244.4667316421691 50
+106.5541885337173 223.447047111526 50
+49.69098594320698 213.0197512933385 50
+48.27336217794971 231.3907425801347 50
+175.3954456312701 325.6741622623068 50
+-35.37458883020307 233.2788716691012 50
+188.8798375792572 273.2989384089891 50
+13.64551070327079 160.9970478784866 50
+46.02185228212728 317.2967909044941 50
+73.04347244615177 319.3677220822396 50
+84.53484726660703 225.175456315065 50
+-12.4775980414682 279.9895676441719 50
+-116.5123874714367 321.4513156828882 50
+-129.073628184786 295.4644141943474 50
+-44.14193243088081 377.4883174872433 50
+-9.9091533182812 344.7456330659264 50
+142.8809203996163 322.8320515623951 50
+27.78530897694089 323.4421573073828 50
+138.5681951454366 337.2266669175927 50
+-168.0769407019322 293.2444205814639 50
+-74.32256489224594 338.3067399420135 50
+12.07252320067854 283.9796329871758 50
+34.9482233848904 171.0489066468835 50
+71.10797876211453 299.2448447212166 50
+-3.83856033208486 207.4215110069667 50
+86.72955225609019 381.5714578613906 50
+124.7161813610393 197.7073032130787 50
+120.8141031107244 31.94030600954405 50
+151.6043628548301 161.8276206139543 50
+-7.316038063191105 309.7470133946634 50
+-4.567213483291249 377.0958321337476 50
+109.2496382709414 356.343296647972 50
+-14.5337101802225 254.6800758361508 50
+144.7039692290211 276.1153402812161 50
+-112.0388667346044 373.0254846331554 50
+-169.9560752758295 345.0789215656445 50
+170.1972827120067 60.44344369310014 50
+71.07334028757911 197.20493481154 50
+107.4315053368151 185.8254279217423 50
+150.0563887029054 295.5612825331462 50
+130.5501930111884 262.2987535084999 50
+54.80671259011251 25.26511360983525 50
+-27.95393749970001 285.6612919799531 50
+62.69984064829485 228.6138666427094 50
+14.43260595311533 102.6871678471708 50
+-30.09310151647676 339.8765985429455 50
+151.1709710369359 345.0252403992953 50
+189.3138847826586 295.6769280159791 50
+55.20478568158561 151.1664390042978 50
+106.2918469043942 288.030960193572 50
+132.7508397933067 215.6883050751242 50
+163.4013145310558 328.0445757359277 50
+168.4414467615773 261.9366743121021 50
+140.1684477101883 367.6470012794193 50
+21.35333389539323 216.3029504612673 50
+29.27551904473911 343.7187449834056 50
+-106.7077757090188 222.0890934051445 50
+84.48739444677952 237.6820822233829 50
+192.201932469971 353.2502708224708 50
+0.7659686900344564 277.9716567960877 50
+31.46117499818853 382.6823115867254 50
+185.7180984822303 222.3147362752628 50
+133.2482082373865 170.9385273228495 50
+115.5604588323648 305.1875240153176 50
+91.19785338627733 361.0674146377251 50
+6.80114801946721 245.1215227423808 50
+66.25767691886549 239.9939474046688 50
+-175.8269148046903 256.7043616824062 50
+19.57412714690565 201.6930743386521 50
+59.58809439336216 197.3967335992801 50
+153.4570448326631 257.9406621168512 50
+135.6592933519886 187.0576236790889 50
+-21.83132700194957 237.8954644619648 50
+90.57841828463549 260.4917668340041 50
+188.8586529158268 244.1483916664509 50
+193.9616016160356 318.8748469470378 50
+-49.51892458490963 210.7805443878118 50
+177.122706095177 389.6265949489487 50
+143.5860528970498 142.7185012909102 50
+29.49809129553786 155.05518521116 50
+114.5951219498991 126.4084411222005 50
+150.5172674989028 110.0807077400237 50
+121.8479442581393 317.3351431440988 50
+61.71517397833493 259.3999296155209 50
+-11.25190220676462 222.0178918754376 50
+103.0776677368183 385.7436646750896 50
+17.84493048911485 258.5985331429066 50
+182.2567599091506 139.8845395603765 50
+97.36395630180985 312.393733904279 50
+35.81905092042928 295.5972222143395 50
+96.86031018863048 279.9423974959205 50
+5.033218898525131 188.025487654398 50
+160.6004307053633 177.2186323286236 50
+11.63390829669948 136.5559125594147 50
+29.80835669847496 220.0331469024824 50
+79.76905229014329 333.692338735137 50
+-74.21353175008733 214.3513973585123 50
+190.5089607174592 368.7835742020214 50
+183.1149355078822 343.0232125792234 50
+-36.14293439210918 210.0793545063865 50
+-0.4015615838493365 236.3766992036981 50
+0.4626465534218314 332.2146695072123 50
+-12.33852645407734 205.7761547110514 50
+146.3195253933518 233.0573132378916 50
+6.270402760419723 204.2889954335569 50
+180.9499566718451 84.79269878491631 50
+108.0357159189294 87.19929238576583 50
+33.64782523749238 275.6380473653139 50
+112.7186135927165 251.4804080386693 50
+76.57113671723417 276.3840891916819 50
+135.6122811781592 73.30944717758963 50
+142.9317889920845 287.4368741691176 50
+92.29183568190618 243.330984018205 50
+-33.33938751456261 258.2477270645468 50
+121.1063599078229 287.1155043918265 50
+45.13817015380284 222.4889262428334 50
+103.236731749491 327.597914035707 50
+51.73795937476723 341.7662202127788 50
+-91.56750745325196 323.2891420742952 50
+20.83266952757781 17.77180329270968 50
+-46.29687269159066 355.3821522469584 50
+154.3976427975022 388.3322595662991 50
+193.6240886712313 360.7113157664088 50
+56.23202938649898 278.5360168198804 50
+-62.10271140543722 210.1546056470412 50
+49.6624975612889 166.9266239889585 50
+61.53435214646646 216.3154853231191 50
+-50.58508710851068 232.3468473417028 50
+-19.30365205037856 208.3610523646077 50
+-56.90161356704563 255.4467712695485 50
+130.7834379041726 345.5891685332683 50
+-4.472867487149274 215.9062161980069 50
+49.48351931105579 244.9258882013415 50
+-30.89963248410058 220.8387942127538 50
+9.713227103036289 150.4389759186361 50
+-35.01853358802947 322.3100156409221 50
+157.8941142118547 128.2447481574869 50
+-1.174108040103017 360.0916179225915 50
+110.2371301980847 265.3357836465251 50
+190.1586376924362 391.0736367208813 50
+187.5390024820203 187.2702655252496 50
+70.59290525902182 382.4552166746442 50
+7.68237880915623 180.3669981406156 50
+173.6528203012305 25.15990453770258 50
+183.9736874235427 328.7643068126376 50
+20.71584364968019 276.9551243056451 50
+-165.6954784473477 372.4456568585622 50
+22.29297783815787 188.4072183227871 50
+84.72448087929894 295.9285262296028 50
+-181.5177351123655 221.2490224139019 50
+85.36825794817848 214.5271306241877 50
+31.36939110505685 244.818718894667 50
+120.6105402858663 141.7895599616276 50
+-115.788656858974 243.0013887779554 50
+189.7241616250885 263.8807676876992 50
+139.8054983902886 252.7522890012546 50
+-38.74744057258523 274.7341154612069 50
+-22.34857496620447 383.5699693514723 50
+99.19545460918386 268.8301237189449 50
+123.5030744014923 298.7331404301542 50
+169.6486099249078 296.2781421917267 50
+159.8006300284853 312.1473455623295 50
+21.27473378982907 309.864202461164 50
+83.30290865034593 147.3455818037436 50
+87.6079017687502 116.1395185303793 50
+126.6410452067817 235.4162150049413 50
+18.21373313032452 180.3098322833647 50
+173.4537978476885 246.8095959373892 50
+5.21225385760607 196.0610516743465 50
+40.07234279843347 250.7918901220747 50
+80.72815849549841 61.0510434365317 50
+18.54312439569827 195.0495814638526 50
+86.79766477713716 282.9114445671182 50
+169.6827010895561 205.0240323521827 50
+26.31956495174799 299.6983925564557 50
+-140.7032464703003 221.2466464511295 50
+104.6705662435309 235.1227126884393 50
+17.22929638946679 232.652093421357 50
+170.7416167210707 334.726194274182 50
+178.2307298803876 288.8014354015306 50
+-123.7551316922303 214.2862110349991 50
+97.99000768017316 126.6590364892933 50
+55.64317265855716 176.8794857148288 50
+18.73227157594583 81.18890617034367 50
+91.82258147696328 205.4001833105146 50
+-16.43324763355657 292.3787768562272 50
+-57.00026782204577 274.1575459599951 50
+165.7636648331419 275.2036584035446 50
+-124.7305923041963 343.5174504305637 50
+-88.72670737861463 378.113864462119 50
+135.8780906972786 312.1668769532028 50
+193.1026977921051 312.1084052419958 50
+36.30442390691286 181.6674704321361 50
+39.9952504736855 207.4979922017649 50
+-135.262330730767 247.2324447360472 50
+59.75343852172084 299.9397799261352 50
+93.34995065080163 301.7050892479965 50
+68.0699667237087 283.3572461829719 50
+57.13034287652111 325.3829609737454 50
+-172.0881632850743 320.0082267577138 50
+29.0390745863767 136.7300366639585 50
+174.8124910919654 379.873595255502 50
+-3.510044537581288 255.908435584929 50
+94.5920048126991 251.4940958972878 50
+123.3219619325762 388.7756287269557 50
+160.7986271686624 292.7527731175975 50
+-77.42835120103496 233.578918928737 50
+-12.65042194530749 242.7452685128119 50
+57.02424782928196 206.8371054886399 50
+102.2674845411123 206.2380572067303 50
+113.2166558325793 195.6691996685413 50
+7.292216164079107 229.2462546514494 50
+9.105212883201014 120.2346198179101 50
+151.6136633089877 189.8335671228282 50
+-79.92690472431345 253.23066279368 50
+175.2808180573139 317.9131676296125 50
+142.1008756016298 390.6387589665475 50
+124.7090580676015 208.7788894435715 50
+194.8225070878186 336.0174207422608 50
+31.43386480627034 189.3060580434816 50
+110.833192619761 339.7457248716436 50
+55.82755195794508 102.210127144711 50
+-20.18316962644134 217.6963652618069 50
+137.2445545904299 240.3604233176831 50
+124.1075122328543 336.7735907761922 50
+134.8527967351558 271.1679578357391 50
+17.49148464131733 56.06329215645545 50
+43.12218920595189 82.29407228793852 50
+77.68281069070041 159.7742358555411 50
+15.47070402308254 332.5917675250141 50
+58.6315371308242 248.1036040116931 50
+45.48208458315577 274.4590852465802 50
+143.8297647732065 20.26646165863653 50
+-34.76406068186607 244.5301197015307 50
+9.182232634094035 387.0606278226651 50
+167.3080869550105 374.414336816248 50
+82.15016316406211 99.34029710372958 50
+3 1 0 440
+1097
+1098
+1099
+1100
+1101
+1102
+1103
+1104
+1105
+1106
+1107
+1108
+1109
+1110
+1111
+1112
+1113
+1114
+1115
+1116
+1117
+1118
+1119
+1120
+1121
+1122
+1123
+1124
+1125
+1126
+1127
+1128
+1129
+1130
+1131
+1132
+1133
+1134
+1135
+1136
+1137
+1138
+1139
+1140
+1141
+1142
+1143
+1144
+1145
+1146
+1147
+1148
+1149
+1150
+1151
+1152
+1153
+1154
+1155
+1156
+1157
+1158
+1159
+1160
+1161
+1162
+1163
+1164
+1165
+1166
+1167
+1168
+1169
+1170
+1171
+1172
+1173
+1174
+1175
+1176
+1177
+1178
+1179
+1180
+1181
+1182
+1183
+1184
+1185
+1186
+1187
+1188
+1189
+1190
+1191
+1192
+1193
+1194
+1195
+1196
+1197
+1198
+1199
+1200
+1201
+1202
+1203
+1204
+1205
+1206
+1207
+1208
+1209
+1210
+1211
+1212
+1213
+1214
+1215
+1216
+1217
+1218
+1219
+1220
+1221
+1222
+1223
+1224
+1225
+1226
+1227
+1228
+1229
+1230
+1231
+1232
+1233
+1234
+1235
+1236
+1237
+1238
+1239
+1240
+1241
+1242
+1243
+1244
+1245
+1246
+1247
+1248
+1249
+1250
+1251
+1252
+1253
+1254
+1255
+1256
+1257
+1258
+1259
+1260
+1261
+1262
+1263
+1264
+1265
+1266
+1267
+1268
+1269
+1270
+1271
+1272
+1273
+1274
+1275
+1276
+1277
+1278
+1279
+1280
+1281
+1282
+1283
+1284
+1285
+1286
+1287
+1288
+1289
+1290
+1291
+1292
+1293
+1294
+1295
+1296
+1297
+1298
+1299
+1300
+1301
+1302
+1303
+1304
+1305
+1306
+1307
+1308
+1309
+1310
+1311
+1312
+1313
+1314
+1315
+1316
+1317
+1318
+1319
+1320
+1321
+1322
+1323
+1324
+1325
+1326
+1327
+1328
+1329
+1330
+1331
+1332
+1333
+1334
+1335
+1336
+1337
+1338
+1339
+1340
+1341
+1342
+1343
+1344
+1345
+1346
+1347
+1348
+1349
+1350
+1351
+1352
+1353
+1354
+1355
+1356
+1357
+1358
+1359
+1360
+1361
+1362
+1363
+1364
+1365
+1366
+1367
+1368
+1369
+1370
+1371
+1372
+1373
+1374
+1375
+1376
+1377
+1378
+1379
+1380
+1381
+1382
+1383
+1384
+1385
+1386
+1387
+1388
+1389
+1390
+1391
+1392
+1393
+1394
+1395
+1396
+1397
+1398
+1399
+1400
+1401
+1402
+1403
+1404
+1405
+1406
+1407
+1408
+1409
+1410
+1411
+1412
+1413
+1414
+1415
+1416
+1417
+1418
+1419
+1420
+1421
+1422
+1423
+1424
+1425
+1426
+1427
+1428
+1429
+1430
+1431
+1432
+1433
+1434
+1435
+1436
+1437
+1438
+1439
+1440
+1441
+1442
+1443
+1444
+1445
+1446
+1447
+1448
+1449
+1450
+1451
+1452
+1453
+1454
+1455
+1456
+1457
+1458
+1459
+1460
+1461
+1462
+1463
+1464
+1465
+1466
+1467
+1468
+1469
+1470
+1471
+1472
+1473
+1474
+1475
+1476
+1477
+1478
+1479
+1480
+1481
+1482
+1483
+1484
+1485
+1486
+1487
+1488
+1489
+1490
+1491
+1492
+1493
+1494
+1495
+1496
+1497
+1498
+1499
+1500
+1501
+1502
+1503
+1504
+1505
+1506
+1507
+1508
+1509
+1510
+1511
+1512
+1513
+1514
+1515
+1516
+1517
+1518
+1519
+1520
+1521
+1522
+1523
+1524
+1525
+1526
+1527
+1528
+1529
+1530
+1531
+1532
+1533
+1534
+1535
+1536
+86.92997807549386 272.5398246609194 25
+-1.845975077333043 290.4828936694857 25
+95.03748830577612 177.6288230764258 25
+129.7271303450724 326.8581009618439 25
+-98.99637119244331 296.8330764703095 25
+54.34735034077209 222.115014617429 25
+135.3295135109188 227.8139565306641 25
+45.03448555436638 178.7705809763952 25
+69.30032904988111 117.4879099116565 25
+-3.938948325693019 246.3589226983871 25
+66.61065825963699 335.6772474367513 25
+162.0542437207244 351.7886894355649 25
+39.7789243619006 263.9007608501281 25
+155.5500252245591 283.7885078597757 25
+-46.7616832436957 245.6608745126196 25
+166.9659218920727 318.6023691003588 25
+22.07364805495225 225.2223176213374 25
+94.65108024689235 232.9340824107713 25
+136.0903926554102 123.7784497410866 25
+146.6237530163064 177.2262526150338 25
+115.4627528253289 295.1114465518832 25
+10.57052772550609 346.4215124102847 25
+-51.19522588386188 332.0985673101427 25
+43.56193024712998 141.6365135892354 25
+25.85738457239741 196.9298874482127 25
+34.11522071117154 307.6356818040284 25
+119.2607971838104 259.4643934946539 25
+-21.94059913817574 226.9284393003819 25
+161.5294321453812 249.9243769785628 25
+67.4499122961717 250.4045759063591 25
+127.7797312191989 361.054100274312 25
+85.66249858112566 308.8936607733846 25
+-49.92839475289242 289.7489461559057 25
+179.5443790191545 335.8980909892921 25
+79.26915441471499 205.2574929802419 25
+176.9043961286525 370.2299182725147 25
+114.4008745306427 208.5075844990519 25
+59.56674288014521 289.8520326165412 25
+-95.69236768644957 245.5298438572586 25
+68.1307104700626 151.9963527823363 25
+110.9420927265907 60.3979501775725 25
+95.43536469695968 341.4703204144132 25
+-0.3420234254187363 223.9706530021379 25
+55.13584218432781 57.83147588339808 25
+40.89162287975475 240.3292657403581 25
+166.6314440260113 218.1061415269372 25
+179.0184389086513 298.718642799868 25
+22.96938263827372 169.4457061660833 25
+10.91325482111704 269.2984162864417 25
+47.85748900974684 200.4360870910087 25
+18.51381310810968 246.0320554597151 25
+177.81998805256 273.5012218948986 25
+183.523464852949 351.752220316229 25
+-22.25275378590845 269.8706158779726 25
+100.3656285257885 142.7084975383061 25
+147.9896254814815 308.7524803056875 25
+-97.46068700038899 348.9078404334107 25
+66.15795162970028 184.4720888051837 25
+33.63933151110373 102.026071653551 25
+-147.2239549682952 266.4009783328775 25
+152.1897945935446 376.3311237926879 25
+74.68453831557642 366.8658746154462 25
+109.3904569692351 316.1189491713359 25
+14.47428210538401 208.8907601017696 25
+142.524688398092 263.6001549023065 25
+41.89015229795443 361.044860264292 25
+151.1461807842349 332.3069057738082 25
+74.72200245714978 232.2915635721619 25
+-17.21610160364253 325.3093783193129 25
+156.4840203781309 89.66538928625931 25
+184.4817023841507 318.2058917887191 25
+164.3181959965111 146.0416777402377 25
+85.77180161875157 250.4268320398284 25
+-22.89189302148828 363.2656971363705 25
+138.735697701621 203.1629675861398 25
+38.24900633011953 216.4911343079566 25
+121.4778697145869 182.0927259130383 25
+-146.0023362824234 325.5444569106996 25
+12.74577029197836 189.2640252991976 25
+130.9987113778268 154.6289515310685 25
+-12.43745662926108 214.0956053097911 25
+-25.56815577574629 247.9406449326575 25
+26.88510253016961 286.298955241161 25
+109.002033530114 276.6476836805871 25
+-61.49039731687344 223.0638719861939 25
+170.7522715549734 190.7886502210183 25
+115.3313316988033 237.7057213830695 25
+102.0373780053269 372.2541013409489 25
+103.6995808991383 108.8716001069061 25
+66.20738010157879 271.0246205928433 25
+9.259517814804784 317.1617534167852 25
+133.5837473964461 281.7790874642839 25
+-68.64667274342067 264.1880672010495 25
+139.9435782084522 352.7703372281192 25
+-43.68920691848556 221.3854341872494 25
+60.21994430906854 310.2350832594555 25
+40.79105259681809 332.111699196494 25
+-124.5327204528797 230.2361031136782 25
+126.5455287030451 308.1006672480942 25
+94.41773459600353 290.2891665218889 25
+66.45031765362738 207.0174701364531 25
+42.52866764274705 156.7163974569556 25
+160.9870083799573 302.5764917459732 25
+20.54323371811547 146.0280707064119 25
+23.84491283607116 118.9317856441936 25
+9.836150184915113 236.7902265378426 25
+178.9258569773027 234.623815500797 25
+56.88404471710212 238.403085728407 25
+120.8542264809939 348.2077200847156 25
+27.85240832143786 179.9707278230519 25
+-4.832361452822046 266.1077733931639 25
+149.6674400249979 244.6200195484073 25
+-28.22227084083961 302.6815578902989 25
+181.920982493625 255.3553833157212 25
+94.87339168219452 217.2963031880259 25
+98.46698987392224 194.2252326527781 25
+101.5648573781447 258.0232859957135 25
+144.6819004546819 44.23209774593604 25
+49.99889556341516 255.4941972138608 25
+186.3833793106452 381.0759548126877 25
+157.655136880412 269.7122869318577 25
+-70.54552670974488 310.946737842854 25
+188.1100400543327 336.1604954029319 25
+175.4833044429091 111.3374760680668 25
+89.6068312126605 323.8922164460756 25
+86.18745526610863 80.64838509182209 25
+-140.4542696495127 361.0451189610943 25
+17.63864648772741 369.1756352370702 25
+-69.90108762729501 366.0345074850528 25
+161.6576363441156 339.2579488603936 25
+77.69620772972867 287.1898236906435 25
+188.2613826700527 284.3729297644517 25
+44.05212438384836 285.5509178463987 25
+-88.11500237850464 222.1796850394365 25
+64.7644284378176 166.0685924463517 25
+35.13014597696588 229.427988415308 25
+12.24536212905205 198.9537019104137 25
+4.014314100398186 213.3566256125446 25
+111.9434587846098 163.8933842515345 25
+-27.06070246968827 211.6423177600877 25
+80.31946761311349 172.705749271557 25
+-9.628828804384245 233.2198039440134 25
+-46.56807949344874 264.5746679709374 25
+28.91170356941772 255.282509832093 25
+31.00553071870667 67.68260632076115 25
+83.2596682506684 130.9922255795619 25
+185.4095501687265 361.0746550553399 25
+28.14037066594199 208.6721159481743 25
+-158.0526569503168 235.7460121219165 25
+125.7043050162406 248.5027465829397 25
+41.81448116693959 189.8741141172565 25
+187.0701849603392 306.1598084678718 25
+12.2230812518706 172.8567136041262 25
+177.678800895451 166.2270365963777 25
+167.7511036109824 285.5594412573662 25
+135.159085573007 296.7689588561836 25
+173.7093080797574 344.7561935229901 25
+63.26618875583571 136.0152394156748 25
+83.2375350875197 191.0300717467658 25
+161.0464157924185 234.8689338507018 25
+120.1893623452322 221.9502413474028 25
+165.8936759095731 384.5533496980346 25
+133.9836080619496 380.3122131514867 25
+6.865155315226477 255.9324769657851 25
+91.89653828216248 160.7549029737168 25
+129.5446032518579 100.7882377788658 25
+-65.13190334998137 243.1180525373405 25
+74.02476659302236 218.8034506974655 25
+104.5810828957702 301.0203588108271 25
+88.78986562828175 35.00709116341936 25
+148.624938579874 218.4322589111619 25
+13.50371680714045 299.0959010615858 25
+54.84791193534658 378.8127461963253 25
+11.70669419659199 220.7195947385318 25
+64.39260728768224 82.82524655486634 25
+53.58124232782706 267.8421778235202 25
+183.0331914078373 206.7525996360077 25
+-116.2169450786251 268.8699571800341 25
+79.05064877276945 347.8994369461802 25
+102.7531111000576 245.1976105986878 25
+157.3105335236736 203.5472763070651 25
+48.60797980397444 300.3233792699978 25
+162.814236601417 365.724291584954 25
+30.33002026893303 40.33213550120646 25
+153.6957368477237 319.5159572802438 25
+25.52763546166952 236.8094792745733 25
+122.9013856410317 272.0464530223888 25
+115.6326525114473 328.9524509784886 25
+24.9728719161998 266.6634407019705 25
+174.2802023217623 309.1702473670656 25
+192.3368700288052 327.8828936199377 25
+75.85445619749134 260.5052233049278 25
+174.4993926737941 358.1564592126311 25
+52.59650010961262 188.1595423572546 25
+191.7971253832731 343.9790738575904 25
+-72.86332416592219 284.7141621717169 25
+-48.36596809532659 311.5839761419103 25
+45.15237112470624 122.1727522733357 25
+117.0281597338917 374.5616233842051 25
+61.50766874921069 354.3557922057897 25
+36.03840041941216 198.8708723683465 25
+150.6486521942011 359.8984729257062 25
+-88.72376426519571 268.8942949456747 25
+76.00923687916128 244.4667316421691 25
+106.5541885337173 223.447047111526 25
+49.69098594320698 213.0197512933385 25
+48.27336217794971 231.3907425801347 25
+175.3954456312701 325.6741622623068 25
+-35.37458883020307 233.2788716691012 25
+188.8798375792572 273.2989384089891 25
+13.64551070327079 160.9970478784866 25
+46.02185228212728 317.2967909044941 25
+73.04347244615177 319.3677220822396 25
+84.53484726660703 225.175456315065 25
+-12.4775980414682 279.9895676441719 25
+-116.5123874714367 321.4513156828882 25
+-129.073628184786 295.4644141943474 25
+-44.14193243088081 377.4883174872433 25
+-9.9091533182812 344.7456330659264 25
+142.8809203996163 322.8320515623951 25
+27.78530897694089 323.4421573073828 25
+138.5681951454366 337.2266669175927 25
+-168.0769407019322 293.2444205814639 25
+-74.32256489224594 338.3067399420135 25
+12.07252320067854 283.9796329871758 25
+34.9482233848904 171.0489066468835 25
+71.10797876211453 299.2448447212166 25
+-3.83856033208486 207.4215110069667 25
+86.72955225609019 381.5714578613906 25
+124.7161813610393 197.7073032130787 25
+120.8141031107244 31.94030600954405 25
+151.6043628548301 161.8276206139543 25
+-7.316038063191105 309.7470133946634 25
+-4.567213483291249 377.0958321337476 25
+109.2496382709414 356.343296647972 25
+-14.5337101802225 254.6800758361508 25
+144.7039692290211 276.1153402812161 25
+-112.0388667346044 373.0254846331554 25
+-169.9560752758295 345.0789215656445 25
+170.1972827120067 60.44344369310014 25
+71.07334028757911 197.20493481154 25
+107.4315053368151 185.8254279217423 25
+150.0563887029054 295.5612825331462 25
+130.5501930111884 262.2987535084999 25
+54.80671259011251 25.26511360983525 25
+-27.95393749970001 285.6612919799531 25
+62.69984064829485 228.6138666427094 25
+14.43260595311533 102.6871678471708 25
+-30.09310151647676 339.8765985429455 25
+151.1709710369359 345.0252403992953 25
+189.3138847826586 295.6769280159791 25
+55.20478568158561 151.1664390042978 25
+106.2918469043942 288.030960193572 25
+132.7508397933067 215.6883050751242 25
+163.4013145310558 328.0445757359277 25
+168.4414467615773 261.9366743121021 25
+140.1684477101883 367.6470012794193 25
+21.35333389539323 216.3029504612673 25
+29.27551904473911 343.7187449834056 25
+-106.7077757090188 222.0890934051445 25
+84.48739444677952 237.6820822233829 25
+192.201932469971 353.2502708224708 25
+0.7659686900344564 277.9716567960877 25
+31.46117499818853 382.6823115867254 25
+185.7180984822303 222.3147362752628 25
+133.2482082373865 170.9385273228495 25
+115.5604588323648 305.1875240153176 25
+91.19785338627733 361.0674146377251 25
+6.80114801946721 245.1215227423808 25
+66.25767691886549 239.9939474046688 25
+-175.8269148046903 256.7043616824062 25
+19.57412714690565 201.6930743386521 25
+59.58809439336216 197.3967335992801 25
+153.4570448326631 257.9406621168512 25
+135.6592933519886 187.0576236790889 25
+-21.83132700194957 237.8954644619648 25
+90.57841828463549 260.4917668340041 25
+188.8586529158268 244.1483916664509 25
+193.9616016160356 318.8748469470378 25
+-49.51892458490963 210.7805443878118 25
+177.122706095177 389.6265949489487 25
+143.5860528970498 142.7185012909102 25
+29.49809129553786 155.05518521116 25
+114.5951219498991 126.4084411222005 25
+150.5172674989028 110.0807077400237 25
+121.8479442581393 317.3351431440988 25
+61.71517397833493 259.3999296155209 25
+-11.25190220676462 222.0178918754376 25
+103.0776677368183 385.7436646750896 25
+17.84493048911485 258.5985331429066 25
+182.2567599091506 139.8845395603765 25
+97.36395630180985 312.393733904279 25
+35.81905092042928 295.5972222143395 25
+96.86031018863048 279.9423974959205 25
+5.033218898525131 188.025487654398 25
+160.6004307053633 177.2186323286236 25
+11.63390829669948 136.5559125594147 25
+29.80835669847496 220.0331469024824 25
+79.76905229014329 333.692338735137 25
+-74.21353175008733 214.3513973585123 25
+190.5089607174592 368.7835742020214 25
+183.1149355078822 343.0232125792234 25
+-36.14293439210918 210.0793545063865 25
+-0.4015615838493365 236.3766992036981 25
+0.4626465534218314 332.2146695072123 25
+-12.33852645407734 205.7761547110514 25
+146.3195253933518 233.0573132378916 25
+6.270402760419723 204.2889954335569 25
+180.9499566718451 84.79269878491631 25
+108.0357159189294 87.19929238576583 25
+33.64782523749238 275.6380473653139 25
+112.7186135927165 251.4804080386693 25
+76.57113671723417 276.3840891916819 25
+135.6122811781592 73.30944717758963 25
+142.9317889920845 287.4368741691176 25
+92.29183568190618 243.330984018205 25
+-33.33938751456261 258.2477270645468 25
+121.1063599078229 287.1155043918265 25
+45.13817015380284 222.4889262428334 25
+103.236731749491 327.597914035707 25
+51.73795937476723 341.7662202127788 25
+-91.56750745325196 323.2891420742952 25
+20.83266952757781 17.77180329270968 25
+-46.29687269159066 355.3821522469584 25
+154.3976427975022 388.3322595662991 25
+193.6240886712313 360.7113157664088 25
+56.23202938649898 278.5360168198804 25
+-62.10271140543722 210.1546056470412 25
+49.6624975612889 166.9266239889585 25
+61.53435214646646 216.3154853231191 25
+-50.58508710851068 232.3468473417028 25
+-19.30365205037856 208.3610523646077 25
+-56.90161356704563 255.4467712695485 25
+130.7834379041726 345.5891685332683 25
+-4.472867487149274 215.9062161980069 25
+49.48351931105579 244.9258882013415 25
+-30.89963248410058 220.8387942127538 25
+9.713227103036289 150.4389759186361 25
+-35.01853358802947 322.3100156409221 25
+157.8941142118547 128.2447481574869 25
+-1.174108040103017 360.0916179225915 25
+110.2371301980847 265.3357836465251 25
+190.1586376924362 391.0736367208813 25
+187.5390024820203 187.2702655252496 25
+70.59290525902182 382.4552166746442 25
+7.68237880915623 180.3669981406156 25
+173.6528203012305 25.15990453770258 25
+183.9736874235427 328.7643068126376 25
+20.71584364968019 276.9551243056451 25
+-165.6954784473477 372.4456568585622 25
+22.29297783815787 188.4072183227871 25
+84.72448087929894 295.9285262296028 25
+-181.5177351123655 221.2490224139019 25
+85.36825794817848 214.5271306241877 25
+31.36939110505685 244.818718894667 25
+120.6105402858663 141.7895599616276 25
+-115.788656858974 243.0013887779554 25
+189.7241616250885 263.8807676876992 25
+139.8054983902886 252.7522890012546 25
+-38.74744057258523 274.7341154612069 25
+-22.34857496620447 383.5699693514723 25
+99.19545460918386 268.8301237189449 25
+123.5030744014923 298.7331404301542 25
+169.6486099249078 296.2781421917267 25
+159.8006300284853 312.1473455623295 25
+21.27473378982907 309.864202461164 25
+83.30290865034593 147.3455818037436 25
+87.6079017687502 116.1395185303793 25
+126.6410452067817 235.4162150049413 25
+18.21373313032452 180.3098322833647 25
+173.4537978476885 246.8095959373892 25
+5.21225385760607 196.0610516743465 25
+40.07234279843347 250.7918901220747 25
+80.72815849549841 61.0510434365317 25
+18.54312439569827 195.0495814638526 25
+86.79766477713716 282.9114445671182 25
+169.6827010895561 205.0240323521827 25
+26.31956495174799 299.6983925564557 25
+-140.7032464703003 221.2466464511295 25
+104.6705662435309 235.1227126884393 25
+17.22929638946679 232.652093421357 25
+170.7416167210707 334.726194274182 25
+178.2307298803876 288.8014354015306 25
+-123.7551316922303 214.2862110349991 25
+97.99000768017316 126.6590364892933 25
+55.64317265855716 176.8794857148288 25
+18.73227157594583 81.18890617034367 25
+91.82258147696328 205.4001833105146 25
+-16.43324763355657 292.3787768562272 25
+-57.00026782204577 274.1575459599951 25
+165.7636648331419 275.2036584035446 25
+-124.7305923041963 343.5174504305637 25
+-88.72670737861463 378.113864462119 25
+135.8780906972786 312.1668769532028 25
+193.1026977921051 312.1084052419958 25
+36.30442390691286 181.6674704321361 25
+39.9952504736855 207.4979922017649 25
+-135.262330730767 247.2324447360472 25
+59.75343852172084 299.9397799261352 25
+93.34995065080163 301.7050892479965 25
+68.0699667237087 283.3572461829719 25
+57.13034287652111 325.3829609737454 25
+-172.0881632850743 320.0082267577138 25
+29.0390745863767 136.7300366639585 25
+174.8124910919654 379.873595255502 25
+-3.510044537581288 255.908435584929 25
+94.5920048126991 251.4940958972878 25
+123.3219619325762 388.7756287269557 25
+160.7986271686624 292.7527731175975 25
+-77.42835120103496 233.578918928737 25
+-12.65042194530749 242.7452685128119 25
+57.02424782928196 206.8371054886399 25
+102.2674845411123 206.2380572067303 25
+113.2166558325793 195.6691996685413 25
+7.292216164079107 229.2462546514494 25
+9.105212883201014 120.2346198179101 25
+151.6136633089877 189.8335671228282 25
+-79.92690472431345 253.23066279368 25
+175.2808180573139 317.9131676296125 25
+142.1008756016298 390.6387589665475 25
+124.7090580676015 208.7788894435715 25
+194.8225070878186 336.0174207422608 25
+31.43386480627034 189.3060580434816 25
+110.833192619761 339.7457248716436 25
+55.82755195794508 102.210127144711 25
+-20.18316962644134 217.6963652618069 25
+137.2445545904299 240.3604233176831 25
+124.1075122328543 336.7735907761922 25
+134.8527967351558 271.1679578357391 25
+17.49148464131733 56.06329215645545 25
+43.12218920595189 82.29407228793852 25
+77.68281069070041 159.7742358555411 25
+15.47070402308254 332.5917675250141 25
+58.6315371308242 248.1036040116931 25
+45.48208458315577 274.4590852465802 25
+143.8297647732065 20.26646165863653 25
+-34.76406068186607 244.5301197015307 25
+9.182232634094035 387.0606278226651 25
+167.3080869550105 374.414336816248 25
+82.15016316406211 99.34029710372958 25
+$EndNodes
+$Elements
+4 1952 1 1952
+2 19 3 10
+1 5 56 592 145 
+2 145 592 80 8 
+3 56 57 593 592 
+4 592 593 81 80 
+5 57 58 594 593 
+6 593 594 82 81 
+7 58 59 595 594 
+8 594 595 83 82 
+9 59 6 146 595 
+10 595 146 9 83 
+2 31 3 10
+11 1 15 616 148 
+12 148 616 104 11 
+13 15 16 617 616 
+14 616 617 105 104 
+15 16 17 618 617 
+16 617 618 106 105 
+17 17 18 619 618 
+18 618 619 107 106 
+19 18 2 149 619 
+20 619 149 12 107 
+2 43 3 32
+21 4 41 642 151 
+22 151 642 130 14 
+23 41 42 643 642 
+24 642 643 131 130 
+25 42 43 644 643 
+26 643 644 132 131 
+27 43 44 645 644 
+28 644 645 133 132 
+29 44 45 646 645 
+30 645 646 134 133 
+31 45 46 647 646 
+32 646 647 135 134 
+33 46 47 648 647 
+34 647 648 136 135 
+35 47 48 649 648 
+36 648 649 137 136 
+37 48 49 650 649 
+38 649 650 138 137 
+39 49 50 651 650 
+40 650 651 139 138 
+41 50 51 652 651 
+42 651 652 140 139 
+43 51 52 653 652 
+44 652 653 141 140 
+45 52 53 654 653 
+46 653 654 142 141 
+47 53 54 655 654 
+48 654 655 143 142 
+49 54 55 656 655 
+50 655 656 144 143 
+51 55 5 145 656 
+52 656 145 8 144 
+3 1 6 1900
+53 200 262 315 1145 1207 1260 
+54 1145 1207 1260 705 767 820 
+55 154 290 393 1099 1235 1338 
+56 1099 1235 1338 659 795 898 
+57 304 72 362 1249 608 1307 
+58 1249 608 1307 809 96 867 
+59 197 258 311 1142 1203 1256 
+60 1142 1203 1256 702 763 816 
+61 404 235 469 1349 1180 1414 
+62 1349 1180 1414 909 740 974 
+63 343 152 464 1288 1097 1409 
+64 1288 1097 1409 848 657 969 
+65 183 364 378 1128 1309 1323 
+66 1128 1309 1323 688 869 883 
+67 180 263 311 1125 1208 1256 
+68 1125 1208 1256 685 768 816 
+69 153 323 384 1098 1268 1329 
+70 1098 1268 1329 658 828 889 
+71 383 305 447 1328 1250 1392 
+72 1328 1250 1392 888 810 952 
+73 246 236 431 1191 1181 1376 
+74 1191 1181 1376 751 741 936 
+75 349 175 555 1294 1120 1500 
+76 1294 1120 1500 854 680 1060 
+77 256 349 555 1201 1294 1500 
+78 1201 1294 1500 761 854 1060 
+79 191 309 518 1136 1254 1463 
+80 1136 1254 1463 696 814 1023 
+81 199 362 434 1144 1307 1379 
+82 1144 1307 1379 704 867 939 
+83 209 286 292 1154 1231 1237 
+84 1154 1231 1237 714 791 797 
+85 254 341 516 1199 1286 1461 
+86 1199 1286 1461 759 846 1021 
+87 152 343 428 1097 1288 1373 
+88 1097 1288 1373 657 848 933 
+89 39 40 271 640 641 1216 
+90 640 641 1216 128 129 776 
+91 341 254 515 1286 1199 1460 
+92 1286 1199 1460 846 759 1020 
+93 356 266 564 1301 1211 1509 
+94 1301 1211 1509 861 771 1069 
+95 266 169 365 1211 1114 1310 
+96 1211 1114 1310 771 674 870 
+97 258 27 429 1203 628 1374 
+98 1203 628 1374 763 116 934 
+99 317 170 435 1262 1115 1380 
+100 1262 1115 1380 822 675 940 
+101 217 279 410 1162 1224 1355 
+102 1162 1224 1355 722 784 915 
+103 252 186 319 1197 1131 1264 
+104 1197 1131 1264 757 691 824 
+105 358 157 398 1303 1102 1343 
+106 1303 1102 1343 863 662 903 
+107 371 218 373 1316 1163 1318 
+108 1316 1163 1318 876 723 878 
+109 279 173 410 1224 1118 1355 
+110 1224 1118 1355 784 678 915 
+111 290 228 393 1235 1173 1338 
+112 1235 1173 1338 795 733 898 
+113 278 54 501 1223 655 1446 
+114 1223 655 1446 783 143 1006 
+115 188 356 564 1133 1301 1509 
+116 1133 1301 1509 693 861 1069 
+117 342 35 573 1287 636 1518 
+118 1287 636 1518 847 124 1078 
+119 289 215 325 1234 1160 1270 
+120 1234 1160 1270 794 720 830 
+121 209 292 310 1154 1237 1255 
+122 1154 1237 1255 714 797 815 
+123 362 255 434 1307 1200 1379 
+124 1307 1200 1379 867 760 939 
+125 375 174 475 1320 1119 1420 
+126 1320 1119 1420 880 679 980 
+127 285 190 411 1230 1135 1356 
+128 1230 1135 1356 790 695 916 
+129 204 298 344 1149 1243 1289 
+130 1149 1243 1289 709 803 849 
+131 21 22 275 622 623 1220 
+132 622 623 1220 110 111 780 
+133 337 287 506 1282 1232 1451 
+134 1282 1232 1451 842 792 1011 
+135 259 358 398 1204 1303 1343 
+136 1204 1303 1343 764 863 903 
+137 240 317 435 1185 1262 1380 
+138 1185 1262 1380 745 822 940 
+139 364 247 378 1309 1192 1323 
+140 1309 1192 1323 869 752 883 
+141 287 196 506 1232 1141 1451 
+142 1232 1141 1451 792 701 1011 
+143 245 182 485 1190 1127 1430 
+144 1190 1127 1430 750 687 990 
+145 203 265 509 1148 1210 1454 
+146 1148 1210 1454 708 770 1014 
+147 319 219 398 1264 1164 1343 
+148 1264 1164 1343 824 724 903 
+149 273 184 348 1218 1129 1293 
+150 1218 1129 1293 778 689 853 
+151 72 73 362 608 609 1307 
+152 608 609 1307 96 97 867 
+153 334 163 344 1279 1108 1289 
+154 1279 1108 1289 839 668 849 
+155 213 324 351 1158 1269 1296 
+156 1158 1269 1296 718 829 856 
+157 30 31 283 631 632 1228 
+158 631 632 1228 119 120 788 
+159 54 55 501 655 656 1446 
+160 655 656 1446 143 144 1006 
+161 3 36 346 150 637 1291 
+162 150 637 1291 13 125 851 
+163 192 269 465 1137 1214 1410 
+164 1137 1214 1410 697 774 970 
+165 324 217 351 1269 1162 1296 
+166 1269 1162 1296 829 722 856 
+167 157 357 481 1102 1302 1426 
+168 1102 1302 1426 662 862 986 
+169 239 380 419 1184 1325 1364 
+170 1184 1325 1364 744 885 924 
+171 469 307 514 1414 1252 1459 
+172 1414 1252 1459 974 812 1019 
+173 223 305 383 1168 1250 1328 
+174 1168 1250 1328 728 810 888 
+175 182 260 485 1127 1205 1430 
+176 1127 1205 1430 687 765 990 
+177 341 167 516 1286 1112 1461 
+178 1286 1112 1461 846 672 1021 
+179 201 302 345 1146 1247 1290 
+180 1146 1247 1290 706 807 850 
+181 188 312 356 1133 1257 1301 
+182 1133 1257 1301 693 817 861 
+183 34 35 342 635 636 1287 
+184 635 636 1287 123 124 847 
+185 256 210 349 1201 1155 1294 
+186 1201 1155 1294 761 715 854 
+187 403 286 480 1348 1231 1425 
+188 1348 1231 1425 908 791 985 
+189 207 254 516 1152 1199 1461 
+190 1152 1199 1461 712 759 1021 
+191 258 197 416 1203 1142 1361 
+192 1203 1142 1361 763 702 921 
+193 169 266 356 1114 1211 1301 
+194 1114 1211 1301 674 771 861 
+195 235 338 469 1180 1283 1414 
+196 1180 1283 1414 740 843 974 
+197 228 290 417 1173 1235 1362 
+198 1173 1235 1362 733 795 922 
+199 243 307 469 1188 1252 1414 
+200 1188 1252 1414 748 812 974 
+201 27 258 416 628 1203 1361 
+202 628 1203 1361 116 763 921 
+203 290 154 316 1235 1099 1261 
+204 1235 1099 1261 795 659 821 
+205 184 273 347 1129 1218 1292 
+206 1129 1218 1292 689 778 852 
+207 154 267 310 1099 1212 1255 
+208 1099 1212 1255 659 772 815 
+209 292 286 583 1237 1231 1528 
+210 1237 1231 1528 797 791 1088 
+211 319 398 481 1264 1343 1426 
+212 1264 1343 1426 824 903 986 
+213 63 285 411 599 1230 1356 
+214 599 1230 1356 87 790 916 
+215 163 308 344 1108 1253 1289 
+216 1108 1253 1289 668 813 849 
+217 202 257 532 1147 1202 1477 
+218 1147 1202 1477 707 762 1037 
+219 182 245 408 1127 1190 1353 
+220 1127 1190 1353 687 750 913 
+221 323 242 384 1268 1187 1329 
+222 1268 1187 1329 828 747 889 
+223 265 203 407 1210 1148 1352 
+224 1210 1148 1352 770 708 912 
+225 276 193 450 1221 1138 1395 
+226 1221 1138 1395 781 698 955 
+227 255 362 489 1200 1307 1434 
+228 1200 1307 1434 760 867 994 
+229 164 270 327 1109 1215 1272 
+230 1109 1215 1272 669 775 832 
+231 165 272 542 1110 1217 1487 
+232 1110 1217 1487 670 777 1047 
+233 468 166 588 1413 1111 1533 
+234 1413 1111 1533 973 671 1093 
+235 198 341 515 1143 1286 1460 
+236 1143 1286 1460 703 846 1020 
+237 163 281 308 1108 1226 1253 
+238 1108 1226 1253 668 786 813 
+239 481 357 563 1426 1302 1508 
+240 1426 1302 1508 986 862 1068 
+241 380 213 419 1325 1158 1364 
+242 1325 1158 1364 885 718 924 
+243 154 292 316 1099 1237 1261 
+244 1099 1237 1261 659 797 821 
+245 233 387 468 1178 1332 1413 
+246 1178 1332 1413 738 892 973 
+247 272 165 388 1217 1110 1333 
+248 1217 1110 1333 777 670 893 
+249 155 437 545 1100 1382 1490 
+250 1100 1382 1490 660 942 1050 
+251 372 248 410 1317 1193 1355 
+252 1317 1193 1355 877 753 915 
+253 411 190 508 1356 1135 1453 
+254 1356 1135 1453 916 695 1013 
+255 177 363 372 1122 1308 1317 
+256 1122 1308 1317 682 868 877 
+257 197 311 322 1142 1256 1267 
+258 1142 1256 1267 702 816 827 
+259 237 332 568 1182 1277 1513 
+260 1182 1277 1513 742 837 1073 
+261 3 346 573 150 1291 1518 
+262 150 1291 1518 13 851 1078 
+263 281 163 401 1226 1108 1346 
+264 1226 1108 1346 786 668 906 
+265 292 154 310 1237 1099 1255 
+266 1237 1099 1255 797 659 815 
+267 321 17 382 1266 618 1327 
+268 1266 618 1327 826 106 887 
+269 168 287 337 1113 1232 1282 
+270 1113 1232 1282 673 792 842 
+271 39 271 452 640 1216 1397 
+272 640 1216 1397 128 776 957 
+273 302 159 345 1247 1104 1290 
+274 1247 1104 1290 807 664 850 
+275 178 301 395 1123 1246 1340 
+276 1123 1246 1340 683 806 900 
+277 263 180 425 1208 1125 1370 
+278 1208 1125 1370 768 685 930 
+279 275 22 442 1220 623 1387 
+280 1220 623 1387 780 111 947 
+281 315 262 557 1260 1207 1502 
+282 1260 1207 1502 820 767 1062 
+283 280 375 475 1225 1320 1420 
+284 1225 1320 1420 785 880 980 
+285 309 297 518 1254 1242 1463 
+286 1254 1242 1463 814 802 1023 
+287 284 189 333 1229 1134 1278 
+288 1229 1134 1278 789 694 838 
+289 268 463 493 1213 1408 1438 
+290 1213 1408 1438 773 968 998 
+291 186 310 539 1131 1255 1484 
+292 1131 1255 1484 691 815 1044 
+293 406 359 533 1351 1304 1478 
+294 1351 1304 1478 911 864 1038 
+295 216 272 388 1161 1217 1333 
+296 1161 1217 1333 721 777 893 
+297 175 253 434 1120 1198 1379 
+298 1120 1198 1379 680 758 939 
+299 293 194 455 1238 1139 1400 
+300 1238 1139 1400 798 699 960 
+301 434 255 555 1379 1200 1500 
+302 1379 1200 1500 939 760 1060 
+303 270 164 524 1215 1109 1469 
+304 1215 1109 1469 775 669 1029 
+305 262 205 387 1207 1150 1332 
+306 1207 1150 1332 767 710 892 
+307 446 230 523 1391 1175 1468 
+308 1391 1175 1468 951 735 1028 
+309 254 207 394 1199 1152 1339 
+310 1199 1152 1339 759 712 899 
+311 203 283 534 1148 1228 1479 
+312 1148 1228 1479 708 788 1039 
+313 387 205 468 1332 1150 1413 
+314 1332 1150 1413 892 710 973 
+315 333 247 363 1278 1192 1308 
+316 1278 1192 1308 838 752 868 
+317 194 289 325 1139 1234 1270 
+318 1139 1234 1270 699 794 830 
+319 218 281 401 1163 1226 1346 
+320 1163 1226 1346 723 786 906 
+321 185 308 533 1130 1253 1478 
+322 1130 1253 1478 690 813 1038 
+323 38 452 477 639 1397 1422 
+324 639 1397 1422 127 957 982 
+325 193 386 419 1138 1331 1364 
+326 1138 1331 1364 698 891 924 
+327 236 246 482 1181 1191 1427 
+328 1181 1191 1427 741 751 987 
+329 196 358 487 1141 1303 1432 
+330 1141 1303 1432 701 863 992 
+331 230 288 523 1175 1233 1468 
+332 1175 1233 1468 735 793 1028 
+333 199 261 521 1144 1206 1466 
+334 1144 1206 1466 704 766 1026 
+335 372 410 584 1317 1355 1529 
+336 1317 1355 1529 877 915 1089 
+337 447 237 568 1392 1182 1513 
+338 1392 1182 1513 952 742 1073 
+339 220 264 384 1165 1209 1329 
+340 1165 1209 1329 725 769 889 
+341 23 24 305 624 625 1250 
+342 624 625 1250 112 113 810 
+343 279 217 415 1224 1162 1360 
+344 1224 1162 1360 784 722 920 
+345 191 286 403 1136 1231 1348 
+346 1136 1231 1348 696 791 908 
+347 186 252 392 1131 1197 1337 
+348 1131 1197 1337 691 757 897 
+349 343 181 355 1288 1126 1300 
+350 1288 1126 1300 848 686 860 
+351 264 184 397 1209 1129 1342 
+352 1209 1129 1342 769 689 902 
+353 196 287 358 1141 1232 1303 
+354 1141 1232 1303 701 792 863 
+355 257 202 420 1202 1147 1365 
+356 1202 1147 1365 762 707 925 
+357 391 221 465 1336 1166 1410 
+358 1336 1166 1410 896 726 970 
+359 336 218 371 1281 1163 1316 
+360 1281 1163 1316 841 723 876 
+361 294 166 468 1239 1111 1413 
+362 1239 1111 1413 799 671 973 
+363 16 17 321 617 618 1266 
+364 617 618 1266 105 106 826 
+365 358 259 487 1303 1204 1432 
+366 1303 1204 1432 863 764 992 
+367 283 203 361 1228 1148 1306 
+368 1228 1148 1306 788 708 866 
+369 262 200 414 1207 1145 1359 
+370 1207 1145 1359 767 705 919 
+371 386 193 575 1331 1138 1520 
+372 1331 1138 1520 891 698 1080 
+373 227 299 548 1172 1244 1493 
+374 1172 1244 1493 732 804 1053 
+375 247 333 550 1192 1278 1495 
+376 1192 1278 1495 752 838 1055 
+377 277 326 525 1222 1271 1470 
+378 1222 1271 1470 782 831 1030 
+379 184 264 348 1129 1209 1293 
+380 1129 1209 1293 689 769 853 
+381 193 330 450 1138 1275 1395 
+382 1138 1275 1395 698 835 955 
+383 286 191 583 1231 1136 1528 
+384 1231 1136 1528 791 696 1088 
+385 306 165 542 1251 1110 1487 
+386 1251 1110 1487 811 670 1047 
+387 180 311 522 1125 1256 1467 
+388 1125 1256 1467 685 816 1027 
+389 431 236 479 1376 1181 1424 
+390 1376 1181 1424 936 741 984 
+391 210 256 399 1155 1201 1344 
+392 1155 1201 1344 715 761 904 
+393 463 178 493 1408 1123 1438 
+394 1408 1123 1438 968 683 998 
+395 155 371 373 1100 1316 1318 
+396 1100 1316 1318 660 876 878 
+397 187 298 452 1132 1243 1397 
+398 1132 1243 1397 692 803 957 
+399 197 322 332 1142 1267 1277 
+400 1142 1267 1277 702 827 837 
+401 260 182 386 1205 1127 1331 
+402 1205 1127 1331 765 687 891 
+403 265 28 509 1210 629 1454 
+404 1210 629 1454 770 117 1014 
+405 311 258 522 1256 1203 1467 
+406 1256 1203 1467 816 763 1027 
+407 269 192 382 1214 1137 1327 
+408 1214 1137 1327 774 697 887 
+409 325 168 532 1270 1113 1477 
+410 1270 1113 1477 830 673 1037 
+411 303 222 341 1248 1167 1286 
+412 1248 1167 1286 808 727 846 
+413 325 532 566 1270 1477 1511 
+414 1270 1477 1511 830 1037 1071 
+415 298 204 413 1243 1149 1358 
+416 1243 1149 1358 803 709 918 
+417 274 342 573 1219 1287 1518 
+418 1219 1287 1518 779 847 1078 
+419 438 270 585 1383 1215 1530 
+420 1383 1215 1530 943 775 1090 
+421 363 248 372 1308 1193 1317 
+422 1308 1193 1317 868 753 877 
+423 361 203 509 1306 1148 1454 
+424 1306 1148 1454 866 708 1014 
+425 174 273 348 1119 1218 1293 
+426 1119 1218 1293 679 778 853 
+427 253 175 403 1198 1120 1348 
+428 1198 1120 1348 758 680 908 
+429 285 63 451 1230 599 1396 
+430 1230 599 1396 790 87 956 
+431 271 187 452 1216 1132 1397 
+432 1216 1132 1397 776 692 957 
+433 299 352 548 1244 1297 1493 
+434 1244 1297 1493 804 857 1053 
+435 310 267 539 1255 1212 1484 
+436 1255 1212 1484 815 772 1044 
+437 167 359 406 1112 1304 1351 
+438 1112 1304 1351 672 864 911 
+439 52 280 369 653 1225 1314 
+440 653 1225 1314 141 785 874 
+441 224 343 355 1169 1288 1300 
+442 1169 1288 1300 729 848 860 
+443 181 438 585 1126 1383 1530 
+444 1126 1383 1530 686 943 1090 
+445 172 404 469 1117 1349 1414 
+446 1117 1349 1414 677 909 974 
+447 437 250 545 1382 1195 1490 
+448 1382 1195 1490 942 755 1050 
+449 241 343 464 1186 1288 1409 
+450 1186 1288 1409 746 848 969 
+451 298 187 344 1243 1132 1289 
+452 1243 1132 1289 803 692 849 
+453 62 63 411 598 599 1356 
+454 598 599 1356 86 87 916 
+455 295 164 340 1240 1109 1285 
+456 1240 1109 1285 800 669 845 
+457 190 285 561 1135 1230 1506 
+458 1135 1230 1506 695 790 1066 
+459 326 195 525 1271 1140 1470 
+460 1271 1140 1470 831 700 1030 
+461 189 284 478 1134 1229 1423 
+462 1134 1229 1423 694 789 983 
+463 322 226 332 1267 1171 1277 
+464 1267 1171 1277 827 731 837 
+465 290 231 417 1235 1176 1362 
+466 1235 1176 1362 795 736 922 
+467 322 311 458 1267 1256 1403 
+468 1267 1256 1403 827 816 963 
+469 312 238 356 1257 1183 1301 
+470 1257 1183 1301 817 743 861 
+471 164 295 524 1109 1240 1469 
+472 1109 1240 1469 669 800 1029 
+473 276 183 443 1221 1128 1388 
+474 1221 1128 1388 781 688 948 
+475 32 303 402 633 1248 1347 
+476 633 1248 1347 121 808 907 
+477 160 297 309 1105 1242 1254 
+478 1105 1242 1254 665 802 814 
+479 183 276 364 1128 1221 1309 
+480 1128 1221 1309 688 781 869 
+481 237 305 495 1182 1250 1440 
+482 1182 1250 1440 742 810 1000 
+483 202 295 441 1147 1240 1386 
+484 1147 1240 1386 707 800 946 
+485 211 368 374 1156 1313 1319 
+486 1156 1313 1319 716 873 879 
+487 286 209 537 1231 1154 1482 
+488 1231 1154 1482 791 714 1042 
+489 248 363 553 1193 1308 1498 
+490 1193 1308 1498 753 868 1058 
+491 287 227 470 1232 1172 1415 
+492 1232 1172 1415 792 732 975 
+493 304 199 521 1249 1144 1466 
+494 1249 1144 1466 809 704 1026 
+495 455 194 566 1400 1139 1511 
+496 1400 1139 1511 960 699 1071 
+497 23 305 442 624 1250 1387 
+498 624 1250 1387 112 810 947 
+499 371 155 545 1316 1100 1490 
+500 1316 1100 1490 876 660 1050 
+501 175 434 555 1120 1379 1500 
+502 1120 1379 1500 680 939 1060 
+503 173 279 492 1118 1224 1437 
+504 1118 1224 1437 678 784 997 
+505 283 31 402 1228 632 1347 
+506 1228 632 1347 788 120 907 
+507 308 204 344 1253 1149 1289 
+508 1253 1149 1289 813 709 849 
+509 280 208 375 1225 1153 1320 
+510 1225 1153 1320 785 713 880 
+511 46 47 380 647 648 1325 
+512 647 648 1325 135 136 885 
+513 166 318 482 1111 1263 1427 
+514 1111 1263 1427 671 823 987 
+515 301 178 463 1246 1123 1408 
+516 1246 1123 1408 806 683 968 
+517 54 278 389 655 1223 1334 
+518 655 1223 1334 143 783 894 
+519 273 174 375 1218 1119 1320 
+520 1218 1119 1320 778 679 880 
+521 273 156 347 1218 1101 1292 
+522 1218 1101 1292 778 661 852 
+523 269 391 465 1214 1336 1410 
+524 1214 1336 1410 774 896 970 
+525 160 309 349 1105 1254 1294 
+526 1105 1254 1294 665 814 854 
+527 308 281 533 1253 1226 1478 
+528 1253 1226 1478 813 786 1038 
+529 380 47 496 1325 648 1441 
+530 1325 648 1441 885 136 1001 
+531 272 216 425 1217 1161 1370 
+532 1217 1161 1370 777 721 930 
+533 238 301 463 1183 1246 1408 
+534 1183 1246 1408 743 806 968 
+535 67 291 454 603 1236 1399 
+536 603 1236 1399 91 796 959 
+537 318 236 482 1263 1181 1427 
+538 1263 1181 1427 823 741 987 
+539 245 353 408 1190 1298 1353 
+540 1190 1298 1353 750 858 913 
+541 359 222 499 1304 1167 1444 
+542 1304 1167 1444 864 727 1004 
+543 21 275 460 622 1220 1405 
+544 622 1220 1405 110 780 965 
+545 275 442 491 1220 1387 1436 
+546 1220 1387 1436 780 947 996 
+547 309 175 349 1254 1120 1294 
+548 1254 1120 1294 814 680 854 
+549 472 248 553 1417 1193 1498 
+550 1417 1193 1498 977 753 1058 
+551 280 52 544 1225 653 1489 
+552 1225 653 1489 785 141 1049 
+553 302 201 352 1247 1146 1297 
+554 1247 1146 1297 807 706 857 
+555 305 223 442 1250 1168 1387 
+556 1250 1168 1387 810 728 947 
+557 299 176 352 1244 1121 1297 
+558 1244 1121 1297 804 681 857 
+559 207 307 394 1152 1252 1339 
+560 1152 1252 1339 712 812 899 
+561 299 215 423 1244 1160 1368 
+562 1244 1160 1368 804 720 928 
+563 410 248 472 1355 1193 1417 
+564 1355 1193 1417 915 753 977 
+565 187 334 344 1132 1279 1289 
+566 1132 1279 1289 692 839 849 
+567 268 331 463 1213 1276 1408 
+568 1213 1276 1408 773 836 968 
+569 194 293 439 1139 1238 1384 
+570 1139 1238 1384 699 798 944 
+571 291 67 483 1236 603 1428 
+572 1236 603 1428 796 91 988 
+573 287 168 449 1232 1113 1394 
+574 1232 1113 1394 792 673 954 
+575 224 355 412 1169 1300 1357 
+576 1169 1300 1357 729 860 917 
+577 28 265 429 629 1210 1374 
+578 629 1210 1374 117 770 934 
+579 395 301 510 1340 1246 1455 
+580 1340 1246 1455 900 806 1015 
+581 323 153 376 1268 1098 1321 
+582 1268 1098 1321 828 658 881 
+583 399 256 567 1344 1201 1512 
+584 1344 1201 1512 904 761 1072 
+585 377 199 434 1322 1144 1379 
+586 1322 1144 1379 882 704 939 
+587 47 48 324 648 649 1269 
+588 648 649 1269 136 137 829 
+589 190 561 569 1135 1506 1514 
+590 1135 1506 1514 695 1066 1074 
+591 305 237 447 1250 1182 1392 
+592 1250 1182 1392 810 742 952 
+593 30 283 361 631 1228 1306 
+594 631 1228 1306 119 788 866 
+595 195 326 582 1140 1271 1527 
+596 1140 1271 1527 700 831 1087 
+597 267 154 393 1212 1099 1338 
+598 1212 1099 1338 772 659 898 
+599 402 198 534 1347 1143 1479 
+600 1347 1143 1479 907 703 1039 
+601 5 56 501 145 592 1446 
+602 145 592 1446 8 80 1006 
+603 346 36 413 1291 637 1358 
+604 1291 637 1358 851 125 918 
+605 205 262 366 1150 1207 1311 
+606 1150 1207 1311 710 767 871 
+607 208 280 544 1153 1225 1489 
+608 1153 1225 1489 713 785 1049 
+609 306 203 534 1251 1148 1479 
+610 1251 1148 1479 811 708 1039 
+611 250 307 545 1195 1252 1490 
+612 1195 1252 1490 755 812 1050 
+613 222 303 546 1167 1248 1491 
+614 1167 1248 1491 727 808 1051 
+615 177 333 363 1122 1278 1308 
+616 1122 1278 1308 682 838 868 
+617 275 221 460 1220 1166 1405 
+618 1220 1166 1405 780 726 965 
+619 197 328 416 1142 1273 1361 
+620 1142 1273 1361 702 833 921 
+621 307 207 545 1252 1152 1490 
+622 1252 1152 1490 812 712 1050 
+623 217 410 472 1162 1355 1417 
+624 1162 1355 1417 722 915 977 
+625 206 290 316 1151 1235 1261 
+626 1151 1235 1261 711 795 821 
+627 343 224 428 1288 1169 1373 
+628 1288 1169 1373 848 729 933 
+629 452 298 477 1397 1243 1422 
+630 1397 1243 1422 957 803 982 
+631 195 296 335 1140 1241 1280 
+632 1140 1241 1280 700 801 840 
+633 163 353 401 1108 1298 1346 
+634 1108 1298 1346 668 858 906 
+635 72 304 497 608 1249 1442 
+636 608 1249 1442 96 809 1002 
+637 36 37 413 637 638 1358 
+638 637 638 1358 125 126 918 
+639 278 229 543 1223 1174 1488 
+640 1223 1174 1488 783 734 1048 
+641 222 342 499 1167 1287 1444 
+642 1167 1287 1444 727 847 1004 
+643 337 202 532 1282 1147 1477 
+644 1282 1147 1477 842 707 1037 
+645 175 309 403 1120 1254 1348 
+646 1120 1254 1348 680 814 908 
+647 261 199 377 1206 1144 1322 
+648 1206 1144 1322 766 704 882 
+649 215 299 409 1160 1244 1354 
+650 1160 1244 1354 720 804 914 
+651 182 314 350 1127 1259 1295 
+652 1127 1259 1295 687 819 855 
+653 231 290 507 1176 1235 1452 
+654 1176 1235 1452 736 795 1012 
+655 215 289 459 1160 1234 1404 
+656 1160 1234 1404 720 794 964 
+657 182 350 386 1127 1295 1331 
+658 1127 1295 1331 687 855 891 
+659 442 223 491 1387 1168 1436 
+660 1387 1168 1436 947 728 996 
+661 227 287 449 1172 1232 1394 
+662 1172 1232 1394 732 792 954 
+663 217 324 415 1162 1269 1360 
+664 1162 1269 1360 722 829 920 
+665 293 179 439 1238 1124 1384 
+666 1238 1124 1384 798 684 944 
+667 193 276 471 1138 1221 1416 
+668 1138 1221 1416 698 781 976 
+669 296 195 582 1241 1140 1527 
+670 1241 1140 1527 801 700 1087 
+671 55 5 501 656 145 1446 
+672 656 145 1446 144 8 1006 
+673 329 190 354 1274 1135 1299 
+674 1274 1135 1299 834 695 859 
+675 303 32 546 1248 633 1491 
+676 1248 633 1491 808 121 1051 
+677 198 303 341 1143 1248 1286 
+678 1143 1248 1286 703 808 846 
+679 25 26 328 626 627 1273 
+680 626 627 1273 114 115 833 
+681 283 402 534 1228 1347 1479 
+682 1228 1347 1479 788 907 1039 
+683 264 220 490 1209 1165 1435 
+684 1209 1165 1435 769 725 995 
+685 295 202 506 1240 1147 1451 
+686 1240 1147 1451 800 707 1011 
+687 290 206 507 1235 1151 1452 
+688 1235 1151 1452 795 711 1012 
+689 281 218 406 1226 1163 1351 
+690 1226 1163 1351 786 723 911 
+691 249 411 508 1194 1356 1453 
+692 1194 1356 1453 754 916 1013 
+693 384 242 456 1329 1187 1401 
+694 1329 1187 1401 889 747 961 
+695 284 234 462 1229 1179 1407 
+696 1229 1179 1407 789 739 967 
+697 260 386 575 1205 1331 1520 
+698 1205 1331 1520 765 891 1080 
+699 303 198 402 1248 1143 1347 
+700 1248 1143 1347 808 703 907 
+701 305 24 495 1250 625 1440 
+702 1250 625 1440 810 113 1000 
+703 219 319 365 1164 1264 1310 
+704 1164 1264 1310 724 824 870 
+705 297 206 518 1242 1151 1463 
+706 1242 1151 1463 802 711 1023 
+707 195 321 525 1140 1266 1470 
+708 1140 1266 1470 700 826 1030 
+709 224 412 467 1169 1357 1412 
+710 1169 1357 1412 729 917 972 
+711 162 330 351 1107 1275 1296 
+712 1107 1275 1296 667 835 856 
+713 163 334 353 1108 1279 1298 
+714 1108 1279 1298 668 839 858 
+715 360 179 427 1305 1124 1372 
+716 1305 1124 1372 865 684 932 
+717 310 186 392 1255 1131 1337 
+718 1255 1131 1337 815 691 897 
+719 379 7 459 1324 147 1404 
+720 1324 147 1404 884 10 964 
+721 325 215 409 1270 1160 1354 
+722 1270 1160 1354 830 720 914 
+723 282 378 552 1227 1323 1497 
+724 1227 1323 1497 787 883 1057 
+725 253 377 434 1198 1322 1379 
+726 1198 1322 1379 758 882 939 
+727 229 278 390 1174 1223 1335 
+728 1174 1223 1335 734 783 895 
+729 38 39 452 639 640 1397 
+730 639 640 1397 127 128 957 
+731 368 229 374 1313 1174 1319 
+732 1313 1174 1319 873 734 879 
+733 336 207 516 1281 1152 1461 
+734 1281 1152 1461 841 712 1021 
+735 209 310 392 1154 1255 1337 
+736 1154 1255 1337 714 815 897 
+737 19 20 391 620 621 1336 
+738 620 621 1336 108 109 896 
+739 234 323 376 1179 1268 1321 
+740 1179 1268 1321 739 828 881 
+741 214 418 437 1159 1363 1382 
+742 1159 1363 1382 719 923 942 
+743 308 185 453 1253 1130 1398 
+744 1253 1130 1398 813 690 958 
+745 322 158 405 1267 1103 1350 
+746 1267 1103 1350 827 663 910 
+747 221 275 436 1166 1220 1381 
+748 1166 1220 1381 726 780 941 
+749 295 340 441 1240 1285 1386 
+750 1240 1285 1386 800 845 946 
+751 176 299 423 1121 1244 1368 
+752 1121 1244 1368 681 804 928 
+753 288 215 459 1233 1160 1404 
+754 1233 1160 1404 793 720 964 
+755 210 399 538 1155 1344 1483 
+756 1155 1344 1483 715 904 1043 
+757 166 294 484 1111 1239 1429 
+758 1111 1239 1429 671 799 989 
+759 204 308 453 1149 1253 1398 
+760 1149 1253 1398 709 813 958 
+761 172 320 404 1117 1265 1349 
+762 1117 1265 1349 677 825 909 
+763 346 274 573 1291 1219 1518 
+764 1291 1219 1518 851 779 1078 
+765 309 191 403 1254 1136 1348 
+766 1254 1136 1348 814 696 908 
+767 63 64 451 599 600 1396 
+768 599 600 1396 87 88 956 
+769 211 329 368 1156 1274 1313 
+770 1156 1274 1313 716 834 873 
+771 378 189 552 1323 1134 1497 
+772 1323 1134 1497 883 694 1057 
+773 238 312 520 1183 1257 1465 
+774 1183 1257 1465 743 817 1025 
+775 31 32 402 632 633 1347 
+776 632 633 1347 120 121 907 
+777 360 427 588 1305 1372 1533 
+778 1305 1372 1533 865 932 1093 
+779 376 153 414 1321 1098 1359 
+780 1321 1098 1359 881 658 919 
+781 314 212 571 1259 1157 1516 
+782 1259 1157 1516 819 717 1076 
+783 316 292 583 1261 1237 1528 
+784 1261 1237 1528 821 797 1088 
+785 181 343 438 1126 1288 1383 
+786 1126 1288 1383 686 848 943 
+787 384 264 540 1329 1209 1485 
+788 1329 1209 1485 889 769 1045 
+789 192 277 525 1137 1222 1470 
+790 1137 1222 1470 697 782 1030 
+791 313 42 476 1258 643 1421 
+792 1258 643 1421 818 131 981 
+793 299 227 449 1244 1172 1394 
+794 1244 1172 1394 804 732 954 
+795 253 403 480 1198 1348 1425 
+796 1198 1348 1425 758 908 985 
+797 252 481 563 1197 1426 1508 
+798 1197 1426 1508 757 986 1068 
+799 373 218 401 1318 1163 1346 
+800 1318 1163 1346 878 723 906 
+801 212 314 408 1157 1259 1353 
+802 1157 1259 1353 717 819 913 
+803 300 60 530 1245 596 1475 
+804 1245 596 1475 805 84 1035 
+805 418 250 437 1363 1195 1382 
+806 1363 1195 1382 923 755 942 
+807 190 329 508 1135 1274 1453 
+808 1135 1274 1453 695 834 1013 
+809 427 233 588 1372 1178 1533 
+810 1372 1178 1533 932 738 1093 
+811 307 250 514 1252 1195 1459 
+812 1252 1195 1459 812 755 1019 
+813 478 284 586 1423 1229 1531 
+814 1423 1229 1531 983 789 1091 
+815 171 383 447 1116 1328 1392 
+816 1116 1328 1392 676 888 952 
+817 220 384 456 1165 1329 1401 
+818 1165 1329 1401 725 889 961 
+819 66 67 454 602 603 1399 
+820 602 603 1399 90 91 959 
+821 26 27 416 627 628 1361 
+822 627 628 1361 115 116 921 
+823 352 176 574 1297 1121 1519 
+824 1297 1121 1519 857 681 1079 
+825 172 469 514 1117 1414 1459 
+826 1117 1414 1459 677 974 1019 
+827 323 234 529 1268 1179 1474 
+828 1268 1179 1474 828 739 1034 
+829 358 287 470 1303 1232 1415 
+830 1303 1232 1415 863 792 975 
+831 298 413 477 1243 1358 1422 
+832 1243 1358 1422 803 918 982 
+833 185 274 453 1130 1219 1398 
+834 1130 1219 1398 690 779 958 
+835 350 239 386 1295 1184 1331 
+836 1295 1184 1331 855 744 891 
+837 47 324 496 648 1269 1441 
+838 648 1269 1441 136 829 1001 
+839 313 212 590 1258 1157 1535 
+840 1258 1157 1535 818 717 1095 
+841 60 61 530 596 597 1475 
+842 596 597 1475 84 85 1035 
+843 202 315 420 1147 1260 1365 
+844 1147 1260 1365 707 820 925 
+845 321 192 525 1266 1137 1470 
+846 1266 1137 1470 826 697 1030 
+847 330 213 351 1275 1158 1296 
+848 1275 1158 1296 835 718 856 
+849 321 195 396 1266 1140 1341 
+850 1266 1140 1341 826 700 901 
+851 440 350 559 1385 1295 1504 
+852 1385 1295 1504 945 855 1064 
+853 156 329 354 1101 1274 1299 
+854 1101 1274 1299 661 834 859 
+855 265 407 522 1210 1352 1467 
+856 1210 1352 1467 770 912 1027 
+857 301 238 520 1246 1183 1465 
+858 1246 1183 1465 806 743 1025 
+859 156 273 473 1101 1218 1418 
+860 1101 1218 1418 661 778 978 
+861 263 425 510 1208 1370 1455 
+862 1208 1370 1455 768 930 1015 
+863 199 304 362 1144 1249 1307 
+864 1144 1249 1307 704 809 867 
+865 234 284 444 1179 1229 1389 
+866 1179 1229 1389 739 789 949 
+867 320 251 404 1265 1196 1349 
+868 1265 1196 1349 825 756 909 
+869 328 237 495 1273 1182 1440 
+870 1273 1182 1440 833 742 1000 
+871 327 270 438 1272 1215 1383 
+872 1272 1215 1383 832 775 943 
+873 329 156 368 1274 1101 1313 
+874 1274 1101 1313 834 661 873 
+875 266 365 505 1211 1310 1450 
+876 1211 1310 1450 771 870 1010 
+877 312 158 520 1257 1103 1465 
+878 1257 1103 1465 817 663 1025 
+879 407 272 425 1352 1217 1370 
+880 1352 1217 1370 912 777 930 
+881 168 325 409 1113 1270 1354 
+882 1113 1270 1354 673 830 914 
+883 386 239 419 1331 1184 1364 
+884 1331 1184 1364 891 744 924 
+885 210 538 582 1155 1483 1527 
+886 1155 1483 1527 715 1043 1087 
+887 353 245 401 1298 1190 1346 
+888 1298 1190 1346 858 750 906 
+889 334 212 353 1279 1157 1298 
+890 1279 1157 1298 839 717 858 
+891 19 391 498 620 1336 1443 
+892 620 1336 1443 108 896 1003 
+893 343 241 438 1288 1186 1383 
+894 1288 1186 1383 848 746 943 
+895 160 576 591 1105 1521 1536 
+896 1105 1521 1536 665 1081 1096 
+897 396 335 474 1341 1280 1419 
+898 1341 1280 1419 901 840 979 
+899 271 40 494 1216 641 1439 
+900 1216 641 1439 776 129 999 
+901 226 322 405 1171 1267 1350 
+902 1171 1267 1350 731 827 910 
+903 215 288 423 1160 1233 1368 
+904 1160 1233 1368 720 793 928 
+905 158 322 458 1103 1267 1403 
+906 1103 1267 1403 663 827 963 
+907 51 52 369 652 653 1314 
+908 652 653 1314 140 141 874 
+909 29 30 361 630 631 1306 
+910 630 631 1306 118 119 866 
+911 443 214 471 1388 1159 1416 
+912 1388 1159 1416 948 719 976 
+913 315 161 420 1260 1106 1365 
+914 1260 1106 1365 820 666 925 
+915 430 222 546 1375 1167 1491 
+916 1375 1167 1491 935 727 1051 
+917 461 240 591 1406 1185 1536 
+918 1406 1185 1536 966 745 1096 
+919 213 330 419 1158 1275 1364 
+920 1158 1275 1364 718 835 924 
+921 192 321 382 1137 1266 1327 
+922 1137 1266 1327 697 826 887 
+923 561 318 569 1506 1263 1514 
+924 1506 1263 1514 1066 823 1074 
+925 314 182 408 1259 1127 1353 
+926 1259 1127 1353 819 687 913 
+927 203 306 542 1148 1251 1487 
+928 1148 1251 1487 708 811 1047 
+929 153 384 540 1098 1329 1485 
+930 1098 1329 1485 658 889 1045 
+931 57 58 374 593 594 1319 
+932 593 594 1319 81 82 879 
+933 207 336 371 1152 1281 1316 
+934 1152 1281 1316 712 841 876 
+935 179 293 427 1124 1238 1372 
+936 1124 1238 1372 684 798 932 
+937 244 347 354 1189 1292 1299 
+938 1189 1292 1299 749 852 859 
+939 311 263 458 1256 1208 1403 
+940 1256 1208 1403 816 768 963 
+941 274 346 453 1219 1291 1398 
+942 1219 1291 1398 779 851 958 
+943 25 328 495 626 1273 1440 
+944 626 1273 1440 114 833 1000 
+945 187 271 556 1132 1216 1501 
+946 1132 1216 1501 692 776 1061 
+947 347 156 354 1292 1101 1299 
+948 1292 1101 1299 852 661 859 
+949 307 243 466 1252 1188 1411 
+950 1252 1188 1411 812 748 971 
+951 183 378 503 1128 1323 1448 
+952 1128 1323 1448 688 883 1008 
+953 212 334 590 1157 1279 1535 
+954 1157 1279 1535 717 839 1095 
+955 277 192 461 1222 1137 1406 
+956 1222 1137 1406 782 697 966 
+957 330 193 419 1275 1138 1364 
+958 1275 1138 1364 835 698 924 
+959 345 209 424 1290 1154 1369 
+960 1290 1154 1369 850 714 929 
+961 165 306 560 1110 1251 1505 
+962 1110 1251 1505 670 811 1065 
+963 206 297 536 1151 1242 1481 
+964 1151 1242 1481 711 802 1041 
+965 407 180 522 1352 1125 1467 
+966 1352 1125 1467 912 685 1027 
+967 276 443 471 1221 1388 1416 
+968 1221 1388 1416 781 948 976 
+969 206 316 518 1151 1261 1463 
+970 1151 1261 1463 711 821 1023 
+971 159 302 547 1104 1247 1492 
+972 1104 1247 1492 664 807 1052 
+973 302 352 574 1247 1297 1519 
+974 1247 1297 1519 807 857 1079 
+975 158 312 405 1103 1257 1350 
+976 1103 1257 1350 663 817 910 
+977 320 172 418 1265 1117 1363 
+978 1265 1117 1363 825 677 923 
+979 243 338 580 1188 1283 1525 
+980 1188 1283 1525 748 843 1085 
+981 532 257 566 1477 1202 1511 
+982 1477 1202 1511 1037 762 1071 
+983 214 320 418 1159 1265 1363 
+984 1159 1265 1363 719 825 923 
+985 42 43 476 643 644 1421 
+986 643 644 1421 131 132 981 
+987 315 202 441 1260 1147 1386 
+988 1260 1147 1386 820 707 946 
+989 252 319 481 1197 1264 1426 
+990 1197 1264 1426 757 824 986 
+991 356 238 531 1301 1183 1476 
+992 1301 1183 1476 861 743 1036 
+993 159 377 480 1104 1322 1425 
+994 1104 1322 1425 664 882 985 
+995 45 440 559 646 1385 1504 
+996 646 1385 1504 134 945 1064 
+997 180 407 425 1125 1352 1370 
+998 1125 1352 1370 685 912 930 
+999 364 162 553 1309 1107 1498 
+1000 1309 1107 1498 869 667 1058 
+1001 170 317 436 1115 1262 1381 
+1002 1115 1262 1381 675 822 941 
+1003 212 476 571 1157 1421 1516 
+1004 1157 1421 1516 717 981 1076 
+1005 338 235 493 1283 1180 1438 
+1006 1283 1180 1438 843 740 998 
+1007 245 373 401 1190 1318 1346 
+1008 1190 1318 1346 750 878 906 
+1009 202 337 506 1147 1282 1451 
+1010 1147 1282 1451 707 842 1011 
+1011 52 53 544 653 654 1489 
+1012 653 654 1489 141 142 1049 
+1013 28 29 509 629 630 1454 
+1014 629 630 1454 117 118 1014 
+1015 336 167 406 1281 1112 1351 
+1016 1281 1112 1351 841 672 911 
+1017 377 253 480 1322 1198 1425 
+1018 1322 1198 1425 882 758 985 
+1019 397 184 511 1342 1129 1456 
+1020 1342 1129 1456 902 689 1016 
+1021 383 171 417 1328 1116 1362 
+1022 1328 1116 1362 888 676 922 
+1023 279 415 589 1224 1360 1534 
+1024 1224 1360 1534 784 920 1094 
+1025 394 307 466 1339 1252 1411 
+1026 1339 1252 1411 899 812 971 
+1027 576 326 591 1521 1271 1536 
+1028 1521 1271 1536 1081 831 1096 
+1029 156 367 368 1101 1312 1313 
+1030 1101 1312 1313 661 872 873 
+1031 289 379 459 1234 1324 1404 
+1032 1234 1324 1404 794 884 964 
+1033 324 213 496 1269 1158 1441 
+1034 1269 1158 1441 829 718 1001 
+1035 209 392 424 1154 1337 1369 
+1036 1154 1337 1369 714 897 929 
+1037 57 374 554 593 1319 1499 
+1038 593 1319 1499 81 879 1059 
+1039 208 389 543 1153 1334 1488 
+1040 1153 1334 1488 713 894 1048 
+1041 425 216 510 1370 1161 1455 
+1042 1370 1161 1455 930 721 1015 
+1043 230 497 521 1175 1442 1466 
+1044 1175 1442 1466 735 1002 1026 
+1045 161 315 557 1106 1260 1502 
+1046 1106 1260 1502 666 820 1062 
+1047 73 74 489 609 610 1434 
+1048 609 610 1434 97 98 994 
+1049 171 447 568 1116 1392 1513 
+1050 1116 1392 1513 676 952 1073 
+1051 288 230 526 1233 1175 1471 
+1052 1233 1175 1471 793 735 1031 
+1053 289 194 486 1234 1139 1431 
+1054 1234 1139 1431 794 699 991 
+1055 218 336 406 1163 1281 1351 
+1056 1163 1281 1351 723 841 911 
+1057 200 315 441 1145 1260 1386 
+1058 1145 1260 1386 705 820 946 
+1059 335 296 581 1280 1241 1526 
+1060 1280 1241 1526 840 801 1086 
+1061 338 178 395 1283 1123 1340 
+1062 1283 1123 1340 843 683 900 
+1063 328 26 416 1273 627 1361 
+1064 1273 627 1361 833 115 921 
+1065 274 185 499 1219 1130 1444 
+1066 1219 1130 1444 779 690 1004 
+1067 331 268 558 1276 1213 1503 
+1068 1276 1213 1503 836 773 1063 
+1069 76 77 399 612 613 1344 
+1070 612 613 1344 100 101 904 
+1071 379 232 457 1324 1177 1402 
+1072 1324 1177 1402 884 737 962 
+1073 69 7 379 605 147 1324 
+1074 605 147 1324 93 10 884 
+1075 77 78 538 613 614 1483 
+1076 613 614 1483 101 102 1043 
+1077 328 197 528 1273 1142 1473 
+1078 1273 1142 1473 833 702 1033 
+1079 155 373 579 1100 1318 1524 
+1080 1100 1318 1524 660 878 1084 
+1081 1 15 474 148 616 1419 
+1082 148 616 1419 11 104 979 
+1083 71 72 497 607 608 1442 
+1084 607 608 1442 95 96 1002 
+1085 330 162 450 1275 1107 1395 
+1086 1275 1107 1395 835 667 955 
+1087 40 4 494 641 151 1439 
+1088 641 151 1439 129 14 999 
+1089 211 300 549 1156 1245 1494 
+1090 1156 1245 1494 716 805 1054 
+1091 67 68 483 603 604 1428 
+1092 603 604 1428 91 92 988 
+1093 339 214 437 1284 1159 1382 
+1094 1284 1159 1382 844 719 942 
+1095 2 19 498 149 620 1443 
+1096 149 620 1443 12 108 1003 
+1097 197 332 528 1142 1277 1473 
+1098 1142 1277 1473 702 837 1033 
+1099 178 338 493 1123 1283 1438 
+1100 1123 1283 1438 683 843 998 
+1101 211 374 422 1156 1319 1367 
+1102 1156 1319 1367 716 879 927 
+1103 4 41 494 151 642 1439 
+1104 151 642 1439 14 130 999 
+1105 246 360 482 1191 1305 1427 
+1106 1191 1305 1427 751 865 987 
+1107 351 217 472 1296 1162 1417 
+1108 1296 1162 1417 856 722 977 
+1109 155 339 437 1100 1284 1382 
+1110 1100 1284 1382 660 844 942 
+1111 169 331 467 1114 1276 1412 
+1112 1114 1276 1412 674 836 972 
+1113 56 57 390 592 593 1335 
+1114 592 593 1335 80 81 895 
+1115 247 364 553 1192 1309 1498 
+1116 1192 1309 1498 752 869 1058 
+1117 318 166 484 1263 1111 1429 
+1118 1263 1111 1429 823 671 989 
+1119 209 345 537 1154 1290 1482 
+1120 1154 1290 1482 714 850 1042 
+1121 185 359 499 1130 1304 1444 
+1122 1130 1304 1444 690 864 1004 
+1123 387 233 562 1332 1178 1507 
+1124 1332 1178 1507 892 738 1067 
+1125 312 188 572 1257 1133 1517 
+1126 1257 1133 1517 817 693 1077 
+1127 362 73 489 1307 609 1434 
+1128 1307 609 1434 867 97 994 
+1129 389 278 543 1334 1223 1488 
+1130 1334 1223 1488 894 783 1048 
+1131 48 49 415 649 650 1360 
+1132 649 650 1360 137 138 920 
+1133 76 399 567 612 1344 1512 
+1134 612 1344 1512 100 904 1072 
+1135 415 49 589 1360 650 1534 
+1136 1360 650 1534 920 138 1094 
+1137 228 417 426 1173 1362 1371 
+1138 1173 1362 1371 733 922 931 
+1139 433 231 507 1378 1176 1452 
+1140 1378 1176 1452 938 736 1012 
+1141 236 318 561 1181 1263 1506 
+1142 1181 1263 1506 741 823 1066 
+1143 241 327 438 1186 1272 1383 
+1144 1186 1272 1383 746 832 943 
+1145 317 240 461 1262 1185 1406 
+1146 1262 1185 1406 822 745 966 
+1147 162 364 450 1107 1309 1395 
+1148 1107 1309 1395 667 869 955 
+1149 195 335 396 1140 1280 1341 
+1150 1140 1280 1341 700 840 901 
+1151 78 79 581 614 615 1526 
+1152 614 615 1526 102 103 1086 
+1153 53 54 389 654 655 1334 
+1154 654 655 1334 142 143 894 
+1155 170 433 507 1115 1378 1452 
+1156 1115 1378 1452 675 938 1012 
+1157 300 211 422 1245 1156 1367 
+1158 1245 1156 1367 805 716 927 
+1159 42 313 432 643 1258 1377 
+1160 643 1258 1377 131 818 937 
+1161 201 345 424 1146 1290 1369 
+1162 1146 1290 1369 706 850 929 
+1163 256 448 567 1201 1393 1512 
+1164 1201 1393 1512 761 953 1072 
+1165 448 256 555 1393 1201 1500 
+1166 1393 1201 1500 953 761 1060 
+1167 300 422 504 1245 1367 1449 
+1168 1245 1367 1449 805 927 1009 
+1169 400 174 490 1345 1119 1435 
+1170 1345 1119 1435 905 679 995 
+1171 284 333 444 1229 1278 1389 
+1172 1229 1278 1389 789 838 949 
+1173 409 299 449 1354 1244 1394 
+1174 1354 1244 1394 914 804 954 
+1175 59 6 504 595 146 1449 
+1176 595 146 1449 83 9 1009 
+1177 32 33 546 633 634 1491 
+1178 633 634 1491 121 122 1051 
+1179 18 2 498 619 149 1443 
+1180 619 149 1443 107 12 1003 
+1181 212 313 476 1157 1258 1421 
+1182 1157 1258 1421 717 818 981 
+1183 320 214 443 1265 1159 1388 
+1184 1265 1159 1388 825 719 948 
+1185 398 157 481 1343 1102 1426 
+1186 1343 1102 1426 903 662 986 
+1187 232 379 486 1177 1324 1431 
+1188 1177 1324 1431 737 884 991 
+1189 34 342 430 635 1287 1375 
+1190 635 1287 1375 123 847 935 
+1191 366 262 414 1311 1207 1359 
+1192 1311 1207 1359 871 767 919 
+1193 334 187 590 1279 1132 1535 
+1194 1279 1132 1535 839 692 1095 
+1195 27 28 429 628 629 1374 
+1196 628 629 1374 116 117 934 
+1197 231 383 417 1176 1328 1362 
+1198 1176 1328 1362 736 888 922 
+1199 319 186 505 1264 1131 1450 
+1200 1264 1131 1450 824 691 1010 
+1201 389 208 544 1334 1153 1489 
+1202 1334 1153 1489 894 713 1049 
+1203 45 46 440 646 647 1385 
+1204 646 647 1385 134 135 945 
+1205 277 461 591 1222 1406 1536 
+1206 1222 1406 1536 782 966 1096 
+1207 564 267 565 1509 1212 1510 
+1208 1509 1212 1510 1069 772 1070 
+1209 339 155 579 1284 1100 1524 
+1210 1284 1100 1524 844 660 1084 
+1211 331 169 531 1276 1114 1476 
+1212 1276 1114 1476 836 674 1036 
+1213 332 226 568 1277 1171 1513 
+1214 1277 1171 1513 837 731 1073 
+1215 340 200 441 1285 1145 1386 
+1216 1285 1145 1386 845 705 946 
+1217 168 337 532 1113 1282 1477 
+1218 1113 1282 1477 673 842 1037 
+1219 179 360 488 1124 1305 1433 
+1220 1124 1305 1433 684 865 993 
+1221 167 336 516 1112 1281 1461 
+1222 1112 1281 1461 672 841 1021 
+1223 60 300 504 596 1245 1449 
+1224 596 1245 1449 84 805 1009 
+1225 333 189 550 1278 1134 1495 
+1226 1278 1134 1495 838 694 1055 
+1227 153 366 414 1098 1311 1359 
+1228 1098 1311 1359 658 871 919 
+1229 338 395 580 1283 1340 1525 
+1230 1283 1340 1525 843 900 1085 
+1231 317 221 436 1262 1166 1381 
+1232 1262 1166 1381 822 726 941 
+1233 16 321 396 617 1266 1341 
+1234 617 1266 1341 105 826 901 
+1235 65 66 431 601 602 1376 
+1236 601 602 1376 89 90 936 
+1237 324 48 415 1269 649 1360 
+1238 1269 649 1360 829 137 920 
+1239 355 181 421 1300 1126 1366 
+1240 1300 1126 1366 860 686 926 
+1241 353 212 408 1298 1157 1353 
+1242 1298 1157 1353 858 717 913 
+1243 373 485 579 1318 1430 1524 
+1244 1318 1430 1524 878 990 1084 
+1245 220 370 400 1165 1315 1345 
+1246 1165 1315 1345 725 875 905 
+1247 338 243 469 1283 1188 1414 
+1248 1283 1188 1414 843 748 974 
+1249 70 71 446 606 607 1391 
+1250 606 607 1391 94 95 951 
+1251 483 232 577 1428 1177 1522 
+1252 1428 1177 1522 988 737 1082 
+1253 378 282 503 1323 1227 1448 
+1254 1323 1227 1448 883 787 1008 
+1255 484 294 541 1429 1239 1486 
+1256 1429 1239 1486 989 799 1046 
+1257 162 472 553 1107 1417 1498 
+1258 1107 1417 1498 667 977 1058 
+1259 439 179 577 1384 1124 1522 
+1260 1384 1124 1522 944 684 1082 
+1261 251 320 551 1196 1265 1496 
+1262 1196 1265 1496 756 825 1056 
+1263 367 229 368 1312 1174 1313 
+1264 1312 1174 1313 872 734 873 
+1265 281 406 533 1226 1351 1478 
+1266 1226 1351 1478 786 911 1038 
+1267 331 238 463 1276 1183 1408 
+1268 1276 1183 1408 836 743 968 
+1269 355 219 412 1300 1164 1357 
+1270 1300 1164 1357 860 724 917 
+1271 538 78 581 1483 614 1526 
+1272 1483 614 1526 1043 102 1086 
+1273 167 341 570 1112 1286 1515 
+1274 1112 1286 1515 672 846 1075 
+1275 235 404 445 1180 1349 1390 
+1276 1180 1349 1390 740 909 950 
+1277 342 222 430 1287 1167 1375 
+1278 1287 1167 1375 847 727 935 
+1279 225 369 475 1170 1314 1420 
+1280 1170 1314 1420 730 874 980 
+1281 68 69 457 604 605 1402 
+1282 604 605 1402 92 93 962 
+1283 327 241 478 1272 1186 1423 
+1284 1272 1186 1423 832 746 983 
+1285 200 376 414 1145 1321 1359 
+1286 1145 1321 1359 705 881 919 
+1287 370 225 400 1315 1170 1345 
+1288 1315 1170 1345 875 730 905 
+1289 205 366 397 1150 1311 1342 
+1290 1150 1311 1342 710 871 902 
+1291 219 365 412 1164 1310 1357 
+1292 1164 1310 1357 724 870 917 
+1293 41 42 432 642 643 1377 
+1294 642 643 1377 130 131 937 
+1295 184 347 541 1129 1292 1486 
+1296 1129 1292 1486 689 852 1046 
+1297 284 462 586 1229 1407 1531 
+1298 1229 1407 1531 789 967 1091 
+1299 74 75 448 610 611 1393 
+1300 610 611 1393 98 99 953 
+1301 237 328 528 1182 1273 1473 
+1302 1182 1273 1473 742 833 1033 
+1303 219 355 421 1164 1300 1366 
+1304 1164 1300 1366 724 860 926 
+1305 341 222 570 1286 1167 1515 
+1306 1286 1167 1515 846 727 1075 
+1307 367 156 473 1312 1101 1418 
+1308 1312 1101 1418 872 661 978 
+1309 238 331 531 1183 1276 1476 
+1310 1183 1276 1476 743 836 1036 
+1311 347 244 541 1292 1189 1486 
+1312 1292 1189 1486 852 749 1046 
+1313 174 348 490 1119 1293 1435 
+1314 1119 1293 1435 679 853 995 
+1315 233 427 562 1178 1372 1507 
+1316 1178 1372 1507 738 932 1067 
+1317 208 367 473 1153 1312 1418 
+1318 1153 1312 1418 713 872 978 
+1319 22 23 442 623 624 1387 
+1320 623 624 1387 111 112 947 
+1321 381 228 426 1326 1173 1371 
+1322 1326 1173 1371 886 733 931 
+1323 164 327 586 1109 1272 1531 
+1324 1109 1272 1531 669 832 1091 
+1325 400 225 475 1345 1170 1420 
+1326 1345 1170 1420 905 730 980 
+1327 326 277 591 1271 1222 1536 
+1328 1271 1222 1536 831 782 1096 
+1329 340 164 462 1285 1109 1407 
+1330 1285 1109 1407 845 669 967 
+1331 79 335 581 615 1280 1526 
+1332 615 1280 1526 103 840 1086 
+1333 391 269 498 1336 1214 1443 
+1334 1336 1214 1443 896 774 1003 
+1335 64 65 479 600 601 1424 
+1336 600 601 1424 88 89 984 
+1337 297 160 519 1242 1105 1464 
+1338 1242 1105 1464 802 665 1024 
+1339 329 211 549 1274 1156 1494 
+1340 1274 1156 1494 834 716 1054 
+1341 15 396 474 616 1341 1419 
+1342 616 1341 1419 104 901 979 
+1343 214 339 471 1159 1284 1416 
+1344 1159 1284 1416 719 844 976 
+1345 69 379 457 605 1324 1402 
+1346 605 1324 1402 93 884 962 
+1347 342 274 499 1287 1219 1444 
+1348 1287 1219 1444 847 779 1004 
+1349 225 370 492 1170 1315 1437 
+1350 1170 1315 1437 730 875 997 
+1351 327 478 586 1272 1423 1531 
+1352 1272 1423 1531 832 983 1091 
+1353 160 349 576 1105 1294 1521 
+1354 1105 1294 1521 665 854 1081 
+1355 20 21 460 621 622 1405 
+1356 621 622 1405 109 110 965 
+1357 33 34 430 634 635 1375 
+1358 634 635 1375 122 123 935 
+1359 220 400 490 1165 1345 1435 
+1360 1165 1345 1435 725 905 995 
+1361 352 201 548 1297 1146 1493 
+1362 1297 1146 1493 857 706 1053 
+1363 15 16 396 616 617 1341 
+1364 616 617 1341 104 105 901 
+1365 333 177 444 1278 1122 1389 
+1366 1278 1122 1389 838 682 949 
+1367 317 461 465 1262 1406 1410 
+1368 1262 1406 1410 822 966 970 
+1369 392 252 424 1337 1197 1369 
+1370 1337 1197 1369 897 757 929 
+1371 369 225 512 1314 1170 1457 
+1372 1314 1170 1457 874 730 1017 
+1373 410 173 584 1355 1118 1529 
+1374 1355 1118 1529 915 678 1089 
+1375 348 264 490 1293 1209 1435 
+1376 1293 1209 1435 853 769 995 
+1377 6 60 504 146 596 1449 
+1378 146 596 1449 9 84 1009 
+1379 50 51 512 651 652 1457 
+1380 651 652 1457 139 140 1017 
+1381 65 431 479 601 1376 1424 
+1382 601 1376 1424 89 936 984 
+1383 404 251 445 1349 1196 1390 
+1384 1349 1196 1390 909 756 950 
+1385 370 220 456 1315 1165 1401 
+1386 1315 1165 1401 875 725 961 
+1387 360 166 482 1305 1111 1427 
+1388 1305 1111 1427 865 671 987 
+1389 267 393 565 1212 1338 1510 
+1390 1212 1338 1510 772 898 1070 
+1391 365 169 412 1310 1114 1357 
+1392 1310 1114 1357 870 674 917 
+1393 385 225 492 1330 1170 1437 
+1394 1330 1170 1437 890 730 997 
+1395 75 76 567 611 612 1512 
+1396 611 612 1512 99 100 1072 
+1397 374 58 422 1319 594 1367 
+1398 1319 594 1367 879 82 927 
+1399 497 304 521 1442 1249 1466 
+1400 1442 1249 1466 1002 809 1026 
+1401 216 395 510 1161 1340 1455 
+1402 1161 1340 1455 721 900 1015 
+1403 454 291 488 1399 1236 1433 
+1404 1399 1236 1433 959 796 993 
+1405 230 446 497 1175 1391 1442 
+1406 1175 1391 1442 735 951 1002 
+1407 79 1 474 615 148 1419 
+1408 615 148 1419 103 11 979 
+1409 194 325 566 1139 1270 1511 
+1410 1139 1270 1511 699 830 1071 
+1411 24 25 495 625 626 1440 
+1412 625 626 1440 113 114 1000 
+1413 293 455 562 1238 1400 1507 
+1414 1238 1400 1507 798 960 1067 
+1415 244 354 569 1189 1299 1514 
+1416 1189 1299 1514 749 859 1074 
+1417 61 62 535 597 598 1480 
+1418 597 598 1480 85 86 1040 
+1419 170 436 491 1115 1381 1436 
+1420 1115 1381 1436 675 941 996 
+1421 417 171 426 1362 1116 1371 
+1422 1362 1116 1371 922 676 931 
+1423 375 208 473 1320 1153 1418 
+1424 1320 1153 1418 880 713 978 
+1425 559 314 571 1504 1259 1516 
+1426 1504 1259 1516 1064 819 1076 
+1427 242 323 517 1187 1268 1462 
+1428 1187 1268 1462 747 828 1022 
+1429 455 161 562 1400 1106 1507 
+1430 1400 1106 1507 960 666 1067 
+1431 448 75 567 1393 611 1512 
+1432 1393 611 1512 953 99 1072 
+1433 173 370 456 1118 1315 1401 
+1434 1118 1315 1401 678 875 961 
+1435 407 203 542 1352 1148 1487 
+1436 1352 1148 1487 912 708 1047 
+1437 221 317 465 1166 1262 1410 
+1438 1166 1262 1410 726 822 970 
+1439 255 448 555 1200 1393 1500 
+1440 1200 1393 1500 760 953 1060 
+1441 157 358 470 1102 1303 1415 
+1442 1102 1303 1415 662 863 975 
+1443 279 385 492 1224 1330 1437 
+1444 1224 1330 1437 784 890 997 
+1445 357 157 470 1302 1102 1415 
+1446 1302 1102 1415 862 662 975 
+1447 365 319 505 1310 1264 1450 
+1448 1310 1264 1450 870 824 1010 
+1449 332 237 528 1277 1182 1473 
+1450 1277 1182 1473 837 742 1033 
+1451 162 351 472 1107 1296 1417 
+1452 1107 1296 1417 667 856 977 
+1453 360 246 488 1305 1191 1433 
+1454 1305 1191 1433 865 751 993 
+1455 369 280 475 1314 1225 1420 
+1456 1314 1225 1420 874 785 980 
+1457 227 357 470 1172 1302 1415 
+1458 1172 1302 1415 732 862 975 
+1459 58 59 422 594 595 1367 
+1460 594 595 1367 82 83 927 
+1461 44 45 559 645 646 1504 
+1462 645 646 1504 133 134 1064 
+1463 226 381 426 1171 1326 1371 
+1464 1171 1326 1371 731 886 931 
+1465 239 350 440 1184 1295 1385 
+1466 1184 1295 1385 744 855 945 
+1467 193 471 575 1138 1416 1520 
+1468 1138 1416 1520 698 976 1080 
+1469 200 340 500 1145 1285 1445 
+1470 1145 1285 1445 705 845 1005 
+1471 229 367 543 1174 1312 1488 
+1472 1174 1312 1488 734 872 1048 
+1473 244 484 541 1189 1429 1486 
+1474 1189 1429 1486 749 989 1046 
+1475 488 291 577 1433 1236 1522 
+1476 1433 1236 1522 993 796 1082 
+1477 457 232 483 1402 1177 1428 
+1478 1402 1177 1428 962 737 988 
+1479 161 387 562 1106 1332 1507 
+1480 1106 1332 1507 666 892 1067 
+1481 204 346 413 1149 1291 1358 
+1482 1149 1291 1358 709 851 918 
+1483 37 38 477 638 639 1422 
+1484 638 639 1422 126 127 982 
+1485 169 356 531 1114 1301 1476 
+1486 1114 1301 1476 674 861 1036 
+1487 272 407 542 1217 1352 1487 
+1488 1217 1352 1487 777 912 1047 
+1489 364 276 450 1309 1221 1395 
+1490 1309 1221 1395 869 781 955 
+1491 49 50 589 650 651 1534 
+1492 650 651 1534 138 139 1094 
+1493 43 44 571 644 645 1516 
+1494 644 645 1516 132 133 1076 
+1495 383 231 433 1328 1176 1378 
+1496 1328 1176 1378 888 736 938 
+1497 223 383 433 1168 1328 1378 
+1498 1168 1328 1378 728 888 938 
+1499 381 226 572 1326 1171 1517 
+1500 1326 1171 1517 886 731 1077 
+1501 228 381 565 1173 1326 1510 
+1502 1173 1326 1510 733 886 1070 
+1503 576 210 582 1521 1155 1527 
+1504 1521 1155 1527 1081 715 1087 
+1505 380 239 440 1325 1184 1385 
+1506 1325 1184 1385 885 744 945 
+1507 257 455 566 1202 1400 1511 
+1508 1202 1400 1511 762 960 1071 
+1509 70 446 523 606 1391 1468 
+1510 606 1391 1468 94 951 1028 
+1511 508 329 549 1453 1274 1494 
+1512 1453 1274 1494 1013 834 1054 
+1513 439 232 486 1384 1177 1431 
+1514 1384 1177 1431 944 737 991 
+1515 359 185 533 1304 1130 1478 
+1516 1304 1130 1478 864 690 1038 
+1517 244 318 484 1189 1263 1429 
+1518 1189 1263 1429 749 823 989 
+1519 530 249 549 1475 1194 1494 
+1520 1475 1194 1494 1035 754 1054 
+1521 390 57 554 1335 593 1499 
+1522 1335 593 1499 895 81 1059 
+1523 259 398 421 1204 1343 1366 
+1524 1204 1343 1366 764 903 926 
+1525 243 388 466 1188 1333 1411 
+1526 1188 1333 1411 748 893 971 
+1527 345 159 537 1290 1104 1482 
+1528 1290 1104 1482 850 664 1042 
+1529 46 380 440 647 1325 1385 
+1530 647 1325 1385 135 885 945 
+1531 376 200 500 1321 1145 1445 
+1532 1321 1145 1445 881 705 1005 
+1533 429 265 522 1374 1210 1467 
+1534 1374 1210 1467 934 770 1027 
+1535 388 165 466 1333 1110 1411 
+1536 1333 1110 1411 893 670 971 
+1537 433 170 491 1378 1115 1436 
+1538 1378 1115 1436 938 675 996 
+1539 296 538 581 1241 1483 1526 
+1540 1241 1483 1526 801 1043 1086 
+1541 370 173 492 1315 1118 1437 
+1542 1315 1118 1437 875 678 997 
+1543 432 271 494 1377 1216 1439 
+1544 1377 1216 1439 937 776 999 
+1545 493 235 513 1438 1180 1458 
+1546 1438 1180 1458 998 740 1018 
+1547 201 357 548 1146 1302 1493 
+1548 1146 1302 1493 706 862 1053 
+1549 273 375 473 1218 1320 1418 
+1550 1218 1320 1418 778 880 978 
+1551 398 219 421 1343 1164 1366 
+1552 1343 1164 1366 903 724 926 
+1553 354 190 569 1299 1135 1514 
+1554 1299 1135 1514 859 695 1074 
+1555 335 79 474 1280 615 1419 
+1556 1280 615 1419 840 103 979 
+1557 165 394 466 1110 1339 1411 
+1558 1110 1339 1411 670 899 971 
+1559 462 164 586 1407 1109 1531 
+1560 1407 1109 1531 967 669 1091 
+1561 393 228 565 1338 1173 1510 
+1562 1338 1173 1510 898 733 1070 
+1563 346 204 453 1291 1149 1398 
+1564 1291 1149 1398 851 709 958 
+1565 221 391 460 1166 1336 1405 
+1566 1166 1336 1405 726 896 965 
+1567 17 18 587 618 619 1532 
+1568 618 619 1532 106 107 1092 
+1569 44 559 571 645 1504 1516 
+1570 645 1504 1516 133 1064 1076 
+1571 300 530 549 1245 1475 1494 
+1572 1245 1475 1494 805 1035 1054 
+1573 357 227 548 1302 1172 1493 
+1574 1302 1172 1493 862 732 1053 
+1575 363 247 553 1308 1192 1498 
+1576 1308 1192 1498 868 752 1058 
+1577 179 488 577 1124 1433 1522 
+1578 1124 1433 1522 684 993 1082 
+1579 257 420 455 1202 1365 1400 
+1580 1202 1365 1400 762 925 960 
+1581 294 511 541 1239 1456 1486 
+1582 1239 1456 1486 799 1016 1046 
+1583 511 184 541 1456 1129 1486 
+1584 1456 1129 1486 1016 689 1046 
+1585 51 369 512 652 1314 1457 
+1586 652 1314 1457 140 874 1017 
+1587 226 405 572 1171 1350 1517 
+1588 1171 1350 1517 731 910 1077 
+1589 422 59 504 1367 595 1449 
+1590 1367 595 1449 927 83 1009 
+1591 56 390 501 592 1335 1446 
+1592 592 1335 1446 80 895 1006 
+1593 385 50 512 1330 651 1457 
+1594 1330 651 1457 890 139 1017 
+1595 35 3 573 636 150 1518 
+1596 636 150 1518 124 13 1078 
+1597 177 372 517 1122 1317 1462 
+1598 1122 1317 1462 682 877 1022 
+1599 387 161 557 1332 1106 1502 
+1600 1332 1106 1502 892 666 1062 
+1601 461 192 465 1406 1137 1410 
+1602 1406 1137 1410 966 697 970 
+1603 291 483 577 1236 1428 1522 
+1604 1236 1428 1522 796 988 1082 
+1605 188 564 565 1133 1509 1510 
+1606 1133 1509 1510 693 1069 1070 
+1607 459 7 523 1404 147 1468 
+1608 1404 147 1468 964 10 1028 
+1609 349 210 576 1294 1155 1521 
+1610 1294 1155 1521 854 715 1081 
+1611 246 454 488 1191 1399 1433 
+1612 1191 1399 1433 751 959 993 
+1613 222 359 570 1167 1304 1515 
+1614 1167 1304 1515 727 864 1075 
+1615 468 205 511 1413 1150 1456 
+1616 1413 1150 1456 973 710 1016 
+1617 420 161 455 1365 1106 1400 
+1618 1365 1106 1400 925 666 960 
+1619 575 339 579 1520 1284 1524 
+1620 1520 1284 1524 1080 844 1084 
+1621 29 361 509 630 1306 1454 
+1622 630 1306 1454 118 866 1014 
+1623 261 377 547 1206 1322 1492 
+1624 1206 1322 1492 766 882 1052 
+1625 232 439 577 1177 1384 1522 
+1626 1177 1384 1522 737 944 1082 
+1627 435 170 507 1380 1115 1452 
+1628 1380 1115 1452 940 675 1012 
+1629 391 20 460 1336 621 1405 
+1630 1336 621 1405 896 109 965 
+1631 7 70 523 147 606 1468 
+1632 147 606 1468 10 94 1028 
+1633 350 314 559 1295 1259 1504 
+1634 1295 1259 1504 855 819 1064 
+1635 270 487 585 1215 1432 1530 
+1636 1215 1432 1530 775 992 1090 
+1637 258 429 522 1203 1374 1467 
+1638 1203 1374 1467 763 934 1027 
+1639 234 376 500 1179 1321 1445 
+1640 1179 1321 1445 739 881 1005 
+1641 194 439 486 1139 1384 1431 
+1642 1139 1384 1431 699 944 991 
+1643 268 493 513 1213 1438 1458 
+1644 1213 1438 1458 773 998 1018 
+1645 367 208 543 1312 1153 1488 
+1646 1312 1153 1488 872 713 1048 
+1647 405 312 572 1350 1257 1517 
+1648 1350 1257 1517 910 817 1077 
+1649 506 196 524 1451 1141 1469 
+1650 1451 1141 1469 1011 701 1029 
+1651 538 296 582 1483 1241 1527 
+1652 1483 1241 1527 1043 801 1087 
+1653 168 409 449 1113 1354 1394 
+1654 1113 1354 1394 673 914 954 
+1655 318 244 569 1263 1189 1514 
+1656 1263 1189 1514 823 749 1074 
+1657 188 381 572 1133 1326 1517 
+1658 1133 1326 1517 693 886 1077 
+1659 381 188 565 1326 1133 1510 
+1660 1326 1133 1510 886 693 1070 
+1661 373 245 485 1318 1190 1430 
+1662 1318 1190 1430 878 750 990 
+1663 260 575 579 1205 1520 1524 
+1664 1205 1520 1524 765 1080 1084 
+1665 152 428 513 1097 1373 1458 
+1666 1097 1373 1458 657 933 1018 
+1667 213 380 496 1158 1325 1441 
+1668 1158 1325 1441 718 885 1001 
+1669 357 201 563 1302 1146 1508 
+1670 1302 1146 1508 862 706 1068 
+1671 240 519 591 1185 1464 1536 
+1672 1185 1464 1536 745 1024 1096 
+1673 431 66 454 1376 602 1399 
+1674 1376 602 1399 936 90 959 
+1675 226 426 568 1171 1371 1513 
+1676 1171 1371 1513 731 931 1073 
+1677 464 152 527 1409 1097 1472 
+1678 1409 1097 1472 969 657 1032 
+1679 377 159 547 1322 1104 1492 
+1680 1322 1104 1492 882 664 1052 
+1681 445 152 513 1390 1097 1458 
+1682 1390 1097 1458 950 657 1018 
+1683 251 503 527 1196 1448 1472 
+1684 1196 1448 1472 756 1008 1032 
+1685 242 372 584 1187 1317 1529 
+1686 1187 1317 1529 747 877 1089 
+1687 198 515 534 1143 1460 1479 
+1688 1143 1460 1479 703 1020 1039 
+1689 295 506 524 1240 1451 1469 
+1690 1240 1451 1469 800 1011 1029 
+1691 207 371 545 1152 1316 1490 
+1692 1152 1316 1490 712 876 1050 
+1693 74 448 489 610 1393 1434 
+1694 610 1393 1434 98 953 994 
+1695 223 433 491 1168 1378 1436 
+1696 1168 1378 1436 728 938 996 
+1697 372 242 517 1317 1187 1462 
+1698 1317 1187 1462 877 747 1022 
+1699 390 278 501 1335 1223 1446 
+1700 1335 1223 1446 895 783 1006 
+1701 510 301 578 1455 1246 1523 
+1702 1455 1246 1523 1015 806 1083 
+1703 418 172 514 1363 1117 1459 
+1704 1363 1117 1459 923 677 1019 
+1705 359 167 570 1304 1112 1515 
+1706 1304 1112 1515 864 672 1075 
+1707 189 378 550 1134 1323 1495 
+1708 1134 1323 1495 694 883 1055 
+1709 225 385 512 1170 1330 1457 
+1710 1170 1330 1457 730 890 1017 
+1711 374 229 554 1319 1174 1499 
+1712 1319 1174 1499 879 734 1059 
+1713 421 181 585 1366 1126 1530 
+1714 1366 1126 1530 926 686 1090 
+1715 233 468 588 1178 1413 1533 
+1716 1178 1413 1533 738 973 1093 
+1717 503 282 527 1448 1227 1472 
+1718 1448 1227 1472 1008 787 1032 
+1719 250 418 514 1195 1363 1459 
+1720 1195 1363 1459 755 923 1019 
+1721 413 37 477 1358 638 1422 
+1722 1358 638 1422 918 126 982 
+1723 326 576 582 1271 1521 1527 
+1724 1271 1521 1527 831 1081 1087 
+1725 159 480 537 1104 1425 1482 
+1726 1104 1425 1482 664 985 1042 
+1727 263 510 578 1208 1455 1523 
+1728 1208 1455 1523 768 1015 1083 
+1729 428 224 558 1373 1169 1503 
+1730 1373 1169 1503 933 729 1063 
+1731 366 153 540 1311 1098 1485 
+1732 1311 1098 1485 871 658 1045 
+1733 412 169 467 1357 1114 1412 
+1734 1357 1114 1412 917 674 972 
+1735 294 468 511 1239 1413 1456 
+1736 1239 1413 1456 799 973 1016 
+1737 385 279 589 1330 1224 1534 
+1738 1330 1224 1534 890 784 1094 
+1739 235 445 513 1180 1390 1458 
+1740 1180 1390 1458 740 950 1018 
+1741 206 435 507 1151 1380 1452 
+1742 1151 1380 1452 711 940 1012 
+1743 246 431 454 1191 1376 1399 
+1744 1191 1376 1399 751 936 959 
+1745 379 289 486 1324 1234 1431 
+1746 1324 1234 1431 884 794 991 
+1747 451 64 479 1396 600 1424 
+1748 1396 600 1424 956 88 984 
+1749 515 306 534 1460 1251 1479 
+1750 1460 1251 1479 1020 811 1039 
+1751 53 389 544 654 1334 1489 
+1752 654 1334 1489 142 894 1049 
+1753 68 457 483 604 1402 1428 
+1754 604 1402 1428 92 962 988 
+1755 241 464 552 1186 1409 1497 
+1756 1186 1409 1497 746 969 1057 
+1757 174 400 475 1119 1345 1420 
+1758 1119 1345 1420 679 905 980 
+1759 259 421 585 1204 1366 1530 
+1760 1204 1366 1530 764 926 1090 
+1761 41 432 494 642 1377 1439 
+1762 642 1377 1439 130 937 999 
+1763 268 428 558 1213 1373 1503 
+1764 1213 1373 1503 773 933 1063 
+1765 378 247 550 1323 1192 1495 
+1766 1323 1192 1495 883 752 1055 
+1767 451 236 561 1396 1181 1506 
+1768 1396 1181 1506 956 741 1066 
+1769 498 269 587 1443 1214 1532 
+1770 1443 1214 1532 1003 774 1092 
+1771 306 515 560 1251 1460 1505 
+1772 1251 1460 1505 811 1020 1065 
+1773 436 275 491 1381 1220 1436 
+1774 1381 1220 1436 941 780 996 
+1775 471 339 575 1416 1284 1520 
+1776 1416 1284 1520 976 844 1080 
+1777 205 397 511 1150 1342 1456 
+1778 1150 1342 1456 710 902 1016 
+1779 478 241 552 1423 1186 1497 
+1780 1423 1186 1497 983 746 1057 
+1781 435 206 536 1380 1151 1481 
+1782 1380 1151 1481 940 711 1041 
+1783 282 464 527 1227 1409 1472 
+1784 1227 1409 1472 787 969 1032 
+1785 448 255 489 1393 1200 1434 
+1786 1393 1200 1434 953 760 994 
+1787 262 387 557 1207 1332 1502 
+1788 1207 1332 1502 767 892 1062 
+1789 446 71 497 1391 607 1442 
+1790 1391 607 1442 951 95 1002 
+1791 216 388 580 1161 1333 1525 
+1792 1161 1333 1525 721 893 1085 
+1793 254 394 560 1199 1339 1505 
+1794 1199 1339 1505 759 899 1065 
+1795 196 487 524 1141 1432 1469 
+1796 1141 1432 1469 701 992 1029 
+1797 288 459 523 1233 1404 1468 
+1798 1233 1404 1468 793 964 1028 
+1799 229 390 554 1174 1335 1499 
+1800 1174 1335 1499 734 895 1059 
+1801 388 243 580 1333 1188 1525 
+1802 1333 1188 1525 893 748 1085 
+1803 395 216 580 1340 1161 1525 
+1804 1340 1161 1525 900 721 1085 
+1805 240 435 536 1185 1380 1481 
+1806 1185 1380 1481 745 940 1041 
+1807 397 366 540 1342 1311 1485 
+1808 1342 1311 1485 902 871 1045 
+1809 236 451 479 1181 1396 1424 
+1810 1181 1396 1424 741 956 984 
+1811 50 385 589 651 1330 1534 
+1812 651 1330 1534 139 890 1094 
+1813 456 242 584 1401 1187 1529 
+1814 1401 1187 1529 961 747 1089 
+1815 62 411 535 598 1356 1480 
+1816 598 1356 1480 86 916 1040 
+1817 458 263 578 1403 1208 1523 
+1818 1403 1208 1523 963 768 1083 
+1819 487 270 524 1432 1215 1469 
+1820 1432 1215 1469 992 775 1029 
+1821 340 462 500 1285 1407 1445 
+1822 1285 1407 1445 845 967 1005 
+1823 399 77 538 1344 613 1483 
+1824 1344 613 1483 904 101 1043 
+1825 423 288 526 1368 1233 1471 
+1826 1368 1233 1471 928 793 1031 
+1827 428 268 513 1373 1213 1458 
+1828 1373 1213 1458 933 773 1018 
+1829 444 177 529 1389 1122 1474 
+1830 1389 1122 1474 949 682 1034 
+1831 166 360 588 1111 1305 1533 
+1832 1111 1305 1533 671 865 1093 
+1833 152 445 527 1097 1390 1472 
+1834 1097 1390 1472 657 950 1032 
+1835 158 458 578 1103 1403 1523 
+1836 1103 1403 1523 663 963 1083 
+1837 271 432 556 1216 1377 1501 
+1838 1216 1377 1501 776 937 1061 
+1839 394 165 560 1339 1110 1505 
+1840 1339 1110 1505 899 670 1065 
+1841 320 443 551 1265 1388 1496 
+1842 1265 1388 1496 825 948 1056 
+1843 176 423 526 1121 1368 1471 
+1844 1121 1368 1471 681 928 1031 
+1845 480 286 537 1425 1231 1482 
+1846 1425 1231 1482 985 791 1042 
+1847 427 293 562 1372 1238 1507 
+1848 1372 1238 1507 932 798 1067 
+1849 269 382 587 1214 1327 1532 
+1850 1214 1327 1532 774 887 1092 
+1851 201 424 563 1146 1369 1508 
+1852 1146 1369 1508 706 929 1068 
+1853 264 397 540 1209 1342 1485 
+1854 1209 1342 1485 769 902 1045 
+1855 234 444 529 1179 1389 1474 
+1856 1179 1389 1474 739 949 1034 
+1857 445 251 527 1390 1196 1472 
+1858 1390 1196 1472 950 756 1032 
+1859 18 498 587 619 1443 1532 
+1860 619 1443 1532 107 1003 1092 
+1861 261 547 574 1206 1492 1519 
+1862 1206 1492 1519 766 1052 1079 
+1863 443 183 551 1388 1128 1496 
+1864 1388 1128 1496 948 688 1056 
+1865 502 176 526 1447 1121 1471 
+1866 1447 1121 1471 1007 681 1031 
+1867 33 430 546 634 1375 1491 
+1868 634 1375 1491 122 935 1051 
+1869 432 313 556 1377 1258 1501 
+1870 1377 1258 1501 937 818 1061 
+1871 424 252 563 1369 1197 1508 
+1872 1369 1197 1508 929 757 1068 
+1873 285 451 561 1230 1396 1506 
+1874 1230 1396 1506 790 956 1066 
+1875 382 17 587 1327 618 1532 
+1876 1327 618 1532 887 106 1092 
+1877 505 186 539 1450 1131 1484 
+1878 1450 1131 1484 1010 691 1044 
+1879 502 230 521 1447 1175 1466 
+1880 1447 1175 1466 1007 735 1026 
+1881 462 234 500 1407 1179 1445 
+1882 1407 1179 1445 967 739 1005 
+1883 177 517 529 1122 1462 1474 
+1884 1122 1462 1474 682 1022 1034 
+1885 519 240 536 1464 1185 1481 
+1886 1464 1185 1481 1024 745 1041 
+1887 266 505 539 1211 1450 1484 
+1888 1211 1450 1484 771 1010 1044 
+1889 485 260 579 1430 1205 1524 
+1890 1430 1205 1524 990 765 1084 
+1891 547 302 574 1492 1247 1519 
+1892 1492 1247 1519 1052 807 1079 
+1893 230 502 526 1175 1447 1471 
+1894 1175 1447 1471 735 1007 1031 
+1895 224 467 558 1169 1412 1503 
+1896 1169 1412 1503 729 972 1063 
+1897 464 282 552 1409 1227 1497 
+1898 1409 1227 1497 969 787 1057 
+1899 426 171 568 1371 1116 1513 
+1900 1371 1116 1513 931 676 1073 
+1901 467 331 558 1412 1276 1503 
+1902 1412 1276 1503 972 836 1063 
+1903 411 249 535 1356 1194 1480 
+1904 1356 1194 1480 916 754 1040 
+1905 530 61 535 1475 597 1480 
+1906 1475 597 1480 1035 85 1040 
+1907 173 456 584 1118 1401 1529 
+1908 1118 1401 1529 678 961 1089 
+1909 297 519 536 1242 1464 1481 
+1910 1242 1464 1481 802 1024 1041 
+1911 249 508 549 1194 1453 1494 
+1912 1194 1453 1494 754 1013 1054 
+1913 517 323 529 1462 1268 1474 
+1914 1462 1268 1474 1022 828 1034 
+1915 187 556 590 1132 1501 1535 
+1916 1132 1501 1535 692 1061 1095 
+1917 261 502 521 1206 1447 1466 
+1918 1206 1447 1466 766 1007 1026 
+1919 301 520 578 1246 1465 1523 
+1920 1246 1465 1523 806 1025 1083 
+1921 503 251 551 1448 1196 1496 
+1922 1448 1196 1496 1008 756 1056 
+1923 249 530 535 1194 1475 1480 
+1924 1194 1475 1480 754 1035 1040 
+1925 189 478 552 1134 1423 1497 
+1926 1134 1423 1497 694 983 1057 
+1927 515 254 560 1460 1199 1505 
+1928 1460 1199 1505 1020 759 1065 
+1929 487 259 585 1432 1204 1530 
+1930 1432 1204 1530 992 764 1090 
+1931 191 518 583 1136 1463 1528 
+1932 1136 1463 1528 696 1023 1088 
+1933 176 502 574 1121 1447 1519 
+1934 1121 1447 1519 681 1007 1079 
+1935 502 261 574 1447 1206 1519 
+1936 1447 1206 1519 1007 766 1079 
+1937 518 316 583 1463 1261 1528 
+1938 1463 1261 1528 1023 821 1088 
+1939 556 313 590 1501 1258 1535 
+1940 1501 1258 1535 1061 818 1095 
+1941 266 539 564 1211 1484 1509 
+1942 1211 1484 1509 771 1044 1069 
+1943 520 158 578 1465 1103 1523 
+1944 1465 1103 1523 1025 663 1083 
+1945 183 503 551 1128 1448 1496 
+1946 1128 1448 1496 688 1008 1056 
+1947 539 267 564 1484 1212 1509 
+1948 1484 1212 1509 1044 772 1069 
+1949 476 43 571 1421 644 1516 
+1950 1421 644 1516 981 132 1076 
+1951 519 160 591 1464 1105 1536 
+1952 1464 1105 1536 1024 665 1096 
+$EndElements
diff --git a/dG3D/benchmarks/ANNTest/macro.py b/dG3D/benchmarks/ANNTest/macro.py
new file mode 100644
index 0000000000000000000000000000000000000000..3f9ecd8c17774006c4288de3344399a891a8d991
--- /dev/null
+++ b/dG3D/benchmarks/ANNTest/macro.py
@@ -0,0 +1,134 @@
+#coding-Utf-8-*-
+from gmshpy import *
+from dG3Dpy import*
+
+#script to launch PBC problem with a python script
+
+E = 70e3
+nu = 0.3
+K = E/(3.*(1.-2.*nu))
+mu = E/(2.*(1.+nu))
+lb = K-2.*mu/3.
+
+print K, mu, lb
+
+import numpy as np
+def testFunc (x,other):
+  #print x, other
+  A = np.zeros((6,6))
+  A[0][0] = 2.*mu+lb
+  A[1][1] = 2.*mu+lb
+  A[2][2] = 2.*mu+lb
+  A[0][1] = lb
+  A[1][0] = lb
+  A[0][2] = lb
+  A[2][0] = lb
+  A[1][2] = lb
+  A[2][1] = lb
+  A[3][3] = 2.*mu
+  A[4][4] = 2.*mu
+  A[5][5] = 2.*mu
+  y = np.dot(A,x)
+  q1 = list([0.1,0.2,3,0.4,0.5,0.6,0.7,8,0.9,10]);
+  return (y.tolist(),q1, A.tolist())
+  
+# python function is embeded in a c++ function
+fct1 = MIMOFunctionPython(testFunc)
+
+fct2 = LinearMIMOFunction(6,6)
+fct2.setValue(0,0,2.*mu+lb)
+fct2.setValue(1,1,2.*mu+lb)
+fct2.setValue(2,2,2.*mu+lb)
+fct2.setValue(0,1,lb)
+fct2.setValue(1,0,lb)
+fct2.setValue(0,2,lb)
+fct2.setValue(2,0,lb)
+fct2.setValue(1,2,lb)
+fct2.setValue(2,1,lb)
+fct2.setValue(3,3,2.*mu)
+fct2.setValue(4,4,2.*mu)
+fct2.setValue(5,5,2.*mu)
+
+#DEFINE MICRO PROBLEM
+lnum1= 11
+numInterVar = 10
+rho = 1e-9
+macromat1 = ANNBasedDG3DMaterialLaw(lnum1,rho,numInterVar,fct1)
+
+
+macromeshfile="macro.msh" # name of mesh file
+macrogeofile="macro.geo"
+# solver
+sol = 2  # Gmm=0 (default) Taucs=1 PETsc=2
+soltype =1 # StaticLinear=0 (default) StaticNonLinear=1
+nstep = 1  # number of step (used only if soltype=1)
+ftime =1.   # Final time (used only if soltype=1)
+tol=1.e-8  # relative tolerance for NR scheme (used only if soltype=1)
+nstepArch=1 # Number of step between 2 archiving (used only if soltype=1)
+
+
+# creation of  macro part Domain
+
+dim =3
+beta1 = 50;
+fullDG = False;
+
+averageStrainBased = True
+
+# non DG domain
+nfield1 = 11
+macrodomain1 = dG3DDomain(10,11,0,lnum1,fullDG,3)
+macrodomain1.stabilityParameters(beta1)
+#macrodomain1.matrixByPerturbation(1,1,1,1e-8)
+
+# creation of Solver
+mysolver = nonLinearMechSolver(1000)
+mysolver.loadModel(macromeshfile)
+mysolver.addDomain(macrodomain1)
+mysolver.addMaterialLaw(macromat1)
+
+mysolver.Scheme(soltype)
+mysolver.Solver(sol)
+mysolver.snlData(nstep,ftime,tol)
+
+# boundary condition
+mysolver.displacementBC("Face",45,0,0.0)
+mysolver.displacementBC("Face",45,1,0.0)
+mysolver.displacementBC("Face",45,2,0.0)
+
+mysolver.displacementBC("Face",46,1,10.)
+#mysolver.displacementBC("Face",46,0,0.)
+
+# archivage
+mysolver.internalPointBuildView("Green-Lagrange_xx",IPField.STRAIN_XX, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_yy",IPField.STRAIN_YY, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_zz",IPField.STRAIN_ZZ, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_xy",IPField.STRAIN_XY, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_yz",IPField.STRAIN_YZ, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_xz",IPField.STRAIN_XZ, 1, 1);
+mysolver.internalPointBuildView("sig_xx",IPField.SIG_XX, 1, 1);
+mysolver.internalPointBuildView("sig_yy",IPField.SIG_YY, 1, 1);
+mysolver.internalPointBuildView("sig_zz",IPField.SIG_ZZ, 1, 1);
+mysolver.internalPointBuildView("sig_xy",IPField.SIG_XY, 1, 1);
+mysolver.internalPointBuildView("sig_yz",IPField.SIG_YZ, 1, 1);
+mysolver.internalPointBuildView("sig_xz",IPField.SIG_XZ, 1, 1);
+mysolver.internalPointBuildView("sig_VM",IPField.SVM, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange equivalent strain",IPField.GL_EQUIVALENT_STRAIN, 1, 1);
+mysolver.internalPointBuildView("Equivalent plastic strain",IPField.PLASTICSTRAIN, 1, 1);
+mysolver.internalPointBuildView("Damage",IPField.DAMAGE,1,1);
+mysolver.internalPointBuildView("USER1",IPField.USER1,1,1);
+mysolver.internalPointBuildView("USER2",IPField.USER2,1,1);
+mysolver.internalPointBuildView("USER3",IPField.USER3,1,1);
+mysolver.internalPointBuildView("USER4",IPField.USER4,1,1);
+mysolver.internalPointBuildView("USER9",IPField.USER9,1,1);
+
+mysolver.archivingForceOnPhysicalGroup("Face",45,0)
+mysolver.archivingForceOnPhysicalGroup("Face",45,1)
+
+
+# solve
+mysolver.solve()
+
+check = TestCheck()
+check.equal(-7.696534e+05,mysolver.getArchivedForceOnPhysicalGroup("Face", 45, 1),1.e-4)
+
diff --git a/dG3D/benchmarks/AnisotropicRandomField/Stoch_Sample.py b/dG3D/benchmarks/AnisotropicRandomField/Stoch_Sample.py
index 6414f45b445bb6457d6a90d402499118fb09e7db..d54478d4de672fd382601440ca50ca35a50e291b 100644
--- a/dG3D/benchmarks/AnisotropicRandomField/Stoch_Sample.py
+++ b/dG3D/benchmarks/AnisotropicRandomField/Stoch_Sample.py
@@ -92,7 +92,7 @@ mysolver.solve()
 
 
 check = TestCheck()
-check.equal(1.352703e-01,mysolver.getArchivedForceOnPhysicalGroup("Face", 101, 0),1.e-6)
+check.equal(1.352844e-01,mysolver.getArchivedForceOnPhysicalGroup("Face", 101, 0),1.e-6)
 
 try:
   import linecache
@@ -104,8 +104,8 @@ except:
   import os
   os._exit(1)
 else:
-  check.equal(6.838588e+08,float(linesmax.split(';')[1]))
-  check.equal(4.129304e+08,float(linesmin.split(';')[1]))
+  check.equal(6.869150e+08,float(linesmax.split(';')[1]))
+  check.equal(3.961445e+08,float(linesmin.split(';')[1]))
   check.equal(5.522728e+08,float(linesmean.split(';')[1]))
 
 
diff --git a/dG3D/benchmarks/CMakeLists.txt b/dG3D/benchmarks/CMakeLists.txt
index 7e5f72bbf8c6879873e8f51067db07e8ac8fb2c7..9e57fbc920dff022c57fe1803d979a9bacec488f 100644
--- a/dG3D/benchmarks/CMakeLists.txt
+++ b/dG3D/benchmarks/CMakeLists.txt
@@ -153,6 +153,8 @@ add_subdirectory(test1DUniaxialStress)
 add_subdirectory(Thomason_planeStrain)
 add_subdirectory(Thomason_cube)
 add_subdirectory(Gurson_Cube)
+add_subdirectory(Gurson_Cube_local)
+add_subdirectory(Gurson_Cube_local_f)
 add_subdirectory(Gurson_TwoHole)
 add_subdirectory(Gurson_PathFollowing)
 add_subdirectory(GursonThomason_cube)
@@ -193,4 +195,6 @@ add_subdirectory(GursonThomason_cube_I1J2J3_withTwoYieldReg)
 add_subdirectory(GursonThomason_cube_withShear_withTwoYieldReg)
 add_subdirectory(eigenValueTest)
 add_subdirectory(micro_pathFollowing)
+add_subdirectory(ANNTest)
+add_subdirectory(testPBCWithReducedRVE)
 
diff --git a/dG3D/benchmarks/CohesiveBand_Plate/notchedPlate.msh b/dG3D/benchmarks/CohesiveBand_Plate/notchedPlate.msh
index b0fdd564f93a53bb6bb7aac0cf508f324137fde8..479a0e69af02a01a0566e701082756bbc2d7aa78 100644
--- a/dG3D/benchmarks/CohesiveBand_Plate/notchedPlate.msh
+++ b/dG3D/benchmarks/CohesiveBand_Plate/notchedPlate.msh
@@ -1,401 +1,676 @@
 $MeshFormat
-3 0 8
+4.1 0 8
 $EndMeshFormat
 $Entities
 11 10 1 0
-1 1 71 
-2 1 72 
-3 0 
-4 0 
-5 0 
-6 1 74 
-7 1 73 
-8 0 
-9 0 
-10 0 
-11 0 
-1 2 1 2 1 61 
-2 2 2 3 0 
-3 2 3 4 0 
-4 2 4 5 0 
-5 2 5 6 0 
-6 2 6 7 1 62 
-7 2 7 8 0 
-8 2 10 1 0 
-11 2 8 9 0 
-12 2 9 10 0 
-1 10 1 2 3 4 5 6 7 11 12 8 1 51 
+1 0 0 0 1 71 
+2 0.01 0 0 1 72 
+3 0.01 0.008399999999999999 0 0 
+4 0.01 0.01 0 0 
+5 0.01 0.0116 0 0 
+6 0.01 0.02 0 1 74 
+7 0 0.02 0 1 73 
+8 0 0.0125 0 0 
+9 0.0025 0.01 0 0 
+10 0 0.0075 0 0 
+11 0 0.01 0 0 
+1 0 0 0 0.01 0 0 1 61 2 1 -2 
+2 0.01 0 0 0.01 0.008399999999999999 0 0 2 2 -3 
+3 0.01 0.008399999999999999 0 0.01 0.01 0 0 2 3 -4 
+4 0.01 0.01 0 0.01 0.0116 0 0 2 4 -5 
+5 0.01 0.0116 0 0.01 0.02 0 0 2 5 -6 
+6 0 0.02 0 0.01 0.02 0 1 62 2 6 -7 
+7 0 0.0125 0 0 0.02 0 0 2 7 -8 
+8 0 0 0 0 0.0075 0 0 2 10 -1 
+11 0 0.01 0 0.0025 0.0125 0 0 2 8 -9 
+12 0 0.0075 0 0.0025 0.01 0 0 2 9 -10 
+1 0 0 0 0.01 0.02 0 1 51 10 1 2 3 4 5 6 7 11 12 8 
 $EndEntities
 $Nodes
+21 247 1 247
+0 1 0 1
+1
+0 0 0
+0 2 0 1
+2
+0.01 0 0
+0 3 0 1
+3
+0.01 0.008399999999999999 0
+0 4 0 1
+4
+0.01 0.01 0
+0 5 0 1
+5
+0.01 0.0116 0
+0 6 0 1
+6
+0.01 0.02 0
+0 7 0 1
+7
+0 0.02 0
+0 8 0 1
+8
+0 0.0125 0
+0 9 0 1
+9
+0.0025 0.01 0
+0 10 0 1
+10
+0 0.0075 0
+1 1 0 3
+11
+12
+13
+0.004999999999986965 0 0
+0.002499999999993763 0 0
+0.007499999999994717 0 0
+1 2 0 3
+14
+15
+16
+0.01 0.004898224325042467 0
+0.01 0.002449112162520222 0
+0.01 0.006649112162519484 0
+1 3 0 3
+17
+18
+19
+0.01 0.009314628697862879 0
+0.01 0.008857314348928905 0
+0.01 0.009657314348926782 0
+1 4 0 3
+20
+21
+22
+0.01 0.01068537130213344 0
+0.01 0.01034268565106863 0
+0.01 0.01114268565106672 0
+1 5 0 3
+23
+24
+25
+0.01 0.01510177567493926 0
+0.01 0.01335088783747197 0
+0.01 0.01755088783746079 0
+1 6 0 3
+26
+27
+28
+0.005000000000013208 0.02 0
+0.007500000000005191 0.02 0
+0.002500000000007209 0.02 0
+1 7 0 3
+29
+30
+31
+0 0.01567574033592536 0
+0 0.01783787016796609 0
+0 0.01408787016795881 0
+1 8 0 3
+32
+33
+34
+0 0.004324259664091307 0
+0 0.005912129832045325 0
+0 0.002162129832049085 0
+1 11 0 5
+35
+36
+37
+38
+39
+0.00112188189439959 0.01137811810560041 0
+0.001925030572912527 0.01057496942708747 0
+0.0005609409472003722 0.01193905905279963 0
+0.001523456233655397 0.0109765437663446 0
+0.002212515286455625 0.01028748471354438 0
+1 12 0 5
+40
+41
+42
+43
+44
+0.001925030572915416 0.009425030572915416 0
+0.001121881894405528 0.008621881894405528 0
+0.002212515286458177 0.009712515286458176 0
+0.00152345623366021 0.00902345623366021 0
+0.0005609409472020813 0.008060940947202081 0
+2 1 0 203
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
 247
-1 0 0 0 0
-2 0.01 0 0 0
-3 0.01 0.008399999999999999 0 0
-4 0.01 0.01 0 0
-5 0.01 0.0116 0 0
-6 0.01 0.02 0 0
-7 0 0.02 0 0
-8 0 0.0125 0 0
-9 0.0025 0.01 0 0
-10 0 0.0075 0 0
-11 0.004999999999986965 0 0 0
-12 0.002499999999993763 0 0 0
-13 0.007499999999994717 0 0 0
-14 0.01 0.004898224325042467 0 0
-15 0.01 0.002449112162520222 0 0
-16 0.01 0.006649112162519484 0 0
-17 0.01 0.009314628697862879 0 0
-18 0.01 0.008857314348928905 0 0
-19 0.01 0.009657314348926782 0 0
-20 0.01 0.01068537130213344 0 0
-21 0.01 0.01034268565106863 0 0
-22 0.01 0.01114268565106672 0 0
-23 0.01 0.01510177567493926 0 0
-24 0.01 0.01335088783747197 0 0
-25 0.01 0.01755088783746079 0 0
-26 0.005000000000013208 0.02 0 0
-27 0.007500000000005191 0.02 0 0
-28 0.002500000000007209 0.02 0 0
-29 0 0.01567574033592536 0 0
-30 0 0.01783787016796609 0 0
-31 0 0.01408787016795881 0 0
-32 0 0.004324259664091307 0 0
-33 0 0.005912129832045325 0 0
-34 0 0.002162129832049085 0 0
-35 0.00112188189439959 0.01137811810560041 0 0
-36 0.001925030572912527 0.01057496942708747 0 0
-37 0.0005609409472003722 0.01193905905279963 0 0
-38 0.001523456233655397 0.0109765437663446 0 0
-39 0.002212515286455625 0.01028748471354438 0 0
-40 0.001925030572915416 0.009425030572915416 0 0
-41 0.001121881894405528 0.008621881894405528 0 0
-42 0.002212515286458177 0.009712515286458176 0 0
-43 0.00152345623366021 0.00902345623366021 0 0
-44 0.0005609409472020813 0.008060940947202081 0 0
-45 0.006237244877620592 0.01030866099858216 0 0
-46 0.004985401697704079 0.005193481658519594 0 0
-47 0.004455687903428302 0.01428431558383516 0 0
-48 0.008029109367120753 0.009719969669522223 0 0
-49 0.00735556246523894 0.0132662269631414 0 0
-50 0.004539573540424485 0.008411526236890135 0 0
-51 0.006540766639573456 0.008168208907422 0 0
-52 0.004192697784386302 0.01134067614973695 0 0
-53 0.002675898115809804 0.0121289856484977 0 0
-54 0.002760710044900388 0.007742298769474259 0 0
-55 0.009064930925610464 0.01021226374337391 0 0
-56 0.00759916218235151 0.01139713471914246 0 0
-57 0.004682060239788817 0.00985475821156046 0 0
-58 0.008357474189056108 0.007644942000961442 0 0
-59 0.005519862836695073 0.01237927706713464 0 0
-60 0.006562976798145031 0.01612777642473904 0 0
-61 0.008992639963615046 0.009263417067142765 0 0
-62 0.00282129321758618 0.01094266487603696 0 0
-63 0.001822195145611816 0.01397377827690612 0 0
-64 0.00328932173112159 0.01653595097699469 0 0
-65 0.002990409309149914 0.008934621263765504 0 0
-66 0.006908919151678074 0.009416591754645006 0 0
-67 0.005768629874231955 0.009300736809245534 0 0
-68 0.001559289511437542 0.005912129832045655 0 0
-69 0.003092240852163258 0.002944067956150727 0 0
-70 0.00352142852157162 0.01004545999531427 0 0
-71 0.005288093289918773 0.01085826977315788 0 0
-72 0.007122161048751293 0.006002207271537552 0 0
-73 0.006952111224494611 0.003064534353239477 0 0
-74 0.008765467187666246 0.01156426746583114 0 0
-75 0.007245546115071399 0.01044367059367189 0 0
-76 0.00654091196114938 0.01144220668580508 0 0
-77 0.001482055349904241 0.01250174945011896 0 0
-78 0.002038969840212717 0.008399983053882322 0 0
-79 0.001422679749147484 0.007369579213329933 0 0
-80 0.002005231830122468 0.0115052975014683 0 0
-81 0.007765781862208688 0.008842625879938688 0 0
-82 0.003933367902733709 0.009311591426882593 0 0
-83 0.005430366320126747 0.006902729251117221 0 0
-84 0.005494007070390034 0.01008060644813651 0 0
-85 0.00374729805321856 0.006531109762525199 0 0
-86 0.008140843155564072 0.01066746123830832 0 0
-87 0.009514392722306376 0.009697577377094887 0 0
-88 0.005840265487213177 0.0137061657742628 0 0
-89 0.003208447204718121 0.005024492827104342 0 0
-90 0.00373326835718626 0.01282140654522211 0 0
-91 0.005762669083769682 0.01058346538587002 0 0
-92 0.006389078419384986 0.01087543384219362 0 0
-93 0.005914502625534076 0.01115023822948148 0 0
-94 0.004856280310540688 0.0118599766084358 0 0
-95 0.004626565596940666 0.01260034180617838 0 0
-96 0.003962983070786281 0.01208104134747953 0 0
-97 0.009532465462805232 0.01044881752275367 0 0
-98 0.009382733593833122 0.01112481938398228 0 0
-99 0.008915199056638356 0.01088826560460252 0 0
-100 0.008281488399072515 0.01806388821236952 0 0
-101 0.008281488399072515 0.01561477604983915 0 0
-102 0.009178737094528055 0.006271583163001955 0 0
-103 0.0077398176189037 0.006823574636249496 0 0
-104 0.008561080524375646 0.005450215798290009 0 0
-105 0.004740395537152537 0.01109947296144741 0 0
-106 0.005403978063306922 0.01161877342014626 0 0
-107 0.001644660865560795 0.01610584565646003 0 0
-108 0.001644660865560795 0.01826797548849735 0 0
-109 0.0085108746653679 0.009491693368332494 0 0
-110 0.007897445614664721 0.009281297774730454 0 0
-111 0.008379210912911866 0.009053021473540725 0 0
-112 0.00867778123261947 0.01418400131904033 0 0
-113 0.006959269631691986 0.01469700169394022 0 0
-114 0.000911097572805908 0.01323688913845306 0 0
-115 0.000911097572805908 0.01482475930641574 0 0
-116 0.002745204654574957 0.009467310631882752 0 0
-117 0.003255918915360767 0.009490040629539887 0 0
-118 0.00301071426078581 0.01002272999765714 0 0
-119 0.00443737901208756 0.0105977171806487 0 0
-120 0.004985076764853795 0.01035651399235917 0 0
-121 0.007477362323795225 0.01233168084114193 0 0
-122 0.00694823721319416 0.01235421682447324 0 0
-123 0.007070037071750445 0.01141967070247377 0 0
-124 0.0007796447557187712 0.005118194748068481 0 0
-125 0.0007796447557187712 0.006706064916022827 0 0
-126 0.005540170089998971 0.008289867572156068 0 0
-127 0.006154698256902706 0.008734472858333767 0 0
-128 0.00515410170732822 0.008856131523067835 0 0
-129 0.003857063152978961 0.01069306807252561 0 0
-130 0.004101744380680219 0.009950109103437365 0 0
-131 0.009496319981807524 0.009289022882502822 0 0
-132 0.009757196361153188 0.009506103037478883 0 0
-133 0.009253516342960712 0.009480497222118826 0 0
-134 0.00266064660879309 0.01047133243801848 0 0
-135 0.002373161895249353 0.01075881715156222 0 0
-136 0.002457719941032666 0.00917982591834046 0 0
-137 0.003434297950098053 0.01173483089911732 0 0
-138 0.002748595666697992 0.01153582526226733 0 0
-139 0.003506995500986241 0.01114167051288695 0 0
-140 0.005509332350786667 0.0152060460042871 0 0
-141 0.00514797669532074 0.01399524067904898 0 0
-142 0.006201621142679104 0.01491697109950092 0 0
-143 0.009532465462805232 0.01010613187168695 0 0
-144 0.00928966182395842 0.009954920560234396 0 0
-145 0.009757196361153188 0.009848788688547444 0 0
-146 0.008182314685008879 0.0114807010924868 0 0
-147 0.008060514826452593 0.01241524721448627 0 0
-148 0.003138941524520059 0.01412904693037064 0 0
-149 0.002777731751399038 0.01339759241106412 0 0
-150 0.004094478130307281 0.01355286106452864 0 0
-151 0.006597913976226059 0.0134861963687021 0 0
-152 0.0031713608695789 0.01049406243567562 0 0
-153 0.006573082014649333 0.009862626376613585 0 0
-154 0.006002937375926273 0.009804698903913849 0 0
-155 0.006338774512955015 0.00935866428194527 0 0
-156 0.003764991424787199 0.008673073750327821 0 0
-157 0.004236470721579097 0.008861558831886364 0 0
-158 0.003461888605941812 0.009123106345324049 0 0
-159 0.00224904663071081 0.01305138196270191 0 0
-160 0.001652125247758028 0.01323776386351254 0 0
-161 0.002078976732857023 0.01231536754930833 0 0
-162 0.004144660865567399 0.01826797548849735 0 0
-163 0.003650141792662436 0.008076912503182198 0 0
-164 0.002875559677025151 0.008338460016619881 0 0
-165 0.009178737094528055 0.008022471000480721 0 0
-166 0.009496319981807524 0.008831708533571382 0 0
-167 0.008675057076335577 0.008454179534052104 0 0
-168 0.004987775370061688 0.0133317963254849 0 0
-169 0.001546120426081629 0.001472033978075364 0 0
-170 0.001546120426081629 0.003634163810121017 0 0
-171 0.003872504817274946 0.01541013328041493 0 0
-172 0.002555758438366703 0.01525486462695041 0 0
-173 0.004038821274933668 0.00406877480733516 0 0
-174 0.005022176038328934 0.003004301154695102 0 0
-175 0.005968756461099345 0.004129008005879536 0 0
-176 0.004610816890106651 0.009133142224225298 0 0
-177 0.005225345057010386 0.009577747510402997 0 0
-178 0.00854702014636561 0.009966116706448064 0 0
-179 0.009028785444612754 0.009737840405258335 0 0
-180 0.0007410276749521205 0.01250087472505948 0 0
-181 0.002159999778168965 0.006827214300759957 0 0
-182 0.002653293782328051 0.006221619797285427 0 0
-183 0.003254004049059474 0.00713670426599973 0 0
-184 0.008476055612247305 0.003981379339140972 0 0
-185 0.008476055612247305 0.001532267176619739 0 0
-186 0.005391050180154403 0.0104694381106472 0 0
-187 0.005865625974005313 0.01019463372335934 0 0
-188 0.001604223602359061 0.004674376245597824 0 0
-189 0.002383868358077832 0.005468311329574998 0 0
-190 0.00578148839907912 0.01806388821236952 0 0
-191 0.007077232633374736 0.00993013117415845 0 0
-192 0.006741395496345995 0.01037616579612703 0 0
-193 0.007469014259399414 0.009568280712083614 0 0
-194 0.007637327741096076 0.01008182013159706 0 0
-195 0.001490984630292513 0.006640854522687794 0 0
-196 0.0007113398745737422 0.007434789606664966 0 0
-197 0.006437712650967006 0.01282275201513802 0 0
-198 0.006030387398922227 0.01191074187646986 0 0
-199 0.00492614926463331 0.01633186370086687 0 0
-200 0.008061628025632397 0.008243783940450064 0 0
-201 0.007037136136622952 0.004533370812388514 0 0
-202 0.004046120426075112 0.001472033978075364 0 0
-203 0.007449120414314782 0.007906575454191721 0 0
-204 0.007153274250891071 0.008505417393680343 0 0
-205 0.002091694897023936 0.007555938991402096 0 0
-206 0.001301968622151916 0.01193993377785968 0 0
-207 0.006831463844162375 0.007085208089479776 0 0
-208 0.006893229038110389 0.01094293863973848 0 0
-209 0.004307714071261263 0.009583174819221527 0 0
-210 0.002413262523854324 0.01122398118875263 0 0
-211 0.001965131201517497 0.01104013346427789 0 0
-212 0.003204583236498032 0.01247519609685991 0 0
-213 0.006053781373227686 0.005597844465028572 0 0
-214 0.009382733593833122 0.01158213373291557 0 0
-215 0.004984969930275616 0.007657127744003678 0 0
-216 0.005985566479850102 0.00753546907926961 0 0
-217 0.001272280821776506 0.007995730553867731 0 0
-218 0.001580425867309122 0.008510932474143924 0 0
-219 0.001982000206564066 0.00891250681339887 0 0
-220 0.005631318472310995 0.009690671628691021 0 0
-221 0.001563556862261029 0.01144170780353436 0 0
-222 0.002514689574681315 0.008667302158823914 0 0
-223 0.0040969244512111 0.005108987242811967 0 0
-224 0.00315034402844069 0.003984280391627534 0 0
-225 0.005680064161954125 0.01304272142069872 0 0
-226 0.005976055612240789 0.001532267176619739 0 0
-227 0.008084976261342414 0.01019371545391527 0 0
-228 0.007693194635317735 0.01055556591599011 0 0
-229 0.003727398212152665 0.00967852571109843 0 0
-230 0.007337350506943381 0.009129608817291846 0 0
-231 0.008602887040587268 0.01043986249084111 0 0
-232 0.001743643590013355 0.01200352347579363 0 0
-233 0.004143435796821522 0.007471317999707667 0 0
-234 0.001730824794680101 0.007884781133606127 0 0
-235 0.00845315517161516 0.01111586435206973 0 0
-236 0.006724842895625764 0.008792400331033503 0 0
-237 0.005088033655089426 0.009967682329848484 0 0
-238 0.00347787262896834 0.005777801294814771 0 0
-239 0.00627626368443902 0.006452468261327386 0 0
-240 0.007870002668957791 0.01103229797872539 0 0
-241 0.002340564972966136 0.011817141574983 0 0
-242 0.007422354148711455 0.01092040265640718 0 0
-243 0.002399839942556552 0.008071140911678291 0 0
-244 0.004588832186672653 0.00671691950682121 0 0
-245 0.005207884008915413 0.006048105454818407 0 0
-246 0.004366349875461319 0.005862295710522396 0 0
-247 0.009382733593833122 0.0133330215703852 0 0
+0.006237244877620592 0.01030866099858216 0
+0.004985401697704079 0.005193481658519594 0
+0.004455687903428302 0.01428431558383516 0
+0.008029109367120753 0.009719969669522223 0
+0.00735556246523894 0.0132662269631414 0
+0.004539573540424485 0.008411526236890135 0
+0.006540766639573456 0.008168208907422 0
+0.004192697784386302 0.01134067614973695 0
+0.002675898115809804 0.0121289856484977 0
+0.002760710044900388 0.007742298769474259 0
+0.009064930925610464 0.01021226374337391 0
+0.00759916218235151 0.01139713471914246 0
+0.004682060239788817 0.00985475821156046 0
+0.008357474189056108 0.007644942000961442 0
+0.005519862836695073 0.01237927706713464 0
+0.006562976798145031 0.01612777642473904 0
+0.008992639963615046 0.009263417067142765 0
+0.00282129321758618 0.01094266487603696 0
+0.001822195145611816 0.01397377827690612 0
+0.00328932173112159 0.01653595097699469 0
+0.002990409309149914 0.008934621263765504 0
+0.006908919151678074 0.009416591754645006 0
+0.005768629874231955 0.009300736809245534 0
+0.001559289511437542 0.005912129832045655 0
+0.003092240852163258 0.002944067956150727 0
+0.00352142852157162 0.01004545999531427 0
+0.005288093289918773 0.01085826977315788 0
+0.007122161048751293 0.006002207271537552 0
+0.006952111224494611 0.003064534353239477 0
+0.008765467187666246 0.01156426746583114 0
+0.007245546115071399 0.01044367059367189 0
+0.00654091196114938 0.01144220668580508 0
+0.001482055349904241 0.01250174945011896 0
+0.002038969840212717 0.008399983053882322 0
+0.001422679749147484 0.007369579213329933 0
+0.002005231830122468 0.0115052975014683 0
+0.007765781862208688 0.008842625879938688 0
+0.003933367902733709 0.009311591426882593 0
+0.005430366320126747 0.006902729251117221 0
+0.005494007070390034 0.01008060644813651 0
+0.00374729805321856 0.006531109762525199 0
+0.008140843155564072 0.01066746123830832 0
+0.009514392722306376 0.009697577377094887 0
+0.005840265487213177 0.0137061657742628 0
+0.003208447204718121 0.005024492827104342 0
+0.00373326835718626 0.01282140654522211 0
+0.005762669083769682 0.01058346538587002 0
+0.006389078419384986 0.01087543384219362 0
+0.005914502625534076 0.01115023822948148 0
+0.004856280310540688 0.0118599766084358 0
+0.004626565596940666 0.01260034180617838 0
+0.003962983070786281 0.01208104134747953 0
+0.009532465462805232 0.01044881752275367 0
+0.009382733593833122 0.01112481938398228 0
+0.008915199056638356 0.01088826560460252 0
+0.008281488399072515 0.01806388821236952 0
+0.008281488399072515 0.01561477604983915 0
+0.009178737094528055 0.006271583163001955 0
+0.0077398176189037 0.006823574636249496 0
+0.008561080524375646 0.005450215798290009 0
+0.004740395537152537 0.01109947296144741 0
+0.005403978063306922 0.01161877342014626 0
+0.001644660865560795 0.01610584565646003 0
+0.001644660865560795 0.01826797548849735 0
+0.0085108746653679 0.009491693368332494 0
+0.007897445614664721 0.009281297774730454 0
+0.008379210912911866 0.009053021473540725 0
+0.00867778123261947 0.01418400131904033 0
+0.006959269631691986 0.01469700169394022 0
+0.000911097572805908 0.01323688913845306 0
+0.000911097572805908 0.01482475930641574 0
+0.002745204654574957 0.009467310631882752 0
+0.003255918915360767 0.009490040629539887 0
+0.00301071426078581 0.01002272999765714 0
+0.00443737901208756 0.0105977171806487 0
+0.004985076764853795 0.01035651399235917 0
+0.007477362323795225 0.01233168084114193 0
+0.00694823721319416 0.01235421682447324 0
+0.007070037071750445 0.01141967070247377 0
+0.0007796447557187712 0.005118194748068481 0
+0.0007796447557187712 0.006706064916022827 0
+0.005540170089998971 0.008289867572156068 0
+0.006154698256902706 0.008734472858333767 0
+0.00515410170732822 0.008856131523067835 0
+0.003857063152978961 0.01069306807252561 0
+0.004101744380680219 0.009950109103437365 0
+0.009496319981807524 0.009289022882502822 0
+0.009757196361153188 0.009506103037478883 0
+0.009253516342960712 0.009480497222118826 0
+0.00266064660879309 0.01047133243801848 0
+0.002373161895249353 0.01075881715156222 0
+0.002457719941032666 0.00917982591834046 0
+0.003434297950098053 0.01173483089911732 0
+0.002748595666697992 0.01153582526226733 0
+0.003506995500986241 0.01114167051288695 0
+0.005509332350786667 0.0152060460042871 0
+0.00514797669532074 0.01399524067904898 0
+0.006201621142679104 0.01491697109950092 0
+0.009532465462805232 0.01010613187168695 0
+0.00928966182395842 0.009954920560234396 0
+0.009757196361153188 0.009848788688547444 0
+0.008182314685008879 0.0114807010924868 0
+0.008060514826452593 0.01241524721448627 0
+0.003138941524520059 0.01412904693037064 0
+0.002777731751399038 0.01339759241106412 0
+0.004094478130307281 0.01355286106452864 0
+0.006597913976226059 0.0134861963687021 0
+0.0031713608695789 0.01049406243567562 0
+0.006573082014649333 0.009862626376613585 0
+0.006002937375926273 0.009804698903913849 0
+0.006338774512955015 0.00935866428194527 0
+0.003764991424787199 0.008673073750327821 0
+0.004236470721579097 0.008861558831886364 0
+0.003461888605941812 0.009123106345324049 0
+0.00224904663071081 0.01305138196270191 0
+0.001652125247758028 0.01323776386351254 0
+0.002078976732857023 0.01231536754930833 0
+0.004144660865567399 0.01826797548849735 0
+0.003650141792662436 0.008076912503182198 0
+0.002875559677025151 0.008338460016619881 0
+0.009178737094528055 0.008022471000480721 0
+0.009496319981807524 0.008831708533571382 0
+0.008675057076335577 0.008454179534052104 0
+0.004987775370061688 0.0133317963254849 0
+0.001546120426081629 0.001472033978075364 0
+0.001546120426081629 0.003634163810121017 0
+0.003872504817274946 0.01541013328041493 0
+0.002555758438366703 0.01525486462695041 0
+0.004038821274933668 0.00406877480733516 0
+0.005022176038328934 0.003004301154695102 0
+0.005968756461099345 0.004129008005879536 0
+0.004610816890106651 0.009133142224225298 0
+0.005225345057010386 0.009577747510402997 0
+0.00854702014636561 0.009966116706448064 0
+0.009028785444612754 0.009737840405258335 0
+0.0007410276749521205 0.01250087472505948 0
+0.002159999778168965 0.006827214300759957 0
+0.002653293782328051 0.006221619797285427 0
+0.003254004049059474 0.00713670426599973 0
+0.008476055612247305 0.003981379339140972 0
+0.008476055612247305 0.001532267176619739 0
+0.005391050180154403 0.0104694381106472 0
+0.005865625974005313 0.01019463372335934 0
+0.001604223602359061 0.004674376245597824 0
+0.002383868358077832 0.005468311329574998 0
+0.00578148839907912 0.01806388821236952 0
+0.007077232633374736 0.00993013117415845 0
+0.006741395496345995 0.01037616579612703 0
+0.007469014259399414 0.009568280712083614 0
+0.007637327741096076 0.01008182013159706 0
+0.001490984630292513 0.006640854522687794 0
+0.0007113398745737422 0.007434789606664966 0
+0.006437712650967006 0.01282275201513802 0
+0.006030387398922227 0.01191074187646986 0
+0.00492614926463331 0.01633186370086687 0
+0.008061628025632397 0.008243783940450064 0
+0.007037136136622952 0.004533370812388514 0
+0.004046120426075112 0.001472033978075364 0
+0.007449120414314782 0.007906575454191721 0
+0.007153274250891071 0.008505417393680343 0
+0.002091694897023936 0.007555938991402096 0
+0.001301968622151916 0.01193993377785968 0
+0.006831463844162375 0.007085208089479776 0
+0.006893229038110389 0.01094293863973848 0
+0.004307714071261263 0.009583174819221527 0
+0.002413262523854324 0.01122398118875263 0
+0.001965131201517497 0.01104013346427789 0
+0.003204583236498032 0.01247519609685991 0
+0.006053781373227686 0.005597844465028572 0
+0.009382733593833122 0.01158213373291557 0
+0.004984969930275616 0.007657127744003678 0
+0.005985566479850102 0.00753546907926961 0
+0.001272280821776506 0.007995730553867731 0
+0.001580425867309122 0.008510932474143924 0
+0.001982000206564066 0.00891250681339887 0
+0.005631318472310995 0.009690671628691021 0
+0.001563556862261029 0.01144170780353436 0
+0.002514689574681315 0.008667302158823914 0
+0.0040969244512111 0.005108987242811967 0
+0.00315034402844069 0.003984280391627534 0
+0.005680064161954125 0.01304272142069872 0
+0.005976055612240789 0.001532267176619739 0
+0.008084976261342414 0.01019371545391527 0
+0.007693194635317735 0.01055556591599011 0
+0.003727398212152665 0.00967852571109843 0
+0.007337350506943381 0.009129608817291846 0
+0.008602887040587268 0.01043986249084111 0
+0.001743643590013355 0.01200352347579363 0
+0.004143435796821522 0.007471317999707667 0
+0.001730824794680101 0.007884781133606127 0
+0.00845315517161516 0.01111586435206973 0
+0.006724842895625764 0.008792400331033503 0
+0.005088033655089426 0.009967682329848484 0
+0.00347787262896834 0.005777801294814771 0
+0.00627626368443902 0.006452468261327386 0
+0.007870002668957791 0.01103229797872539 0
+0.002340564972966136 0.011817141574983 0
+0.007422354148711455 0.01092040265640718 0
+0.002399839942556552 0.008071140911678291 0
+0.004588832186672653 0.00671691950682121 0
+0.005207884008915413 0.006048105454818407 0
+0.004366349875461319 0.005862295710522396 0
+0.009382733593833122 0.0133330215703852 0
 $EndNodes
 $Elements
-120
-9 9 1 6 71 45 76 91 92 93
-10 9 1 6 52 59 90 94 95 96
-11 9 1 6 55 20 74 97 98 99
-12 9 1 6 23 6 60 25 100 101
-13 9 1 6 14 58 72 102 103 104
-14 9 1 6 59 52 71 94 105 106
-15 9 1 6 7 29 64 30 107 108
-16 9 1 6 61 48 81 109 110 111
-17 9 1 6 49 23 60 112 101 113
-18 9 1 6 29 8 63 31 114 115
-19 9 1 6 9 65 70 116 117 118
-20 9 1 6 52 57 71 119 120 105
-21 9 1 6 56 49 76 121 122 123
-22 9 1 6 10 32 68 33 124 125
-23 9 1 6 50 51 67 126 127 128
-24 9 1 6 57 52 70 119 129 130
-25 9 1 6 61 17 87 131 132 133
-26 9 1 6 36 9 62 39 134 135
-27 9 1 6 9 40 65 42 136 116
-28 9 1 6 52 53 62 137 138 139
-29 9 1 6 60 47 88 140 141 142
-30 9 1 6 4 55 87 143 144 145
-31 9 1 6 49 56 74 121 146 147
-32 9 1 6 47 63 90 148 149 150
-33 9 1 6 49 60 88 113 142 151
-34 9 1 6 52 62 70 139 152 129
-35 9 1 6 66 45 67 153 154 155
-36 9 1 6 65 50 82 156 157 158
-37 9 1 6 62 9 70 134 118 152
-38 9 1 6 53 63 77 159 160 161
-39 9 1 6 26 7 64 28 108 162
-40 9 1 6 54 50 65 163 156 164
-41 9 1 6 58 3 61 165 166 167
-42 9 1 6 59 47 90 168 150 95
-43 9 1 6 32 1 69 34 169 170
-44 9 1 6 3 17 61 18 131 166
-45 9 1 6 63 47 64 148 171 172
-46 9 1 6 46 69 73 173 174 175
-47 9 1 6 57 50 67 176 128 177
-48 9 1 6 55 48 61 178 109 179
-49 9 1 6 63 8 77 114 180 160
-50 9 1 6 54 68 85 181 182 183
-51 9 1 6 2 14 73 15 184 185
-52 9 1 6 45 71 84 91 186 187
-53 9 1 6 68 32 89 124 188 189
-54 9 1 6 6 26 60 27 190 100
-55 9 1 6 45 66 75 153 191 192
-56 9 1 6 66 48 75 193 194 191
-57 9 1 6 10 68 79 125 195 196
-58 9 1 6 49 59 76 197 198 122
-59 9 1 6 47 60 64 140 199 171
-60 9 1 6 58 61 81 167 111 200
-61 9 1 6 14 72 73 104 201 184
-62 9 1 6 1 11 69 12 202 169
-63 9 1 6 51 58 81 203 200 204
-64 9 1 6 68 54 79 181 205 195
-65 9 1 6 59 71 76 106 93 198
-66 9 1 6 8 35 77 37 206 180
-67 9 1 6 58 51 72 203 207 103
-68 9 1 6 45 75 76 192 208 92
-69 9 1 6 50 57 82 176 209 157
-70 9 1 6 29 63 64 115 172 107
-71 9 1 6 36 62 80 135 210 211
-72 9 1 6 53 52 90 137 96 212
-73 9 1 6 72 46 73 213 175 201
-74 9 1 6 20 5 74 22 214 98
-75 9 1 6 51 50 83 126 215 216
-76 9 1 6 41 10 79 44 196 217
-77 9 1 6 40 41 78 43 218 219
-78 9 1 6 67 45 84 154 187 220
-79 9 1 6 35 36 80 38 211 221
-80 9 1 6 65 40 78 136 219 222
-81 9 1 6 69 46 89 173 223 224
-82 9 1 6 47 59 88 168 225 141
-83 9 1 6 11 2 73 13 185 226
-84 9 1 6 75 48 86 194 227 228
-85 9 1 6 70 65 82 117 158 229
-86 9 1 6 48 66 81 193 230 110
-87 9 1 6 48 55 86 178 231 227
-88 9 1 6 77 35 80 206 221 232
-89 9 1 6 50 54 85 163 183 233
-90 9 1 6 55 61 87 179 133 144
-91 9 1 6 69 11 73 202 226 174
-92 9 1 6 32 69 89 170 224 188
-93 9 1 6 78 41 79 218 217 234
-94 9 1 6 55 74 86 99 235 231
-95 9 1 6 51 66 67 236 155 127
-96 9 1 6 60 26 64 190 162 199
-97 9 1 6 57 67 84 177 220 237
-98 9 1 6 17 4 87 19 145 132
-99 9 1 6 85 68 89 182 189 238
-100 9 1 6 72 51 83 207 216 239
-101 9 1 6 71 57 84 120 237 186
-102 9 1 6 74 56 86 146 240 235
-103 9 1 6 53 77 80 161 232 241
-104 9 1 6 75 56 76 242 123 208
-105 9 1 6 54 78 79 243 234 205
-106 9 1 6 66 51 81 236 204 230
-107 9 1 6 62 53 80 138 241 210
-108 9 1 6 83 50 85 215 233 244
-109 9 1 6 57 70 82 130 229 209
-110 9 1 6 59 49 88 197 151 225
-111 9 1 6 54 65 78 164 222 243
-112 9 1 6 56 75 86 242 228 240
-113 9 1 6 46 72 83 213 239 245
-114 9 1 6 46 83 85 245 244 246
-115 9 1 6 46 85 89 246 238 223
-116 9 1 6 14 3 58 16 165 102
-117 9 1 6 4 20 55 21 97 143
-118 9 1 6 5 23 74 24 247 214
-119 9 1 6 23 49 74 112 147 247
-120 9 1 6 63 53 90 159 212 149
-5 8 1 3 1 11 12
-6 8 1 3 11 2 13
-7 8 6 3 6 26 27
-8 8 6 3 26 7 28
-1 15 1 1 1
-2 15 2 1 2
-3 15 6 1 6
-4 15 7 1 7
+7 120 1 120
+0 1 15 1
+1 1 
+0 2 15 1
+2 2 
+0 6 15 1
+3 6 
+0 7 15 1
+4 7 
+1 1 8 2
+5 1 11 12 
+6 11 2 13 
+1 6 8 2
+7 6 26 27 
+8 26 7 28 
+2 1 9 112
+9 71 45 76 91 92 93 
+10 52 59 90 94 95 96 
+11 55 20 74 97 98 99 
+12 23 6 60 25 100 101 
+13 14 58 72 102 103 104 
+14 59 52 71 94 105 106 
+15 7 29 64 30 107 108 
+16 61 48 81 109 110 111 
+17 49 23 60 112 101 113 
+18 29 8 63 31 114 115 
+19 9 65 70 116 117 118 
+20 52 57 71 119 120 105 
+21 56 49 76 121 122 123 
+22 10 32 68 33 124 125 
+23 50 51 67 126 127 128 
+24 57 52 70 119 129 130 
+25 61 17 87 131 132 133 
+26 36 9 62 39 134 135 
+27 9 40 65 42 136 116 
+28 52 53 62 137 138 139 
+29 60 47 88 140 141 142 
+30 4 55 87 143 144 145 
+31 49 56 74 121 146 147 
+32 47 63 90 148 149 150 
+33 49 60 88 113 142 151 
+34 52 62 70 139 152 129 
+35 66 45 67 153 154 155 
+36 65 50 82 156 157 158 
+37 62 9 70 134 118 152 
+38 53 63 77 159 160 161 
+39 26 7 64 28 108 162 
+40 54 50 65 163 156 164 
+41 58 3 61 165 166 167 
+42 59 47 90 168 150 95 
+43 32 1 69 34 169 170 
+44 3 17 61 18 131 166 
+45 63 47 64 148 171 172 
+46 46 69 73 173 174 175 
+47 57 50 67 176 128 177 
+48 55 48 61 178 109 179 
+49 63 8 77 114 180 160 
+50 54 68 85 181 182 183 
+51 2 14 73 15 184 185 
+52 45 71 84 91 186 187 
+53 68 32 89 124 188 189 
+54 6 26 60 27 190 100 
+55 45 66 75 153 191 192 
+56 66 48 75 193 194 191 
+57 10 68 79 125 195 196 
+58 49 59 76 197 198 122 
+59 47 60 64 140 199 171 
+60 58 61 81 167 111 200 
+61 14 72 73 104 201 184 
+62 1 11 69 12 202 169 
+63 51 58 81 203 200 204 
+64 68 54 79 181 205 195 
+65 59 71 76 106 93 198 
+66 8 35 77 37 206 180 
+67 58 51 72 203 207 103 
+68 45 75 76 192 208 92 
+69 50 57 82 176 209 157 
+70 29 63 64 115 172 107 
+71 36 62 80 135 210 211 
+72 53 52 90 137 96 212 
+73 72 46 73 213 175 201 
+74 20 5 74 22 214 98 
+75 51 50 83 126 215 216 
+76 41 10 79 44 196 217 
+77 40 41 78 43 218 219 
+78 67 45 84 154 187 220 
+79 35 36 80 38 211 221 
+80 65 40 78 136 219 222 
+81 69 46 89 173 223 224 
+82 47 59 88 168 225 141 
+83 11 2 73 13 185 226 
+84 75 48 86 194 227 228 
+85 70 65 82 117 158 229 
+86 48 66 81 193 230 110 
+87 48 55 86 178 231 227 
+88 77 35 80 206 221 232 
+89 50 54 85 163 183 233 
+90 55 61 87 179 133 144 
+91 69 11 73 202 226 174 
+92 32 69 89 170 224 188 
+93 78 41 79 218 217 234 
+94 55 74 86 99 235 231 
+95 51 66 67 236 155 127 
+96 60 26 64 190 162 199 
+97 57 67 84 177 220 237 
+98 17 4 87 19 145 132 
+99 85 68 89 182 189 238 
+100 72 51 83 207 216 239 
+101 71 57 84 120 237 186 
+102 74 56 86 146 240 235 
+103 53 77 80 161 232 241 
+104 75 56 76 242 123 208 
+105 54 78 79 243 234 205 
+106 66 51 81 236 204 230 
+107 62 53 80 138 241 210 
+108 83 50 85 215 233 244 
+109 57 70 82 130 229 209 
+110 59 49 88 197 151 225 
+111 54 65 78 164 222 243 
+112 56 75 86 242 228 240 
+113 46 72 83 213 239 245 
+114 46 83 85 245 244 246 
+115 46 85 89 246 238 223 
+116 14 3 58 16 165 102 
+117 4 20 55 21 97 143 
+118 5 23 74 24 247 214 
+119 23 49 74 112 147 247 
+120 63 53 90 159 212 149 
 $EndElements
diff --git a/dG3D/benchmarks/CohesiveBand_Plate/notchedPlate.py b/dG3D/benchmarks/CohesiveBand_Plate/notchedPlate.py
index b5fdcfa5934bd90e326811ebfd7c788e4d769cf5..520679d90a6f9227cfdfb041d31a14f4bff7f622 100755
--- a/dG3D/benchmarks/CohesiveBand_Plate/notchedPlate.py
+++ b/dG3D/benchmarks/CohesiveBand_Plate/notchedPlate.py
@@ -111,7 +111,7 @@ mysolver = nonLinearMechSolver(numDomain1) 		# Solver associated with numSolver1
 # ===================================================================================
 geofile="notchedPlate.geo"
 meshfile="notchedPlate.msh"		# name of mesh file
-mysolver.createModel(geofile,meshfile,3,2)
+#mysolver.createModel(geofile,meshfile,3,2)
 mysolver.loadModel(meshfile)		# add mesh
 mysolver.addDomain(field1) 		# add domain
 mysolver.addMaterialLaw(BulkLaw1) 	# add material law
@@ -205,7 +205,7 @@ mysolver.archivingNodeDisplacement(73,2,nstepArchForce)
 mysolver.solve()
 
 check = TestCheck()
-check.equal(-7.263983e+03,mysolver.getArchivedForceOnPhysicalGroup("Edge", 61, 1),1.e-3)
+check.equal(-8.232639e+03,mysolver.getArchivedForceOnPhysicalGroup("Edge", 61, 1),1.e-3)
 
 
 
diff --git a/dG3D/benchmarks/CrackCompositeFailurePRI6MPI/composite.py b/dG3D/benchmarks/CrackCompositeFailurePRI6MPI/composite.py
index abda34cbdf3327aa007676bd3f88cbc31b77e86e..159c5664343fd010c8a8def977b1922feb3959cb 100644
--- a/dG3D/benchmarks/CrackCompositeFailurePRI6MPI/composite.py
+++ b/dG3D/benchmarks/CrackCompositeFailurePRI6MPI/composite.py
@@ -130,4 +130,4 @@ mysolver.archivingNodeDisplacement(86,0,1)
 mysolver.solve()
 
 check = TestCheck()
-check.equal(1.555357e-07,mysolver.getEnergy(3),2.e-3)
+check.equal(1.539937e-07,mysolver.getEnergy(3),2.e-3)
diff --git a/dG3D/benchmarks/DG_HEX8_PRI6_Lobatto/twoHole.py b/dG3D/benchmarks/DG_HEX8_PRI6_Lobatto/twoHole.py
index 09a43f811771d19f3a3d1f40991f685c52e05182..537f4679e72379c9ddbd7292d3629905995b9f59 100644
--- a/dG3D/benchmarks/DG_HEX8_PRI6_Lobatto/twoHole.py
+++ b/dG3D/benchmarks/DG_HEX8_PRI6_Lobatto/twoHole.py
@@ -84,5 +84,5 @@ mysolver.archivingForceOnPhysicalGroup("Face", 12, 1)
 mysolver.solve()
 
 check = TestCheck()
-check.equal(-5.750935e+03,mysolver.getArchivedForceOnPhysicalGroup("Face", 12, 1),1.e-4)
+check.equal(-5.767921e+03,mysolver.getArchivedForceOnPhysicalGroup("Face", 12, 1),1.e-4)
 
diff --git a/dG3D/benchmarks/DG_PRI18/twoHole.py b/dG3D/benchmarks/DG_PRI18/twoHole.py
index 3efbc5f3ac91afef9a2ada9785ba8583645ca77e..f57506ee00ece75ad4c4f98d946856d903241525 100644
--- a/dG3D/benchmarks/DG_PRI18/twoHole.py
+++ b/dG3D/benchmarks/DG_PRI18/twoHole.py
@@ -80,4 +80,4 @@ mysolver.archivingNodeDisplacement(19,1,1)
 mysolver.solve()
 
 check = TestCheck()
-check.equal(-2.487279e+03,mysolver.getArchivedForceOnPhysicalGroup("Face", 84, 1),5.e-4)
+check.equal(-2.485135e+03,mysolver.getArchivedForceOnPhysicalGroup("Face", 84, 1),5.e-4)
diff --git a/dG3D/benchmarks/DG_PRI18_Lobatto/twoHole.py b/dG3D/benchmarks/DG_PRI18_Lobatto/twoHole.py
index fcc50e30eecf7468593a87dfbabf358afe02f0f9..f0aeae11eebb10a506486ee7f416a01cfc90c8d0 100644
--- a/dG3D/benchmarks/DG_PRI18_Lobatto/twoHole.py
+++ b/dG3D/benchmarks/DG_PRI18_Lobatto/twoHole.py
@@ -83,4 +83,4 @@ mysolver.archivingNodeDisplacement(19,1,1)
 mysolver.solve()
 
 check = TestCheck()
-check.equal(-2.487279e+03,mysolver.getArchivedForceOnPhysicalGroup("Face", 84, 1),5.e-4)
+check.equal(-2.485149e+03,mysolver.getArchivedForceOnPhysicalGroup("Face", 84, 1),5.e-4)
diff --git a/dG3D/benchmarks/DG_PRI6_DiriToNeum/twoHole.py b/dG3D/benchmarks/DG_PRI6_DiriToNeum/twoHole.py
index 14defeae31ba3ec5f418b7d857e70e6e376ab95c..f494d1d2523aece3161d2112876c88a376e7fa95 100644
--- a/dG3D/benchmarks/DG_PRI6_DiriToNeum/twoHole.py
+++ b/dG3D/benchmarks/DG_PRI6_DiriToNeum/twoHole.py
@@ -105,4 +105,4 @@ mysolver.displacementBC("Face",85,2,0.)
 mysolver.solve()
 
 check = TestCheck()
-check.equal(-1.198445e-06,mysolver.getArchivedForceOnPhysicalGroup("Face", 84, 1),1.e-2)
+check.equal(-1.318212e-06,mysolver.getArchivedForceOnPhysicalGroup("Face", 84, 1),1.e-2)
diff --git a/dG3D/benchmarks/GursonThomason_cube_withLodeEnhanced/CMakeLists.txt b/dG3D/benchmarks/GursonThomason_cube_withLodeEnhanced/CMakeLists.txt
index 135442cbde917caae8e02b936f8aa9ad909b8987..b881fcf2ad4484a63f20152f6e848cb25694c18d 100644
--- a/dG3D/benchmarks/GursonThomason_cube_withLodeEnhanced/CMakeLists.txt
+++ b/dG3D/benchmarks/GursonThomason_cube_withLodeEnhanced/CMakeLists.txt
@@ -3,9 +3,12 @@
 set(PYFILE cube.py)
 
 set(FILES2DELETE 
-  *.csv
-  disp*
-  stress*
+  force*.csv
+  IP*.csv
+  Nodal*.csv
+  ener*.csv
+  disp*.msh
+  stresss*.msh
 )
 
 add_cm3python_test(${PYFILE} "${FILES2DELETE}")
diff --git a/dG3D/benchmarks/GursonThomason_cube_withLodeEnhanced/cube.py b/dG3D/benchmarks/GursonThomason_cube_withLodeEnhanced/cube.py
index 20207dc5a562b52cb7b54319b0976a3e14c297f0..1122f3413d060a2201766b2e9544e376f30fa55a 100644
--- a/dG3D/benchmarks/GursonThomason_cube_withLodeEnhanced/cube.py
+++ b/dG3D/benchmarks/GursonThomason_cube_withLodeEnhanced/cube.py
@@ -59,8 +59,8 @@ nstep = 300 		# Number of step
 ftime =1.0 		# Final time
 tol=1.e-6 		# Relative tolerance for NR scheme
 tolAbs = 1.e-8		# Absolute tolerance for NR scheme
-nstepArchIP=10		# Number of step between 2 archiving
-nstepArchForce = 10	# Number of step between 2 force archiving
+nstepArchIP=60		# Number of step between 2 archiving
+nstepArchForce = 60	# Number of step between 2 force archiving
 nstepArchEnergy = nstepArchForce # Number of step between 2 energy computation and archiving
 
 MaxIter = 12		# Maximum number of iterations
diff --git a/dG3D/benchmarks/Gurson_Cube_local/CMakeLists.txt b/dG3D/benchmarks/Gurson_Cube_local/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..135442cbde917caae8e02b936f8aa9ad909b8987
--- /dev/null
+++ b/dG3D/benchmarks/Gurson_Cube_local/CMakeLists.txt
@@ -0,0 +1,11 @@
+# test file
+
+set(PYFILE cube.py)
+
+set(FILES2DELETE 
+  *.csv
+  disp*
+  stress*
+)
+
+add_cm3python_test(${PYFILE} "${FILES2DELETE}")
diff --git a/dG3D/benchmarks/Gurson_Cube_local/cube.geo b/dG3D/benchmarks/Gurson_Cube_local/cube.geo
new file mode 100644
index 0000000000000000000000000000000000000000..e9b8ff5867a128dc3146006aefb046a16947323c
--- /dev/null
+++ b/dG3D/benchmarks/Gurson_Cube_local/cube.geo
@@ -0,0 +1,51 @@
+// Cube.geo
+mm=1.0e-3;	// Units
+n=1;		// Number of layers (in thickness / along z)
+m = 1;		// Number of element + 1 along y
+p = 3; 		// Number of element + 1 along x (min 3 to have a crack)
+L=2.*mm;	// Cube lenght
+sl1=L/n;
+
+// Face z = 0 (point in anti-clockwise order)
+Point(1)={0,0,0,sl1};
+Point(2)={L,0,0,sl1};
+Point(3)={L,L,0,sl1};
+Point(4)={0,L,0,sl1};
+Line(1)={1,2};
+Line(2)={2,3};
+Line(3)={3,4};
+Line(4)={4,1};
+Line Loop(5) = {3, 4, 1, 2};
+Plane Surface(6) = {5};
+
+// Cube extrusion
+Extrude {0, 0, L} {
+  Surface{6}; Layers{n}; Recombine;
+}
+
+// Physical entities
+	// Volume
+Physical Volume(29) = {1};
+	// Surface
+Physical Surface(30) = {19}; // Left face x = 0
+Physical Surface(31) = {27}; // Right face x = L
+Physical Surface(32) = {6};  // Back face z = 0
+Physical Surface(33) = {28}; // Front face z = L
+Physical Surface(34) = {15}; // Down face y = 0
+Physical Surface(35) = {23}; // Up face y = L
+
+// Mesh
+Transfinite Line {2, 4} = m Using Progression 1;
+Transfinite Line {1, 3} = p Using Progression 1;
+Transfinite Surface {6};
+Recombine Surface{6};
+
+
+// To save cube elongation
+Physical Point(41) = {1}; // Point on left face (0,0,0)
+Physical Point(42) = {4}; // Point on left face (0,L,0)
+Physical Point(43) = {2}; // Point on right face (L,0,0)
+Physical Point(44) = {3}; // Point on right face (L,L,0)
+
+
+
diff --git a/dG3D/benchmarks/Gurson_Cube_local/cube.py b/dG3D/benchmarks/Gurson_Cube_local/cube.py
new file mode 100755
index 0000000000000000000000000000000000000000..cdd975c76517783d858b2d94dda98fb939a73197
--- /dev/null
+++ b/dG3D/benchmarks/Gurson_Cube_local/cube.py
@@ -0,0 +1,166 @@
+#coding-Utf-8-*-
+from gmshpy import*
+#from dG3DpyDebug import*
+from dG3Dpy import*
+from math import*
+
+# Script for testing cube problem with Gurson
+
+# Material law creation
+# ===================================================================================
+BulkLawNum1 = 1 
+
+# material parameters - bulk law
+rho = 7850. 		# kg/m3:	density
+young = 210.0*1.e9	# Pa: 	module de young
+nu    = 0.3		# -: 	poisson coefficient
+sy0   = 400.e6 #4.e12 #400.0e6 	# Pa: 	initial yield stress
+h_hard  = 100.0e6	# Pa:	hardenning coefficient
+h_exp = 1.0		# -: 	exponential coefficient
+HardenLawNum1 = 2
+Harden1 = PowerLawJ2IsotropicHardening(HardenLawNum1, sy0, h_hard, h_exp)
+# - gurson
+q1    = 1.5
+q2    = 1.
+q3    = 1.5
+fVinitial = 0.007
+# - coalesence
+fC     = 0.1
+ff     = 0.18
+ffstar = (q1- sqrt(q1*q1-q3*q3))/(q3*q3)
+accRate = (ffstar-fC)/(ff-fC)
+# - nucleation
+fn     = 0.1;
+sn     = 0.1;
+epsilonn = 0.3;
+NucleationLawNum1 = 3
+#Gdnexp1 = ExponentialNucleationLaw(NucleationLawNum1, fn, sn, epsilonn);
+Gdnexp1 = LinearNucleationLaw(NucleationLawNum1, 0.2, 0.005, 1.)
+# - non-local law
+cl = 2.0e-10 		# m2: 		non-local parameter (== NL-length^2) 
+ClLawNum1 = 4	
+Cl_Law1 = IsotropicCLengthLaw(ClLawNum1, cl)
+# material law creation
+BulkLaw1 = NonLocalDamageGursonDG3DMaterialLaw(BulkLawNum1, rho, young, nu, q1,q2,q3,fVinitial, Harden1, Cl_Law1,1e-8,False,1e-8)
+BulkLaw1.setUseBarF(True)
+BulkLaw1.setOrderForLogExp(-1)
+BulkLaw1.setNonLocalMethod(0)
+#BulkLaw1.setNucleationLaw(Gdnexp1)
+
+BulkLaw1.setShearPorosityGrowthFactor(0.)
+
+#CoalLawNum1 = 5
+#Coal_Law1 = FstarCoalescenceLaw(CoalLawNum1,fC,accRate)
+#BulkLaw1.setCoalescenceLaw(Coal_Law1)
+
+#BulkLaw1.setSubStepping(True,3)
+
+
+
+# Solver parameters
+# ===================================================================================
+soltype = 1 		# StaticLinear=0 (default, StaticNonLinear=1, Explicit=2, 
+			# Multi=3, Implicit=4, Eigen=5)
+nstep = 400   		# Number of step
+ftime =1.0   		# Final time
+tol=1.e-6  		# Relative tolerance for NR scheme
+tolAbs = 1.e-16		# Absolute tolerance for NR scheme
+nstepArch=10		# Number of step between 2 archiving
+nstepArchEnergy = 1	# Number of step between 2 energy computation and archiving
+nstepArchForce = 1	# Number of step between 2 force archiving
+MaxIter = 25		# Maximum number of iterations
+StepIncrease = 3	# Number of successfull timestep before reincreasing it
+StepReducFactor = 5.0 	# Timestep reduction factor
+NumberReduction = 4	# Maximum number of timespep reduction: max reduction = pow(StepReducFactor,this)
+fullDg = bool(1)        # O = CG, 1 = DG
+dgnl = bool(1)		# DG for non-local variables inside a domain (only if fullDg)
+eqRatio = 1.0e6		# Ratio between "elastic" and non-local equations 
+space1 = 0 		# Function space (Lagrange=0)
+beta1  = 30.0		# Penality parameter for DG
+
+# Domain creation
+## ===================================================================================
+numPhysVolume1 = 29 		# Number of a physical volume of the model in .geo
+numDomain1 = 1000 		# Number of the domain
+field1 = dG3DDomain(numDomain1,numPhysVolume1,space1,BulkLawNum1,fullDg,3)
+field1.stabilityParameters(beta1) 			# Adding stability parameters (for DG)
+field1.setNonLocalStabilityParameters(beta1,dgnl) 		# Adding stability parameters (for DG)
+field1.setNonLocalEqRatio(eqRatio)
+field1.gaussIntegration(0,-1,-1)
+#field1.matrixByPerturbation(1,1,1,1e-6) 		# Tangent computation analytically or by pertubation
+
+
+# Solver creation
+# ===================================================================================
+mysolver = nonLinearMechSolver(numDomain1) 		# Solver associated with numSolver1
+geofile="cube.geo"
+meshfile= "cube.msh" 			# name of mesh file
+mysolver.createModel(geofile,meshfile,3,1)
+#mysolver.loadModel(meshfile)		# add mesh
+mysolver.addDomain(field1) 		# add domain
+mysolver.addMaterialLaw(BulkLaw1) 	# add material law
+mysolver.Solver(2) 			# Library solving: Gmm=0 (default) Taucs=1 PETsc=2
+# solver parametrisation
+mysolver.Scheme(soltype) 			# solver scheme	 				
+mysolver.snlData(nstep,ftime,tol,tolAbs) 	# solver parameters
+mysolver.snlManageTimeStep(MaxIter,StepIncrease,StepReducFactor,NumberReduction) #timestep
+# solver archiving
+mysolver.stepBetweenArchiving(nstepArch) 	# archiving frequency
+mysolver.energyComputation(nstepArchEnergy)	# archiving frequency for energy
+mysolver.lineSearch(bool(0))		# lineSearch activation
+mysolver.options("-ksp_type preonly -pc_type lu -pc_factor_mat_solver_package mumps")
+
+# Boundary conditions
+# ===============================
+tot_disp = 2.*1.e-3*0.5 # Max disp == elongation 50 pourcent
+mysolver.displacementBC("Face",30,0,0.)		# face x = 0
+mysolver.displacementBC("Face",31,0,tot_disp) # face x = L
+mysolver.displacementBC("Face",34,1,0.)		# face y = 0
+mysolver.displacementBC("Face",32,2,0.)		# face z = 0
+
+mysolver.initialBC("Volume","Position",29,3,fVinitial)
+
+# Variable storage
+# ===============================
+mysolver.internalPointBuildView("svm",IPField.SVM, 1, 1)
+mysolver.internalPointBuildView("sig_xx",IPField.SIG_XX, 1, 1)
+mysolver.internalPointBuildView("sig_yy",IPField.SIG_YY, 1, 1)
+mysolver.internalPointBuildView("sig_zz",IPField.SIG_ZZ, 1, 1)
+mysolver.internalPointBuildView("sig_xy",IPField.SIG_XY, 1, 1)
+mysolver.internalPointBuildView("sig_yz",IPField.SIG_YZ, 1, 1)
+mysolver.internalPointBuildView("sig_xz",IPField.SIG_XZ, 1, 1)
+mysolver.internalPointBuildView("damage",IPField.DAMAGE,1,1)
+mysolver.internalPointBuildView("porosity",IPField.LOCAL_POROSITY,1,1)
+mysolver.internalPointBuildView("epl",IPField.PLASTICSTRAIN, 1, 1)
+
+mysolver.archivingForceOnPhysicalGroup("Face", 31, 0, nstepArchForce)
+mysolver.archivingNodeDisplacement(43,0, nstepArchForce)
+mysolver.archivingIPOnPhysicalGroup("Volume",29, IPField.LOCAL_POROSITY,IPField.MEAN_VALUE);
+mysolver.archivingIPOnPhysicalGroup("Volume",29, IPField.CORRECTED_POROSITY,IPField.MEAN_VALUE);
+mysolver.archivingIPOnPhysicalGroup("Volume",29, IPField.DAMAGE,IPField.MEAN_VALUE);
+
+
+# Solving
+# ===========
+mysolver.solve()
+
+
+
+
+
+
+# Test
+# ===========
+check = TestCheck()
+check.equal(1.157268e+03,mysolver.getArchivedForceOnPhysicalGroup("Face", 31, 0),1.e-6)
+
+import csv
+data = csv.reader(open('IPVolume29val_LOCAL_POROSITYMean.csv'), delimiter=';')
+porosity = list(data)
+check.equal(1.116445e-02,float(porosity[-1][1]),1e-6)
+
+
+
+
+
+
diff --git a/dG3D/benchmarks/Gurson_Cube_local_f/CMakeLists.txt b/dG3D/benchmarks/Gurson_Cube_local_f/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..135442cbde917caae8e02b936f8aa9ad909b8987
--- /dev/null
+++ b/dG3D/benchmarks/Gurson_Cube_local_f/CMakeLists.txt
@@ -0,0 +1,11 @@
+# test file
+
+set(PYFILE cube.py)
+
+set(FILES2DELETE 
+  *.csv
+  disp*
+  stress*
+)
+
+add_cm3python_test(${PYFILE} "${FILES2DELETE}")
diff --git a/dG3D/benchmarks/Gurson_Cube_local_f/cube.geo b/dG3D/benchmarks/Gurson_Cube_local_f/cube.geo
new file mode 100644
index 0000000000000000000000000000000000000000..e9b8ff5867a128dc3146006aefb046a16947323c
--- /dev/null
+++ b/dG3D/benchmarks/Gurson_Cube_local_f/cube.geo
@@ -0,0 +1,51 @@
+// Cube.geo
+mm=1.0e-3;	// Units
+n=1;		// Number of layers (in thickness / along z)
+m = 1;		// Number of element + 1 along y
+p = 3; 		// Number of element + 1 along x (min 3 to have a crack)
+L=2.*mm;	// Cube lenght
+sl1=L/n;
+
+// Face z = 0 (point in anti-clockwise order)
+Point(1)={0,0,0,sl1};
+Point(2)={L,0,0,sl1};
+Point(3)={L,L,0,sl1};
+Point(4)={0,L,0,sl1};
+Line(1)={1,2};
+Line(2)={2,3};
+Line(3)={3,4};
+Line(4)={4,1};
+Line Loop(5) = {3, 4, 1, 2};
+Plane Surface(6) = {5};
+
+// Cube extrusion
+Extrude {0, 0, L} {
+  Surface{6}; Layers{n}; Recombine;
+}
+
+// Physical entities
+	// Volume
+Physical Volume(29) = {1};
+	// Surface
+Physical Surface(30) = {19}; // Left face x = 0
+Physical Surface(31) = {27}; // Right face x = L
+Physical Surface(32) = {6};  // Back face z = 0
+Physical Surface(33) = {28}; // Front face z = L
+Physical Surface(34) = {15}; // Down face y = 0
+Physical Surface(35) = {23}; // Up face y = L
+
+// Mesh
+Transfinite Line {2, 4} = m Using Progression 1;
+Transfinite Line {1, 3} = p Using Progression 1;
+Transfinite Surface {6};
+Recombine Surface{6};
+
+
+// To save cube elongation
+Physical Point(41) = {1}; // Point on left face (0,0,0)
+Physical Point(42) = {4}; // Point on left face (0,L,0)
+Physical Point(43) = {2}; // Point on right face (L,0,0)
+Physical Point(44) = {3}; // Point on right face (L,L,0)
+
+
+
diff --git a/dG3D/benchmarks/Gurson_Cube_local_f/cube.py b/dG3D/benchmarks/Gurson_Cube_local_f/cube.py
new file mode 100755
index 0000000000000000000000000000000000000000..999a3a86a7bf27d686ab9b03576af5506ce02ab5
--- /dev/null
+++ b/dG3D/benchmarks/Gurson_Cube_local_f/cube.py
@@ -0,0 +1,137 @@
+#coding-Utf-8-*-
+from gmshpy import*
+#from dG3DpyDebug import*
+from dG3Dpy import*
+from math import*
+
+# Script for testing cube problem with Gurson
+
+# Material law creation
+# ===================================================================================
+BulkLawNum1 = 1 
+
+# material parameters - bulk law
+rho = 7850. 		# kg/m3:	density
+young = 210.0*1.e9	# Pa: 	module de young
+nu    = 0.3		# -: 	poisson coefficient
+sy0   = 400.0e6 	# Pa: 	initial yield stress
+h_hard  = 100.0e6	# Pa:	hardenning coefficient
+h_exp = 1.0		# -: 	exponential coefficient
+
+# - gurson
+q1    = 1.5
+q2    = 1.
+q3    = 1.5
+fVinitial = 0.007
+
+# material law creation
+BulkLaw1 =  gursonUMATDG3DMaterialLaw(BulkLawNum1, 273., 'material.i01'); 
+BulkLaw1.setUseBarF(True)
+
+
+
+# Solver parameters
+# ===================================================================================
+soltype = 1 		# StaticLinear=0 (default, StaticNonLinear=1, Explicit=2, 
+			# Multi=3, Implicit=4, Eigen=5)
+nstep = 400   		# Number of step
+ftime =1.0   		# Final time
+tol=1.e-6  		# Relative tolerance for NR scheme
+tolAbs = 1.e-16		# Absolute tolerance for NR scheme
+nstepArch=10		# Number of step between 2 archiving
+nstepArchEnergy = 1	# Number of step between 2 energy computation and archiving
+nstepArchForce = 1	# Number of step between 2 force archiving
+MaxIter = 25		# Maximum number of iterations
+StepIncrease = 3	# Number of successfull timestep before reincreasing it
+StepReducFactor = 5.0 	# Timestep reduction factor
+NumberReduction = 4	# Maximum number of timespep reduction: max reduction = pow(StepReducFactor,this)
+fullDg = bool(1)        # O = CG, 1 = DG
+dgnl = bool(1)		# DG for non-local variables inside a domain (only if fullDg)
+eqRatio = 1.0e6		# Ratio between "elastic" and non-local equations 
+space1 = 0 		# Function space (Lagrange=0)
+beta1  = 30.0		# Penality parameter for DG
+
+# Domain creation
+## ===================================================================================
+numPhysVolume1 = 29 		# Number of a physical volume of the model in .geo
+numDomain1 = 1000 		# Number of the domain
+field1 = dG3DDomain(numDomain1,numPhysVolume1,space1,BulkLawNum1,fullDg,3)
+field1.stabilityParameters(beta1) 			# Adding stability parameters (for DG)
+field1.gaussIntegration(0,-1,-1)
+field1.matrixByPerturbation(1,1,1,1e-6) 		# Tangent computation analytically or by pertubation
+
+
+# Solver creation
+# ===================================================================================
+mysolver = nonLinearMechSolver(numDomain1) 		# Solver associated with numSolver1
+geofile="cube.geo"
+meshfile= "cube.msh" 			# name of mesh file
+mysolver.createModel(geofile,meshfile,3,1)
+#mysolver.loadModel(meshfile)		# add mesh
+mysolver.addDomain(field1) 		# add domain
+mysolver.addMaterialLaw(BulkLaw1) 	# add material law
+mysolver.Solver(2) 			# Library solving: Gmm=0 (default) Taucs=1 PETsc=2
+# solver parametrisation
+mysolver.Scheme(soltype) 			# solver scheme	 				
+mysolver.snlData(nstep,ftime,tol,tolAbs) 	# solver parameters
+mysolver.snlManageTimeStep(MaxIter,StepIncrease,StepReducFactor,NumberReduction) #timestep
+# solver archiving
+mysolver.stepBetweenArchiving(nstepArch) 	# archiving frequency
+mysolver.energyComputation(nstepArchEnergy)	# archiving frequency for energy
+mysolver.lineSearch(bool(0))		# lineSearch activation
+mysolver.options("-ksp_type preonly -pc_type lu -pc_factor_mat_solver_package mumps")
+
+# Boundary conditions
+# ===============================
+tot_disp = 2.*1.e-3*0.5 # Max disp == elongation 50 pourcent
+mysolver.displacementBC("Face",30,0,0.)		# face x = 0
+mysolver.displacementBC("Face",31,0,tot_disp) # face x = L
+mysolver.displacementBC("Face",34,1,0.)		# face y = 0
+mysolver.displacementBC("Face",32,2,0.)		# face z = 0
+
+#mysolver.initialBC("Volume","Position",29,3,fVinitial)
+
+# Variable storage
+# ===============================
+mysolver.internalPointBuildView("svm",IPField.SVM, 1, 1)
+mysolver.internalPointBuildView("sig_xx",IPField.SIG_XX, 1, 1)
+mysolver.internalPointBuildView("sig_yy",IPField.SIG_YY, 1, 1)
+mysolver.internalPointBuildView("sig_zz",IPField.SIG_ZZ, 1, 1)
+mysolver.internalPointBuildView("sig_xy",IPField.SIG_XY, 1, 1)
+mysolver.internalPointBuildView("sig_yz",IPField.SIG_YZ, 1, 1)
+mysolver.internalPointBuildView("sig_xz",IPField.SIG_XZ, 1, 1)
+mysolver.internalPointBuildView("damage",IPField.DAMAGE,1,1)
+mysolver.internalPointBuildView("porosity",IPField.LOCAL_POROSITY,1,1)
+mysolver.internalPointBuildView("epl",IPField.PLASTICSTRAIN, 1, 1)
+
+mysolver.archivingForceOnPhysicalGroup("Face", 31, 0, nstepArchForce)
+mysolver.archivingNodeDisplacement(43,0, nstepArchForce)
+mysolver.archivingIPOnPhysicalGroup("Volume",29, IPField.LOCAL_POROSITY,IPField.MEAN_VALUE);
+mysolver.archivingIPOnPhysicalGroup("Volume",29, IPField.CORRECTED_POROSITY,IPField.MEAN_VALUE);
+mysolver.archivingIPOnPhysicalGroup("Volume",29, IPField.DAMAGE,IPField.MEAN_VALUE);
+	
+
+# Solving
+# ===========
+mysolver.solve()
+
+
+
+
+
+
+# Test
+# ===========
+check = TestCheck()
+check.equal(2.270605e+05,mysolver.getArchivedForceOnPhysicalGroup("Face", 31, 0),1.e-6)
+
+import csv
+data = csv.reader(open('IPVolume29val_LOCAL_POROSITYMean.csv'), delimiter=';')
+porosity = list(data)
+check.equal(7.e-3,float(porosity[-1][1]),1e-6)
+
+
+
+
+
+
diff --git a/dG3D/benchmarks/Gurson_Cube_local_f/material.i01 b/dG3D/benchmarks/Gurson_Cube_local_f/material.i01
new file mode 100644
index 0000000000000000000000000000000000000000..5df9e544abed1f85e2ff0e68d2e166901f85aa3c
--- /dev/null
+++ b/dG3D/benchmarks/Gurson_Cube_local_f/material.i01
@@ -0,0 +1,15 @@
+100      number of internal variables
+11       number of properties to be read
+7850.    density
+210.e9   Young
+0.3      nu
+1.5      q1
+1.       q2
+1.5      q3
+0.007    fV0
+1        indicator power law hardening
+400.e6   sy0 initial yield stress
+100.e6	 h_hard  
+1.       h_exp
+
+
diff --git a/dG3D/benchmarks/Gurson_TwoHole/twoHole.py b/dG3D/benchmarks/Gurson_TwoHole/twoHole.py
index fca530c2daf247de653ac7050781eff914a4cbe8..5194db701fbc2513e03530beb06cd30df8e5eefe 100644
--- a/dG3D/benchmarks/Gurson_TwoHole/twoHole.py
+++ b/dG3D/benchmarks/Gurson_TwoHole/twoHole.py
@@ -134,7 +134,7 @@ mysolver.archivingNodeDisplacement(19,1, nstepArchForce)
 mysolver.solve()
 
 check = TestCheck()
-check.equal(-7.063472e+03,mysolver.getArchivedForceOnPhysicalGroup("Face", 84, 1),5.e-4)
+check.equal(-7.212944e+03,mysolver.getArchivedForceOnPhysicalGroup("Face", 84, 1),5.e-4)
 
 
 
diff --git a/dG3D/benchmarks/J2plasticExtractCohesiveLaw/RVE1.py b/dG3D/benchmarks/J2plasticExtractCohesiveLaw/RVE1.py
index 858e0cd859f36bbbac1ca8fc4106ade999edd47a..6ac6248be3a331f9bed082b695d070ac0f056eb4 100644
--- a/dG3D/benchmarks/J2plasticExtractCohesiveLaw/RVE1.py
+++ b/dG3D/benchmarks/J2plasticExtractCohesiveLaw/RVE1.py
@@ -94,7 +94,7 @@ mysolver.internalPointBuildView("sig_yz",IPField.SIG_YZ, 1, 1)
 mysolver.internalPointBuildView("sig_xz",IPField.SIG_XZ, 1, 1)
 mysolver.internalPointBuildView("epl",IPField.PLASTICSTRAIN, 1, 1)
 mysolver.internalPointBuildView("Damage",IPField.DAMAGE, 1, 1)
-mysolver.internalPointBuildView("active Damage zone",IPField.ACTIVE_DAMAGING_ZONE, 1, 1)
+mysolver.internalPointBuildView("active Damage zone",IPField.ACTIVE_DISSIPATION, 1, 1)
 
 
 
diff --git a/dG3D/benchmarks/LocalGurson_PathFollowing/Plane_notch.py b/dG3D/benchmarks/LocalGurson_PathFollowing/Plane_notch.py
index 81e9cb4bec9087c08407bb1d562e3f25cba1d9d2..bf111bfad673a46ced838ff445667215b858ede0 100644
--- a/dG3D/benchmarks/LocalGurson_PathFollowing/Plane_notch.py
+++ b/dG3D/benchmarks/LocalGurson_PathFollowing/Plane_notch.py
@@ -159,4 +159,4 @@ mysolver.archivingIPOnPhysicalGroup("Face", 700, IPField.LOCAL_POROSITY,IPField.
 mysolver.solve()
 
 check = TestCheck()
-check.equal(-2.502651e+02,mysolver.getArchivedForceOnPhysicalGroup("Edge", 1400, 0),1.e-6)
+check.equal(-2.502652e+02,mysolver.getArchivedForceOnPhysicalGroup("Edge", 1400, 0),1.e-6)
diff --git a/dG3D/benchmarks/MFH_Stoch_Ply/Stoch_Sample.py b/dG3D/benchmarks/MFH_Stoch_Ply/Stoch_Sample.py
index 9dd6647a411aae7cf9dc69175762087f18bb1f9a..0254598133596cb149faef029336d50814babc91 100644
--- a/dG3D/benchmarks/MFH_Stoch_Ply/Stoch_Sample.py
+++ b/dG3D/benchmarks/MFH_Stoch_Ply/Stoch_Sample.py
@@ -91,7 +91,7 @@ mysolver.solve()
 
 
 check = TestCheck()
-check.equal(1.432532e-01,mysolver.getArchivedForceOnPhysicalGroup("Face", 101, 0),1.e-5)
+check.equal(1.433443e-01,mysolver.getArchivedForceOnPhysicalGroup("Face", 101, 0),1.e-5)
 
 try:
   import linecache
@@ -103,8 +103,8 @@ except:
   import os
   os._exit(1)
 else:
-  check.equal(8.471975e+08,float(linesmax.split(';')[1]))
-  check.equal(4.028659e+08,float(linesmin.split(';')[1]))
+  check.equal(8.544110e+08,float(linesmax.split(';')[1]))
+  check.equal(3.954981e+08,float(linesmin.split(';')[1]))
   check.equal(5.730540e+08,float(linesmean.split(';')[1]))
 
 
diff --git a/dG3D/benchmarks/Thomason_planeStrain/model.py b/dG3D/benchmarks/Thomason_planeStrain/model.py
index d1534331fcb429e46e7ee91b54952fc653abebdf..6b9e462b17aa357da3e5785833251f0b8e7bf3d8 100644
--- a/dG3D/benchmarks/Thomason_planeStrain/model.py
+++ b/dG3D/benchmarks/Thomason_planeStrain/model.py
@@ -169,7 +169,7 @@ mysolver.solve()
 
 
 check = TestCheck()
-check.equal(-7.995361e+02,mysolver.getArchivedForceOnPhysicalGroup("Edge", 4, 0),1.e-4)
+check.equal(-6.651003e+02,mysolver.getArchivedForceOnPhysicalGroup("Edge", 4, 0),1.e-4)
 
 
 
diff --git a/dG3D/benchmarks/Thomason_planeStrain_withLodeEnhanced/model.py b/dG3D/benchmarks/Thomason_planeStrain_withLodeEnhanced/model.py
index 2ff7930f107e0623c1e97819860736fb315f3812..1dc5ad4f6222f3f828a3bc8990da198246f248a6 100644
--- a/dG3D/benchmarks/Thomason_planeStrain_withLodeEnhanced/model.py
+++ b/dG3D/benchmarks/Thomason_planeStrain_withLodeEnhanced/model.py
@@ -164,7 +164,7 @@ mysolver.solve()
 
 
 check = TestCheck()
-check.equal(-5.774703e+02,mysolver.getArchivedForceOnPhysicalGroup("Edge", 4, 0),1.e-4)
+check.equal(-5.825123e+02,mysolver.getArchivedForceOnPhysicalGroup("Edge", 4, 0),1.e-4)
 
 
 
diff --git a/dG3D/benchmarks/TransverseAnisotropicCZM/cubeTransverseAnisotropy.py b/dG3D/benchmarks/TransverseAnisotropicCZM/cubeTransverseAnisotropy.py
index 7ece0af27f0306144acdd2a895d5452ef55d1143..78d672413c36a888a74c8cc6a3c09dc8b8202421 100644
--- a/dG3D/benchmarks/TransverseAnisotropicCZM/cubeTransverseAnisotropy.py
+++ b/dG3D/benchmarks/TransverseAnisotropicCZM/cubeTransverseAnisotropy.py
@@ -108,6 +108,6 @@ mysolver.archivingForceOnPhysicalGroup("Face", 5678, 2)
 mysolver.solve()
 
 check = TestCheck()
-check.equal(4.132246e-01,mysolver.getArchivedForceOnPhysicalGroup("Face", 5678, 2),1.e-3)
+check.equal(7.762083e-01,mysolver.getArchivedForceOnPhysicalGroup("Face", 5678, 2),1.e-3)
 
 
diff --git a/dG3D/benchmarks/TransverseAnisotropicCZM_withSelectiveUpdate/cubeTransverseAnisotropy.py b/dG3D/benchmarks/TransverseAnisotropicCZM_withSelectiveUpdate/cubeTransverseAnisotropy.py
index 04204b16143880737c690283032b54ed09ae2513..9f4fa9b95ff00e5069aa8566a891762dfbe862b8 100644
--- a/dG3D/benchmarks/TransverseAnisotropicCZM_withSelectiveUpdate/cubeTransverseAnisotropy.py
+++ b/dG3D/benchmarks/TransverseAnisotropicCZM_withSelectiveUpdate/cubeTransverseAnisotropy.py
@@ -111,6 +111,6 @@ mysolver.archivingForceOnPhysicalGroup("Face", 5678, 2)
 mysolver.solve()
 
 check = TestCheck()
-check.equal(4.021831e-01,mysolver.getArchivedForceOnPhysicalGroup("Face", 5678, 2),1.e-3)
+check.equal(5.598218e-01,mysolver.getArchivedForceOnPhysicalGroup("Face", 5678, 2),1.e-3)
 
 
diff --git a/dG3D/benchmarks/compRVE/RVE.py b/dG3D/benchmarks/compRVE/RVE.py
index f531ed9cc6763263abfc82db98dc9349aafd8958..27cc81abee6575be85e0102f4553eb7ee1e67659 100644
--- a/dG3D/benchmarks/compRVE/RVE.py
+++ b/dG3D/benchmarks/compRVE/RVE.py
@@ -223,5 +223,5 @@ check = TestCheck()
 import linecache
 homoStress = linecache.getline('Average_P_ZZ.csv',3)
 val = float(homoStress.split(';')[1])
-check.equal(8.053686e+00,val,1.e-4)
+check.equal(8.067973e+00,val,1.e-4)
 
diff --git a/dG3D/benchmarks/compositeHyperDamage/Window.py b/dG3D/benchmarks/compositeHyperDamage/Window.py
index 2a071a8b4f271a19de31a8f31aef3c27a0d4e55b..d72e94a1160d8214ccb8f3fc39514c9b19863df8 100644
--- a/dG3D/benchmarks/compositeHyperDamage/Window.py
+++ b/dG3D/benchmarks/compositeHyperDamage/Window.py
@@ -164,6 +164,6 @@ mysolver.archivingNodeDisplacement(3,0,1)
 mysolver.solve()
 
 check = TestCheck()
-check.equal(1.125281e-04,mysolver.getArchivedNodalValue(3, 0,0),1.e-2)
+check.equal(1.501316e-04,mysolver.getArchivedNodalValue(3, 0,0),1.e-2)
 
 
diff --git a/dG3D/benchmarks/compositeNonLocalRVEDG/RVE.py b/dG3D/benchmarks/compositeNonLocalRVEDG/RVE.py
index 84b1468ac009dda397942265f4adbaaa431a1592..796acfebf15fd98291ccc16e8706de5dce940453 100644
--- a/dG3D/benchmarks/compositeNonLocalRVEDG/RVE.py
+++ b/dG3D/benchmarks/compositeNonLocalRVEDG/RVE.py
@@ -166,5 +166,5 @@ mysolver.archivingForceOnPhysicalGroup("Face", 3, 0)
 mysolver.solve()
 
 check = TestCheck()
-check.equal(7.123803e-01,mysolver.getArchivedForceOnPhysicalGroup("Face", 1, 0),1.e-6)
+check.equal(7.123802e-01,mysolver.getArchivedForceOnPhysicalGroup("Face", 1, 0),1.e-6)
 
diff --git a/dG3D/benchmarks/computeFromMaterialLaw/run.py b/dG3D/benchmarks/computeFromMaterialLaw/run.py
new file mode 100644
index 0000000000000000000000000000000000000000..63c2531dbeeaa39b140ce1e70f4ae9f8c3de931d
--- /dev/null
+++ b/dG3D/benchmarks/computeFromMaterialLaw/run.py
@@ -0,0 +1,141 @@
+#coding-Utf-8-*-
+
+from gmshpy import *
+from dG3Dpy import*
+
+from math import*
+
+def ToList(A):
+  n = A.size()
+  a = np.zeros(n)
+  for i in range(n):
+    a[i] = A.get(i)
+  return a.tolist()
+
+def writeToFile(f, l):
+  lsize = l.size()
+  for idex in range(lsize-1):
+    f.write("%s;"%str(l.get(idex)))
+  f.write("%s\n"%str(l.get(lsize-1)))
+  
+def writeHeaderToFile(f, l, okTimeStep=False, okTime=False):
+  lsize = l.size()
+  lastEle = 0
+  for idex in range(lsize-1):
+    if (l.getState(idex)):
+      f.write("%s;"%IPField.ToString(l.get(idex)))
+    else:
+      f.write("%s_prev;"%IPField.ToString(l.get(idex)))
+    lastEle = lastEle+1
+  if l.getState(lastEle):
+    f.write("%s"%IPField.ToString(l.get(lastEle)))
+  else:
+    f.write("%s_prev"%IPField.ToString(l.get(lastEle)))
+  lastEle = lastEle+1
+  if (okTimeStep):
+    f.write(";TimeStep");
+  if (okTime):
+    f.write(";Time");
+  f.write("\n");
+    
+   
+
+lawnum1 = 1 # unique number of law
+rho   = 7850
+young = 28.9e9
+nu    = 0.3 
+sy0   = 150.e6
+h     = young*1e-1
+
+harden = LinearExponentialJ2IsotropicHardening(1, sy0, h, 0, 10.)
+law1   = J2LinearDG3DMaterialLaw(lawnum1,rho,young,nu,harden)
+
+
+comMat = computeMaterialLaw(law1)
+
+import numpy as np
+N = 100
+x = np.sin(np.linspace(0.001,10,N))
+y = np.zeros(N)
+pl = np.zeros(N)
+
+inputComp = VecInt()
+inputComp.set(0,IPField.GL_XX,1)
+inputComp.set(1,IPField.GL_XY,1)
+inputComp.set(2,IPField.GL_XZ,1)
+inputComp.set(3,IPField.GL_YY,1)
+inputComp.set(4,IPField.GL_YZ,1)
+inputComp.set(5,IPField.GL_ZZ,1)
+inputComp.set(6,IPField.GL_XX,0)
+inputComp.set(7,IPField.GL_XY,0)
+inputComp.set(8,IPField.GL_XZ,0)
+inputComp.set(9,IPField.GL_YY,0)
+inputComp.set(10,IPField.GL_YZ,0)
+inputComp.set(11,IPField.GL_ZZ,0)
+inputComp.set(12,IPField.FP_XX,0)
+inputComp.set(13,IPField.FP_YX,0)
+inputComp.set(14,IPField.FP_ZX,0)
+inputComp.set(15,IPField.FP_XY,0)
+inputComp.set(16,IPField.FP_YY,0)
+inputComp.set(17,IPField.FP_ZY,0)
+inputComp.set(18,IPField.FP_XZ,0)
+inputComp.set(19,IPField.FP_YZ,0)
+inputComp.set(20,IPField.FP_ZZ,0)
+inputComp.set(21,IPField.PLASTICSTRAIN,0)
+inputComp.printInfo()
+
+outputComp = VecInt()
+outputComp.set(0,IPField.S_XX,1)
+outputComp.set(1,IPField.S_XY,1)
+outputComp.set(2,IPField.S_XZ,1)
+outputComp.set(3,IPField.S_YY,1)
+outputComp.set(4,IPField.S_YZ,1)
+outputComp.set(5,IPField.S_ZZ,1)
+outputComp.set(6,IPField.FP_XX,1)
+outputComp.set(7,IPField.FP_YX,1)
+outputComp.set(8,IPField.FP_ZX,1)
+outputComp.set(9,IPField.FP_XY,1)
+outputComp.set(10,IPField.FP_YY,1)
+outputComp.set(11,IPField.FP_ZY,1)
+outputComp.set(12,IPField.FP_XZ,1)
+outputComp.set(13,IPField.FP_YZ,1)
+outputComp.set(14,IPField.FP_ZZ,1)
+outputComp.set(15,IPField.PLASTICSTRAIN,1)
+outputComp.printInfo()
+
+
+withTime=True
+withTimeStep=True
+
+inputData = VecDouble()
+outputData = VecDouble()
+
+fi = open("inputData.csv","w")
+fi.write("%s\n"%inputComp.getHeader(withTimeStep,withTime))
+fo = open("outputData.csv","w")
+fo.write("%s\n"%outputComp.getHeader(withTimeStep,withTime))
+
+for i in range(0,N):
+  comMat.setTimeStep(i+1.,1.)
+  comMat.setDeformationGradient(0,0,1+x[i])
+  comMat.computeStressState()
+  comMat.getValue(inputComp,inputData,withTimeStep,withTime)
+  comMat.getValue(outputComp,outputData,withTimeStep,withTime)
+  
+  writeToFile(fo,outputData)
+  writeToFile(fi,inputData)
+  
+  #
+  y[i] = outputData.get(0)
+  pl[i] = outputData.get(6)
+
+fo.close()
+fi.close()
+
+import matplotlib.pyplot as plt
+plt.plot(x,pl,'r+-')
+plt.xlabel('pl (-)')
+plt.ylabel('P (Pa)')
+plt.savefig('test_result.pdf')
+plt.show()
+
diff --git a/dG3D/benchmarks/defoDefoContactSlaveEdge2D2ndOrderTri/squares.py b/dG3D/benchmarks/defoDefoContactSlaveEdge2D2ndOrderTri/squares.py
index f4e30f55327a4d2b428d7e77287f5505942041da..d7dd34a68a6096a2f72e43f523802ecb4760da52 100644
--- a/dG3D/benchmarks/defoDefoContactSlaveEdge2D2ndOrderTri/squares.py
+++ b/dG3D/benchmarks/defoDefoContactSlaveEdge2D2ndOrderTri/squares.py
@@ -97,6 +97,6 @@ mysolver.archivingForceOnPhysicalGroup("Edge", 156, 2)
 mysolver.solve()
 
 check = TestCheck()
-check.equal(3.941721e+06,mysolver.getArchivedForceOnPhysicalGroup("Edge", 12, 2),1.e-6)
+check.equal(3.943339e+06,mysolver.getArchivedForceOnPhysicalGroup("Edge", 12, 2),1.e-6)
 
 
diff --git a/dG3D/benchmarks/elasticFE2/macro.py b/dG3D/benchmarks/elasticFE2/macro.py
index 94e0f7f34a889a6a9cfb5fbc7b59e74263df1b19..96e493d3b1c35c9b16371f9da30c7980f84ec5e2 100644
--- a/dG3D/benchmarks/elasticFE2/macro.py
+++ b/dG3D/benchmarks/elasticFE2/macro.py
@@ -125,5 +125,5 @@ mysolver.archivingForceOnPhysicalGroup("Face",45,1)
 mysolver.solve()
 
 check = TestCheck()
-check.equal(-2.504375e+04,mysolver.getArchivedForceOnPhysicalGroup("Face", 45, 1),1.e-4)
+check.equal(-2.503729e+04,mysolver.getArchivedForceOnPhysicalGroup("Face", 45, 1),1.e-4)
 
diff --git a/dG3D/benchmarks/microNonLocalDamage/idealHole.py b/dG3D/benchmarks/microNonLocalDamage/idealHole.py
index d35b912170340821fa0cf2589a3a2e13b63b8236..7e9b1c954d0527c73b56c3ee912df19da5daa1ad 100644
--- a/dG3D/benchmarks/microNonLocalDamage/idealHole.py
+++ b/dG3D/benchmarks/microNonLocalDamage/idealHole.py
@@ -102,7 +102,7 @@ mysolver.internalPointBuildView("sig_yz",IPField.SIG_YZ, 1, 1)
 mysolver.internalPointBuildView("sig_xz",IPField.SIG_XZ, 1, 1)
 mysolver.internalPointBuildView("epl",IPField.PLASTICSTRAIN, 1, 1)
 mysolver.internalPointBuildView("Damage",IPField.DAMAGE, 1, 1)
-mysolver.internalPointBuildView("active Damage zone",IPField.ACTIVE_DAMAGING_ZONE, 1, 1)
+mysolver.internalPointBuildView("active Damage zone",IPField.ACTIVE_DISSIPATION, 1, 1)
 
 
 
diff --git a/dG3D/benchmarks/mixedmodeDelamination/delam.py b/dG3D/benchmarks/mixedmodeDelamination/delam.py
index 1e10e74f26f564c323bfa037939107760c155b95..9392a95dbc1336bf1c0b54522b17dfd8e3b6f7bd 100644
--- a/dG3D/benchmarks/mixedmodeDelamination/delam.py
+++ b/dG3D/benchmarks/mixedmodeDelamination/delam.py
@@ -108,6 +108,6 @@ mysolver.archivingNodeDisplacement(58,2,1)
 mysolver.solve()
 
 check = TestCheck()
-check.equal(1.193894e+00,mysolver.getArchivedForceOnPhysicalGroup("Face", 56, 2),3.e-3)
+check.equal(1.212955e+00,mysolver.getArchivedForceOnPhysicalGroup("Face", 56, 2),3.e-3)
 
 
diff --git a/dG3D/benchmarks/multiscaleCohesiveTest2D_mixedMode/model.py b/dG3D/benchmarks/multiscaleCohesiveTest2D_mixedMode/model.py
index efac6d69c04f0a11578de25968ca520d42263117..efc8b1a84b26061eff5ca9b145a494d518ece540 100644
--- a/dG3D/benchmarks/multiscaleCohesiveTest2D_mixedMode/model.py
+++ b/dG3D/benchmarks/multiscaleCohesiveTest2D_mixedMode/model.py
@@ -197,5 +197,5 @@ mysolver.archivingForceOnPhysicalGroup("Edge",4,0)
 mysolver.solve()
 
 check = TestCheck()
-check.equal(-2.816906e+01,mysolver.getArchivedForceOnPhysicalGroup("Edge", 4, 0),5.e-3)
+check.equal(-2.846680e+01,mysolver.getArchivedForceOnPhysicalGroup("Edge", 4, 0),5.e-3)
 
diff --git a/dG3D/benchmarks/nonLocalDamageToCrack/twoHole.py b/dG3D/benchmarks/nonLocalDamageToCrack/twoHole.py
index 44520cdff52f32f467ce3534c5bbbbf724f74900..649ba0ed4af1948f61d854cd4c2dd046d603f084 100644
--- a/dG3D/benchmarks/nonLocalDamageToCrack/twoHole.py
+++ b/dG3D/benchmarks/nonLocalDamageToCrack/twoHole.py
@@ -135,5 +135,5 @@ except:
   import os
   os._exit(1)
 else:
-  check.equal(8.677631e-01,float(linesDam.split(';')[1]))
+  check.equal(8.648438e-01,float(linesDam.split(';')[1]))
 
diff --git a/dG3D/benchmarks/nonLocalToTransverseAnisotropicCZM/cubeTransverseAnisotropy.py b/dG3D/benchmarks/nonLocalToTransverseAnisotropicCZM/cubeTransverseAnisotropy.py
index 310e2f6766c39e18d49500565ee78a677d6bbc9e..31c8b426c4bd5274a8ef71dc16632b80ce4007ba 100644
--- a/dG3D/benchmarks/nonLocalToTransverseAnisotropicCZM/cubeTransverseAnisotropy.py
+++ b/dG3D/benchmarks/nonLocalToTransverseAnisotropicCZM/cubeTransverseAnisotropy.py
@@ -59,7 +59,7 @@ lawfrac1 = FractureByCohesive3DLaw(lawfrac,lawnum,lawcoh)
 
 # creation of ElasticField
 nfield = 10 # number of the field (physical number of surface)
-myfield1 = dG3DDomain(1000,nfield,space1,lawfrac,fullDg,3,2)
+myfield1 = dG3DDomain(1000,nfield,space1,lawfrac,fullDg,3,1)
 myfield1.stabilityParameters(30.)
 #myfield1.matrixByPerturbation(1,1,1,1e-8)
 myfield1.forceCohesiveInsertionAllIPs(True,0.)
diff --git a/dG3D/benchmarks/nonLocalToTransverseAnisotropicCZML/cubeTransverseAnisotropy.py b/dG3D/benchmarks/nonLocalToTransverseAnisotropicCZML/cubeTransverseAnisotropy.py
index 73d0fb37b6963a8f30cc0edc9e7b365089cd83f9..27fdb0f9509497128a9388f55e8a8b3bde5ed69d 100644
--- a/dG3D/benchmarks/nonLocalToTransverseAnisotropicCZML/cubeTransverseAnisotropy.py
+++ b/dG3D/benchmarks/nonLocalToTransverseAnisotropicCZML/cubeTransverseAnisotropy.py
@@ -59,7 +59,7 @@ lawfrac1 = FractureByCohesive3DLaw(lawfrac,lawnum,lawcoh)
 
 # creation of ElasticField
 nfield = 10 # number of the field (physical number of surface)
-myfield1 = dG3DDomain(1000,nfield,space1,lawfrac,fullDg,3,2)
+myfield1 = dG3DDomain(1000,nfield,space1,lawfrac,fullDg,3,1)
 myfield1.stabilityParameters(30.)
 #myfield1.matrixByPerturbation(1,1,1,1e-8)
 myfield1.forceCohesiveInsertionAllIPs(True,0.)
@@ -122,7 +122,7 @@ mysolver.archivingIPOnPhysicalGroup("Volume",nfield, IPField.MTX_DAMAGE,IPField.
 mysolver.solve()
 
 check = TestCheck()
-check.equal(1.507552e+02,mysolver.getArchivedForceOnPhysicalGroup("Face", 5678, 2),1.e-3)
+check.equal(1.844260e+02,mysolver.getArchivedForceOnPhysicalGroup("Face", 5678, 2),1.e-3)
 
 try:
   import linecache
@@ -133,6 +133,6 @@ except:
   import os
   os._exit(1)
 else:
-  check.equal(3.408703e-02,float(linesIncDam.split(';')[1]))
-  check.equal(1.522986e-03,float(linesMtxDam.split(';')[1]))
+  check.equal(3.751274e-02,float(linesIncDam.split(';')[1]))
+  check.equal(1.509431e-03,float(linesMtxDam.split(';')[1]))
 
diff --git a/dG3D/benchmarks/nonLocalToTransverseAnisotropicCZML/properties_an0.i01 b/dG3D/benchmarks/nonLocalToTransverseAnisotropicCZML/properties_an0.i01
index 4963e0039387f63d8d3cca121dde632cfdd50974..5c93bdb2ed97d3f6958eac5224bf7872d3e79e90 100644
--- a/dG3D/benchmarks/nonLocalToTransverseAnisotropicCZML/properties_an0.i01
+++ b/dG3D/benchmarks/nonLocalToTransverseAnisotropicCZML/properties_an0.i01
@@ -42,7 +42,7 @@
 0.6        
 5.0	
 10000000 
-0.0 
+0. 
 2                              anisotropic charac_length
 0.000000
 0.000000
diff --git a/dG3D/benchmarks/nonLocalToTransverseAnisotropicCZML/properties_an90.i01 b/dG3D/benchmarks/nonLocalToTransverseAnisotropicCZML/properties_an90.i01
index c350ce5b718fe20b45aa71b7bdbe92991454ae27..0e81d7169b79ba86ef60c897411a0f5de149bac1 100644
--- a/dG3D/benchmarks/nonLocalToTransverseAnisotropicCZML/properties_an90.i01
+++ b/dG3D/benchmarks/nonLocalToTransverseAnisotropicCZML/properties_an90.i01
@@ -47,7 +47,7 @@
 0.000000
 0.000000
 0.000001
-0.0
+0.
 90.0
 0.0   
 0.6                           Volume fraction of inclusion  << Set >1.0 for random vaiable >>
diff --git a/dG3D/benchmarks/nonlocalDamageExpliciteErosion/notchedBar.py b/dG3D/benchmarks/nonlocalDamageExpliciteErosion/notchedBar.py
index e7676110d2d27d3bd8b9765b21c2358b64ac05a0..60a40a36bcfb5852041518cd6ecf55f4a89a6ccb 100755
--- a/dG3D/benchmarks/nonlocalDamageExpliciteErosion/notchedBar.py
+++ b/dG3D/benchmarks/nonlocalDamageExpliciteErosion/notchedBar.py
@@ -123,6 +123,6 @@ mysolver.archivingNodeDisplacement(73,1,nstepArchForce)
 mysolver.solve()
 
 check = TestCheck()
-check.equal(2.733748e-02,mysolver.getEnergy(energeticField.damage),1.e-4)
+check.equal(2.731806e-02,mysolver.getEnergy(energeticField.damage),1.e-4)
 
 
diff --git a/dG3D/benchmarks/nonlocalDamageExpliciteErosionMPI/notchedBar.py b/dG3D/benchmarks/nonlocalDamageExpliciteErosionMPI/notchedBar.py
index 1fea6e6394511b1ba42800f19a4bdbf5d24b3b4c..cd40cc1afec9aa1db839f99af9b69a48da0bb7b7 100755
--- a/dG3D/benchmarks/nonlocalDamageExpliciteErosionMPI/notchedBar.py
+++ b/dG3D/benchmarks/nonlocalDamageExpliciteErosionMPI/notchedBar.py
@@ -123,6 +123,6 @@ mysolver.archivingNodeDisplacement(73,1,nstepArchForce)
 mysolver.solve()
 
 check = TestCheck()
-check.equal(2.748274e-02,mysolver.getEnergy(energeticField.damage),1.e-4)
+check.equal(2.757133e-02,mysolver.getEnergy(energeticField.damage),1.e-4)
 
 
diff --git a/dG3D/benchmarks/pathFollowing_TrueSnapback/twoHole.py b/dG3D/benchmarks/pathFollowing_TrueSnapback/twoHole.py
index bdf3017a4a13d24e6956b39609d1f2127b1d7b8d..8ac15940cee7d7d5f7d58fefb45e1025cbcd95e1 100644
--- a/dG3D/benchmarks/pathFollowing_TrueSnapback/twoHole.py
+++ b/dG3D/benchmarks/pathFollowing_TrueSnapback/twoHole.py
@@ -92,4 +92,4 @@ mysolver.archivingForceOnPhysicalGroup('Face',12,1)
 mysolver.solve()
 
 check = TestCheck()
-check.equal(-1.543020e+03,mysolver.getArchivedForceOnPhysicalGroup("Face", 12, 1),1.e-4)
+check.equal(-1.163966e+03,mysolver.getArchivedForceOnPhysicalGroup("Face", 12, 1),1.e-4)
diff --git a/dG3D/benchmarks/pathFollowing_cohesive/model.py b/dG3D/benchmarks/pathFollowing_cohesive/model.py
index 7c4b1f9c940ac425c2b19412f747595daa721416..25e95c29bde1bb9300fe70099e18bec3b50f3c26 100644
--- a/dG3D/benchmarks/pathFollowing_cohesive/model.py
+++ b/dG3D/benchmarks/pathFollowing_cohesive/model.py
@@ -118,4 +118,4 @@ mysolver.archivingForceOnPhysicalGroup('Face',1,1)
 mysolver.solve()
 
 check = TestCheck()
-check.equal(-9.027947e+02,mysolver.getArchivedForceOnPhysicalGroup("Face", 1, 1),1.e-2)
+check.equal(-8.907737e+02,mysolver.getArchivedForceOnPhysicalGroup("Face", 1, 1),1.e-2)
diff --git a/dG3D/benchmarks/pathFollowing_microNonLocalDamage/idealHole.py b/dG3D/benchmarks/pathFollowing_microNonLocalDamage/idealHole.py
index 93acaedfc0669ccaa41c5d2b76172406d90b1e09..5ec1115edefcb260fb33b4ee828a877d829af297 100644
--- a/dG3D/benchmarks/pathFollowing_microNonLocalDamage/idealHole.py
+++ b/dG3D/benchmarks/pathFollowing_microNonLocalDamage/idealHole.py
@@ -99,7 +99,7 @@ mysolver.internalPointBuildView("sig_yz",IPField.SIG_YZ, 1, 1)
 mysolver.internalPointBuildView("sig_xz",IPField.SIG_XZ, 1, 1)
 mysolver.internalPointBuildView("epl",IPField.PLASTICSTRAIN, 1, 1)
 mysolver.internalPointBuildView("Damage",IPField.DAMAGE, 1, 1)
-mysolver.internalPointBuildView("active Damage zone",IPField.ACTIVE_DAMAGING_ZONE, 1, 1)
+mysolver.internalPointBuildView("active Damage zone",IPField.ACTIVE_DISSIPATION, 1, 1)
 
 # solve
 mysolver.solve()
diff --git a/dG3D/benchmarks/restartNonLocalJ2/twoHole.py b/dG3D/benchmarks/restartNonLocalJ2/twoHole.py
index 8dd33b15143a8d1d7d487d62f368650cd30f7dc5..6db05e01db16e7765550d41a01113bf84fdf5a24 100644
--- a/dG3D/benchmarks/restartNonLocalJ2/twoHole.py
+++ b/dG3D/benchmarks/restartNonLocalJ2/twoHole.py
@@ -89,7 +89,7 @@ mysolver.internalPointBuildView("Damage",IPField.DAMAGE, 1, 1)
 mysolver.archivingForceOnPhysicalGroup("Face", 12, 1)
 mysolver.archivingNodeDisplacement(19,1,1)
 
-ref=-2.781384e+03
+ref=-2.847517e+03
 mysolver.solve()
 check = TestCheck()
 check.equal(ref,mysolver.getArchivedForceOnPhysicalGroup("Face", 12, 1),1.e-4)
diff --git a/dG3D/benchmarks/test1DUniaxialStress/run.py b/dG3D/benchmarks/test1DUniaxialStress/run.py
index de47a746d5b10c66aa4fc54210dfeb190b4300e1..d2809059c75fc009eba7a370d4da84603c6c73f0 100644
--- a/dG3D/benchmarks/test1DUniaxialStress/run.py
+++ b/dG3D/benchmarks/test1DUniaxialStress/run.py
@@ -138,7 +138,7 @@ mysolver.internalPointBuildView("DAMAGE0",IPField.DAMAGE_0, 1, 1)
 mysolver.internalPointBuildView("DAMAGE1",IPField.DAMAGE_1, 1, 1) 
 mysolver.internalPointBuildView("FAILURE_ONSET",IPField.FAILURE_ONSET, 1, 1)
 mysolver.internalPointBuildView("FAILURE_PLASTICSTRAIN",IPField.FAILURE_PLASTICSTRAIN, 1, 1)  
-mysolver.internalPointBuildView("ACTIVE_DAMAGING_ZONE",IPField.ACTIVE_DAMAGING_ZONE, 1, 1)  
+mysolver.internalPointBuildView("ACTIVE_DISSIPATION",IPField.ACTIVE_DISSIPATION, 1, 1)  
 
 mysolver.archivingForceOnPhysicalGroup("Node", 1, 0)
 mysolver.archivingNodeDisplacement(2,0)
diff --git a/dG3D/benchmarks/testPBCWithReducedRVE/CMakeLists.txt b/dG3D/benchmarks/testPBCWithReducedRVE/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..2bd4a1bd46cecdb1e63d03dc944933c1611108f6
--- /dev/null
+++ b/dG3D/benchmarks/testPBCWithReducedRVE/CMakeLists.txt
@@ -0,0 +1,11 @@
+# test file
+
+set(PYFILE run.py)
+
+set(FILES2DELETE 
+  disp*.msh
+  stress*.msh
+  *.csv
+)
+
+add_cm3python_test(${PYFILE} "${FILES2DELETE}")
diff --git a/dG3D/benchmarks/testPBCWithReducedRVE/full/rveFull.geo b/dG3D/benchmarks/testPBCWithReducedRVE/full/rveFull.geo
new file mode 100644
index 0000000000000000000000000000000000000000..fb6e9ff1a315551f362269466a0a420b752960fa
--- /dev/null
+++ b/dG3D/benchmarks/testPBCWithReducedRVE/full/rveFull.geo
@@ -0,0 +1,62 @@
+mm = 1.;
+H = 1.*mm;
+L = 1*mm;
+R = 0.25*L;
+
+lsca1 = 0.2*R;
+lsca2 = 2*lsca1;
+Point(1) = {0,0,0,lsca1};
+Point(2) = {R,0,0,lsca1};
+Point(3) = {L,0,0,lsca2};
+Point(4) = {L,H,0,lsca2};
+Point(5) = {0,H,0,lsca2};
+Point(6) = {0,R,0,lsca1};
+//+
+Line(1) = {2, 3};
+//+
+Line(2) = {3, 4};
+//+
+Line(3) = {4, 5};
+//+
+Line(4) = {5, 6};
+//+
+Circle(5) = {2, 1, 6};
+//+
+Curve Loop(1) = {4, -5, 1, 2, 3};
+//+
+Plane Surface(1) = {1};
+//+
+Symmetry {1, 0, 0, 0} {
+  Duplicata { Surface{1}; }
+}
+
+//+
+Symmetry {0, 1, 0, 0} {
+  Duplicata { Surface{6}; Surface{1}; }
+}
+//+
+Physical Surface(11) = {6, 1, 18, 12};
+//+
+Physical Curve(1) = {17, 23};
+//+
+Physical Curve(2) = {22, 2};
+//+
+Physical Curve(3) = {3, 11};
+//+
+Physical Curve(4) = {10, 16};
+//+
+Physical Point(1) = {36};
+//+
+Physical Point(2) = {57};
+//+
+Physical Point(3) = {4};
+//+
+Physical Point(4) = {21};
+//+
+Physical Point(12) = {3};
+//+
+Physical Point(13) = {17};
+//+
+Physical Point(14) = {5};
+//+
+Physical Point(15) = {22};
diff --git a/dG3D/benchmarks/testPBCWithReducedRVE/full/rveFull.msh b/dG3D/benchmarks/testPBCWithReducedRVE/full/rveFull.msh
new file mode 100644
index 0000000000000000000000000000000000000000..9cfaad9123d8b6e6ee9da222871fe1ff006ad337
--- /dev/null
+++ b/dG3D/benchmarks/testPBCWithReducedRVE/full/rveFull.msh
@@ -0,0 +1,8809 @@
+$MeshFormat
+4.1 0 8
+$EndMeshFormat
+$Entities
+13 16 4 0
+1 0 0 0 0 
+2 0.25 0 0 0 
+3 1 0 0 1 12 
+4 1 1 0 1 3 
+5 0 1 0 1 14 
+6 0 0.25 0 0 
+13 -0.25 0 0 0 
+17 -1 0 0 1 13 
+21 -1 1 0 1 4 
+22 0 -1 0 1 15 
+23 0 -0.25 0 0 
+36 -1 -1 0 1 1 
+57 1 -1 0 1 2 
+1 0.25 0 0 1 0 0 0 2 2 -3 
+2 1 0 0 1 1 0 1 2 2 3 -4 
+3 0 1 0 1 1 0 1 3 2 4 -5 
+4 0 0.25 0 0 1 0 0 2 5 -6 
+5 1.387778780781446e-17 0 0 0.25 0.25 0 0 2 2 -6 
+8 -0.25 0 0 -1.387778780781446e-17 0.25 0 0 2 6 -13 
+9 -1 0 0 -0.25 0 0 0 2 13 -17 
+10 -1 0 0 -1 1 0 1 4 2 17 -21 
+11 -1 1 0 0 1 0 1 3 2 21 -5 
+13 0 -1 0 0 -0.25 0 0 2 22 -23 
+14 -0.25 -0.25 0 -1.387778780781446e-17 0 0 0 2 23 -13 
+16 -1 -1 0 -1 0 0 1 4 2 17 -36 
+17 -1 -1 0 0 -1 0 1 1 2 36 -22 
+20 1.387778780781446e-17 -0.25 0 0.25 0 0 0 2 23 -2 
+22 1 -1 0 1 0 0 1 2 2 3 -57 
+23 0 -1 0 1 -1 0 1 1 2 57 -22 
+1 0 0 0 1 1 0 1 11 5 4 -5 1 2 3 
+6 -1 0 0 0 1 0 1 11 5 4 8 9 10 11 
+12 -1 -1 0 0 0 0 1 11 5 13 14 9 16 17 
+18 0 -1 0 1 0 0 1 11 5 13 20 1 22 23 
+$EndEntities
+$Nodes
+32 3472 1 3472
+0 2 0 1
+1
+0.25 0 0
+0 3 0 1
+2
+1 0 0
+0 4 0 1
+3
+1 1 0
+0 5 0 1
+4
+0 1 0
+0 6 0 1
+5
+0 0.25 0
+0 13 0 1
+6
+-0.25 0 0
+0 17 0 1
+7
+-1 0 0
+0 21 0 1
+8
+-1 1 0
+0 22 0 1
+9
+0 -1 0
+0 23 0 1
+10
+0 -0.25 0
+0 36 0 1
+11
+-1 -1 0
+0 57 0 1
+12
+1 -1 0
+1 1 0 21
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+0.2987808224264727 0 0
+0.3507343947246012 0 0
+0.4060670946678869 0 0
+0.4649986796569756 0 0
+0.5277632548279295 0 0
+0.5946100798395397 0 0
+0.6658047248138964 0 0
+0.7416299326538542 0 0
+0.822386882017727 0 0
+0.9083963713138811 0 0
+0.2743904112132354 0 0
+0.3247576085755227 0 0
+0.3784007446962441 0 0
+0.4355328871624187 0 0
+0.4963809672424437 0 0
+0.5611866673336954 0 0
+0.6302074023266352 0 0
+0.7037173287338561 0 0
+0.7820084073357445 0 0
+0.865391626665845 0 0
+0.9541981856569349 0 0
+1 2 0 19
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+1 0.09999999999981467 0
+1 0.1999999999995579 0
+1 0.2999999999992664 0
+1 0.3999999999989749 0
+1 0.4999999999986943 0
+1 0.5999999999989468 0
+1 0.69999999999921 0
+1 0.7999999999994734 0
+1 0.8999999999997368 0
+1 0.04999999999989927 0
+1 0.1499999999997036 0
+1 0.2499999999994121 0
+1 0.3499999999991207 0
+1 0.4499999999988346 0
+1 0.5499999999988205 0
+1 0.6499999999990784 0
+1 0.7499999999993416 0
+1 0.8499999999996051 0
+1 0.9499999999998684 0
+1 3 0 19
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+0.8999999999995836 1 0
+0.7999999999999998 1 0
+0.7000000000006934 1 0
+0.6000000000013869 1 0
+0.5000000000020587 1 0
+0.4000000000016644 1 0
+0.3000000000012483 1 0
+0.2000000000008322 1 0
+0.100000000000416 1 0
+0.9499999999998356 1 0
+0.8499999999998515 1 0
+0.7500000000003858 1 0
+0.6500000000010593 1 0
+0.5500000000016854 1 0
+0.4500000000018616 1 0
+0.3500000000014563 1 0
+0.2500000000010403 1 0
+0.1500000000006241 1 0
+0.05000000000020799 1 0
+1 4 0 21
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+0 0.9083963713147131 0
+0 0.8223868820191085 0
+0 0.7416299326553013 0
+0 0.6658047248153957 0
+0 0.5946100798410794 0
+0 0.5277632548294985 0
+0 0.4649986796583109 0
+0 0.4060670946688272 0
+0 0.3507343947251901 0
+0 0.2987808224267492 0
+0 0.9541981856574036 0
+0 0.8653916266669007 0
+0 0.7820084073371611 0
+0 0.7037173287354226 0
+0 0.6302074023283262 0
+0 0.5611866673353056 0
+0 0.4963809672438793 0
+0 0.4355328871635993 0
+0 0.3784007446969948 0
+0 0.3247576085759599 0
+0 0.2743904112133811 0
+1 5 0 15
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+0.2451963200760154 0.04877258062867086 0
+0.2309698830206785 0.09567085834993894 0
+0.2078674028424957 0.1388925586038201 0
+0.1767766948941907 0.176776695699083 0
+0.138892557907396 0.2078674033078315 0
+0.09567085780739318 0.2309698832454083 0
+0.04877258035334582 0.245196320130781 0
+0.2487961816630075 0.02450428513357966 0
+0.2392350838756437 0.0725711695028662 0
+0.2204803159247599 0.1178491845101954 0
+0.1932526130307752 0.1585983214185366 0
+0.1585983206677363 0.1932526136469411 0
+0.1178491838708104 0.2204803162665183 0
+0.07257116911055859 0.2392350839946489 0
+0.02450428503188986 0.2487961816730231 0
+1 8 0 15
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+-0.0487725805443906 0.2451963200927798 0
+-0.09567085843426101 0.2309698829857512 0
+-0.1388925588225216 0.2078674026963641 0
+-0.1767766959916714 0.1767766946016024 0
+-0.2078674034882143 0.138892557637434 0
+-0.2309698833083734 0.09567085765538208 0
+-0.2451963201457061 0.04877258027831189 0
+-0.02450428510582254 0.2487961816657413 0
+-0.07257116948900844 0.2392350838798474 0
+-0.1178491846844289 0.2204803158316301 0
+-0.158598321690699 0.1932526128074173 0
+-0.1932526138894738 0.1585983203722094 0
+-0.2204803163703042 0.1178491836766406 0
+-0.2392350840358757 0.07257116897465191 0
+-0.248796181679368 0.02450428496746902 0
+1 9 0 21
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+-0.2987808224264727 0 0
+-0.3507343947246012 0 0
+-0.4060670946678869 0 0
+-0.4649986796569756 0 0
+-0.5277632548279295 0 0
+-0.5946100798395397 0 0
+-0.6658047248138964 0 0
+-0.7416299326538542 0 0
+-0.822386882017727 0 0
+-0.9083963713138811 0 0
+-0.2743904112132354 0 0
+-0.3247576085755227 0 0
+-0.3784007446962441 0 0
+-0.4355328871624187 0 0
+-0.4963809672424437 0 0
+-0.5611866673336954 0 0
+-0.6302074023266352 0 0
+-0.7037173287338561 0 0
+-0.7820084073357445 0 0
+-0.865391626665845 0 0
+-0.9541981856569349 0 0
+1 10 0 19
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+-1 0.09999999999981467 0
+-1 0.1999999999995579 0
+-1 0.2999999999992664 0
+-1 0.3999999999989749 0
+-1 0.4999999999986943 0
+-1 0.5999999999989468 0
+-1 0.69999999999921 0
+-1 0.7999999999994734 0
+-1 0.8999999999997368 0
+-1 0.04999999999989927 0
+-1 0.1499999999997036 0
+-1 0.2499999999994121 0
+-1 0.3499999999991207 0
+-1 0.4499999999988346 0
+-1 0.5499999999988205 0
+-1 0.6499999999990784 0
+-1 0.7499999999993416 0
+-1 0.8499999999996051 0
+-1 0.9499999999998684 0
+1 11 0 19
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+-0.8999999999995836 1 0
+-0.7999999999999998 1 0
+-0.7000000000006934 1 0
+-0.6000000000013869 1 0
+-0.5000000000020587 1 0
+-0.4000000000016644 1 0
+-0.3000000000012483 1 0
+-0.2000000000008322 1 0
+-0.100000000000416 1 0
+-0.9499999999998356 1 0
+-0.8499999999998515 1 0
+-0.7500000000003858 1 0
+-0.6500000000010593 1 0
+-0.5500000000016854 1 0
+-0.4500000000018616 1 0
+-0.3500000000014563 1 0
+-0.2500000000010403 1 0
+-0.1500000000006241 1 0
+-0.05000000000020799 1 0
+1 13 0 21
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+0 -0.9083963713147131 0
+0 -0.8223868820191085 0
+0 -0.7416299326553013 0
+0 -0.6658047248153957 0
+0 -0.5946100798410794 0
+0 -0.5277632548294985 0
+0 -0.4649986796583109 0
+0 -0.4060670946688272 0
+0 -0.3507343947251901 0
+0 -0.2987808224267492 0
+0 -0.9541981856574036 0
+0 -0.8653916266669007 0
+0 -0.7820084073371611 0
+0 -0.7037173287354226 0
+0 -0.6302074023283262 0
+0 -0.5611866673353056 0
+0 -0.4963809672438793 0
+0 -0.4355328871635993 0
+0 -0.3784007446969948 0
+0 -0.3247576085759599 0
+0 -0.2743904112133811 0
+1 14 0 15
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+-0.0487725805443906 -0.2451963200927798 0
+-0.09567085843426101 -0.2309698829857512 0
+-0.1388925588225216 -0.2078674026963641 0
+-0.1767766959916714 -0.1767766946016024 0
+-0.2078674034882143 -0.138892557637434 0
+-0.2309698833083734 -0.09567085765538208 0
+-0.2451963201457061 -0.04877258027831189 0
+-0.02450428510582254 -0.2487961816657413 0
+-0.07257116948900844 -0.2392350838798474 0
+-0.1178491846844289 -0.2204803158316301 0
+-0.158598321690699 -0.1932526128074173 0
+-0.1932526138894738 -0.1585983203722094 0
+-0.2204803163703042 -0.1178491836766406 0
+-0.2392350840358757 -0.07257116897465191 0
+-0.248796181679368 -0.02450428496746902 0
+1 16 0 19
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+-1 -0.09999999999981467 0
+-1 -0.1999999999995579 0
+-1 -0.2999999999992664 0
+-1 -0.3999999999989749 0
+-1 -0.4999999999986943 0
+-1 -0.5999999999989468 0
+-1 -0.69999999999921 0
+-1 -0.7999999999994734 0
+-1 -0.8999999999997368 0
+-1 -0.04999999999989927 0
+-1 -0.1499999999997036 0
+-1 -0.2499999999994121 0
+-1 -0.3499999999991207 0
+-1 -0.4499999999988346 0
+-1 -0.5499999999988205 0
+-1 -0.6499999999990784 0
+-1 -0.7499999999993416 0
+-1 -0.8499999999996051 0
+-1 -0.9499999999998684 0
+1 17 0 19
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+-0.8999999999995836 -1 0
+-0.7999999999999998 -1 0
+-0.7000000000006934 -1 0
+-0.6000000000013869 -1 0
+-0.5000000000020587 -1 0
+-0.4000000000016644 -1 0
+-0.3000000000012483 -1 0
+-0.2000000000008322 -1 0
+-0.100000000000416 -1 0
+-0.9499999999998356 -1 0
+-0.8499999999998515 -1 0
+-0.7500000000003858 -1 0
+-0.6500000000010593 -1 0
+-0.5500000000016854 -1 0
+-0.4500000000018616 -1 0
+-0.3500000000014563 -1 0
+-0.2500000000010403 -1 0
+-0.1500000000006241 -1 0
+-0.05000000000020799 -1 0
+1 20 0 15
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+0.0487725805443906 -0.2451963200927798 0
+0.09567085843426101 -0.2309698829857512 0
+0.1388925588225216 -0.2078674026963641 0
+0.1767766959916714 -0.1767766946016024 0
+0.2078674034882143 -0.138892557637434 0
+0.2309698833083734 -0.09567085765538208 0
+0.2451963201457061 -0.04877258027831189 0
+0.02450428510582254 -0.2487961816657413 0
+0.07257116948900844 -0.2392350838798474 0
+0.1178491846844289 -0.2204803158316301 0
+0.158598321690699 -0.1932526128074173 0
+0.1932526138894738 -0.1585983203722094 0
+0.2204803163703042 -0.1178491836766406 0
+0.2392350840358757 -0.07257116897465191 0
+0.248796181679368 -0.02450428496746902 0
+1 22 0 19
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+1 -0.09999999999981467 0
+1 -0.1999999999995579 0
+1 -0.2999999999992664 0
+1 -0.3999999999989749 0
+1 -0.4999999999986943 0
+1 -0.5999999999989468 0
+1 -0.69999999999921 0
+1 -0.7999999999994734 0
+1 -0.8999999999997368 0
+1 -0.04999999999989927 0
+1 -0.1499999999997036 0
+1 -0.2499999999994121 0
+1 -0.3499999999991207 0
+1 -0.4499999999988346 0
+1 -0.5499999999988205 0
+1 -0.6499999999990784 0
+1 -0.7499999999993416 0
+1 -0.8499999999996051 0
+1 -0.9499999999998684 0
+1 23 0 19
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+0.8999999999995836 -1 0
+0.7999999999999998 -1 0
+0.7000000000006934 -1 0
+0.6000000000013869 -1 0
+0.5000000000020587 -1 0
+0.4000000000016644 -1 0
+0.3000000000012483 -1 0
+0.2000000000008322 -1 0
+0.100000000000416 -1 0
+0.9499999999998356 -1 0
+0.8499999999998515 -1 0
+0.7500000000003858 -1 0
+0.6500000000010593 -1 0
+0.5500000000016854 -1 0
+0.4500000000018616 -1 0
+0.3500000000014563 -1 0
+0.2500000000010403 -1 0
+0.1500000000006241 -1 0
+0.05000000000020799 -1 0
+2 1 0 791
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+657
+658
+659
+660
+661
+662
+663
+664
+665
+666
+667
+668
+669
+670
+671
+672
+673
+674
+675
+676
+677
+678
+679
+680
+681
+682
+683
+684
+685
+686
+687
+688
+689
+690
+691
+692
+693
+694
+695
+696
+697
+698
+699
+700
+701
+702
+703
+704
+705
+706
+707
+708
+709
+710
+711
+712
+713
+714
+715
+716
+717
+718
+719
+720
+721
+722
+723
+724
+725
+726
+727
+728
+729
+730
+731
+732
+733
+734
+735
+736
+737
+738
+739
+740
+741
+742
+743
+744
+745
+746
+747
+748
+749
+750
+751
+752
+753
+754
+755
+756
+757
+758
+759
+760
+761
+762
+763
+764
+765
+766
+767
+768
+769
+770
+771
+772
+773
+774
+775
+776
+777
+778
+779
+780
+781
+782
+783
+784
+785
+786
+787
+788
+789
+790
+791
+792
+793
+794
+795
+796
+797
+798
+799
+800
+801
+802
+803
+804
+805
+806
+807
+808
+809
+810
+811
+812
+813
+814
+815
+816
+817
+818
+819
+820
+821
+822
+823
+824
+825
+826
+827
+828
+829
+830
+831
+832
+833
+834
+835
+836
+837
+838
+839
+840
+841
+842
+843
+844
+845
+846
+847
+848
+849
+850
+851
+852
+853
+854
+855
+856
+857
+858
+859
+860
+861
+862
+863
+864
+865
+866
+867
+868
+869
+870
+871
+872
+873
+874
+875
+876
+877
+878
+879
+880
+881
+882
+883
+884
+885
+886
+887
+888
+889
+890
+891
+892
+893
+894
+895
+896
+897
+898
+899
+900
+901
+902
+903
+904
+905
+906
+907
+908
+909
+910
+911
+912
+913
+914
+915
+916
+917
+918
+919
+920
+921
+922
+923
+924
+925
+926
+927
+928
+929
+930
+931
+932
+933
+934
+935
+936
+937
+938
+939
+940
+941
+942
+943
+944
+945
+946
+947
+948
+949
+950
+951
+952
+953
+954
+955
+956
+957
+958
+959
+960
+961
+962
+963
+964
+965
+966
+967
+968
+969
+970
+971
+972
+973
+974
+975
+976
+977
+978
+979
+980
+981
+982
+983
+984
+985
+986
+987
+988
+989
+990
+991
+992
+993
+994
+995
+996
+997
+998
+999
+1000
+1001
+1002
+1003
+1004
+1005
+1006
+1007
+1008
+1009
+1010
+1011
+1012
+1013
+1014
+1015
+1016
+1017
+1018
+1019
+1020
+1021
+1022
+1023
+1024
+1025
+1026
+1027
+1028
+1029
+1030
+1031
+1032
+1033
+1034
+1035
+1036
+1037
+1038
+1039
+1040
+1041
+1042
+1043
+1044
+1045
+1046
+1047
+1048
+1049
+1050
+1051
+1052
+1053
+1054
+1055
+1056
+1057
+1058
+1059
+1060
+1061
+1062
+1063
+1064
+1065
+1066
+1067
+1068
+1069
+1070
+1071
+1072
+1073
+1074
+1075
+1076
+1077
+1078
+1079
+1080
+1081
+1082
+1083
+1084
+1085
+1086
+1087
+1088
+1089
+1090
+1091
+1092
+1093
+1094
+1095
+1096
+1097
+1098
+1099
+0.5245845142941018 0.4305153866144344 0
+0.2378191884822985 0.4321252558958604 0
+0.4203682646213431 0.2168647609372138 0
+0.2621247466762552 0.7049884512693664 0
+0.7059261356542333 0.2482861187028943 0
+0.6952357123740793 0.6932448834599658 0
+0.7395241342929347 0.4865565219707335 0
+0.4835732234284884 0.6306501412612006 0
+0.2775877852645433 0.2845681216429337 0
+0.5592570229718012 0.1608478746237259 0
+0.1414377748363183 0.3680269185497085 0
+0.148413883257369 0.5603779376902698 0
+0.3504315382167228 0.1216031541086769 0
+0.374349374531369 0.3806727222351615 0
+0.3622649811004454 0.5258691605455679 0
+0.4201831641715321 0.8160499878651077 0
+0.5293771225482673 0.2839126208848303 0
+0.1610319925072876 0.8314550029879251 0
+0.8299497208629159 0.8112533975231868 0
+0.83727130573933 0.1644045529724839 0
+0.6070752351026347 0.5612243960558784 0
+0.5842009015284207 0.8274485224428757 0
+0.8337265735718584 0.3205835756481497 0
+0.4578499503668817 0.1049828762549354 0
+0.1284387951950647 0.6821483819761458 0
+0.8318292941978556 0.6088964426918255 0
+0.2866831192943344 0.1925037978460432 0
+0.6353991990240524 0.3754021983811743 0
+0.1073571990443998 0.4652092231862917 0
+0.6880923126861236 0.1262731719149625 0
+0.1833012637070783 0.2811659231177546 0
+0.2620312198570917 0.5432214524013123 0
+0.07675639588727072 0.3163100523754942 0
+0.4811676583412952 0.5331152539051126 0
+0.2846521364906401 0.8414616877901129 0
+0.3638698062634767 0.6475748879106366 0
+0.8754877686292004 0.4642374279986776 0
+0.3642935971241582 0.2933277553989253 0
+0.2300362342599379 0.3480139888440521 0
+0.5643648921536002 0.7201891018482548 0
+0.703488722474121 0.8725266625605684 0
+0.22347112364783 0.2231996223610495 0
+0.06131618972394563 0.3939417511268786 0
+0.717996573302736 0.5815237137126487 0
+0.3094017998066682 0.06020473703033351 0
+0.6205407355190795 0.2436165430235182 0
+0.4607650239528832 0.3170037697367883 0
+0.3157122384837697 0.3605583872057934 0
+0.5212645701825689 0.08693473880647751 0
+0.0935201030003637 0.6178888791338304 0
+0.498626089267104 0.2089338012579267 0
+0.3429099248857626 0.4688305234554418 0
+0.166837150625157 0.4357288026738061 0
+0.6220957043990115 0.4673273868558344 0
+0.4068259410695297 0.06758635000920811 0
+0.4265875588334543 0.4627109699925687 0
+0.8761841307048157 0.727360396747156 0
+0.2335269036540518 0.6390373986413347 0
+0.7737611251604257 0.08758644340040017 0
+0.7274882117423576 0.3535995419566142 0
+0.08101750914256567 0.5374879326861517 0
+0.07350496888315042 0.786573122102971 0
+0.280845620679156 0.1378202050669593 0
+0.6272308081751694 0.07394316563663422 0
+0.9035703742739464 0.2507187914813627 0
+0.1258001323183346 0.2842610246622642 0
+0.4933774301998444 0.8899486186434973 0
+0.3542321752712803 0.1902333385533193 0
+0.4834900394050603 0.7463576908273488 0
+0.7979570999768728 0.2411562353972249 0
+0.3529231680207863 0.9037542782275175 0
+0.3465450685964245 0.7354379503162881 0
+0.4054369111952236 0.1523801409507138 0
+0.2000047724372756 0.5003510198621924 0
+0.3212815353699232 0.2514851601350751 0
+0.8942883520323964 0.8942883520323877 0
+0.2393010240418349 0.9027765068663008 0
+0.7519553148337368 0.1761158104059213 0
+0.08171866352642118 0.8698189974909786 0
+0.2009742300678519 0.7575608382018904 0
+0.7895994967791076 0.7256926744010461 0
+0.8653916266658037 0.07728884254736816 0
+0.4493536672417616 0.3968919053564429 0
+0.6732070838450586 0.7829348988592558 0
+0.5629419904190009 0.3631572071674257 0
+0.9121714092001346 0.5415456222600287 0
+0.2945686289085359 0.6021436760659712 0
+0.5483264128350184 0.4929814620729703 0
+0.5574349651490773 0.6342510635770342 0
+0.4219565607619664 0.5886936918132333 0
+0.05371885843760104 0.4445757288951511 0
+0.6170382041804188 0.1597710038237879 0
+0.06704108959769631 0.6963832902487207 0
+0.1410495410400863 0.9237828968222237 0
+0.7893434363506436 0.9058543204435441 0
+0.8138302759248266 0.5234869228843915 0
+0.4476968539902124 0.04309382701058034 0
+0.6207504193830894 0.9111010227429597 0
+0.2421062817602021 0.1771398162149538 0
+0.923785057371327 0.1431075669520579 0
+0.7037173287338756 0.05861163372405916 0
+0.1689579319519013 0.625943143833152 0
+0.7973790706584487 0.4184827736547961 0
+0.9123697999243554 0.8077016324340662 0
+0.672735688937017 0.5151058750869481 0
+0.1802043563635168 0.235405832143454 0
+0.3561830698990803 0.0617240735788288 0
+0.6342968969365935 0.6409121748557314 0
+0.464293738815228 0.2609189293328369 0
+0.9055748557119524 0.3909395959271385 0
+0.4580795591242501 0.1645392100416518 0
+0.6849188439967858 0.4279728567227505 0
+0.1032647398890179 0.4103270715271253 0
+0.6009197513959909 0.3115686613174007 0
+0.9140680111966191 0.6576296915990247 0
+0.4217546451971226 0.6966787483540802 0
+0.1745091186243133 0.328128571301636 0
+0.763346693554566 0.6518989943048974 0
+0.2884049469745831 0.49036449067527 0
+0.08487496980430956 0.270850104578847 0
+0.04560430770892186 0.4921085165332802 0
+0.04259340308586697 0.2888462257208386 0
+0.2708520712182439 0.2373784115514135 0
+0.5081165801706981 0.1395344708074695 0
+0.1913718362960031 0.6916814838286511 0
+0.503973099162361 0.3535497163888158 0
+0.2298265614888821 0.3068656671422659 0
+0.6709388765749777 0.3035398715006471 0
+0.2727826325778112 0.08772223308268738 0
+0.0451564724702758 0.3519400548131602 0
+0.1446630036346113 0.5065550629920244 0
+0.7458876405895638 0.7942858962278143 0
+0.5089688741770831 0.8113062823693319 0
+0.5593508244388717 0.2141585153261894 0
+0.6767105405747184 0.1908125295742168 0
+0.317874060963763 0.1571659424923151 0
+0.5355154989713028 0.5704444633744392 0
+0.3162640580420035 0.4206885327581941 0
+0.2828815946432558 0.0363540236191775 0
+0.9364770375488825 0.0662332147117602 0
+0.4967933293930504 0.04547333729534128 0
+0.4279826983262813 0.9291024524298669 0
+0.5527056973132778 0.9374002198235794 0
+0.1955584504983467 0.3835474041073086 0
+0.06424556616372602 0.9386468735881381 0
+0.3745015532146495 0.2459581417743918 0
+0.3177291959559057 0.3113081048871776 0
+0.4823394142841041 0.4737302719569449 0
+0.2160913626105022 0.5757088100383585 0
+0.2463090547248603 0.1316549330790626 0
+0.5573481818783332 0.0526298497032705 0
+0.1214849376665845 0.3302413143240038 0
+0.1314411407127059 0.2459090790268949 0
+0.3174186175922054 0.5582272593904974 0
+0.4136149103725637 0.2779391712844139 0
+0.2782239647213206 0.7776919196293699 0
+0.4254177811139663 0.5156634518893362 0
+0.2725995991469638 0.3338226883611122 0
+0.04760630910360251 0.5812435986639671 0
+0.9437277476510562 0.4541310981938246 0
+0.4028794989281352 0.3349869734318263 0
+0.5812009229315425 0.4181553789540342 0
+0.3222154765066736 0.03023201410440191 0
+0.9298331088094816 0.3225671046611446 0
+0.03823976303989164 0.6305640758750162 0
+0.3576748057621688 0.587675881419421 0
+0.5706186368150528 0.1108814248922538 0
+0.227540526948349 0.2614305963264785 0
+0.3549927810046676 0.3361707886317769 0
+0.09156941841223548 0.3617978604527284 0
+0.3847689118795851 0.4334546147807842 0
+0.26133162815222 0.3797927095287201 0
+0.6322500530508525 0.7312952343823133 0
+0.9441355321321941 0.7429405952555492 0
+0.8479241002260447 0.9478398209131416 0
+0.3906461933725285 0.1086336018776928 0
+0.3443219747837946 0.8086811729998391 0
+0.7523181613631789 0.2867537763573869 0
+0.3074576912578647 0.6668914490621027 0
+0.944581135711455 0.9445811357115232 0
+0.510449074106015 0.6902983051441586 0
+0.2309529663549435 0.8220137969421915 0
+0.3883898315626427 0.4813057441327397 0
+0.1375299473523539 0.7504305887291645 0
+0.8303941040506715 0.6780791060115379 0
+0.3138741550940445 0.103578293804669 0
+0.7017443612374072 0.9362633312802842 0
+0.7464160794123823 0.8891904915020563 0
+0.7446717181756686 0.952927160221772 0
+0.150154625471324 0.3061947979819501 0
+0.1479970281454489 0.3291849428128199 0
+0.1236425349924596 0.307251169493134 0
+0.5742828968410105 0.7738188121455652 0
+0.5465848878527519 0.8193774024061038 0
+0.5366668831653416 0.7657476921087933 0
+0.1545506980127065 0.2827134738900094 0
+0.1789051911656958 0.3046472472096953 0
+0.02129670154293348 0.2938135240737939 0
+0.04387493777807139 0.3203931402669994 0
+0.0225782362351379 0.3253604386199547 0
+0.1209669931288663 0.5891334084120501 0
+0.08726880607146469 0.577688405909991 0
+0.1147156961999673 0.5489329351882107 0
+0.2023281695537277 0.4339270292848333 0
+0.218911980459787 0.4662381378790265 0
+0.1834209615312163 0.4680399112679993 0
+0.646517766494533 0.03697158281831711 0
+0.6109204440073546 0.03697158281831711 0
+0.5239274657793302 0.7332733963378018 0
+0.4962294567910717 0.7788319865983404 0
+0.4823704408848918 0.5818826975831566 0
+0.4527648920952274 0.6096719165372169 0
+0.4515621095516308 0.560904472859173 0
+0.2001239092710104 0.1999881590300663 0
+0.2094414883271964 0.1769582559570184 0
+0.232788702704016 0.2001697192880017 0
+0.7980740035890763 0.04379322170020009 0
+0.75769552890714 0.04379322170020009 0
+0.3833641163839783 0.775743969090698 0
+0.3841498568967736 0.7160583493351842 0
+0.4209689046843273 0.756364368109594 0
+0.3264615840110173 0.9518771391137588 0
+0.2696505120215416 0.9513882534331504 0
+0.2961120960313106 0.9032653925469092 0
+0.508341578656299 0.551779858639776 0
+0.5095443611998955 0.6005473023178198 0
+0.3450308065075693 0.3706155547204775 0
+0.3453067162866862 0.4006806274966778 0
+0.3159881482628866 0.3906234599819938 0
+0.7749129337502958 0.5952100782022371 0
+0.7659134246137813 0.55250531829852 0
+0.8228297850613411 0.5661916827881085 0
+0.2018377400056734 0.2293027272522518 0
+0.1784905256288538 0.2060912639212685 0
+0.4518366017882962 0.7812038393462283 0
+0.4526223423010914 0.7215182195907145 0
+0.352587452993104 0.4973498420005049 0
+0.3253349640375142 0.5081168256104189 0
+0.3156574359301728 0.4795975070653559 0
+0.3187876522557133 0.8726079830088151 0
+0.2619765802662375 0.8721190973282069 0
+0.4064465178687083 0.03379317500460405 0
+0.4268819743290497 0.02154691350529017 0
+0.4272613975298711 0.05534008850989423 0
+0.684761026773886 0.02930581686202958 0
+0.6654740684545225 0.06627739968034668 0
+0.6603752096918913 0.9555505113714798 0
+0.6621195709286052 0.8918138426517641 0
+0.6438448120012709 0.8499875925017221 0
+0.6287039926867397 0.8051917106510658 0
+0.6883479031595898 0.8277307807099121 0
+0.7287603537978353 0.5340401178416911 0
+0.7766772051088806 0.5050217224275625 0
+0.7684516024756918 0.4525196478127648 0
+0.8056046732916377 0.4709848482695937 0
+0.03065809486197281 0.4000044228978529 0
+0.0225782362351379 0.3790035747409937 0
+0.05323633109711071 0.3729409029700194 0
+0.381504505484305 0.06465521179401845 0
+0.3811250822834836 0.0308620367894144 0
+0.0225782362351379 0.3513372247691752 0
+0.3929131835127215 0.6181342898619349 0
+0.4218556029795445 0.6426862200836567 0
+0.3928122257302997 0.6721268181323583 0
+0.03675248444157521 0.7641015273791362 0
+0.03675248444157521 0.8044800020610398 0
+0.379559143205477 0.4070636685079728 0
+0.3505164849607943 0.4270715737694891 0
+0.2631120677284408 0.4612448732855652 0
+0.2442048597059293 0.4953577552687312 0
+0.2127973423791423 0.3657806964756803 0
+0.2456839312060789 0.3639033491863861 0
+0.2284450393252834 0.3816700568180144 0
+0.261475951219679 0.1574800106409566 0
+0.2442076682425312 0.1543973746470083 0
+0.2635773377020081 0.134737569073011 0
+0.8446590222770135 0.4938621754415345 0
+0.8364334196438246 0.4413601008267368 0
+0.1370971748347784 0.4504690129300489 0
+0.1557500771298841 0.4711419328329153 0
+0.1260101013395055 0.485882143089158 0
+0.9471441760161983 0.8971441760160622 0
+0.9033290759783759 0.8509949922332269 0
+0.9561848999621777 0.8538508162169015 0
+0.4895572602747253 0.09595880753070646 0
+0.4773216398799661 0.07522810677513835 0
+0.5090289497878097 0.06620403805090939 0
+0.7624336412004031 0.3860411578057051 0
+0.7411489573276173 0.4232278151887733 0
+0.7062035278695717 0.3907861993396824 0
+0.6625359042026854 0.5713740548842635 0
+0.6761467351196648 0.6112179442841901 0
+0.6206860660196141 0.6010682854558049 0
+0.6024756604557551 0.8692747725929177 0
+0.3656498782242026 0.4750681337940908 0
+0.375327406331544 0.5035874523391538 0
+0.3533073040579016 0.09166361384375282 0
+0.3321528466553837 0.1125907239566729 0
+0.3350286124965625 0.08265118369174888 0
+0.4526639343128055 0.6636644448076403 0
+0.8704208400066382 0.2075616722269233 0
+0.8507637371254095 0.2459375134392938 0
+0.8176142028581014 0.2027803941848544 0
+0.5983074726022264 0.725742168115284 0
+0.6082254772896366 0.7793718784125945 0
+0.4527734021785471 0.07403835163275788 0
+0.4722450916916314 0.04428358215296081 0
+0.7975879938762107 0.6303977184983615 0
+0.7406716334286509 0.616711354008773 0
+0.05751752408077333 0.4192587400110148 0
+0.02685942921880052 0.4253214117819891 0
+0.9561848999621777 0.8038508162167698 0
+0.8438892543417653 0.03864442127368408 0
+0.8195763759131147 0.08243764297388417 0
+0.2837643699867452 0.1651620014565013 0
+0.2643947005272683 0.1848218070304985 0
+0.3327924348528742 0.06096440530458116 0
+0.3116379774503564 0.08189151541750124 0
+0.2166888194903226 0.4078363300015845 0
+0.2495754083172592 0.4059589827122903 0
+0.8514769631852006 0.4047111847909673 0
+0.8905313121705765 0.427588511962908 0
+0.6399054620198259 0.5381651355714132 0
+0.6953661311198764 0.5483147943997984 0
+0.4594971769442235 0.2128992810975702 0
+0.4392239118727966 0.1907019854894328 0
+0.478352824195677 0.1867365056497892 0
+0.8155528221151536 0.3695331746514728 0
+0.8696507146419055 0.3557615857876441 0
+0.6221345061777941 0.1168570847302111 0
+0.5938284204977358 0.1353262143580208 0
+0.5989247224951111 0.09241229526444401 0
+0.7309267189232747 0.1069298076576813 0
+0.7628582199970813 0.1318511269031607 0
+0.7200238137599302 0.1511944911604419 0
+0.0776118162047858 0.8281960597969749 0
+0.04085933176321059 0.8461029397550435 0
+0.3734146316358045 0.08517883772826079 0
+0.3705388657946257 0.1151183779931848 0
+0.8686484739229023 0.2856511835647562 0
+0.8158418367743656 0.2808699055226873 0
+0.6576615604306465 0.1001081687757983 0
+0.6525652584332712 0.1430220878693752 0
+0.3398417993463254 0.5420482099680326 0
+0.3029117822833942 0.5242958750328837 0
+0.1109794490977142 0.6500186305549881 0
+0.09773994239638052 0.6892658361124333 0
+0.08028059629903 0.6571360846912755 0
+0.5749589290336734 0.2637645819541743 0
+0.5443639734935695 0.2490355681055099 0
+0.5899457799789756 0.2288875291748538 0
+0.3534587323118408 0.0308620367894144 0
+0.8805281815553285 0.1537560599622709 0
+0.9136777158226367 0.1969131792167103 0
+0.7946717181753218 0.952927160221772 0
+0.681443705383205 0.3645008701688943 0
+0.6601590215104192 0.4016875275519624 0
+0.3873002199463117 0.2035490497452666 0
+0.3798345432332519 0.1713067397520165 0
+0.4129025879082834 0.1846224509439638 0
+0.3523318567440016 0.1559182463309981 0
+0.3779342247059733 0.1369916475296953 0
+0.7066161428384077 0.6373842985863072 0
+0.6647663046553365 0.6670785291578486 0
+0.1723338880359434 0.5034530414271083 0
+0.8530669257838658 0.7693068971351714 0
+0.8097746088210117 0.7684730359621165 0
+0.8328918137419616 0.7265265355741011 0
+0.7061299116149758 0.5008311985288407 0
+0.6632334355866565 0.2459513308632063 0
+0.6486256380468989 0.2172145362988675 0
+0.6913183381144758 0.2195493241385555 0
+0.1811978005617518 0.4096381033905574 0
+0.329586991463883 0.444759528106818 0
+0.3638394183826738 0.451142569118113 0
+0.3204576472828073 0.1913685681996812 0
+0.3377568553206017 0.2208592493441972 0
+0.3039823273321288 0.2219944789905592 0
+0.1286206365155203 0.2650850518445795 0
+0.1573712022098921 0.2635375010723248 0
+0.481459914041166 0.2349263652953818 0
+0.4423310017182855 0.2388918451350253 0
+0.4950710732505753 0.3004581953108093 0
+0.4625293813840556 0.2889613495348126 0
+0.4968354306817476 0.2724157751088336 0
+0.456347766823594 0.02154691350529017 0
+0.7122214891448603 0.457264689346742 0
+0.9517851871369731 0.2253593957404603 0
+0.9618925286856634 0.1715537834758079 0
+0.3353525097442186 0.3483645879187851 0
+0.3646710777680183 0.3584217554334692 0
+0.1817528100352975 0.2582858776306043 0
+0.1558227485381114 0.2406574555851745 0
+0.2782999243828138 0.5726825642336417 0
+0.255329995759519 0.5889262430521649 0
+0.2390612912337969 0.5594651312198353 0
+0.1541374627307376 0.4018778606117573 0
+0.1350509452570874 0.4230279371004657 0
+0.1223512573626681 0.3891769950384169 0
+0.5140016059076856 0.2464232110713785 0
+0.5387891658641326 0.8586985705431864 0
+0.5684532994208493 0.8824243711332276 0
+0.5230415637565611 0.9136744192335383 0
+0.7424176045765934 0.709468778930506 0
+0.7677435686843357 0.7599892853144302 0
+0.7205616764818216 0.7437653898438901 0
+0.2255058252980895 0.242315109343764 0
+0.2038724416559329 0.2484182142349662 0
+0.09418735409348272 0.5013485779362217 0
+0.06331090842574377 0.514798224609716 0
+0.07648075337666081 0.478658869859786 0
+0.5289415561194526 0.1848908379408263 0
+0.5033713347189011 0.1742341360326981 0
+0.5336868015712497 0.1501911727155977 0
+0.7519416178155531 0.2447211770500596 0
+0.728940725243985 0.2122009645544078 0
+0.7749562074053048 0.2086360229015731 0
+0.6107302434575352 0.2775926021704594 0
+0.5651484369721291 0.2977406411011155 0
+0.1684981126673325 0.3757871613285085 0
+0.6842213981095689 0.7380898911596108 0
+0.7095473622173112 0.788610397543535 0
+0.6959048207099996 0.0924424028195108 0
+0.7246881815318424 0.8334062793941914 0
+0.7676155384701038 0.8500701083356792 0
+0.2310179961471836 0.5217862361317523 0
+0.2752180834158374 0.5167929715382911 0
+0.2054208953277137 0.2712982597221165 0
+0.2640477662812938 0.6205905373536529 0
+0.3010131600832002 0.6345175625640369 0
+0.2704922974559582 0.6529644238517187 0
+0.6187894698497491 0.201693773423653 0
+0.6468743723775685 0.1752917666990024 0
+0.03352054479884815 0.7190066114520111 0
+0.07027302924042336 0.7414782061758458 0
+0.256479176489223 0.2072591138831836 0
+0.247161597433037 0.2302890169562315 0
+0.7387392269471507 0.07309903856222966 0
+0.7226736306938649 0.02930581686202958 0
+0.4567802971856882 0.8529993032543025 0
+0.4606800642630628 0.909525535536682 0
+0.4240829312489067 0.8725762201474874 0
+0.224809133132277 0.6073731043398466 0
+0.8096465786067797 0.8585538589833654 0
+0.7879186807262398 0.8027696468755006 0
+0.5289884568529879 0.211546158292058 0
+0.1128402563885885 0.522021497839088 0
+0.2249868423013489 0.158016187409387 0
+0.5146905751766335 0.1132346048069735 0
+0.4829832652687899 0.1222586735312024 0
+0.2478258251651535 0.6720129249553506 0
+0.2847912189670599 0.6859399501657346 0
+0.8055162154498778 0.125995498186442 0
+0.8513314662025668 0.120846697759926 0
+0.2787675952562891 0.2149411046987283 0
+0.3987360672210292 0.08810997594345044 0
+0.7946133102865334 0.1702601816892026 0
+0.7292912029643226 0.6725719388824316 0
+0.117268480695219 0.8090140625454481 0
+0.1213753280168544 0.8506370002394519 0
+0.6531690377995151 0.3394710349409107 0
+0.6992135441586677 0.3285697067286307 0
+0.4323379457182057 0.08628461313207175 0
+0.4242480718697051 0.1068082390663141 0
+0.1586859076046351 0.5931605407617109 0
+0.1312390174761325 0.6219160114834912 0
+0.9517851871369731 0.2753593957403145 0
+0.05264042631879397 0.6634736830618684 0
+0.06587993302012768 0.6242264775044233 0
+0.1053109694667088 0.4377681473567085 0
+0.3865531660961592 0.8599021330463126 0
+0.3904529331735338 0.9164283653286922 0
+0.4317582351597369 0.1584596754961828 0
+0.08229046480648176 0.402134411327002 0
+0.07849179916330948 0.4274514002111383 0
+0.6145854697508231 0.5142758914558564 0
+0.5777008239688266 0.5271029290644244 0
+0.5852110586170149 0.4801544244644023 0
+0.1595484571354564 0.2216366177256427 0
+0.5867280583481835 0.9242506212832695 0
+0.04050875457128283 0.532625593757825 0
+0.02280215385446093 0.5099358856813894 0
+0.6884325061146055 0.2759129951017707 0
+0.6457398060470286 0.2735782072620827 0
+0.4118515208865653 0.3887823137958022 0
+0.3886144367297521 0.3578298478334939 0
+0.4261165830849484 0.3659394393941346 0
+0.6287474517115319 0.4213647926185043 0
+0.601648313665277 0.4427413829049343 0
+0.6083000609777974 0.3967787886676042 0
+0.3764615840112253 0.9518771391137588 0
+0.04085933176321059 0.8891076844028458 0
+0.06431190912308409 0.5593657656750595 0
+0.02380315455180125 0.5545034267467328 0
+0.6103752096922381 0.9555505113714798 0
+0.4550593455973224 0.3569478375466156 0
+0.4318222614405092 0.3259953715843073 0
+0.8942769653145856 0.7675310145906111 0
+0.8711597603936356 0.8094775149786265 0
+0.6527285684479556 0.7571150666207845 0
+0.2196505120213335 0.9513882534331504 0
+0.780607392657108 0.337091558802382 0
+0.7399031865527682 0.3201766591570006 0
+0.7930223674675186 0.3036686760027683 0
+0.1465384434459901 0.5334665003411471 0
+0.5593039237053365 0.1875031949749576 0
+0.6535072741978987 0.4476501217892924 0
+0.05967489948656884 0.3025781390481664 0
+0.06095643417877326 0.3341250535943272 0
+0.02685942921880052 0.454787204276731 0
+0.5166751108553141 0.318731168636823 0
+0.4823690615576221 0.3352767430628021 0
+0.4645760191743076 0.8136781351172198 0
+0.5011731521884638 0.8506274505064146 0
+0.3043349076363399 0.7202132007928272 0
+0.3123845166588726 0.756564934972829 0
+0.2701743556987879 0.7413401854493682 0
+0.4170612895606733 0.4151732600686135 0
+0.148698363573483 0.6540457629046489 0
+0.6474156966680142 0.4912166309713912 0
+0.5922894950267513 0.06328650766995236 0
+0.5759791308589365 0.02631492485163525 0
+0.58814761357611 0.1603094392237569 0
+0.5881945143096452 0.1869647595749886 0
+0.8621190364476561 0.8527708747777872 0
+0.84181589419152 0.9000713362379659 0
+0.7751376306700258 0.2639550058773059 0
+0.729122148508706 0.2675199475301406 0
+0.0805380287410004 0.4548924760407214 0
+0.8868939989898423 0.03864442127368408 0
+0.3454335216901095 0.7720595616580637 0
+0.3112729697525576 0.7931865463146045 0
+0.3022785901290487 0.1748348701691791 0
+0.3360531181175216 0.1736996405228172 0
+0.4969695567555377 0.7183279979857538 0
+0.5374069831298076 0.7052437034962067 0
+0.5205040942887829 0.6324506024191174 0
+0.54647523206019 0.6023477634757367 0
+0.437970613037608 0.4298014376745058 0
+0.4056782353565197 0.4480827923866765 0
+0.4316434307810527 0.1286815086028246 0
+0.3980415522838761 0.1305068714142033 0
+0.8938295889146675 0.5028915251293531 0
+0.8630008425624807 0.5325162725722101 0
+0.02129670154293348 0.2694231128604193 0
+0.8720003516989951 0.575221032475927 0
+0.3341527995902429 0.139384548300496 0
+0.04568299171960639 0.2670212729258098 0
+0.1579734467303158 0.3480777449256722 0
+0.1314613562514514 0.3491341164368561 0
+0.3144870556372173 0.825071430394976 0
+0.3486225714022905 0.8562177256136783 0
+0.1055174581177521 0.7685018554160677 0
+0.1492809699298207 0.7909427958585448 0
+0.3822525694776633 0.8123655804324734 0
+0.04966158307326145 0.4683421227142157 0
+0.3552074374299506 0.6915064191134623 0
+0.5608999286513388 0.6772200827126444 0
+0.5958659310428354 0.6375816192163828 0
+0.5993308945450968 0.680550638351993 0
+0.2994346603172332 0.2680266408890044 0
+0.3195053656629144 0.2813966325111263 0
+0.2976584906102244 0.2979381132650556 0
+0.0705632060519831 0.5995662388988987 0
+0.3427875662470407 0.2724064577670002 0
+0.3410113965400319 0.3023179301430515 0
+0.916701741541714 0.2866429480712536 0
+0.88177984119067 0.3215753401546471 0
+0.4966887151009516 0.9449743093217486 0
+0.46399134916417 0.9645512262149334 0
+0.1822526229339356 0.5680433738643141 0
+0.1925246472812017 0.6008259769357552 0
+0.4658465407629329 0.4353110886566939 0
+0.4544634865587792 0.4682206209747568 0
+0.1012782641028027 0.3002855385188792 0
+0.08081568284579013 0.2935800784771706 0
+0.1053375510613221 0.2775555646205555 0
+0.564937829893427 0.1358646497579898 0
+0.9560857046000673 0.5707728111294877 0
+0.9560857046000673 0.5207728111293615 0
+0.3270013799271446 0.7011646996891954 0
+0.3356637487606707 0.6572331684863697 0
+0.4869690907679317 0.4137036459854386 0
+0.4766633832020613 0.3752208108726294 0
+0.5142788067282313 0.3920325515016251 0
+0.5437632523565514 0.39683629689093 0
+0.533457544790681 0.3583534617781208 0
+0.2267482914861292 0.6983349675490087 0
+0.2124493699750274 0.6653594412349929 0
+0.9570340055983095 0.6788148457991174 0
+0.972067766066097 0.7214702976273797 0
+0.9291017716644066 0.700285143427287 0
+0.2993598408214595 0.1474930737796372 0
+0.5364554635645601 0.4617484243437023 0
+0.5528927186128221 0.4243353827842343 0
+0.5647636678832804 0.4555684205135022 0
+0.6788272664669014 0.4715393659048492 0
+0.3974349089179963 0.2314114513558028 0
+0.3643668642429648 0.2180957401638555 0
+0.1329843712737093 0.7162894853526551 0
+0.1022855184750251 0.7234069394889426 0
+0.633273474993723 0.6861037046190224 0
+0.9096077581401283 0.4591842630962511 0
+0.9279495784255953 0.4978383602269266 0
+0.483098069647474 0.1520368404245606 0
+0.0974170791506267 0.3860624659899269 0
+0.1165035966242769 0.3649123895012184 0
+0.9570340055983095 0.6288148457989857 0
+0.8951260709507174 0.6924950441730904 0
+0.9101598314185049 0.7351504960013526 0
+0.02380315455180125 0.5879268392525232 0
+0.5034619642891029 0.4521228292856897 0
+0.2001665082745612 0.8671157549271129 0
+0.1901752825409606 0.9132797018442622 0
+0.1510407667736869 0.8776189499050744 0
+0.3478915442922863 0.2487216509547334 0
+0.9718638738255281 0.4770655490962594 0
+0.2012424178029765 0.6324902712372433 0
+0.09912066677692763 0.323275683349749 0
+0.03352054479884815 0.6810940075320582 0
+0.2814380506059804 0.8095768037097414 0
+0.9649165544047408 0.3112835523302055 0
+0.07644280406809055 0.3778698057898034 0
+0.5459416034988108 0.09890808184936566 0
+0.5393676084928754 0.1252079478498616 0
+0.9649165544047408 0.3612835523300597 0
+0.5263528486576683 0.9687001099117897 0
+0.1113841022832537 0.8968009471566012 0
+0.1205247705202511 0.9618914484111118 0
+0.1705247705204592 0.9618914484111118 0
+0.7116285189690783 0.295146823929017 0
+0.2960668032940835 0.2444317858432443 0
+0.1742093278473223 0.5303644787762312 0
+0.2080480675238889 0.5380299149502754 0
+0.1810031112875697 0.7945079205949077 0
+0.1692520887101029 0.7539957134655274 0
+0.7143329277042276 0.183464169990069 0
+0.4579647547455659 0.1347610431482936 0
+0.6359293139854842 0.3075542664090239 0
+0.8945883420185654 0.110198204749713 0
+0.277041623262151 0.4264068943270273 0
+0.3023345025082933 0.455526511716732 0
+0.9527874278559763 0.3954697979630567 0
+0.9177039822607169 0.3567533502941416 0
+0.7764730951668368 0.6887958343529718 0
+0.9618925286856634 0.1215537834759363 0
+0.563983409346693 0.08175563729776215 0
+0.1959924794311155 0.8267343999650583 0
+0.2351269951983892 0.8623951519042461 0
+0.09027291380585137 0.2509099939121276 0
+0.1135559992600496 0.2384394811361516 0
+0.1081580552585077 0.2583795918028709 0
+0.682401426630421 0.1585428507445896 0
+0.9682385187744412 0.0331166073558801 0
+0.9224367044313817 0.0331166073558801 0
+0.1599053157455339 0.6869149329023985 0
+0.1644508918241785 0.7210560362789078 0
+0.2578025514227918 0.8317377423661522 0
+0.4970111487672517 0.6604742232026796 0
+0.4661018596515688 0.6934885267491193 0
+0.2518762577992449 0.09169654571631317 0
+0.2595458436513358 0.109688583080875 0
+0.2386394688727694 0.1136628957145008 0
+0.01911988151994582 0.648184400345206 0
+0.5461595564836341 0.323534914026128 0
+0.581930870907496 0.3373629342424132 0
+0.2742199282413936 0.2609732665971736 0
+0.4139913491639728 0.9645512262149334 0
+0.2768141266284836 0.1127712190748233 0
+0.3607723060128227 0.6176253846650288 0
+0.3898156832620676 0.5881847866163271 0
+0.5991705947215267 0.3692797027743 0
+0.6181594752100217 0.3434854298492875 0
+0.9682385187744412 0.08311660735578744 0
+0.582255100125856 0.5977377298164563 0
+0.5393063760304511 0.06978229425487401 0
+0.9131197101983768 0.5995876569295266 0
+0.8729486526972373 0.6332630671454251 0
+0.2315494883720536 0.7312746447356284 0
+0.1961730331819275 0.7246211610152707 0
+0.03212278308186301 0.9235216224514256 0
+0.03212278308186301 0.9693234367940691 0
+0.2664407973216279 0.01817701180958875 0
+0.2640389573596356 0.04256330212392418 0
+0.2908312085348643 0.01817701180958875 0
+0.3693975751694039 0.2696429485866585 0
+0.08212278308207099 0.9693234367940691 0
+0.2897249187246485 0.5507243558959048 0
+0.2065639125979802 0.2940157951300102 0
+0.2021678400565977 0.317497119221951 0
+0.8711062261292206 0.9210640864727646 0
+0.8186337682883442 0.9268470706783428 0
+0.51227829211049 0.02273666864767064 0
+0.480896004525013 0.02273666864767064 0
+0.5720714566752717 0.39065629306073 0
+0.02280215385446093 0.4785535980957956 0
+0.9722905678557274 0.92229056785563 0
+0.9194347438719257 0.9194347438719555 0
+0.0668237750788277 0.258023212354814 0
+0.6637428827124658 0.7122700589211395 0
+0.18503378456133 0.3558379877044723 0
+0.1801648841239522 0.6588123138309016 0
+0.5153329135595612 0.4833558670149576 0
+0.8099968004148895 0.701885890206292 0
+0.8532891173777436 0.7027197513793469 0
+0.2395990973945863 0.7676263789156301 0
+0.227088228783678 0.1352737458414414 0
+0.2022726764421256 0.338071280072844 0
+0.22993139787441 0.327439827993159 0
+0.1026475536019061 0.9312148852051809 0
+0.07298211484507361 0.9042329355395584 0
+0.3158741080289038 0.130372118148492 0
+0.2973598878866003 0.1206992494358141 0
+0.2589894763269133 0.06824740685567912 0
+0.5147470355881567 0.5130483579890415 0
+0.4817535363126996 0.5034227629310288 0
+0.9009343321073431 0.07176102862956418 0
+0.3364749356156374 0.01511600705220095 0
+0.3104981494665732 0.01511600705220095 0
+0.2159635982113977 0.7897873175720409 0
+0.5712953670369687 0.5658344297151587 0
+0.5419209559031606 0.5317129627237047 0
+0.5425557183531313 0.02631492485163525 0
+0.135166849310051 0.2268882411673632 0
+0.2286835442186156 0.2841481317343721 0
+0.3059936232503706 0.5801854677282343 0
+0.3921107709312059 0.5572814261794006 0
+0.3938413811072058 0.520766306217452 0
+0.4236871709379664 0.5521785718512847 0
+0.8722310576236453 0.6678543988052813 0
+0.8311116991242635 0.6434877743516817 0
+0.5339420196275462 0.6622746843605964 0
+0.01911988151994582 0.6125870778580478 0
+0.5763528486573324 0.9687001099117897 0
+0.3292192175860063 0.6248592819883039 0
+0.3261217173353523 0.594909778742696 0
+0.4532927197276307 0.5243893528972243 0
+0.9718638738255281 0.4270655490963997 0
+0.4538785976990352 0.4946968619231406 0
+0.4260026699737103 0.4891872109409524 0
+0.3599698934313071 0.5567725209824944 0
+0.2778321136105335 0.06203812835093244 0
+0.9222905678555193 0.9722905678557616 0
+0.9722905678557274 0.9722905678557616 0
+0.06373418644508827 0.2798481651498428 0
+0.972067766066097 0.7714702976275113 0
+0.2933283938359279 0.09565026344367818 0
+0.8239620501130223 0.9739199104565708 0
+0.8739620501128141 0.9739199104565708 0
+0.4389543245938958 0.2694290503086254 0
+0.4169915874969534 0.2474019661108138 0
+0.9301310474601048 0.104670390831909 0
+0.2910922161922397 0.07396348505651044 0
+0.296141697224962 0.04827938032475551 0
+0.8962526179687498 0.9462104783123324 0
+0.4371899671627235 0.2974714705106011 0
+0.5270707556356918 0.04905159349930589 0
+0.339199273202877 0.04597804384161536 0
+0.3158086381566709 0.04521837556736771 0
+0.7968703988026187 0.6649890501582176 0
+0.2887978430971118 0.4002406211434571 0
+0.9282526660282748 0.7753211138448077 0
+0.3940582317936066 0.2619486565294028 0
+0.9246513016815043 0.4225353470604816 0
+0.4082472046503495 0.3064630723581201 0
+0.3375467116771871 0.5729515704049593 0
+0.2537071733767127 0.2957168943925997 0
+0.2750936922057535 0.3091954050020229 0
+0.251213080317923 0.320344177751689 0
+0.2951643975514348 0.3225653966241449 0
+0.388954253748361 0.2856334633416696 0
+0.3835865480261467 0.3141573644153758 0
+0.2513179167034508 0.3409183386025821 0
+0.08416290714975311 0.3390539564141113 0
+0.06836294544125564 0.3568689576329443 0
+0.2545884655381321 0.7998528582857807 0
+0.3025485355749647 0.0332930188617897 0
+0.2491962990832965 0.249404503938946 0
+0.3167207172198376 0.3359332460464856 0
+0.2941559188153667 0.3471905377834528 0
+0.10652717803941 0.3460195873883661 0
+0.2525641561064461 0.2729993589847061 0
+0.2885219333179948 0.3701755483672567 0
+0.4069038063383045 0.4984845980110379 0
+0.4074886951980485 0.4720083570626542 0
+0.3596431890644129 0.3147492720153511 0
+0.3363609884802866 0.3237394467594772 0
+0.04292303607174708 0.6059038372694916 0
+0.3789361399664014 0.3355788810318016 0
+0.2669656136495919 0.3568076989449162 0
+0.3865793717211139 0.457380179456762 0
+2 6 0 791
+1100
+1101
+1102
+1103
+1104
+1105
+1106
+1107
+1108
+1109
+1110
+1111
+1112
+1113
+1114
+1115
+1116
+1117
+1118
+1119
+1120
+1121
+1122
+1123
+1124
+1125
+1126
+1127
+1128
+1129
+1130
+1131
+1132
+1133
+1134
+1135
+1136
+1137
+1138
+1139
+1140
+1141
+1142
+1143
+1144
+1145
+1146
+1147
+1148
+1149
+1150
+1151
+1152
+1153
+1154
+1155
+1156
+1157
+1158
+1159
+1160
+1161
+1162
+1163
+1164
+1165
+1166
+1167
+1168
+1169
+1170
+1171
+1172
+1173
+1174
+1175
+1176
+1177
+1178
+1179
+1180
+1181
+1182
+1183
+1184
+1185
+1186
+1187
+1188
+1189
+1190
+1191
+1192
+1193
+1194
+1195
+1196
+1197
+1198
+1199
+1200
+1201
+1202
+1203
+1204
+1205
+1206
+1207
+1208
+1209
+1210
+1211
+1212
+1213
+1214
+1215
+1216
+1217
+1218
+1219
+1220
+1221
+1222
+1223
+1224
+1225
+1226
+1227
+1228
+1229
+1230
+1231
+1232
+1233
+1234
+1235
+1236
+1237
+1238
+1239
+1240
+1241
+1242
+1243
+1244
+1245
+1246
+1247
+1248
+1249
+1250
+1251
+1252
+1253
+1254
+1255
+1256
+1257
+1258
+1259
+1260
+1261
+1262
+1263
+1264
+1265
+1266
+1267
+1268
+1269
+1270
+1271
+1272
+1273
+1274
+1275
+1276
+1277
+1278
+1279
+1280
+1281
+1282
+1283
+1284
+1285
+1286
+1287
+1288
+1289
+1290
+1291
+1292
+1293
+1294
+1295
+1296
+1297
+1298
+1299
+1300
+1301
+1302
+1303
+1304
+1305
+1306
+1307
+1308
+1309
+1310
+1311
+1312
+1313
+1314
+1315
+1316
+1317
+1318
+1319
+1320
+1321
+1322
+1323
+1324
+1325
+1326
+1327
+1328
+1329
+1330
+1331
+1332
+1333
+1334
+1335
+1336
+1337
+1338
+1339
+1340
+1341
+1342
+1343
+1344
+1345
+1346
+1347
+1348
+1349
+1350
+1351
+1352
+1353
+1354
+1355
+1356
+1357
+1358
+1359
+1360
+1361
+1362
+1363
+1364
+1365
+1366
+1367
+1368
+1369
+1370
+1371
+1372
+1373
+1374
+1375
+1376
+1377
+1378
+1379
+1380
+1381
+1382
+1383
+1384
+1385
+1386
+1387
+1388
+1389
+1390
+1391
+1392
+1393
+1394
+1395
+1396
+1397
+1398
+1399
+1400
+1401
+1402
+1403
+1404
+1405
+1406
+1407
+1408
+1409
+1410
+1411
+1412
+1413
+1414
+1415
+1416
+1417
+1418
+1419
+1420
+1421
+1422
+1423
+1424
+1425
+1426
+1427
+1428
+1429
+1430
+1431
+1432
+1433
+1434
+1435
+1436
+1437
+1438
+1439
+1440
+1441
+1442
+1443
+1444
+1445
+1446
+1447
+1448
+1449
+1450
+1451
+1452
+1453
+1454
+1455
+1456
+1457
+1458
+1459
+1460
+1461
+1462
+1463
+1464
+1465
+1466
+1467
+1468
+1469
+1470
+1471
+1472
+1473
+1474
+1475
+1476
+1477
+1478
+1479
+1480
+1481
+1482
+1483
+1484
+1485
+1486
+1487
+1488
+1489
+1490
+1491
+1492
+1493
+1494
+1495
+1496
+1497
+1498
+1499
+1500
+1501
+1502
+1503
+1504
+1505
+1506
+1507
+1508
+1509
+1510
+1511
+1512
+1513
+1514
+1515
+1516
+1517
+1518
+1519
+1520
+1521
+1522
+1523
+1524
+1525
+1526
+1527
+1528
+1529
+1530
+1531
+1532
+1533
+1534
+1535
+1536
+1537
+1538
+1539
+1540
+1541
+1542
+1543
+1544
+1545
+1546
+1547
+1548
+1549
+1550
+1551
+1552
+1553
+1554
+1555
+1556
+1557
+1558
+1559
+1560
+1561
+1562
+1563
+1564
+1565
+1566
+1567
+1568
+1569
+1570
+1571
+1572
+1573
+1574
+1575
+1576
+1577
+1578
+1579
+1580
+1581
+1582
+1583
+1584
+1585
+1586
+1587
+1588
+1589
+1590
+1591
+1592
+1593
+1594
+1595
+1596
+1597
+1598
+1599
+1600
+1601
+1602
+1603
+1604
+1605
+1606
+1607
+1608
+1609
+1610
+1611
+1612
+1613
+1614
+1615
+1616
+1617
+1618
+1619
+1620
+1621
+1622
+1623
+1624
+1625
+1626
+1627
+1628
+1629
+1630
+1631
+1632
+1633
+1634
+1635
+1636
+1637
+1638
+1639
+1640
+1641
+1642
+1643
+1644
+1645
+1646
+1647
+1648
+1649
+1650
+1651
+1652
+1653
+1654
+1655
+1656
+1657
+1658
+1659
+1660
+1661
+1662
+1663
+1664
+1665
+1666
+1667
+1668
+1669
+1670
+1671
+1672
+1673
+1674
+1675
+1676
+1677
+1678
+1679
+1680
+1681
+1682
+1683
+1684
+1685
+1686
+1687
+1688
+1689
+1690
+1691
+1692
+1693
+1694
+1695
+1696
+1697
+1698
+1699
+1700
+1701
+1702
+1703
+1704
+1705
+1706
+1707
+1708
+1709
+1710
+1711
+1712
+1713
+1714
+1715
+1716
+1717
+1718
+1719
+1720
+1721
+1722
+1723
+1724
+1725
+1726
+1727
+1728
+1729
+1730
+1731
+1732
+1733
+1734
+1735
+1736
+1737
+1738
+1739
+1740
+1741
+1742
+1743
+1744
+1745
+1746
+1747
+1748
+1749
+1750
+1751
+1752
+1753
+1754
+1755
+1756
+1757
+1758
+1759
+1760
+1761
+1762
+1763
+1764
+1765
+1766
+1767
+1768
+1769
+1770
+1771
+1772
+1773
+1774
+1775
+1776
+1777
+1778
+1779
+1780
+1781
+1782
+1783
+1784
+1785
+1786
+1787
+1788
+1789
+1790
+1791
+1792
+1793
+1794
+1795
+1796
+1797
+1798
+1799
+1800
+1801
+1802
+1803
+1804
+1805
+1806
+1807
+1808
+1809
+1810
+1811
+1812
+1813
+1814
+1815
+1816
+1817
+1818
+1819
+1820
+1821
+1822
+1823
+1824
+1825
+1826
+1827
+1828
+1829
+1830
+1831
+1832
+1833
+1834
+1835
+1836
+1837
+1838
+1839
+1840
+1841
+1842
+1843
+1844
+1845
+1846
+1847
+1848
+1849
+1850
+1851
+1852
+1853
+1854
+1855
+1856
+1857
+1858
+1859
+1860
+1861
+1862
+1863
+1864
+1865
+1866
+1867
+1868
+1869
+1870
+1871
+1872
+1873
+1874
+1875
+1876
+1877
+1878
+1879
+1880
+1881
+1882
+1883
+1884
+1885
+1886
+1887
+1888
+1889
+1890
+-0.4305153885303711 0.5245845151806718 -0
+-0.4321252560326031 0.2378191885452552 -0
+-0.2168647613521659 0.4203682649064875 -0
+-0.7049884513050704 0.2621247466423738 -0
+-0.2482861190865842 0.7059261357558753 -0
+-0.693244884281682 0.6952357130545582 -0
+-0.4865565228117184 0.7395241352277649 -0
+-0.630650143112254 0.48357322378815 -0
+-0.2845681216765733 0.2775877852562389 -0
+-0.1608478745829416 0.5592570230408395 -0
+-0.3680269185409759 0.1414377748175201 -0
+-0.5603779376880197 0.1484138832542184 -0
+-0.1216031543784338 0.3504315384321453 -0
+-0.3806727224357932 0.3743493751396391 -0
+-0.5258691613198205 0.3622649811391228 -0
+-0.81604998868512 0.4201831635496149 -0
+-0.283912621151105 0.5293771232347902 -0
+-0.8314550029173569 0.1610319924722514 -0
+-0.811253398082419 0.8299497210827345 -0
+-0.1644045528922159 0.837271305811107 -0
+-0.5612243979643977 0.6070752351743337 -0
+-0.8274485222609561 0.5842009006287204 -0
+-0.320583575356584 0.833726573816051 -0
+-0.1049828762794838 0.4578499505400483 -0
+-0.6821483819833604 0.1284387951920329 -0
+-0.6088964433857974 0.831829294787585 -0
+-0.1925037978724885 0.2866831192441144 -0
+-0.375402199731013 0.6353992002286981 -0
+-0.465209223179026 0.1073571990388219 -0
+-0.1262731720030668 0.6880923128980324 -0
+-0.2811659231263386 0.1833012636733954 -0
+-0.5432214524545416 0.2620312199021694 -0
+-0.3163100523582473 0.07675639587287049 -0
+-0.5331152556901012 0.4811676586465534 -0
+-0.8414616877166816 0.2846521358856692 -0
+-0.6475748889684358 0.3638698068508186 -0
+-0.4642374269899232 0.8754877695349437 -0
+-0.2933277554558256 0.364293597164836 -0
+-0.3480139889799803 0.230036234361321 -0
+-0.7201891027368155 0.5643648926768415 -0
+-0.8725266621348053 0.7034887221109694 -0
+-0.2231996223992857 0.2234711235835176 -0
+-0.3939417511054799 0.06131618971139816 -0
+-0.581523714266206 0.7179965738562936 -0
+-0.06020473708498717 0.3094017998879232 -0
+-0.2436165433258036 0.620540736073378 -0
+-0.3170037697137198 0.4607650245611452 -0
+-0.3605583874120928 0.3157122387355347 -0
+-0.08693473871067287 0.5212645702743448 -0
+-0.6178888791359763 0.0935201029995259 -0
+-0.2089338015719745 0.4986260897035107 -0
+-0.4688305239438082 0.342909925150359 -0
+-0.4357288026741598 0.1668371506237743 -0
+-0.4673273887303557 0.6220957050118264 -0
+-0.06758635004378542 0.4068259411224885 -0
+-0.4627109707685666 0.4265875596167557 -0
+-0.7273603973738658 0.8761841311614157 -0
+-0.639037398736788 0.2335269037307809 -0
+-0.0875864433345213 0.7737611252548598 -0
+-0.353599542687116 0.7274882125545945 -0
+-0.5374879326874871 0.08101750914912879 -0
+-0.7865731220927241 0.07350496887825554 -0
+-0.1378202051181936 0.2808456207629089 -0
+-0.07394316564174527 0.6272308082640599 -0
+-0.2507187913386958 0.9035703744094791 -0
+-0.2842610246471677 0.1258001323316333 -0
+-0.889948618684968 0.4933774294496653 -0
+-0.1902333387425466 0.3542321753414411 -0
+-0.7463576928002845 0.4834900402325683 -0
+-0.2411562352860996 0.7979571001267963 -0
+-0.9037542786367339 0.3529231667191795 -0
+-0.735437950937508 0.3465450682479665 -0
+-0.1523801411955971 0.4054369115030861 -0
+-0.5003510198516314 0.2000047724717227 -0
+-0.251485160229431 0.3212815353398384 -0
+-0.8942883523382201 0.8942883523382111 -0
+-0.9027765068049153 0.2393010237065863 -0
+-0.1761158101970005 0.751955314999891 -0
+-0.8698189974960295 0.08171866352974506 -0
+-0.7575608381083132 0.2009742300067874 -0
+-0.7256926751290925 0.7895994971477045 -0
+-0.07728884261612889 0.8653916266669099 -0
+-0.3968919057755965 0.4493536681150373 -0
+-0.7829348990603812 0.6732070837963018 -0
+-0.3631572086747002 0.5629419912784841 -0
+-0.5415456221429494 0.9121714100356022 -0
+-0.6021436764675405 0.2945686289567646 -0
+-0.4929814638490071 0.5483264133204967 -0
+-0.6342510652519781 0.5574349653515003 -0
+-0.5886936935850805 0.4219565607697445 -0
+-0.4445757288675289 0.05371885843372597 -0
+-0.1597710038779483 0.6170382043793072 -0
+-0.6963832902491475 0.0670410895960747 -0
+-0.9237828968014795 0.1410495409781634 -0
+-0.9058543205726207 0.7893434359248165 -0
+-0.5234869231534717 0.8138302776036406 -0
+-0.04309382702429896 0.4476968540326782 -0
+-0.9111010225035817 0.6207504189561058 -0
+-0.1771398163389617 0.242106281685464 -0
+-0.143107566927648 0.92378505740508 -0
+-0.05861163377243109 0.7037173287353481 -0
+-0.6259431438508685 0.1689579319601262 -0
+-0.4184827737272781 0.7973790713762353 -0
+-0.807701632884543 0.9123698002434993 -0
+-0.5151058772021595 0.672735688668905 -0
+-0.2354058321879287 0.1802043562423097 -0
+-0.06172407368054029 0.3561830700151752 -0
+-0.6409121764777822 0.6342968969219691 -0
+-0.2609189295487936 0.4642937392288279 -0
+-0.3909395951819279 0.905574856169584 -0
+-0.164539210157297 0.4580795594063338 -0
+-0.4279728583530675 0.6849188449595675 -0
+-0.4103270715119903 0.1032647398806452 -0
+-0.3115686623862332 0.6009197527070208 -0
+-0.6576296919545608 0.9140680115880853 -0
+-0.6966787510384271 0.4217546454409841 -0
+-0.3281285713159032 0.1745091186459622 -0
+-0.6518989948958753 0.7633466943252001 -0
+-0.4903644908805368 0.2884049470241053 -0
+-0.2708501046556091 0.08487496970500968 -0
+-0.492108516528849 0.0456043077206315 -0
+-0.2888462257267535 0.04259340305277201 -0
+-0.23737841158063 0.2708520711737286 -0
+-0.1395344703872639 0.5081165803785367 -0
+-0.6916814838406601 0.1913718362913544 -0
+-0.3535497162207916 0.5039731000714187 -0
+-0.3068656671998568 0.2298265615410353 -0
+-0.3035398724913838 0.670938877622001 -0
+-0.08772223316268159 0.2727826326533035 -0
+-0.3519400547744856 0.04515647246044004 -0
+-0.506555062970525 0.1446630036585616 -0
+-0.7942858972787039 0.745887640165119 -0
+-0.8113062836990224 0.5089688742274759 -0
+-0.214158515230591 0.5593508248370772 -0
+-0.1908125296980807 0.6767105408212968 -0
+-0.1571659425796711 0.3178740611770657 -0
+-0.5704444651735475 0.5355154992562067 -0
+-0.4206885330774239 0.3162640583252264 -0
+-0.03635402371581754 0.282881594762622 -0
+-0.06623321471759927 0.9364770375429849 -0
+-0.04547333727788455 0.4967933294450282 -0
+-0.9291024518942496 0.427982697151456 -0
+-0.9374002199029458 0.5527056968204981 -0
+-0.3835474041504578 0.1955584505574182 -0
+-0.9386468735905763 0.06424556616102566 -0
+-0.2459581419469944 0.3745015532981618 -0
+-0.3113081049567858 0.3177291960964608 -0
+-0.4737302735858416 0.4823394149169008 -0
+-0.5757088101019416 0.2160913626330367 -0
+-0.1316549332983596 0.2463090547153147 -0
+-0.05262984967764033 0.557348181933024 -0
+-0.3302413143134131 0.1214849376653234 -0
+-0.2459090790869788 0.1314411404354747 -0
+-0.5582272596053205 0.3174186175009998 -0
+-0.2779391714255899 0.4136149106092872 -0
+-0.7776919196224356 0.2782239643429274 -0
+-0.5156634529874436 0.4254177814654156 -0
+-0.3338226885249591 0.2725995994249852 -0
+-0.5812435986670748 0.04760630910531933 -0
+-0.4541310973073897 0.9437277484241188 -0
+-0.3349869735413931 0.4028794993745461 -0
+-0.4181553806113298 0.5812009239627691 -0
+-0.03023201416130628 0.322215476499609 -0
+-0.3225671041807625 0.9298331090339095 -0
+-0.6305640758742431 0.03823976303656059 -0
+-0.5876758823481248 0.3576748055273388 -0
+-0.1108814248254183 0.570618636920776 -0
+-0.2614305963617688 0.2275405269117042 -0
+-0.3361707887603781 0.3549927813022034 -0
+-0.3617978604340986 0.09156941840136622 -0
+-0.4334546152904226 0.3847689125000746 -0
+-0.3797927096962527 0.2613316283249567 -0
+-0.7312952347870194 0.6322500533032392 -0
+-0.7429405956566382 0.9441355324654428 -0
+-0.9478398206102548 0.8479240998628731 -0
+-0.1086336021033215 0.3906461936673936 -0
+-0.8086811732546078 0.3443219740387482 -0
+-0.2867537763413475 0.7523181614748431 -0
+-0.6668914494595011 0.3074576915196111 -0
+-0.9445811359875327 0.944581135987601 -0
+-0.6902983069801806 0.5104490747079632 -0
+-0.8220137966900968 0.2309529660319696 -0
+-0.4813057448620122 0.3883898319743455 -0
+-0.7504305887375025 0.1375299473549229 -0
+-0.6780791067727766 0.8303941044719227 -0
+-0.1035782939427617 0.3138741553658255 -0
+-0.9362633310674027 0.7017443610550896 -0
+-0.9529271602863103 0.7446717179620131 -0
+-0.889190491353713 0.746416079017893 -0
+-0.3061947979815355 0.1501546254887978 -0
+-0.3072511694802904 0.1236425349984784 -0
+-0.3291849428146582 0.1479970281556428 -0
+-0.7738188124988858 0.574282896652781 -0
+-0.7657476932179189 0.5366668834521587 -0
+-0.8193774029799892 0.5465848874280982 -0
+-0.2827134738867532 0.1545506980025144 -0
+-0.3046472472211209 0.1789051911596788 -0
+-0.2938135240766131 0.02129670152638601 -0
+-0.3253604386004791 0.02257823623022002 -0
+-0.3203931402506195 0.04387493775660602 -0
+-0.589133408411998 0.1209669931268722 -0
+-0.5489329351877534 0.1147156962016736 -0
+-0.5776884059117318 0.08726880607432734 -0
+-0.4339270293533815 0.2023281695845148 -0
+-0.4680399112628956 0.1834209615477485 -0
+-0.4662381379421173 0.218911980508489 -0
+-0.03697158282087264 0.6109204440525695 -0
+-0.03697158282087264 0.6465177665397276 -0
+-0.7332733977685499 0.5239274664547049 -0
+-0.7788319882496535 0.4962294572300222 -0
+-0.5818826994011776 0.4823704412173517 -0
+-0.5609044746375909 0.4515621097081489 -0
+-0.6096719183486672 0.4527648922789472 -0
+-0.1999881591954785 0.2001239090925599 -0
+-0.2001697193691237 0.2327887026344908 -0
+-0.1769582561653166 0.2094414881435332 -0
+-0.04379322166726065 0.7576955289550805 -0
+-0.04379322166726065 0.7980740036369841 -0
+-0.775743969811314 0.3833641158987907 -0
+-0.7563643698617736 0.4209689044952995 -0
+-0.7160583509879676 0.3841498568444753 -0
+-0.9518771393183669 0.3264615833592229 -0
+-0.9032653927208245 0.2961120952128829 -0
+-0.9513882534024576 0.2696505118529263 -0
+-0.6005473041429008 0.5095443615221783 -0
+-0.5517798604318244 0.50834157895138 -0
+-0.370615554923943 0.3450308069375869 -0
+-0.3906234602447584 0.3159881485303805 -0
+-0.4006806277566085 0.3453067167324328 -0
+-0.5952100788260017 0.7749129343219393 -0
+-0.5661916832696345 0.8228297861956128 -0
+-0.5525053187098388 0.765913425729967 -0
+-0.2060912640898001 0.178490525421956 -0
+-0.2293027272936072 0.2018377399129136 -0
+-0.7812038407427022 0.4518366018910916 -0
+-0.7215182219193559 0.4526223428367762 -0
+-0.4973498426318144 0.3525874531447409 -0
+-0.4795975074121725 0.3156574360872321 -0
+-0.5081168261001787 0.3253349640816141 -0
+-0.8726079831767077 0.3187876513024243 -0
+-0.8721190972607984 0.2619765797961277 -0
+-0.03379317502189271 0.4064465178956578 -0
+-0.05534008853404219 0.4272613975775834 -0
+-0.02154691351214948 0.4268819743507526 -0
+-0.06627739970708818 0.6654740684997039 -0
+-0.02930581688621555 0.6847610267753718 -0
+-0.8918138423191935 0.6621195705335375 -0
+-0.9555505112517908 0.6603752094776578 -0
+-0.8499875921978808 0.6438448113698448 -0
+-0.8277307805975933 0.6883479029536356 -0
+-0.8051917106606686 0.6287039922125112 -0
+-0.5340401185389622 0.7287603545420293 -0
+-0.5050217229825951 0.7766772064157027 -0
+-0.4709848484403749 0.805604674489938 -0
+-0.4525196482694982 0.7684516033020001 -0
+-0.4000044228866834 0.03065809485569908 -0
+-0.3729409029399827 0.0532363310859191 -0
+-0.3790035747211863 0.02257823623022002 -0
+-0.03086203684027014 0.3811250823420011 -0
+-0.06465521186216286 0.3815045055688319 -0
+-0.3513372247495434 0.02257823623022002 -0
+-0.6181342912767582 0.3929131838102816 -0
+-0.6721268200034315 0.3928122261459013 -0
+-0.6426862223117538 0.4218556031053643 -0
+-0.8044800020552256 0.03675248443912777 -0
+-0.7641015273732892 0.03675248443912777 -0
+-0.4270715741839232 0.3505164854126505 -0
+-0.4070636688631079 0.3795591438198568 -0
+-0.4953577553660841 0.244204859747914 -0
+-0.4612448734565699 0.2631120677846803 -0
+-0.3657806965652191 0.2127973424593696 -0
+-0.3816700569233553 0.2284450394411875 -0
+-0.3639033493381165 0.2456839313431389 -0
+-0.1574800107285776 0.2614759512241864 -0
+-0.1347375692082766 0.2635773377391117 -0
+-0.1543973748186607 0.2442076682003893 -0
+-0.4938621750716974 0.8446590235692921 -0
+-0.4413601003586006 0.8364334204555895 -0
+-0.4504690129265929 0.1370971748312981 -0
+-0.4858821430747755 0.1260101013486917 -0
+-0.4711419328223424 0.155750077141168 -0
+-0.8971441761689019 0.9471441761691054 -0
+-0.8538508164420633 0.9561849001217496 -0
+-0.8509949926113816 0.9033290762908552 -0
+-0.09595880749507832 0.4895572604071966 -0
+-0.06620403799427871 0.5090289498596865 -0
+-0.07522810677868416 0.4773216399925383 -0
+-0.386041158207197 0.7624336419654149 -0
+-0.3907862005200917 0.706203528757081 -0
+-0.4232278160401728 0.7411489581679014 -0
+-0.5713740561153018 0.6625359045153136 -0
+-0.60106828722109 0.6206860660481514 -0
+-0.6112179453719941 0.6761467353891314 -0
+-0.8692747723822689 0.6024756597924131 -0
+-0.5035874530909163 0.3753274065567342 -0
+-0.4750681344029102 0.3656498785623523 -0
+-0.09166361402948706 0.3533073042236602 -0
+-0.08265118381165097 0.3350286126905004 -0
+-0.1125907241605977 0.3321528468989854 -0
+-0.6636644470753406 0.4526639346145671 -0
+-0.2075616721154558 0.870420840110293 -0
+-0.2027803940891578 0.8176142029689516 -0
+-0.2459375133123977 0.8507637372681377 -0
+-0.7793718785239878 0.6082254769659798 -0
+-0.7257421687619174 0.5983074729900404 -0
+-0.07403835165189138 0.4527734022863633 -0
+-0.04428358215109175 0.4722450917388532 -0
+-0.6167113545810406 0.7406716340907468 -0
+-0.6303977191408363 0.7975879945563925 -0
+-0.4253214117677079 0.02685942921686298 -0
+-0.4192587399865044 0.05751752407256206 -0
+-0.8038508164422714 0.9561849001217496 -0
+-0.0824376429753251 0.8195763759608848 -0
+-0.03864442130806445 0.8438892543430091 -0
+-0.165162001495341 0.2837643700035116 -0
+-0.1848218071057251 0.2643947004647892 -0
+-0.06096440538276373 0.3327924349515492 -0
+-0.08189151551387441 0.3116379776268743 -0
+-0.4078363300915305 0.2166888195513367 -0
+-0.4059589828644279 0.249575408435106 -0
+-0.4275885110859255 0.8905313128522638 -0
+-0.404711184454603 0.8514769637729097 -0
+-0.5483147957341827 0.6953661312625993 -0
+-0.5381651375832786 0.6399054619216193 -0
+-0.2128992814620702 0.4594971773049991 -0
+-0.1867365058646358 0.4783528245549222 -0
+-0.1907019857547315 0.4392239121564107 -0
+-0.369533174541931 0.8155528225961431 -0
+-0.3557615852692559 0.8696507149928175 -0
+-0.1168570847598468 0.6221345063216835 -0
+-0.09241229523358177 0.5989247225924179 -0
+-0.1353262143516833 0.5938284206500416 -0
+-0.1069298076687941 0.7309267190764461 -0
+-0.1511944911000336 0.7200238139489618 -0
+-0.1318511267657609 0.7628582201273754 -0
+-0.8461029397568782 0.04085933176487253 -0
+-0.8281960597943768 0.0776118162040003 -0
+-0.1151183782408777 0.3705388660497694 -0
+-0.08517883789193091 0.3734146318412844 -0
+-0.2856511833476399 0.868648474112765 -0
+-0.2808699053213418 0.8158418369714237 -0
+-0.100108168822406 0.6576615605810462 -0
+-0.1430220879405076 0.6525652586386698 -0
+-0.5242958752429286 0.3029117822625526 -0
+-0.5420482104625706 0.3398417993200613 -0
+-0.6500186305596684 0.1109794490957794 -0
+-0.6571360846925619 0.08028059629780031 -0
+-0.6892658361162539 0.09773994239405381 -0
+-0.2637645822384543 0.5749589296540841 -0
+-0.2288875292781973 0.5899457804552276 -0
+-0.249035568190848 0.5443639740359337 -0
+-0.03086203684027014 0.3534587323701826 -0
+-0.1969131791331719 0.9136777159072795 -0
+-0.153756059909932 0.8805281816080935 -0
+-0.9529271602863103 0.7946717179621449 -0
+-0.3645008712090645 0.6814437063916463 -0
+-0.4016875290420402 0.6601590225941328 -0
+-0.2035490500473563 0.3873002201239643 -0
+-0.1846224512738815 0.4129025882047868 -0
+-0.1713067399690719 0.3798345434222636 -0
+-0.1559182465604902 0.3523318568867932 -0
+-0.1369916477870154 0.3779342249676157 -0
+-0.637384299273944 0.7066161434554259 -0
+-0.6670785303797321 0.6647663049882636 -0
+-0.5034530414110783 0.1723338880651422 -0
+-0.7693068977281424 0.853066926122075 -0
+-0.7265265362514792 0.8328918141545602 -0
+-0.7684730366057557 0.8097746091152195 -0
+-0.5008312000069389 0.706129911948335 -0
+-0.2459513312061939 0.6632334359146267 -0
+-0.2195493243923324 0.691318338288586 -0
+-0.2172145365119421 0.6486256384473373 -0
+-0.4096381034123088 0.1811978005905963 -0
+-0.4447595285106161 0.3295869917377927 -0
+-0.4511425696171154 0.3638394188252168 -0
+-0.1913685683075176 0.3204576472927778 -0
+-0.2219944790509598 0.3039823272919764 -0
+-0.2208592494859888 0.3377568553406398 -0
+-0.2635375011066587 0.1573712020544351 -0
+-0.2650850518670733 0.128620636383554 -0
+-0.2388918454504798 0.4423310020676577 -0
+-0.2349263655603841 0.4814599144661693 -0
+-0.3004581954324124 0.4950710738979677 -0
+-0.2724157753499493 0.4968354312318091 -0
+-0.2889613496312567 0.4625293818949865 -0
+-0.02154691351214948 0.4563477668454944 -0
+-0.4572646905823929 0.7122214900936662 -0
+-0.225359395669764 0.9517851872047395 -0
+-0.1715537834642401 0.9618925287025398 -0
+-0.3584217555980856 0.3646710782209212 -0
+-0.3483645880862355 0.3353525100188691 -0
+-0.2582858776571336 0.1817528099578525 -0
+-0.2406574556374538 0.1558227483388922 -0
+-0.572682564461041 0.278299924429467 -0
+-0.5594651312782416 0.2390612912676031 -0
+-0.5889262432847411 0.2553299957949006 -0
+-0.4018778606075678 0.1541374627206472 -0
+-0.3891769950264831 0.1223512573490826 -0
+-0.4230279370930751 0.1350509452522098 -0
+-0.2464232113615398 0.5140016064691505 -0
+-0.8586985704729621 0.5387891650391928 -0
+-0.9136744192939569 0.5230415631350817 -0
+-0.8824243710819509 0.5684532987246093 -0
+-0.7094687797053872 0.7424176051011314 -0
+-0.7437653907801929 0.7205616766098386 -0
+-0.7599892862038982 0.7677435686564117 -0
+-0.2484182142748488 0.2038724415770069 -0
+-0.2423151093805272 0.2255058252476109 -0
+-0.5013485779332565 0.09418735409397534 -0
+-0.4786588698539375 0.07648075337972669 -0
+-0.514798224608168 0.06331090843488014 -0
+-0.1848908380774581 0.528941556372175 -0
+-0.1501911724851028 0.5336868017096881 -0
+-0.1742341359796192 0.5033713350410237 -0
+-0.2447211771863419 0.7519416179413357 -0
+-0.20863602274155 0.7749562075633437 -0
+-0.2122009646417923 0.7289407253778831 -0
+-0.2977406417686691 0.5651484379709055 -0
+-0.2775926028560184 0.6107302443901994 -0
+-0.3757871613457169 0.1684981126874692 -0
+-0.7380898916710316 0.6842213984254301 -0
+-0.7886103981695425 0.7095473619807103 -0
+-0.09244240288774895 0.6959048208166903 -0
+-0.8500701089256624 0.7676155380449677 -0
+-0.8334062797067546 0.7246881811380442 -0
+-0.5217862361530865 0.2310179961869461 -0
+-0.5167929716675392 0.2752180834631374 -0
+-0.2712982597440537 0.2054208952925498 -0
+-0.6205905376021643 0.2640477663437727 -0
+-0.6529644240981445 0.270492297625196 -0
+-0.6345175629635208 0.3010131602381879 -0
+-0.201693773601876 0.6187894702263427 -0
+-0.1752917667880145 0.646874372600302 -0
+-0.7414782061709357 0.07027302923716512 -0
+-0.7190066114515008 0.03352054479803735 -0
+-0.2302890169899579 0.2471615973786231 -0
+-0.2072591139597958 0.2564791764295963 -0
+-0.02930581688621555 0.7226736306953246 -0
+-0.0730990385534762 0.738739226995104 -0
+-0.8529993036850441 0.4567802964996401 -0
+-0.8725762202896847 0.4240829303505354 -0
+-0.9095255352896088 0.4606800633005607 -0
+-0.6073731044193649 0.2248091331819088 -0
+-0.8585538593275199 0.8096465785037755 -0
+-0.8027696476805615 0.7879186806239268 -0
+-0.2115461584012828 0.528988457270294 -0
+-0.5220214978290061 0.1128402564038452 -0
+-0.1580161875807417 0.224986842190914 -0
+-0.1222586733333738 0.4829832654592925 -0
+-0.1132346045489684 0.5146905753264407 -0
+-0.6720129250209292 0.2478258251865774 -0
+-0.6859399503822857 0.2847912190809925 -0
+-0.1259954981133686 0.8055162155329835 -0
+-0.1208466977541724 0.8513314662390085 -0
+-0.2149411047265593 0.2787675952089215 -0
+-0.08810997607355348 0.3987360673949411 -0
+-0.1702601815446082 0.794613310405499 -0
+-0.6725719395887786 0.7292912036898792 -0
+-0.8090140625050405 0.1172684806752535 -0
+-0.8506370002066932 0.1213753280009983 -0
+-0.3285697075892499 0.6992135450882978 -0
+-0.3394710361111983 0.6531690389253496 -0
+-0.0862846131616346 0.4323379458312684 -0
+-0.1068082391914027 0.424248072103721 -0
+-0.6219160114934223 0.1312390174798261 -0
+-0.593160540769444 0.1586859076071724 -0
+-0.275359395669972 0.9517851872047395 -0
+-0.6242264775051097 0.06587993301804325 -0
+-0.6634736830616953 0.05264042631631765 -0
+-0.4377681473455081 0.1053109694597335 -0
+-0.8599021336609269 0.3865531651343972 -0
+-0.9164283652654917 0.3904529319353178 -0
+-0.158459675676447 0.43175823545471 -0
+-0.4274514001897596 0.07849179915718557 -0
+-0.4021344113087351 0.08229046479602166 -0
+-0.5142758933473768 0.6145854700930801 -0
+-0.4801544262896814 0.5852110591661616 -0
+-0.5271029309067023 0.5777008242474152 -0
+-0.2216366178380715 0.1595484569398718 -0
+-0.9242506212032637 0.586728057888302 -0
+-0.5326255937577082 0.0405087545745644 -0
+-0.5099358856783892 0.02280215386031575 -0
+-0.2735782079085937 0.6457398068476895 -0
+-0.275912995788984 0.6884325066889382 -0
+-0.3887823141056949 0.4118515216273382 -0
+-0.3659394396584948 0.4261165837447917 -0
+-0.3578298479885931 0.3886144372570926 -0
+-0.4213647942306843 0.6287474526202622 -0
+-0.3967787901711714 0.6083000620957336 -0
+-0.4427413846708428 0.6016483144872978 -0
+-0.9518771393183669 0.3764615833590771 -0
+-0.8891076844049552 0.04085933176487253 -0
+-0.5545034267475022 0.02380315455265966 -0
+-0.5593657656772809 0.06431190912722405 -0
+-0.9555505112517908 0.6103752094775262 -0
+-0.3569478377446582 0.4550593463380913 -0
+-0.3259953716275564 0.4318222619678456 -0
+-0.809477515483481 0.8711597606631168 -0
+-0.7675310151292044 0.8942769657024575 -0
+-0.7571150669237003 0.6527285685497705 -0
+-0.9513882534024576 0.2196505118530721 -0
+-0.33709155902185 0.7806073931853227 -0
+-0.3036686758489657 0.793022367645447 -0
+-0.3201766595142317 0.7399031870147188 -0
+-0.5334665003292723 0.14653844345639 -0
+-0.1875031949067663 0.5593039239389583 -0
+-0.4476501235417116 0.6535072749856969 -0
+-0.3025781390425004 0.05967489946282125 -0
+-0.3341250535663665 0.06095643416665527 -0
+-0.4547872042622523 0.02685942921686298 -0
+-0.3352767429672557 0.482369062316282 -0
+-0.3187311686859483 0.5166751116531044 -0
+-0.8506274511919951 0.5011731518385706 -0
+-0.8136781361920712 0.4645760188885454 -0
+-0.7202132011212892 0.3043349074451702 -0
+-0.7413401854637529 0.2701743554926506 -0
+-0.7565649352799717 0.312384516295447 -0
+-0.4151732605330095 0.417061290307556 -0
+-0.6540457629171144 0.1486983635760796 -0
+-0.4912166329662576 0.6474156968403657 -0
+-0.02631492483882016 0.5759791308870515 -0
+-0.06328650765969279 0.5922894950985419 -0
+-0.160309439230445 0.5881476137100733 -0
+-0.1869647595542697 0.5881945146081923 -0
+-0.8527708752103196 0.8621190367104729 -0
+-0.9000713364554205 0.8418158941315138 -0
+-0.2675199477139659 0.7291221486153592 -0
+-0.2639550058137236 0.7751376308008197 -0
+-0.4548924760232774 0.08053802873627391 -0
+-0.03864442130806445 0.8868939989908114 -0
+-0.7931865464385217 0.3112729691908378 -0
+-0.7720595620960579 0.3454335211433574 -0
+-0.1736996406611089 0.3360531182592534 -0
+-0.1748348702260798 0.3022785902105901 -0
+-0.7052437048584981 0.5374069836924024 -0
+-0.7183279998902325 0.4969695574702658 -0
+-0.6324506041821161 0.520504094569825 -0
+-0.6023477652127628 0.5464752323038534 -0
+-0.4298014382720816 0.4379706138658965 -0
+-0.4480827930294946 0.4056782360584151 -0
+-0.1286815087375404 0.4316434310215673 -0
+-0.1305068716494593 0.3980415525852398 -0
+-0.5028915245664363 0.8938295897852729 -0
+-0.5325162726482106 0.8630008438196214 -0
+-0.2694231128633767 0.02129670152638601 -0
+-0.5752210327643734 0.8720003524115937 -0
+-0.1393845484790525 0.3341527998046055 -0
+-0.2670212729362298 0.04568299166554194 -0
+-0.3480777449284396 0.1579734467317412 -0
+-0.3491341164271945 0.1314613562414217 -0
+-0.8562177259456708 0.3486225703789639 -0
+-0.8250714304856447 0.3144870549622087 -0
+-0.7909427958274297 0.1492809699135872 -0
+-0.7685018554151133 0.1055174581165892 -0
+-0.8123655809698639 0.3822525687941815 -0
+-0.468342122698189 0.04966158307717874 -0
+-0.6915064199529719 0.3552074375493926 -0
+-0.6772200839943967 0.5608999290141709 -0
+-0.6805506396072989 0.5993308947994053 -0
+-0.6375816208648801 0.5958659311367347 -0
+-0.2680266409530021 0.2994346602980386 -0
+-0.2979381133166796 0.2976584906763499 -0
+-0.2813966325931084 0.3195053657181496 -0
+-0.5995662389015255 0.07056320605242261 -0
+-0.2724064578426283 0.3427875662523372 -0
+-0.3023179302063057 0.3410113966306484 -0
+-0.3215753397686733 0.8817798414249802 -0
+-0.2866429477597291 0.9167017417216943 -0
+-0.9449743093424841 0.4966887147241797 -0
+-0.9645512259471247 0.4639913485750751 -0
+-0.6008259769764051 0.1925246472965815 -0
+-0.5680433738949806 0.1822526229436276 -0
+-0.4682206221772041 0.4544634872668282 -0
+-0.4353110896807191 0.465846541515969 -0
+-0.3002855385027075 0.1012782641022519 -0
+-0.2775555646513884 0.1053375510183215 -0
+-0.2935800785069282 0.08081568278894009 -0
+-0.1358646497041799 0.5649378299808078 -0
+-0.5207728110725041 0.956085705017801 -0
+-0.5707728110721682 0.956085705017801 -0
+-0.6572331692139685 0.3356637491852149 -0
+-0.7011647001985045 0.3270013798837888 -0
+-0.4137036471529838 0.4869690916478546 -0
+-0.3920325523755813 0.5142788076260453 -0
+-0.375220810998194 0.476663384093228 -0
+-0.3968362986025357 0.543763253229578 -0
+-0.3583534624477459 0.5334575456749514 -0
+-0.665359441288724 0.2124493700110676 -0
+-0.6983349675728652 0.2267482914668641 -0
+-0.6788148459776271 0.9570340057940425 -0
+-0.7002851438055995 0.929101772026764 -0
+-0.7214702978286658 0.9720677662327213 -0
+-0.1474930738489323 0.2993598409699873 -0
+-0.4617484261896891 0.5364554642505842 -0
+-0.4555684222301685 0.564763668641633 -0
+-0.4243353845708505 0.5528927195717205 -0
+-0.4715393677776135 0.6788272668142362 -0
+-0.2180957403447705 0.3643668643198015 -0
+-0.2314114516495802 0.3974349091023247 -0
+-0.7234069394933249 0.1022855184754988 -0
+-0.7162894853604314 0.1329843712734779 -0
+-0.6861037056324009 0.6332734751126042 -0
+-0.4978383597251695 0.9279495792298605 -0
+-0.4591842621486565 0.9096077589795312 -0
+-0.1520368402722805 0.4830980698924353 -0
+-0.3649123894875372 0.1165035966094432 -0
+-0.3860624659730444 0.0974170791410057 -0
+-0.6288148459779739 0.9570340057940425 -0
+-0.6924950446642133 0.8951260713747505 -0
+-0.735150496515252 0.9101598318134293 -0
+-0.5879268392533072 0.02380315455265966 -0
+-0.4521228310581064 0.5034619650487863 -0
+-0.8671157548611361 0.2001665080894189 -0
+-0.8776189498594182 0.1510407667252074 -0
+-0.9132797018031974 0.1901752823423749 -0
+-0.2487216510882127 0.3478915443190001 -0
+-0.4770655486547242 0.9718638742120592 -0
+-0.6324902712938283 0.2012424178454536 -0
+-0.3232756833358302 0.09912066676909694 -0
+-0.6810940075315219 0.03352054479803735 -0
+-0.8095768036695585 0.2814380501142983 -0
+-0.3112835520910053 0.9649165545169546 -0
+-0.3778698057697892 0.07644280405638218 -0
+-0.1252079476063411 0.5393676086496563 -0
+-0.09890808176804557 0.5459416035975604 -0
+-0.3612835520912134 0.9649165545169546 -0
+-0.9687001099514729 0.5263528484095961 -0
+-0.8968009471487546 0.1113841022539543 -0
+-0.9618914484007397 0.1705247704888606 -0
+-0.9618914484007397 0.120524770488989 -0
+-0.2951468244163656 0.7116285195484221 -0
+-0.2444317859050305 0.2960668032567835 -0
+-0.5303644787698256 0.1742093278629706 -0
+-0.5380299149767865 0.2080480675523797 -0
+-0.794507920512835 0.1810031112395194 -0
+-0.7539957134229078 0.1692520886808551 -0
+-0.1834641699475406 0.7143329279105939 -0
+-0.1347610432183904 0.4579647549731911 -0
+-0.3075542674388085 0.6359293151645109 -0
+-0.1101982047718884 0.8945883420359949 -0
+-0.4555265119789803 0.3023345026746658 -0
+-0.4264068945550135 0.2770416234352408 -0
+-0.3954697975917961 0.9527874280847919 -0
+-0.3567533496813452 0.9177039826017467 -0
+-0.6887958350124839 0.7764730957364523 -0
+-0.121553783464032 0.9618925287025398 -0
+-0.08175563725152929 0.5639834094269 -0
+-0.862395151747506 0.235126994869278 -0
+-0.8267343998037269 0.1959924792521105 -0
+-0.2509099939819913 0.09027291368019587 -0
+-0.2583795918712939 0.1081580550702422 -0
+-0.2384394811976761 0.1135559990454284 -0
+-0.1585428508505737 0.6824014268596647 -0
+-0.03311660735879964 0.922436704428849 -0
+-0.03311660735879964 0.9682385187714924 -0
+-0.6869149329120102 0.1599053157416936 -0
+-0.7210560362890812 0.1644508918231386 -0
+-0.8317377422033891 0.2578025509588194 -0
+-0.6934885290093038 0.4661018600744737 -0
+-0.6604742250462172 0.4970111492480566 -0
+-0.09169654579847131 0.2518762578195273 -0
+-0.1136628958663103 0.2386394688505329 -0
+-0.1096885832305206 0.2595458436843091 -0
+-0.6481844003440698 0.0191198815182803 -0
+-0.3235349149129026 0.5461595572566372 -0
+-0.3373629355304667 0.5819308719927524 -0
+-0.2609732666286017 0.2742199282149838 -0
+-0.9645512259471247 0.4139913485752154 -0
+-0.1127712191404376 0.2768141267081062 -0
+-0.5881847879666027 0.3898156831485416 -0
+-0.6176253856582803 0.3607723061890787 -0
+-0.3692797042028566 0.5991705957535911 -0
+-0.3434854310586231 0.6181594764678594 -0
+-0.08311660735900762 0.9682385187714924 -0
+-0.5977377316081879 0.5822551002629169 -0
+-0.0697822941941566 0.5393063761036844 -0
+-0.6332630676701791 0.8729486531878351 -0
+-0.5995876570487551 0.9131197108118437 -0
+-0.7312746447066918 0.2315494883245806 -0
+-0.7246211609744866 0.1961730331490709 -0
+-0.9693234367952881 0.03212278308051283 -0
+-0.9235216224522287 0.03212278308051283 -0
+-0.04256330213010407 0.2640389574277008 -0
+-0.01817701185790877 0.2664407973813109 -0
+-0.01817701185790877 0.2908312085946855 -0
+-0.26964294870141 0.3693975752314989 -0
+-0.9693234367952881 0.08212278308042015 -0
+-0.5507243560299311 0.2897249187015846 -0
+-0.31749711925788 0.2021678400934988 -0
+-0.2940157951630977 0.2065639126072153 -0
+-0.9268470705914378 0.8186337678938448 -0
+-0.9210640864742374 0.8711062261005421 -0
+-0.02273666863894228 0.4808960045516695 -0
+-0.02273666863894228 0.5122782921372632 -0
+-0.390656294643015 0.5720714576206266 -0
+-0.4785535980929123 0.02280215386031575 -0
+-0.9194347441628764 0.919434744162906 -0
+-0.9222905679935581 0.9722905679938004 -0
+-0.2580232124006576 0.06682377499166077 -0
+-0.7122700595343507 0.6637428831788987 -0
+-0.3558379877331805 0.1850337846016902 -0
+-0.6588123138457642 0.1801648841257403 -0
+-0.4833558687174244 0.5153329141186987 -0
+-0.7027197520733213 0.8532891178166692 -0
+-0.7018858909509346 0.8099968008098136 -0
+-0.7676263788653743 0.2395990971748574 -0
+-0.1352737460604406 0.2270882287058393 -0
+-0.3380712801479417 0.2022726765036416 -0
+-0.3274398280899186 0.2299313979511781 -0
+-0.904232935543303 0.07298211484538536 -0
+-0.9312148851960279 0.1026475535695946 -0
+-0.1303721182612164 0.3158741082714456 -0
+-0.1206992495304776 0.2973598880643672 -0
+-0.0682474068535361 0.2589894763730416 -0
+-0.5130483597695541 0.514747035983525 -0
+-0.5034227646379714 0.4817535367817271 -0
+-0.07176102866686408 0.9009343321049474 -0
+-0.01511600708065314 0.3104981494631791 -0
+-0.01511600708065314 0.3364749356123994 -0
+-0.7897873173992049 0.2159635980193785 -0
+-0.5317129645112773 0.5419209562883517 -0
+-0.5658344315689726 0.5712953672152702 -0
+-0.02631492483882016 0.5425557183812612 -0
+-0.2268882412875965 0.1351668490364543 -0
+-0.2841481317808128 0.2286835442263697 -0
+-0.5801854680364305 0.3059936232288822 -0
+-0.5572814274524505 0.3921107709544336 -0
+-0.5521785732862621 0.42368717111758 -0
+-0.5207663071536321 0.3938413813022692 -0
+-0.643487775079287 0.831111699629754 -0
+-0.6678543993636687 0.872231058030004 -0
+-0.6622746861160793 0.5339420200297317 -0
+-0.6125870778568914 0.0191198815182803 -0
+-0.9687001099514729 0.5763528484097223 -0
+-0.6248592827179882 0.3292192179037916 -0
+-0.5949097794078326 0.3261217172420517 -0
+-0.5243893543387724 0.4532927200559845 -0
+-0.4270655486545271 0.9718638742120592 -0
+-0.4891872118780051 0.4260026705410856 -0
+-0.4946968632866426 0.4538785981911582 -0
+-0.5567725218339727 0.3599698933332308 -0
+-0.06203812843924957 0.2778321137079627 -0
+-0.9722905679937663 0.9722905679938004 -0
+-0.9722905679937663 0.9222905679936687 -0
+-0.2798481651911813 0.06373418637889085 -0
+-0.771470297828319 0.9720677662327213 -0
+-0.09565026355272163 0.2933283940095645 -0
+-0.9739199103051275 0.8739620499313049 -0
+-0.9739199103051275 0.8239620499311732 -0
+-0.2474019663888779 0.4169915877578874 -0
+-0.2694290504871918 0.4389543249190576 -0
+-0.1046703908226236 0.9301310474740324 -0
+-0.07396348512383438 0.2910922162706134 -0
+-0.04827938040040235 0.2961416973252726 -0
+-0.9462104782988938 0.896252617925237 -0
+-0.2974714705696548 0.4371899675852162 -0
+-0.04905159347776244 0.5270707556890261 -0
+-0.04597804392092329 0.3391992732573921 -0
+-0.04521837562314673 0.3158086381937661 -0
+-0.6649890508343259 0.7968703993985614 -0
+-0.4002406213868382 0.2887978433250916 -0
+-0.7753211142705906 0.9282526663544711 -0
+-0.2619486566862921 0.3940582319537245 -0
+-0.4225353462446588 0.9246513022968513 -0
+-0.3064630724834915 0.4082472049919166 -0
+-0.5729515709767227 0.3375467115141693 -0
+-0.295716894438215 0.2537071733986371 -0
+-0.320344177862408 0.2512130804830102 -0
+-0.3091954051007662 0.275093692340612 -0
+-0.3225653967408725 0.2951643977607231 -0
+-0.2856334634407077 0.3889542538870616 -0
+-0.3141573644986093 0.383586548269691 -0
+-0.3409183387524697 0.2513179168931531 -0
+-0.3568689576042921 0.06836294543090313 -0
+-0.339053956396173 0.08416290713711835 -0
+-0.7998528581562662 0.2545884651874485 -0
+-0.03329301893856191 0.3025485356311154 -0
+-0.2494045039711994 0.2491962990427164 -0
+-0.3359332461844393 0.3167207174159978 -0
+-0.3471905379685259 0.29415591908026 -0
+-0.3460195873737558 0.1065271780333448 -0
+-0.2729993590191711 0.2525641560839715 -0
+-0.3701755485541727 0.2885219335302457 -0
+-0.4720083578152894 0.4074886957955506 -0
+-0.498484598924728 0.4069038067198805 -0
+-0.323739446858582 0.3363609886993321 -0
+-0.3147492721081019 0.3596431892335197 -0
+-0.6059038372706589 0.04292303607093996 -0
+-0.3355788811508856 0.3789361403383747 -0
+-0.3568076991106059 0.266965613874971 -0
+-0.4573801800762174 0.38657937223721 -0
+2 12 0 791
+1891
+1892
+1893
+1894
+1895
+1896
+1897
+1898
+1899
+1900
+1901
+1902
+1903
+1904
+1905
+1906
+1907
+1908
+1909
+1910
+1911
+1912
+1913
+1914
+1915
+1916
+1917
+1918
+1919
+1920
+1921
+1922
+1923
+1924
+1925
+1926
+1927
+1928
+1929
+1930
+1931
+1932
+1933
+1934
+1935
+1936
+1937
+1938
+1939
+1940
+1941
+1942
+1943
+1944
+1945
+1946
+1947
+1948
+1949
+1950
+1951
+1952
+1953
+1954
+1955
+1956
+1957
+1958
+1959
+1960
+1961
+1962
+1963
+1964
+1965
+1966
+1967
+1968
+1969
+1970
+1971
+1972
+1973
+1974
+1975
+1976
+1977
+1978
+1979
+1980
+1981
+1982
+1983
+1984
+1985
+1986
+1987
+1988
+1989
+1990
+1991
+1992
+1993
+1994
+1995
+1996
+1997
+1998
+1999
+2000
+2001
+2002
+2003
+2004
+2005
+2006
+2007
+2008
+2009
+2010
+2011
+2012
+2013
+2014
+2015
+2016
+2017
+2018
+2019
+2020
+2021
+2022
+2023
+2024
+2025
+2026
+2027
+2028
+2029
+2030
+2031
+2032
+2033
+2034
+2035
+2036
+2037
+2038
+2039
+2040
+2041
+2042
+2043
+2044
+2045
+2046
+2047
+2048
+2049
+2050
+2051
+2052
+2053
+2054
+2055
+2056
+2057
+2058
+2059
+2060
+2061
+2062
+2063
+2064
+2065
+2066
+2067
+2068
+2069
+2070
+2071
+2072
+2073
+2074
+2075
+2076
+2077
+2078
+2079
+2080
+2081
+2082
+2083
+2084
+2085
+2086
+2087
+2088
+2089
+2090
+2091
+2092
+2093
+2094
+2095
+2096
+2097
+2098
+2099
+2100
+2101
+2102
+2103
+2104
+2105
+2106
+2107
+2108
+2109
+2110
+2111
+2112
+2113
+2114
+2115
+2116
+2117
+2118
+2119
+2120
+2121
+2122
+2123
+2124
+2125
+2126
+2127
+2128
+2129
+2130
+2131
+2132
+2133
+2134
+2135
+2136
+2137
+2138
+2139
+2140
+2141
+2142
+2143
+2144
+2145
+2146
+2147
+2148
+2149
+2150
+2151
+2152
+2153
+2154
+2155
+2156
+2157
+2158
+2159
+2160
+2161
+2162
+2163
+2164
+2165
+2166
+2167
+2168
+2169
+2170
+2171
+2172
+2173
+2174
+2175
+2176
+2177
+2178
+2179
+2180
+2181
+2182
+2183
+2184
+2185
+2186
+2187
+2188
+2189
+2190
+2191
+2192
+2193
+2194
+2195
+2196
+2197
+2198
+2199
+2200
+2201
+2202
+2203
+2204
+2205
+2206
+2207
+2208
+2209
+2210
+2211
+2212
+2213
+2214
+2215
+2216
+2217
+2218
+2219
+2220
+2221
+2222
+2223
+2224
+2225
+2226
+2227
+2228
+2229
+2230
+2231
+2232
+2233
+2234
+2235
+2236
+2237
+2238
+2239
+2240
+2241
+2242
+2243
+2244
+2245
+2246
+2247
+2248
+2249
+2250
+2251
+2252
+2253
+2254
+2255
+2256
+2257
+2258
+2259
+2260
+2261
+2262
+2263
+2264
+2265
+2266
+2267
+2268
+2269
+2270
+2271
+2272
+2273
+2274
+2275
+2276
+2277
+2278
+2279
+2280
+2281
+2282
+2283
+2284
+2285
+2286
+2287
+2288
+2289
+2290
+2291
+2292
+2293
+2294
+2295
+2296
+2297
+2298
+2299
+2300
+2301
+2302
+2303
+2304
+2305
+2306
+2307
+2308
+2309
+2310
+2311
+2312
+2313
+2314
+2315
+2316
+2317
+2318
+2319
+2320
+2321
+2322
+2323
+2324
+2325
+2326
+2327
+2328
+2329
+2330
+2331
+2332
+2333
+2334
+2335
+2336
+2337
+2338
+2339
+2340
+2341
+2342
+2343
+2344
+2345
+2346
+2347
+2348
+2349
+2350
+2351
+2352
+2353
+2354
+2355
+2356
+2357
+2358
+2359
+2360
+2361
+2362
+2363
+2364
+2365
+2366
+2367
+2368
+2369
+2370
+2371
+2372
+2373
+2374
+2375
+2376
+2377
+2378
+2379
+2380
+2381
+2382
+2383
+2384
+2385
+2386
+2387
+2388
+2389
+2390
+2391
+2392
+2393
+2394
+2395
+2396
+2397
+2398
+2399
+2400
+2401
+2402
+2403
+2404
+2405
+2406
+2407
+2408
+2409
+2410
+2411
+2412
+2413
+2414
+2415
+2416
+2417
+2418
+2419
+2420
+2421
+2422
+2423
+2424
+2425
+2426
+2427
+2428
+2429
+2430
+2431
+2432
+2433
+2434
+2435
+2436
+2437
+2438
+2439
+2440
+2441
+2442
+2443
+2444
+2445
+2446
+2447
+2448
+2449
+2450
+2451
+2452
+2453
+2454
+2455
+2456
+2457
+2458
+2459
+2460
+2461
+2462
+2463
+2464
+2465
+2466
+2467
+2468
+2469
+2470
+2471
+2472
+2473
+2474
+2475
+2476
+2477
+2478
+2479
+2480
+2481
+2482
+2483
+2484
+2485
+2486
+2487
+2488
+2489
+2490
+2491
+2492
+2493
+2494
+2495
+2496
+2497
+2498
+2499
+2500
+2501
+2502
+2503
+2504
+2505
+2506
+2507
+2508
+2509
+2510
+2511
+2512
+2513
+2514
+2515
+2516
+2517
+2518
+2519
+2520
+2521
+2522
+2523
+2524
+2525
+2526
+2527
+2528
+2529
+2530
+2531
+2532
+2533
+2534
+2535
+2536
+2537
+2538
+2539
+2540
+2541
+2542
+2543
+2544
+2545
+2546
+2547
+2548
+2549
+2550
+2551
+2552
+2553
+2554
+2555
+2556
+2557
+2558
+2559
+2560
+2561
+2562
+2563
+2564
+2565
+2566
+2567
+2568
+2569
+2570
+2571
+2572
+2573
+2574
+2575
+2576
+2577
+2578
+2579
+2580
+2581
+2582
+2583
+2584
+2585
+2586
+2587
+2588
+2589
+2590
+2591
+2592
+2593
+2594
+2595
+2596
+2597
+2598
+2599
+2600
+2601
+2602
+2603
+2604
+2605
+2606
+2607
+2608
+2609
+2610
+2611
+2612
+2613
+2614
+2615
+2616
+2617
+2618
+2619
+2620
+2621
+2622
+2623
+2624
+2625
+2626
+2627
+2628
+2629
+2630
+2631
+2632
+2633
+2634
+2635
+2636
+2637
+2638
+2639
+2640
+2641
+2642
+2643
+2644
+2645
+2646
+2647
+2648
+2649
+2650
+2651
+2652
+2653
+2654
+2655
+2656
+2657
+2658
+2659
+2660
+2661
+2662
+2663
+2664
+2665
+2666
+2667
+2668
+2669
+2670
+2671
+2672
+2673
+2674
+2675
+2676
+2677
+2678
+2679
+2680
+2681
+-0.4305153885303711 -0.5245845151806718 0
+-0.4321252560326031 -0.2378191885452552 0
+-0.2168647613521659 -0.4203682649064875 0
+-0.7049884513050704 -0.2621247466423738 0
+-0.2482861190865842 -0.7059261357558753 0
+-0.693244884281682 -0.6952357130545582 0
+-0.4865565228117184 -0.7395241352277649 0
+-0.630650143112254 -0.48357322378815 0
+-0.2845681216765733 -0.2775877852562389 0
+-0.1608478745829416 -0.5592570230408395 0
+-0.3680269185409759 -0.1414377748175201 0
+-0.5603779376880197 -0.1484138832542184 0
+-0.1216031543784338 -0.3504315384321453 0
+-0.3806727224357932 -0.3743493751396391 0
+-0.5258691613198205 -0.3622649811391228 0
+-0.81604998868512 -0.4201831635496149 0
+-0.283912621151105 -0.5293771232347902 0
+-0.8314550029173569 -0.1610319924722514 0
+-0.811253398082419 -0.8299497210827345 0
+-0.1644045528922159 -0.837271305811107 0
+-0.5612243979643977 -0.6070752351743337 0
+-0.8274485222609561 -0.5842009006287204 0
+-0.320583575356584 -0.833726573816051 0
+-0.1049828762794838 -0.4578499505400483 0
+-0.6821483819833604 -0.1284387951920329 0
+-0.6088964433857974 -0.831829294787585 0
+-0.1925037978724885 -0.2866831192441144 0
+-0.375402199731013 -0.6353992002286981 0
+-0.465209223179026 -0.1073571990388219 0
+-0.1262731720030668 -0.6880923128980324 0
+-0.2811659231263386 -0.1833012636733954 0
+-0.5432214524545416 -0.2620312199021694 0
+-0.3163100523582473 -0.07675639587287049 0
+-0.5331152556901012 -0.4811676586465534 0
+-0.8414616877166816 -0.2846521358856692 0
+-0.6475748889684358 -0.3638698068508186 0
+-0.4642374269899232 -0.8754877695349437 0
+-0.2933277554558256 -0.364293597164836 0
+-0.3480139889799803 -0.230036234361321 0
+-0.7201891027368155 -0.5643648926768415 0
+-0.8725266621348053 -0.7034887221109694 0
+-0.2231996223992857 -0.2234711235835176 0
+-0.3939417511054799 -0.06131618971139816 0
+-0.581523714266206 -0.7179965738562936 0
+-0.06020473708498717 -0.3094017998879232 0
+-0.2436165433258036 -0.620540736073378 0
+-0.3170037697137198 -0.4607650245611452 0
+-0.3605583874120928 -0.3157122387355347 0
+-0.08693473871067287 -0.5212645702743448 0
+-0.6178888791359763 -0.0935201029995259 0
+-0.2089338015719745 -0.4986260897035107 0
+-0.4688305239438082 -0.342909925150359 0
+-0.4357288026741598 -0.1668371506237743 0
+-0.4673273887303557 -0.6220957050118264 0
+-0.06758635004378542 -0.4068259411224885 0
+-0.4627109707685666 -0.4265875596167557 0
+-0.7273603973738658 -0.8761841311614157 0
+-0.639037398736788 -0.2335269037307809 0
+-0.0875864433345213 -0.7737611252548598 0
+-0.353599542687116 -0.7274882125545945 0
+-0.5374879326874871 -0.08101750914912879 0
+-0.7865731220927241 -0.07350496887825554 0
+-0.1378202051181936 -0.2808456207629089 0
+-0.07394316564174527 -0.6272308082640599 0
+-0.2507187913386958 -0.9035703744094791 0
+-0.2842610246471677 -0.1258001323316333 0
+-0.889948618684968 -0.4933774294496653 0
+-0.1902333387425466 -0.3542321753414411 0
+-0.7463576928002845 -0.4834900402325683 0
+-0.2411562352860996 -0.7979571001267963 0
+-0.9037542786367339 -0.3529231667191795 0
+-0.735437950937508 -0.3465450682479665 0
+-0.1523801411955971 -0.4054369115030861 0
+-0.5003510198516314 -0.2000047724717227 0
+-0.251485160229431 -0.3212815353398384 0
+-0.8942883523382201 -0.8942883523382111 0
+-0.9027765068049153 -0.2393010237065863 0
+-0.1761158101970005 -0.751955314999891 0
+-0.8698189974960295 -0.08171866352974506 0
+-0.7575608381083132 -0.2009742300067874 0
+-0.7256926751290925 -0.7895994971477045 0
+-0.07728884261612889 -0.8653916266669099 0
+-0.3968919057755965 -0.4493536681150373 0
+-0.7829348990603812 -0.6732070837963018 0
+-0.3631572086747002 -0.5629419912784841 0
+-0.5415456221429494 -0.9121714100356022 0
+-0.6021436764675405 -0.2945686289567646 0
+-0.4929814638490071 -0.5483264133204967 0
+-0.6342510652519781 -0.5574349653515003 0
+-0.5886936935850805 -0.4219565607697445 0
+-0.4445757288675289 -0.05371885843372597 0
+-0.1597710038779483 -0.6170382043793072 0
+-0.6963832902491475 -0.0670410895960747 0
+-0.9237828968014795 -0.1410495409781634 0
+-0.9058543205726207 -0.7893434359248165 0
+-0.5234869231534717 -0.8138302776036406 0
+-0.04309382702429896 -0.4476968540326782 0
+-0.9111010225035817 -0.6207504189561058 0
+-0.1771398163389617 -0.242106281685464 0
+-0.143107566927648 -0.92378505740508 0
+-0.05861163377243109 -0.7037173287353481 0
+-0.6259431438508685 -0.1689579319601262 0
+-0.4184827737272781 -0.7973790713762353 0
+-0.807701632884543 -0.9123698002434993 0
+-0.5151058772021595 -0.672735688668905 0
+-0.2354058321879287 -0.1802043562423097 0
+-0.06172407368054029 -0.3561830700151752 0
+-0.6409121764777822 -0.6342968969219691 0
+-0.2609189295487936 -0.4642937392288279 0
+-0.3909395951819279 -0.905574856169584 0
+-0.164539210157297 -0.4580795594063338 0
+-0.4279728583530675 -0.6849188449595675 0
+-0.4103270715119903 -0.1032647398806452 0
+-0.3115686623862332 -0.6009197527070208 0
+-0.6576296919545608 -0.9140680115880853 0
+-0.6966787510384271 -0.4217546454409841 0
+-0.3281285713159032 -0.1745091186459622 0
+-0.6518989948958753 -0.7633466943252001 0
+-0.4903644908805368 -0.2884049470241053 0
+-0.2708501046556091 -0.08487496970500968 0
+-0.492108516528849 -0.0456043077206315 0
+-0.2888462257267535 -0.04259340305277201 0
+-0.23737841158063 -0.2708520711737286 0
+-0.1395344703872639 -0.5081165803785367 0
+-0.6916814838406601 -0.1913718362913544 0
+-0.3535497162207916 -0.5039731000714187 0
+-0.3068656671998568 -0.2298265615410353 0
+-0.3035398724913838 -0.670938877622001 0
+-0.08772223316268159 -0.2727826326533035 0
+-0.3519400547744856 -0.04515647246044004 0
+-0.506555062970525 -0.1446630036585616 0
+-0.7942858972787039 -0.745887640165119 0
+-0.8113062836990224 -0.5089688742274759 0
+-0.214158515230591 -0.5593508248370772 0
+-0.1908125296980807 -0.6767105408212968 0
+-0.1571659425796711 -0.3178740611770657 0
+-0.5704444651735475 -0.5355154992562067 0
+-0.4206885330774239 -0.3162640583252264 0
+-0.03635402371581754 -0.282881594762622 0
+-0.06623321471759927 -0.9364770375429849 0
+-0.04547333727788455 -0.4967933294450282 0
+-0.9291024518942496 -0.427982697151456 0
+-0.9374002199029458 -0.5527056968204981 0
+-0.3835474041504578 -0.1955584505574182 0
+-0.9386468735905763 -0.06424556616102566 0
+-0.2459581419469944 -0.3745015532981618 0
+-0.3113081049567858 -0.3177291960964608 0
+-0.4737302735858416 -0.4823394149169008 0
+-0.5757088101019416 -0.2160913626330367 0
+-0.1316549332983596 -0.2463090547153147 0
+-0.05262984967764033 -0.557348181933024 0
+-0.3302413143134131 -0.1214849376653234 0
+-0.2459090790869788 -0.1314411404354747 0
+-0.5582272596053205 -0.3174186175009998 0
+-0.2779391714255899 -0.4136149106092872 0
+-0.7776919196224356 -0.2782239643429274 0
+-0.5156634529874436 -0.4254177814654156 0
+-0.3338226885249591 -0.2725995994249852 0
+-0.5812435986670748 -0.04760630910531933 0
+-0.4541310973073897 -0.9437277484241188 0
+-0.3349869735413931 -0.4028794993745461 0
+-0.4181553806113298 -0.5812009239627691 0
+-0.03023201416130628 -0.322215476499609 0
+-0.3225671041807625 -0.9298331090339095 0
+-0.6305640758742431 -0.03823976303656059 0
+-0.5876758823481248 -0.3576748055273388 0
+-0.1108814248254183 -0.570618636920776 0
+-0.2614305963617688 -0.2275405269117042 0
+-0.3361707887603781 -0.3549927813022034 0
+-0.3617978604340986 -0.09156941840136622 0
+-0.4334546152904226 -0.3847689125000746 0
+-0.3797927096962527 -0.2613316283249567 0
+-0.7312952347870194 -0.6322500533032392 0
+-0.7429405956566382 -0.9441355324654428 0
+-0.9478398206102548 -0.8479240998628731 0
+-0.1086336021033215 -0.3906461936673936 0
+-0.8086811732546078 -0.3443219740387482 0
+-0.2867537763413475 -0.7523181614748431 0
+-0.6668914494595011 -0.3074576915196111 0
+-0.9445811359875327 -0.944581135987601 0
+-0.6902983069801806 -0.5104490747079632 0
+-0.8220137966900968 -0.2309529660319696 0
+-0.4813057448620122 -0.3883898319743455 0
+-0.7504305887375025 -0.1375299473549229 0
+-0.6780791067727766 -0.8303941044719227 0
+-0.1035782939427617 -0.3138741553658255 0
+-0.9362633310674027 -0.7017443610550896 0
+-0.9529271602863103 -0.7446717179620131 0
+-0.889190491353713 -0.746416079017893 0
+-0.3061947979815355 -0.1501546254887978 0
+-0.3072511694802904 -0.1236425349984784 0
+-0.3291849428146582 -0.1479970281556428 0
+-0.7738188124988858 -0.574282896652781 0
+-0.7657476932179189 -0.5366668834521587 0
+-0.8193774029799892 -0.5465848874280982 0
+-0.2827134738867532 -0.1545506980025144 0
+-0.3046472472211209 -0.1789051911596788 0
+-0.2938135240766131 -0.02129670152638601 0
+-0.3253604386004791 -0.02257823623022002 0
+-0.3203931402506195 -0.04387493775660602 0
+-0.589133408411998 -0.1209669931268722 0
+-0.5489329351877534 -0.1147156962016736 0
+-0.5776884059117318 -0.08726880607432734 0
+-0.4339270293533815 -0.2023281695845148 0
+-0.4680399112628956 -0.1834209615477485 0
+-0.4662381379421173 -0.218911980508489 0
+-0.03697158282087264 -0.6109204440525695 0
+-0.03697158282087264 -0.6465177665397276 0
+-0.7332733977685499 -0.5239274664547049 0
+-0.7788319882496535 -0.4962294572300222 0
+-0.5818826994011776 -0.4823704412173517 0
+-0.5609044746375909 -0.4515621097081489 0
+-0.6096719183486672 -0.4527648922789472 0
+-0.1999881591954785 -0.2001239090925599 0
+-0.2001697193691237 -0.2327887026344908 0
+-0.1769582561653166 -0.2094414881435332 0
+-0.04379322166726065 -0.7576955289550805 0
+-0.04379322166726065 -0.7980740036369841 0
+-0.775743969811314 -0.3833641158987907 0
+-0.7563643698617736 -0.4209689044952995 0
+-0.7160583509879676 -0.3841498568444753 0
+-0.9518771393183669 -0.3264615833592229 0
+-0.9032653927208245 -0.2961120952128829 0
+-0.9513882534024576 -0.2696505118529263 0
+-0.6005473041429008 -0.5095443615221783 0
+-0.5517798604318244 -0.50834157895138 0
+-0.370615554923943 -0.3450308069375869 0
+-0.3906234602447584 -0.3159881485303805 0
+-0.4006806277566085 -0.3453067167324328 0
+-0.5952100788260017 -0.7749129343219393 0
+-0.5661916832696345 -0.8228297861956128 0
+-0.5525053187098388 -0.765913425729967 0
+-0.2060912640898001 -0.178490525421956 0
+-0.2293027272936072 -0.2018377399129136 0
+-0.7812038407427022 -0.4518366018910916 0
+-0.7215182219193559 -0.4526223428367762 0
+-0.4973498426318144 -0.3525874531447409 0
+-0.4795975074121725 -0.3156574360872321 0
+-0.5081168261001787 -0.3253349640816141 0
+-0.8726079831767077 -0.3187876513024243 0
+-0.8721190972607984 -0.2619765797961277 0
+-0.03379317502189271 -0.4064465178956578 0
+-0.05534008853404219 -0.4272613975775834 0
+-0.02154691351214948 -0.4268819743507526 0
+-0.06627739970708818 -0.6654740684997039 0
+-0.02930581688621555 -0.6847610267753718 0
+-0.8918138423191935 -0.6621195705335375 0
+-0.9555505112517908 -0.6603752094776578 0
+-0.8499875921978808 -0.6438448113698448 0
+-0.8277307805975933 -0.6883479029536356 0
+-0.8051917106606686 -0.6287039922125112 0
+-0.5340401185389622 -0.7287603545420293 0
+-0.5050217229825951 -0.7766772064157027 0
+-0.4709848484403749 -0.805604674489938 0
+-0.4525196482694982 -0.7684516033020001 0
+-0.4000044228866834 -0.03065809485569908 0
+-0.3729409029399827 -0.0532363310859191 0
+-0.3790035747211863 -0.02257823623022002 0
+-0.03086203684027014 -0.3811250823420011 0
+-0.06465521186216286 -0.3815045055688319 0
+-0.3513372247495434 -0.02257823623022002 0
+-0.6181342912767582 -0.3929131838102816 0
+-0.6721268200034315 -0.3928122261459013 0
+-0.6426862223117538 -0.4218556031053643 0
+-0.8044800020552256 -0.03675248443912777 0
+-0.7641015273732892 -0.03675248443912777 0
+-0.4270715741839232 -0.3505164854126505 0
+-0.4070636688631079 -0.3795591438198568 0
+-0.4953577553660841 -0.244204859747914 0
+-0.4612448734565699 -0.2631120677846803 0
+-0.3657806965652191 -0.2127973424593696 0
+-0.3816700569233553 -0.2284450394411875 0
+-0.3639033493381165 -0.2456839313431389 0
+-0.1574800107285776 -0.2614759512241864 0
+-0.1347375692082766 -0.2635773377391117 0
+-0.1543973748186607 -0.2442076682003893 0
+-0.4938621750716974 -0.8446590235692921 0
+-0.4413601003586006 -0.8364334204555895 0
+-0.4504690129265929 -0.1370971748312981 0
+-0.4858821430747755 -0.1260101013486917 0
+-0.4711419328223424 -0.155750077141168 0
+-0.8971441761689019 -0.9471441761691054 0
+-0.8538508164420633 -0.9561849001217496 0
+-0.8509949926113816 -0.9033290762908552 0
+-0.09595880749507832 -0.4895572604071966 0
+-0.06620403799427871 -0.5090289498596865 0
+-0.07522810677868416 -0.4773216399925383 0
+-0.386041158207197 -0.7624336419654149 0
+-0.3907862005200917 -0.706203528757081 0
+-0.4232278160401728 -0.7411489581679014 0
+-0.5713740561153018 -0.6625359045153136 0
+-0.60106828722109 -0.6206860660481514 0
+-0.6112179453719941 -0.6761467353891314 0
+-0.8692747723822689 -0.6024756597924131 0
+-0.5035874530909163 -0.3753274065567342 0
+-0.4750681344029102 -0.3656498785623523 0
+-0.09166361402948706 -0.3533073042236602 0
+-0.08265118381165097 -0.3350286126905004 0
+-0.1125907241605977 -0.3321528468989854 0
+-0.6636644470753406 -0.4526639346145671 0
+-0.2075616721154558 -0.870420840110293 0
+-0.2027803940891578 -0.8176142029689516 0
+-0.2459375133123977 -0.8507637372681377 0
+-0.7793718785239878 -0.6082254769659798 0
+-0.7257421687619174 -0.5983074729900404 0
+-0.07403835165189138 -0.4527734022863633 0
+-0.04428358215109175 -0.4722450917388532 0
+-0.6167113545810406 -0.7406716340907468 0
+-0.6303977191408363 -0.7975879945563925 0
+-0.4253214117677079 -0.02685942921686298 0
+-0.4192587399865044 -0.05751752407256206 0
+-0.8038508164422714 -0.9561849001217496 0
+-0.0824376429753251 -0.8195763759608848 0
+-0.03864442130806445 -0.8438892543430091 0
+-0.165162001495341 -0.2837643700035116 0
+-0.1848218071057251 -0.2643947004647892 0
+-0.06096440538276373 -0.3327924349515492 0
+-0.08189151551387441 -0.3116379776268743 0
+-0.4078363300915305 -0.2166888195513367 0
+-0.4059589828644279 -0.249575408435106 0
+-0.4275885110859255 -0.8905313128522638 0
+-0.404711184454603 -0.8514769637729097 0
+-0.5483147957341827 -0.6953661312625993 0
+-0.5381651375832786 -0.6399054619216193 0
+-0.2128992814620702 -0.4594971773049991 0
+-0.1867365058646358 -0.4783528245549222 0
+-0.1907019857547315 -0.4392239121564107 0
+-0.369533174541931 -0.8155528225961431 0
+-0.3557615852692559 -0.8696507149928175 0
+-0.1168570847598468 -0.6221345063216835 0
+-0.09241229523358177 -0.5989247225924179 0
+-0.1353262143516833 -0.5938284206500416 0
+-0.1069298076687941 -0.7309267190764461 0
+-0.1511944911000336 -0.7200238139489618 0
+-0.1318511267657609 -0.7628582201273754 0
+-0.8461029397568782 -0.04085933176487253 0
+-0.8281960597943768 -0.0776118162040003 0
+-0.1151183782408777 -0.3705388660497694 0
+-0.08517883789193091 -0.3734146318412844 0
+-0.2856511833476399 -0.868648474112765 0
+-0.2808699053213418 -0.8158418369714237 0
+-0.100108168822406 -0.6576615605810462 0
+-0.1430220879405076 -0.6525652586386698 0
+-0.5242958752429286 -0.3029117822625526 0
+-0.5420482104625706 -0.3398417993200613 0
+-0.6500186305596684 -0.1109794490957794 0
+-0.6571360846925619 -0.08028059629780031 0
+-0.6892658361162539 -0.09773994239405381 0
+-0.2637645822384543 -0.5749589296540841 0
+-0.2288875292781973 -0.5899457804552276 0
+-0.249035568190848 -0.5443639740359337 0
+-0.03086203684027014 -0.3534587323701826 0
+-0.1969131791331719 -0.9136777159072795 0
+-0.153756059909932 -0.8805281816080935 0
+-0.9529271602863103 -0.7946717179621449 0
+-0.3645008712090645 -0.6814437063916463 0
+-0.4016875290420402 -0.6601590225941328 0
+-0.2035490500473563 -0.3873002201239643 0
+-0.1846224512738815 -0.4129025882047868 0
+-0.1713067399690719 -0.3798345434222636 0
+-0.1559182465604902 -0.3523318568867932 0
+-0.1369916477870154 -0.3779342249676157 0
+-0.637384299273944 -0.7066161434554259 0
+-0.6670785303797321 -0.6647663049882636 0
+-0.5034530414110783 -0.1723338880651422 0
+-0.7693068977281424 -0.853066926122075 0
+-0.7265265362514792 -0.8328918141545602 0
+-0.7684730366057557 -0.8097746091152195 0
+-0.5008312000069389 -0.706129911948335 0
+-0.2459513312061939 -0.6632334359146267 0
+-0.2195493243923324 -0.691318338288586 0
+-0.2172145365119421 -0.6486256384473373 0
+-0.4096381034123088 -0.1811978005905963 0
+-0.4447595285106161 -0.3295869917377927 0
+-0.4511425696171154 -0.3638394188252168 0
+-0.1913685683075176 -0.3204576472927778 0
+-0.2219944790509598 -0.3039823272919764 0
+-0.2208592494859888 -0.3377568553406398 0
+-0.2635375011066587 -0.1573712020544351 0
+-0.2650850518670733 -0.128620636383554 0
+-0.2388918454504798 -0.4423310020676577 0
+-0.2349263655603841 -0.4814599144661693 0
+-0.3004581954324124 -0.4950710738979677 0
+-0.2724157753499493 -0.4968354312318091 0
+-0.2889613496312567 -0.4625293818949865 0
+-0.02154691351214948 -0.4563477668454944 0
+-0.4572646905823929 -0.7122214900936662 0
+-0.225359395669764 -0.9517851872047395 0
+-0.1715537834642401 -0.9618925287025398 0
+-0.3584217555980856 -0.3646710782209212 0
+-0.3483645880862355 -0.3353525100188691 0
+-0.2582858776571336 -0.1817528099578525 0
+-0.2406574556374538 -0.1558227483388922 0
+-0.572682564461041 -0.278299924429467 0
+-0.5594651312782416 -0.2390612912676031 0
+-0.5889262432847411 -0.2553299957949006 0
+-0.4018778606075678 -0.1541374627206472 0
+-0.3891769950264831 -0.1223512573490826 0
+-0.4230279370930751 -0.1350509452522098 0
+-0.2464232113615398 -0.5140016064691505 0
+-0.8586985704729621 -0.5387891650391928 0
+-0.9136744192939569 -0.5230415631350817 0
+-0.8824243710819509 -0.5684532987246093 0
+-0.7094687797053872 -0.7424176051011314 0
+-0.7437653907801929 -0.7205616766098386 0
+-0.7599892862038982 -0.7677435686564117 0
+-0.2484182142748488 -0.2038724415770069 0
+-0.2423151093805272 -0.2255058252476109 0
+-0.5013485779332565 -0.09418735409397534 0
+-0.4786588698539375 -0.07648075337972669 0
+-0.514798224608168 -0.06331090843488014 0
+-0.1848908380774581 -0.528941556372175 0
+-0.1501911724851028 -0.5336868017096881 0
+-0.1742341359796192 -0.5033713350410237 0
+-0.2447211771863419 -0.7519416179413357 0
+-0.20863602274155 -0.7749562075633437 0
+-0.2122009646417923 -0.7289407253778831 0
+-0.2977406417686691 -0.5651484379709055 0
+-0.2775926028560184 -0.6107302443901994 0
+-0.3757871613457169 -0.1684981126874692 0
+-0.7380898916710316 -0.6842213984254301 0
+-0.7886103981695425 -0.7095473619807103 0
+-0.09244240288774895 -0.6959048208166903 0
+-0.8500701089256624 -0.7676155380449677 0
+-0.8334062797067546 -0.7246881811380442 0
+-0.5217862361530865 -0.2310179961869461 0
+-0.5167929716675392 -0.2752180834631374 0
+-0.2712982597440537 -0.2054208952925498 0
+-0.6205905376021643 -0.2640477663437727 0
+-0.6529644240981445 -0.270492297625196 0
+-0.6345175629635208 -0.3010131602381879 0
+-0.201693773601876 -0.6187894702263427 0
+-0.1752917667880145 -0.646874372600302 0
+-0.7414782061709357 -0.07027302923716512 0
+-0.7190066114515008 -0.03352054479803735 0
+-0.2302890169899579 -0.2471615973786231 0
+-0.2072591139597958 -0.2564791764295963 0
+-0.02930581688621555 -0.7226736306953246 0
+-0.0730990385534762 -0.738739226995104 0
+-0.8529993036850441 -0.4567802964996401 0
+-0.8725762202896847 -0.4240829303505354 0
+-0.9095255352896088 -0.4606800633005607 0
+-0.6073731044193649 -0.2248091331819088 0
+-0.8585538593275199 -0.8096465785037755 0
+-0.8027696476805615 -0.7879186806239268 0
+-0.2115461584012828 -0.528988457270294 0
+-0.5220214978290061 -0.1128402564038452 0
+-0.1580161875807417 -0.224986842190914 0
+-0.1222586733333738 -0.4829832654592925 0
+-0.1132346045489684 -0.5146905753264407 0
+-0.6720129250209292 -0.2478258251865774 0
+-0.6859399503822857 -0.2847912190809925 0
+-0.1259954981133686 -0.8055162155329835 0
+-0.1208466977541724 -0.8513314662390085 0
+-0.2149411047265593 -0.2787675952089215 0
+-0.08810997607355348 -0.3987360673949411 0
+-0.1702601815446082 -0.794613310405499 0
+-0.6725719395887786 -0.7292912036898792 0
+-0.8090140625050405 -0.1172684806752535 0
+-0.8506370002066932 -0.1213753280009983 0
+-0.3285697075892499 -0.6992135450882978 0
+-0.3394710361111983 -0.6531690389253496 0
+-0.0862846131616346 -0.4323379458312684 0
+-0.1068082391914027 -0.424248072103721 0
+-0.6219160114934223 -0.1312390174798261 0
+-0.593160540769444 -0.1586859076071724 0
+-0.275359395669972 -0.9517851872047395 0
+-0.6242264775051097 -0.06587993301804325 0
+-0.6634736830616953 -0.05264042631631765 0
+-0.4377681473455081 -0.1053109694597335 0
+-0.8599021336609269 -0.3865531651343972 0
+-0.9164283652654917 -0.3904529319353178 0
+-0.158459675676447 -0.43175823545471 0
+-0.4274514001897596 -0.07849179915718557 0
+-0.4021344113087351 -0.08229046479602166 0
+-0.5142758933473768 -0.6145854700930801 0
+-0.4801544262896814 -0.5852110591661616 0
+-0.5271029309067023 -0.5777008242474152 0
+-0.2216366178380715 -0.1595484569398718 0
+-0.9242506212032637 -0.586728057888302 0
+-0.5326255937577082 -0.0405087545745644 0
+-0.5099358856783892 -0.02280215386031575 0
+-0.2735782079085937 -0.6457398068476895 0
+-0.275912995788984 -0.6884325066889382 0
+-0.3887823141056949 -0.4118515216273382 0
+-0.3659394396584948 -0.4261165837447917 0
+-0.3578298479885931 -0.3886144372570926 0
+-0.4213647942306843 -0.6287474526202622 0
+-0.3967787901711714 -0.6083000620957336 0
+-0.4427413846708428 -0.6016483144872978 0
+-0.9518771393183669 -0.3764615833590771 0
+-0.8891076844049552 -0.04085933176487253 0
+-0.5545034267475022 -0.02380315455265966 0
+-0.5593657656772809 -0.06431190912722405 0
+-0.9555505112517908 -0.6103752094775262 0
+-0.3569478377446582 -0.4550593463380913 0
+-0.3259953716275564 -0.4318222619678456 0
+-0.809477515483481 -0.8711597606631168 0
+-0.7675310151292044 -0.8942769657024575 0
+-0.7571150669237003 -0.6527285685497705 0
+-0.9513882534024576 -0.2196505118530721 0
+-0.33709155902185 -0.7806073931853227 0
+-0.3036686758489657 -0.793022367645447 0
+-0.3201766595142317 -0.7399031870147188 0
+-0.5334665003292723 -0.14653844345639 0
+-0.1875031949067663 -0.5593039239389583 0
+-0.4476501235417116 -0.6535072749856969 0
+-0.3025781390425004 -0.05967489946282125 0
+-0.3341250535663665 -0.06095643416665527 0
+-0.4547872042622523 -0.02685942921686298 0
+-0.3352767429672557 -0.482369062316282 0
+-0.3187311686859483 -0.5166751116531044 0
+-0.8506274511919951 -0.5011731518385706 0
+-0.8136781361920712 -0.4645760188885454 0
+-0.7202132011212892 -0.3043349074451702 0
+-0.7413401854637529 -0.2701743554926506 0
+-0.7565649352799717 -0.312384516295447 0
+-0.4151732605330095 -0.417061290307556 0
+-0.6540457629171144 -0.1486983635760796 0
+-0.4912166329662576 -0.6474156968403657 0
+-0.02631492483882016 -0.5759791308870515 0
+-0.06328650765969279 -0.5922894950985419 0
+-0.160309439230445 -0.5881476137100733 0
+-0.1869647595542697 -0.5881945146081923 0
+-0.8527708752103196 -0.8621190367104729 0
+-0.9000713364554205 -0.8418158941315138 0
+-0.2675199477139659 -0.7291221486153592 0
+-0.2639550058137236 -0.7751376308008197 0
+-0.4548924760232774 -0.08053802873627391 0
+-0.03864442130806445 -0.8868939989908114 0
+-0.7931865464385217 -0.3112729691908378 0
+-0.7720595620960579 -0.3454335211433574 0
+-0.1736996406611089 -0.3360531182592534 0
+-0.1748348702260798 -0.3022785902105901 0
+-0.7052437048584981 -0.5374069836924024 0
+-0.7183279998902325 -0.4969695574702658 0
+-0.6324506041821161 -0.520504094569825 0
+-0.6023477652127628 -0.5464752323038534 0
+-0.4298014382720816 -0.4379706138658965 0
+-0.4480827930294946 -0.4056782360584151 0
+-0.1286815087375404 -0.4316434310215673 0
+-0.1305068716494593 -0.3980415525852398 0
+-0.5028915245664363 -0.8938295897852729 0
+-0.5325162726482106 -0.8630008438196214 0
+-0.2694231128633767 -0.02129670152638601 0
+-0.5752210327643734 -0.8720003524115937 0
+-0.1393845484790525 -0.3341527998046055 0
+-0.2670212729362298 -0.04568299166554194 0
+-0.3480777449284396 -0.1579734467317412 0
+-0.3491341164271945 -0.1314613562414217 0
+-0.8562177259456708 -0.3486225703789639 0
+-0.8250714304856447 -0.3144870549622087 0
+-0.7909427958274297 -0.1492809699135872 0
+-0.7685018554151133 -0.1055174581165892 0
+-0.8123655809698639 -0.3822525687941815 0
+-0.468342122698189 -0.04966158307717874 0
+-0.6915064199529719 -0.3552074375493926 0
+-0.6772200839943967 -0.5608999290141709 0
+-0.6805506396072989 -0.5993308947994053 0
+-0.6375816208648801 -0.5958659311367347 0
+-0.2680266409530021 -0.2994346602980386 0
+-0.2979381133166796 -0.2976584906763499 0
+-0.2813966325931084 -0.3195053657181496 0
+-0.5995662389015255 -0.07056320605242261 0
+-0.2724064578426283 -0.3427875662523372 0
+-0.3023179302063057 -0.3410113966306484 0
+-0.3215753397686733 -0.8817798414249802 0
+-0.2866429477597291 -0.9167017417216943 0
+-0.9449743093424841 -0.4966887147241797 0
+-0.9645512259471247 -0.4639913485750751 0
+-0.6008259769764051 -0.1925246472965815 0
+-0.5680433738949806 -0.1822526229436276 0
+-0.4682206221772041 -0.4544634872668282 0
+-0.4353110896807191 -0.465846541515969 0
+-0.3002855385027075 -0.1012782641022519 0
+-0.2775555646513884 -0.1053375510183215 0
+-0.2935800785069282 -0.08081568278894009 0
+-0.1358646497041799 -0.5649378299808078 0
+-0.5207728110725041 -0.956085705017801 0
+-0.5707728110721682 -0.956085705017801 0
+-0.6572331692139685 -0.3356637491852149 0
+-0.7011647001985045 -0.3270013798837888 0
+-0.4137036471529838 -0.4869690916478546 0
+-0.3920325523755813 -0.5142788076260453 0
+-0.375220810998194 -0.476663384093228 0
+-0.3968362986025357 -0.543763253229578 0
+-0.3583534624477459 -0.5334575456749514 0
+-0.665359441288724 -0.2124493700110676 0
+-0.6983349675728652 -0.2267482914668641 0
+-0.6788148459776271 -0.9570340057940425 0
+-0.7002851438055995 -0.929101772026764 0
+-0.7214702978286658 -0.9720677662327213 0
+-0.1474930738489323 -0.2993598409699873 0
+-0.4617484261896891 -0.5364554642505842 0
+-0.4555684222301685 -0.564763668641633 0
+-0.4243353845708505 -0.5528927195717205 0
+-0.4715393677776135 -0.6788272668142362 0
+-0.2180957403447705 -0.3643668643198015 0
+-0.2314114516495802 -0.3974349091023247 0
+-0.7234069394933249 -0.1022855184754988 0
+-0.7162894853604314 -0.1329843712734779 0
+-0.6861037056324009 -0.6332734751126042 0
+-0.4978383597251695 -0.9279495792298605 0
+-0.4591842621486565 -0.9096077589795312 0
+-0.1520368402722805 -0.4830980698924353 0
+-0.3649123894875372 -0.1165035966094432 0
+-0.3860624659730444 -0.0974170791410057 0
+-0.6288148459779739 -0.9570340057940425 0
+-0.6924950446642133 -0.8951260713747505 0
+-0.735150496515252 -0.9101598318134293 0
+-0.5879268392533072 -0.02380315455265966 0
+-0.4521228310581064 -0.5034619650487863 0
+-0.8671157548611361 -0.2001665080894189 0
+-0.8776189498594182 -0.1510407667252074 0
+-0.9132797018031974 -0.1901752823423749 0
+-0.2487216510882127 -0.3478915443190001 0
+-0.4770655486547242 -0.9718638742120592 0
+-0.6324902712938283 -0.2012424178454536 0
+-0.3232756833358302 -0.09912066676909694 0
+-0.6810940075315219 -0.03352054479803735 0
+-0.8095768036695585 -0.2814380501142983 0
+-0.3112835520910053 -0.9649165545169546 0
+-0.3778698057697892 -0.07644280405638218 0
+-0.1252079476063411 -0.5393676086496563 0
+-0.09890808176804557 -0.5459416035975604 0
+-0.3612835520912134 -0.9649165545169546 0
+-0.9687001099514729 -0.5263528484095961 0
+-0.8968009471487546 -0.1113841022539543 0
+-0.9618914484007397 -0.1705247704888606 0
+-0.9618914484007397 -0.120524770488989 0
+-0.2951468244163656 -0.7116285195484221 0
+-0.2444317859050305 -0.2960668032567835 0
+-0.5303644787698256 -0.1742093278629706 0
+-0.5380299149767865 -0.2080480675523797 0
+-0.794507920512835 -0.1810031112395194 0
+-0.7539957134229078 -0.1692520886808551 0
+-0.1834641699475406 -0.7143329279105939 0
+-0.1347610432183904 -0.4579647549731911 0
+-0.3075542674388085 -0.6359293151645109 0
+-0.1101982047718884 -0.8945883420359949 0
+-0.4555265119789803 -0.3023345026746658 0
+-0.4264068945550135 -0.2770416234352408 0
+-0.3954697975917961 -0.9527874280847919 0
+-0.3567533496813452 -0.9177039826017467 0
+-0.6887958350124839 -0.7764730957364523 0
+-0.121553783464032 -0.9618925287025398 0
+-0.08175563725152929 -0.5639834094269 0
+-0.862395151747506 -0.235126994869278 0
+-0.8267343998037269 -0.1959924792521105 0
+-0.2509099939819913 -0.09027291368019587 0
+-0.2583795918712939 -0.1081580550702422 0
+-0.2384394811976761 -0.1135559990454284 0
+-0.1585428508505737 -0.6824014268596647 0
+-0.03311660735879964 -0.922436704428849 0
+-0.03311660735879964 -0.9682385187714924 0
+-0.6869149329120102 -0.1599053157416936 0
+-0.7210560362890812 -0.1644508918231386 0
+-0.8317377422033891 -0.2578025509588194 0
+-0.6934885290093038 -0.4661018600744737 0
+-0.6604742250462172 -0.4970111492480566 0
+-0.09169654579847131 -0.2518762578195273 0
+-0.1136628958663103 -0.2386394688505329 0
+-0.1096885832305206 -0.2595458436843091 0
+-0.6481844003440698 -0.0191198815182803 0
+-0.3235349149129026 -0.5461595572566372 0
+-0.3373629355304667 -0.5819308719927524 0
+-0.2609732666286017 -0.2742199282149838 0
+-0.9645512259471247 -0.4139913485752154 0
+-0.1127712191404376 -0.2768141267081062 0
+-0.5881847879666027 -0.3898156831485416 0
+-0.6176253856582803 -0.3607723061890787 0
+-0.3692797042028566 -0.5991705957535911 0
+-0.3434854310586231 -0.6181594764678594 0
+-0.08311660735900762 -0.9682385187714924 0
+-0.5977377316081879 -0.5822551002629169 0
+-0.0697822941941566 -0.5393063761036844 0
+-0.6332630676701791 -0.8729486531878351 0
+-0.5995876570487551 -0.9131197108118437 0
+-0.7312746447066918 -0.2315494883245806 0
+-0.7246211609744866 -0.1961730331490709 0
+-0.9693234367952881 -0.03212278308051283 0
+-0.9235216224522287 -0.03212278308051283 0
+-0.04256330213010407 -0.2640389574277008 0
+-0.01817701185790877 -0.2664407973813109 0
+-0.01817701185790877 -0.2908312085946855 0
+-0.26964294870141 -0.3693975752314989 0
+-0.9693234367952881 -0.08212278308042015 0
+-0.5507243560299311 -0.2897249187015846 0
+-0.31749711925788 -0.2021678400934988 0
+-0.2940157951630977 -0.2065639126072153 0
+-0.9268470705914378 -0.8186337678938448 0
+-0.9210640864742374 -0.8711062261005421 0
+-0.02273666863894228 -0.4808960045516695 0
+-0.02273666863894228 -0.5122782921372632 0
+-0.390656294643015 -0.5720714576206266 0
+-0.4785535980929123 -0.02280215386031575 0
+-0.9194347441628764 -0.919434744162906 0
+-0.9222905679935581 -0.9722905679938004 0
+-0.2580232124006576 -0.06682377499166077 0
+-0.7122700595343507 -0.6637428831788987 0
+-0.3558379877331805 -0.1850337846016902 0
+-0.6588123138457642 -0.1801648841257403 0
+-0.4833558687174244 -0.5153329141186987 0
+-0.7027197520733213 -0.8532891178166692 0
+-0.7018858909509346 -0.8099968008098136 0
+-0.7676263788653743 -0.2395990971748574 0
+-0.1352737460604406 -0.2270882287058393 0
+-0.3380712801479417 -0.2022726765036416 0
+-0.3274398280899186 -0.2299313979511781 0
+-0.904232935543303 -0.07298211484538536 0
+-0.9312148851960279 -0.1026475535695946 0
+-0.1303721182612164 -0.3158741082714456 0
+-0.1206992495304776 -0.2973598880643672 0
+-0.0682474068535361 -0.2589894763730416 0
+-0.5130483597695541 -0.514747035983525 0
+-0.5034227646379714 -0.4817535367817271 0
+-0.07176102866686408 -0.9009343321049474 0
+-0.01511600708065314 -0.3104981494631791 0
+-0.01511600708065314 -0.3364749356123994 0
+-0.7897873173992049 -0.2159635980193785 0
+-0.5317129645112773 -0.5419209562883517 0
+-0.5658344315689726 -0.5712953672152702 0
+-0.02631492483882016 -0.5425557183812612 0
+-0.2268882412875965 -0.1351668490364543 0
+-0.2841481317808128 -0.2286835442263697 0
+-0.5801854680364305 -0.3059936232288822 0
+-0.5572814274524505 -0.3921107709544336 0
+-0.5521785732862621 -0.42368717111758 0
+-0.5207663071536321 -0.3938413813022692 0
+-0.643487775079287 -0.831111699629754 0
+-0.6678543993636687 -0.872231058030004 0
+-0.6622746861160793 -0.5339420200297317 0
+-0.6125870778568914 -0.0191198815182803 0
+-0.9687001099514729 -0.5763528484097223 0
+-0.6248592827179882 -0.3292192179037916 0
+-0.5949097794078326 -0.3261217172420517 0
+-0.5243893543387724 -0.4532927200559845 0
+-0.4270655486545271 -0.9718638742120592 0
+-0.4891872118780051 -0.4260026705410856 0
+-0.4946968632866426 -0.4538785981911582 0
+-0.5567725218339727 -0.3599698933332308 0
+-0.06203812843924957 -0.2778321137079627 0
+-0.9722905679937663 -0.9722905679938004 0
+-0.9722905679937663 -0.9222905679936687 0
+-0.2798481651911813 -0.06373418637889085 0
+-0.771470297828319 -0.9720677662327213 0
+-0.09565026355272163 -0.2933283940095645 0
+-0.9739199103051275 -0.8739620499313049 0
+-0.9739199103051275 -0.8239620499311732 0
+-0.2474019663888779 -0.4169915877578874 0
+-0.2694290504871918 -0.4389543249190576 0
+-0.1046703908226236 -0.9301310474740324 0
+-0.07396348512383438 -0.2910922162706134 0
+-0.04827938040040235 -0.2961416973252726 0
+-0.9462104782988938 -0.896252617925237 0
+-0.2974714705696548 -0.4371899675852162 0
+-0.04905159347776244 -0.5270707556890261 0
+-0.04597804392092329 -0.3391992732573921 0
+-0.04521837562314673 -0.3158086381937661 0
+-0.6649890508343259 -0.7968703993985614 0
+-0.4002406213868382 -0.2887978433250916 0
+-0.7753211142705906 -0.9282526663544711 0
+-0.2619486566862921 -0.3940582319537245 0
+-0.4225353462446588 -0.9246513022968513 0
+-0.3064630724834915 -0.4082472049919166 0
+-0.5729515709767227 -0.3375467115141693 0
+-0.295716894438215 -0.2537071733986371 0
+-0.320344177862408 -0.2512130804830102 0
+-0.3091954051007662 -0.275093692340612 0
+-0.3225653967408725 -0.2951643977607231 0
+-0.2856334634407077 -0.3889542538870616 0
+-0.3141573644986093 -0.383586548269691 0
+-0.3409183387524697 -0.2513179168931531 0
+-0.3568689576042921 -0.06836294543090313 0
+-0.339053956396173 -0.08416290713711835 0
+-0.7998528581562662 -0.2545884651874485 0
+-0.03329301893856191 -0.3025485356311154 0
+-0.2494045039711994 -0.2491962990427164 0
+-0.3359332461844393 -0.3167207174159978 0
+-0.3471905379685259 -0.29415591908026 0
+-0.3460195873737558 -0.1065271780333448 0
+-0.2729993590191711 -0.2525641560839715 0
+-0.3701755485541727 -0.2885219335302457 0
+-0.4720083578152894 -0.4074886957955506 0
+-0.498484598924728 -0.4069038067198805 0
+-0.323739446858582 -0.3363609886993321 0
+-0.3147492721081019 -0.3596431892335197 0
+-0.6059038372706589 -0.04292303607093996 0
+-0.3355788811508856 -0.3789361403383747 0
+-0.3568076991106059 -0.266965613874971 0
+-0.4573801800762174 -0.38657937223721 0
+2 18 0 791
+2682
+2683
+2684
+2685
+2686
+2687
+2688
+2689
+2690
+2691
+2692
+2693
+2694
+2695
+2696
+2697
+2698
+2699
+2700
+2701
+2702
+2703
+2704
+2705
+2706
+2707
+2708
+2709
+2710
+2711
+2712
+2713
+2714
+2715
+2716
+2717
+2718
+2719
+2720
+2721
+2722
+2723
+2724
+2725
+2726
+2727
+2728
+2729
+2730
+2731
+2732
+2733
+2734
+2735
+2736
+2737
+2738
+2739
+2740
+2741
+2742
+2743
+2744
+2745
+2746
+2747
+2748
+2749
+2750
+2751
+2752
+2753
+2754
+2755
+2756
+2757
+2758
+2759
+2760
+2761
+2762
+2763
+2764
+2765
+2766
+2767
+2768
+2769
+2770
+2771
+2772
+2773
+2774
+2775
+2776
+2777
+2778
+2779
+2780
+2781
+2782
+2783
+2784
+2785
+2786
+2787
+2788
+2789
+2790
+2791
+2792
+2793
+2794
+2795
+2796
+2797
+2798
+2799
+2800
+2801
+2802
+2803
+2804
+2805
+2806
+2807
+2808
+2809
+2810
+2811
+2812
+2813
+2814
+2815
+2816
+2817
+2818
+2819
+2820
+2821
+2822
+2823
+2824
+2825
+2826
+2827
+2828
+2829
+2830
+2831
+2832
+2833
+2834
+2835
+2836
+2837
+2838
+2839
+2840
+2841
+2842
+2843
+2844
+2845
+2846
+2847
+2848
+2849
+2850
+2851
+2852
+2853
+2854
+2855
+2856
+2857
+2858
+2859
+2860
+2861
+2862
+2863
+2864
+2865
+2866
+2867
+2868
+2869
+2870
+2871
+2872
+2873
+2874
+2875
+2876
+2877
+2878
+2879
+2880
+2881
+2882
+2883
+2884
+2885
+2886
+2887
+2888
+2889
+2890
+2891
+2892
+2893
+2894
+2895
+2896
+2897
+2898
+2899
+2900
+2901
+2902
+2903
+2904
+2905
+2906
+2907
+2908
+2909
+2910
+2911
+2912
+2913
+2914
+2915
+2916
+2917
+2918
+2919
+2920
+2921
+2922
+2923
+2924
+2925
+2926
+2927
+2928
+2929
+2930
+2931
+2932
+2933
+2934
+2935
+2936
+2937
+2938
+2939
+2940
+2941
+2942
+2943
+2944
+2945
+2946
+2947
+2948
+2949
+2950
+2951
+2952
+2953
+2954
+2955
+2956
+2957
+2958
+2959
+2960
+2961
+2962
+2963
+2964
+2965
+2966
+2967
+2968
+2969
+2970
+2971
+2972
+2973
+2974
+2975
+2976
+2977
+2978
+2979
+2980
+2981
+2982
+2983
+2984
+2985
+2986
+2987
+2988
+2989
+2990
+2991
+2992
+2993
+2994
+2995
+2996
+2997
+2998
+2999
+3000
+3001
+3002
+3003
+3004
+3005
+3006
+3007
+3008
+3009
+3010
+3011
+3012
+3013
+3014
+3015
+3016
+3017
+3018
+3019
+3020
+3021
+3022
+3023
+3024
+3025
+3026
+3027
+3028
+3029
+3030
+3031
+3032
+3033
+3034
+3035
+3036
+3037
+3038
+3039
+3040
+3041
+3042
+3043
+3044
+3045
+3046
+3047
+3048
+3049
+3050
+3051
+3052
+3053
+3054
+3055
+3056
+3057
+3058
+3059
+3060
+3061
+3062
+3063
+3064
+3065
+3066
+3067
+3068
+3069
+3070
+3071
+3072
+3073
+3074
+3075
+3076
+3077
+3078
+3079
+3080
+3081
+3082
+3083
+3084
+3085
+3086
+3087
+3088
+3089
+3090
+3091
+3092
+3093
+3094
+3095
+3096
+3097
+3098
+3099
+3100
+3101
+3102
+3103
+3104
+3105
+3106
+3107
+3108
+3109
+3110
+3111
+3112
+3113
+3114
+3115
+3116
+3117
+3118
+3119
+3120
+3121
+3122
+3123
+3124
+3125
+3126
+3127
+3128
+3129
+3130
+3131
+3132
+3133
+3134
+3135
+3136
+3137
+3138
+3139
+3140
+3141
+3142
+3143
+3144
+3145
+3146
+3147
+3148
+3149
+3150
+3151
+3152
+3153
+3154
+3155
+3156
+3157
+3158
+3159
+3160
+3161
+3162
+3163
+3164
+3165
+3166
+3167
+3168
+3169
+3170
+3171
+3172
+3173
+3174
+3175
+3176
+3177
+3178
+3179
+3180
+3181
+3182
+3183
+3184
+3185
+3186
+3187
+3188
+3189
+3190
+3191
+3192
+3193
+3194
+3195
+3196
+3197
+3198
+3199
+3200
+3201
+3202
+3203
+3204
+3205
+3206
+3207
+3208
+3209
+3210
+3211
+3212
+3213
+3214
+3215
+3216
+3217
+3218
+3219
+3220
+3221
+3222
+3223
+3224
+3225
+3226
+3227
+3228
+3229
+3230
+3231
+3232
+3233
+3234
+3235
+3236
+3237
+3238
+3239
+3240
+3241
+3242
+3243
+3244
+3245
+3246
+3247
+3248
+3249
+3250
+3251
+3252
+3253
+3254
+3255
+3256
+3257
+3258
+3259
+3260
+3261
+3262
+3263
+3264
+3265
+3266
+3267
+3268
+3269
+3270
+3271
+3272
+3273
+3274
+3275
+3276
+3277
+3278
+3279
+3280
+3281
+3282
+3283
+3284
+3285
+3286
+3287
+3288
+3289
+3290
+3291
+3292
+3293
+3294
+3295
+3296
+3297
+3298
+3299
+3300
+3301
+3302
+3303
+3304
+3305
+3306
+3307
+3308
+3309
+3310
+3311
+3312
+3313
+3314
+3315
+3316
+3317
+3318
+3319
+3320
+3321
+3322
+3323
+3324
+3325
+3326
+3327
+3328
+3329
+3330
+3331
+3332
+3333
+3334
+3335
+3336
+3337
+3338
+3339
+3340
+3341
+3342
+3343
+3344
+3345
+3346
+3347
+3348
+3349
+3350
+3351
+3352
+3353
+3354
+3355
+3356
+3357
+3358
+3359
+3360
+3361
+3362
+3363
+3364
+3365
+3366
+3367
+3368
+3369
+3370
+3371
+3372
+3373
+3374
+3375
+3376
+3377
+3378
+3379
+3380
+3381
+3382
+3383
+3384
+3385
+3386
+3387
+3388
+3389
+3390
+3391
+3392
+3393
+3394
+3395
+3396
+3397
+3398
+3399
+3400
+3401
+3402
+3403
+3404
+3405
+3406
+3407
+3408
+3409
+3410
+3411
+3412
+3413
+3414
+3415
+3416
+3417
+3418
+3419
+3420
+3421
+3422
+3423
+3424
+3425
+3426
+3427
+3428
+3429
+3430
+3431
+3432
+3433
+3434
+3435
+3436
+3437
+3438
+3439
+3440
+3441
+3442
+3443
+3444
+3445
+3446
+3447
+3448
+3449
+3450
+3451
+3452
+3453
+3454
+3455
+3456
+3457
+3458
+3459
+3460
+3461
+3462
+3463
+3464
+3465
+3466
+3467
+3468
+3469
+3470
+3471
+3472
+0.4305153885303698 -0.5245845151806716 0
+0.432125256032603 -0.2378191885452554 0
+0.2168647613521659 -0.4203682649064873 0
+0.7049884513050704 -0.2621247466423738 0
+0.2482861190865838 -0.7059261357558753 0
+0.6932448842816819 -0.6952357130545581 0
+0.4865565228117179 -0.7395241352277649 0
+0.630650143112253 -0.48357322378815 0
+0.2845681216765732 -0.2775877852562389 0
+0.1608478745829417 -0.5592570230408395 0
+0.3680269185409757 -0.1414377748175201 0
+0.5603779376880196 -0.1484138832542186 0
+0.1216031543784338 -0.3504315384321452 0
+0.3806727224357931 -0.374349375139639 0
+0.5258691613198203 -0.3622649811391234 0
+0.8160499886851195 -0.420183163549615 0
+0.2839126211511045 -0.5293771232347899 0
+0.8314550029173566 -0.1610319924722516 0
+0.8112533980824188 -0.8299497210827343 0
+0.1644045528922158 -0.8372713058111066 0
+0.5612243979643966 -0.6070752351743338 0
+0.8274485222609559 -0.584200900628721 0
+0.3205835753565838 -0.8337265738160508 0
+0.1049828762794838 -0.4578499505400482 0
+0.6821483819833607 -0.1284387951920332 0
+0.6088964433857973 -0.8318292947875847 0
+0.1925037978724885 -0.2866831192441143 0
+0.3754021997310118 -0.6353992002286977 0
+0.4652092231790259 -0.1073571990388218 0
+0.1262731720030666 -0.6880923128980321 0
+0.2811659231263386 -0.1833012636733954 0
+0.5432214524545416 -0.2620312199021698 0
+0.3163100523582473 -0.07675639587287046 0
+0.5331152556901003 -0.4811676586465536 0
+0.8414616877166815 -0.2846521358856691 0
+0.6475748889684354 -0.3638698068508184 0
+0.464237426989923 -0.8754877695349434 0
+0.2933277554558256 -0.3642935971648358 0
+0.3480139889799803 -0.230036234361321 0
+0.7201891027368148 -0.5643648926768413 0
+0.8725266621348055 -0.7034887221109697 0
+0.2231996223992857 -0.2234711235835176 0
+0.3939417511054797 -0.06131618971139813 0
+0.5815237142662059 -0.7179965738562939 0
+0.06020473708498715 -0.3094017998879232 0
+0.2436165433258033 -0.6205407360733777 0
+0.3170037697137196 -0.460765024561145 0
+0.3605583874120927 -0.3157122387355346 0
+0.08693473871067299 -0.5212645702743448 0
+0.6178888791359765 -0.09352010299952608 0
+0.2089338015719744 -0.4986260897035105 0
+0.4688305239438079 -0.3429099251503592 0
+0.4357288026741597 -0.1668371506237744 0
+0.4673273887303545 -0.6220957050118265 0
+0.06758635004378538 -0.4068259411224884 0
+0.462710970768566 -0.4265875596167555 0
+0.7273603973738656 -0.8761841311614155 0
+0.6390373987367881 -0.233526903730781 0
+0.0875864433345212 -0.7737611252548596 0
+0.3535995426871152 -0.7274882125545944 0
+0.5374879326874871 -0.08101750914912885 0
+0.7865731220927243 -0.07350496887825581 0
+0.1378202051181937 -0.2808456207629088 0
+0.07394316564174522 -0.6272308082640597 0
+0.2507187913386961 -0.9035703744094787 0
+0.2842610246471677 -0.1258001323316333 0
+0.8899486186849681 -0.4933774294496662 0
+0.1902333387425467 -0.354232175341441 0
+0.7463576928002832 -0.483490040232568 0
+0.2411562352860995 -0.7979571001267961 0
+0.9037542786367337 -0.3529231667191793 0
+0.7354379509375075 -0.3465450682479665 0
+0.1523801411955971 -0.405436911503086 0
+0.5003510198516311 -0.2000047724717231 0
+0.251485160229431 -0.3212815353398383 0
+0.8942883523382197 -0.8942883523382108 0
+0.9027765068049149 -0.2393010237065864 0
+0.1761158101970001 -0.7519553149998908 0
+0.8698189974960303 -0.08171866352974562 0
+0.7575608381083132 -0.2009742300067876 0
+0.7256926751290924 -0.7895994971477043 0
+0.07728884261612866 -0.8653916266669101 0
+0.3968919057755962 -0.449353668115037 0
+0.7829348990603813 -0.673207083796302 0
+0.363157208674699 -0.5629419912784838 0
+0.5415456221429493 -0.9121714100356018 0
+0.6021436764675405 -0.294568628956765 0
+0.4929814638490059 -0.5483264133204968 0
+0.6342510652519771 -0.5574349653515003 0
+0.5886936935850795 -0.4219565607697449 0
+0.4445757288675288 -0.05371885843372587 0
+0.1597710038779483 -0.6170382043793072 0
+0.6963832902491474 -0.06704108959607488 0
+0.9237828968014796 -0.1410495409781635 0
+0.9058543205726206 -0.7893434359248165 0
+0.5234869231534719 -0.8138302776036401 0
+0.04309382702429897 -0.4476968540326781 0
+0.9111010225035816 -0.6207504189561061 0
+0.1771398163389618 -0.242106281685464 0
+0.1431075669276479 -0.9237850574050799 0
+0.058611633772431 -0.703717328735348 0
+0.6259431438508687 -0.1689579319601265 0
+0.4184827737272777 -0.7973790713762351 0
+0.8077016328845427 -0.9123698002434987 0
+0.5151058772021584 -0.6727356886689057 0
+0.2354058321879287 -0.1802043562423097 0
+0.06172407368054028 -0.3561830700151751 0
+0.6409121764777814 -0.6342968969219693 0
+0.2609189295487934 -0.4642937392288277 0
+0.3909395951819273 -0.9055748561695839 0
+0.1645392101572971 -0.4580795594063337 0
+0.4279728583530659 -0.684918844959568 0
+0.4103270715119902 -0.1032647398806452 0
+0.3115686623862324 -0.6009197527070202 0
+0.6576296919545606 -0.9140680115880848 0
+0.6966787510384254 -0.4217546454409841 0
+0.3281285713159032 -0.1745091186459622 0
+0.6518989948958753 -0.7633466943251993 0
+0.4903644908805366 -0.2884049470241056 0
+0.2708501046556091 -0.08487496970500967 0
+0.4921085165288489 -0.04560430772063161 0
+0.2888462257267535 -0.042593403052772 0
+0.23737841158063 -0.2708520711737286 0
+0.1395344703872642 -0.5081165803785365 0
+0.6916814838406601 -0.1913718362913546 0
+0.3535497162207913 -0.5039731000714186 0
+0.3068656671998568 -0.2298265615410352 0
+0.3035398724913829 -0.6709388776220006 0
+0.0877222331626816 -0.2727826326533035 0
+0.3519400547744855 -0.04515647246043998 0
+0.5065550629705246 -0.144663003658562 0
+0.7942858972787046 -0.7458876401651192 0
+0.8113062836990218 -0.5089688742274761 0
+0.214158515230591 -0.5593508248370771 0
+0.1908125296980804 -0.6767105408212966 0
+0.1571659425796712 -0.3178740611770656 0
+0.5704444651735466 -0.5355154992562069 0
+0.4206885330774237 -0.3162640583252265 0
+0.03635402371581747 -0.282881594762622 0
+0.06623321471759916 -0.9364770375429849 0
+0.04547333727788459 -0.4967933294450281 0
+0.9291024518942492 -0.4279826971514563 0
+0.9374002199029458 -0.5527056968204983 0
+0.3835474041504578 -0.1955584505574181 0
+0.938646873590577 -0.06424556616102521 0
+0.2459581419469944 -0.3745015532981616 0
+0.3113081049567858 -0.3177291960964608 0
+0.4737302735858407 -0.4823394149169006 0
+0.5757088101019416 -0.216091362633037 0
+0.1316549332983596 -0.2463090547153146 0
+0.05262984967764039 -0.5573481819330242 0
+0.330241314313413 -0.1214849376653234 0
+0.2459090790869788 -0.1314411404354747 0
+0.5582272596053208 -0.3174186175010004 0
+0.2779391714255898 -0.413614910609287 0
+0.7776919196224352 -0.2782239643429273 0
+0.5156634529874432 -0.4254177814654156 0
+0.3338226885249589 -0.2725995994249851 0
+0.5812435986670748 -0.04760630910531931 0
+0.4541310973073892 -0.9437277484241188 0
+0.334986973541393 -0.4028794993745459 0
+0.4181553806113283 -0.581200923962769 0
+0.03023201416130623 -0.322215476499609 0
+0.3225671041807623 -0.9298331090339096 0
+0.630564075874243 -0.03823976303656062 0
+0.5876758823481245 -0.3576748055273398 0
+0.1108814248254184 -0.570618636920776 0
+0.2614305963617689 -0.2275405269117042 0
+0.336170788760378 -0.3549927813022032 0
+0.3617978604340986 -0.09156941840136619 0
+0.4334546152904223 -0.3847689125000743 0
+0.3797927096962527 -0.2613316283249568 0
+0.731295234787019 -0.6322500533032395 0
+0.7429405956566382 -0.9441355324654425 0
+0.9478398206102548 -0.8479240998628732 0
+0.1086336021033215 -0.3906461936673935 0
+0.8086811732546078 -0.3443219740387481 0
+0.2867537763413472 -0.752318161474843 0
+0.666891449459501 -0.3074576915196109 0
+0.944581135987532 -0.9445811359876003 0
+0.6902983069801794 -0.510449074707963 0
+0.8220137966900963 -0.2309529660319696 0
+0.4813057448620119 -0.3883898319743456 0
+0.7504305887375025 -0.1375299473549235 0
+0.6780791067727757 -0.8303941044719226 0
+0.1035782939427617 -0.3138741553658253 0
+0.9362633310674027 -0.7017443610550897 0
+0.9529271602863103 -0.7446717179620131 0
+0.889190491353713 -0.7464160790178931 0
+0.3061947979815355 -0.1501546254887978 0
+0.3072511694802904 -0.1236425349984784 0
+0.3291849428146582 -0.1479970281556428 0
+0.7738188124988854 -0.5742828966527812 0
+0.7657476932179184 -0.5366668834521587 0
+0.8193774029799888 -0.5465848874280985 0
+0.2827134738867532 -0.1545506980025144 0
+0.3046472472211209 -0.1789051911596788 0
+0.2938135240766131 -0.021296701526386 0
+0.3253604386004791 -0.02257823623021999 0
+0.3203931402506195 -0.04387493775660599 0
+0.589133408411998 -0.1209669931268724 0
+0.5489329351877533 -0.1147156962016738 0
+0.5776884059117318 -0.08726880607432747 0
+0.4339270293533813 -0.2023281695845149 0
+0.4680399112628954 -0.1834209615477488 0
+0.466238137942117 -0.2189119805084892 0
+0.03697158282087261 -0.6109204440525694 0
+0.03697158282087261 -0.6465177665397276 0
+0.7332733977685491 -0.5239274664547047 0
+0.7788319882496525 -0.496229457230022 0
+0.5818826994011767 -0.4823704412173518 0
+0.56090447463759 -0.4515621097081492 0
+0.6096719183486663 -0.4527648922789474 0
+0.1999881591954785 -0.2001239090925599 0
+0.2001697193691237 -0.2327887026344908 0
+0.1769582561653166 -0.2094414881435332 0
+0.0437932216672606 -0.7576955289550803 0
+0.0437932216672606 -0.7980740036369839 0
+0.7757439698113135 -0.3833641158987908 0
+0.7563643698617724 -0.4209689044952996 0
+0.7160583509879664 -0.3841498568444753 0
+0.9518771393183669 -0.3264615833592228 0
+0.9032653927208243 -0.2961120952128828 0
+0.9513882534024575 -0.2696505118529263 0
+0.6005473041428998 -0.5095443615221784 0
+0.5517798604318235 -0.5083415789513802 0
+0.3706155549239429 -0.3450308069375868 0
+0.3906234602447582 -0.3159881485303805 0
+0.4006806277566084 -0.3453067167324327 0
+0.5952100788260015 -0.7749129343219393 0
+0.5661916832696345 -0.8228297861956124 0
+0.5525053187098389 -0.765913425729967 0
+0.2060912640898 -0.178490525421956 0
+0.2293027272936072 -0.2018377399129136 0
+0.7812038407427013 -0.4518366018910915 0
+0.7215182219193543 -0.4526223428367761 0
+0.4973498426318141 -0.3525874531447413 0
+0.4795975074121723 -0.3156574360872323 0
+0.5081168261001785 -0.3253349640816145 0
+0.8726079831767076 -0.3187876513024242 0
+0.8721190972607982 -0.2619765797961277 0
+0.03379317502189269 -0.4064465178956577 0
+0.05534008853404217 -0.4272613975775832 0
+0.02154691351214948 -0.4268819743507525 0
+0.06627739970708811 -0.6654740684997039 0
+0.0293058168862155 -0.6847610267753718 0
+0.8918138423191935 -0.6621195705335379 0
+0.9555505112517908 -0.6603752094776579 0
+0.8499875921978807 -0.6438448113698453 0
+0.8277307805975933 -0.6883479029536358 0
+0.8051917106606685 -0.6287039922125115 0
+0.5340401185389618 -0.7287603545420295 0
+0.5050217229825948 -0.7766772064157025 0
+0.4709848484403748 -0.8056046744899376 0
+0.4525196482694978 -0.768451603302 0
+0.4000044228866834 -0.03065809485569907 0
+0.3729409029399826 -0.05323633108591905 0
+0.3790035747211862 -0.02257823623021999 0
+0.03086203684027014 -0.3811250823420011 0
+0.06465521186216283 -0.3815045055688318 0
+0.3513372247495433 -0.02257823623021999 0
+0.6181342912767575 -0.3929131838102816 0
+0.6721268200034304 -0.3928122261459012 0
+0.6426862223117524 -0.4218556031053645 0
+0.8044800020552256 -0.0367524844391279 0
+0.7641015273732893 -0.0367524844391279 0
+0.427071574183923 -0.3505164854126504 0
+0.4070636688631077 -0.3795591438198566 0
+0.4953577553660838 -0.2442048597479144 0
+0.4612448734565698 -0.2631120677846805 0
+0.3657806965652191 -0.2127973424593695 0
+0.3816700569233553 -0.2284450394411874 0
+0.3639033493381165 -0.2456839313431389 0
+0.1574800107285777 -0.2614759512241864 0
+0.1347375692082766 -0.2635773377391117 0
+0.1543973748186607 -0.2442076682003893 0
+0.4938621750716975 -0.8446590235692918 0
+0.4413601003586004 -0.8364334204555893 0
+0.4504690129265928 -0.1370971748312981 0
+0.4858821430747752 -0.1260101013486919 0
+0.4711419328223421 -0.1557500771411682 0
+0.8971441761689016 -0.9471441761691053 0
+0.8538508164420631 -0.9561849001217492 0
+0.8509949926113811 -0.9033290762908547 0
+0.09595880749507842 -0.4895572604071965 0
+0.06620403799427879 -0.5090289498596864 0
+0.07522810677868422 -0.4773216399925382 0
+0.3860411582071965 -0.7624336419654147 0
+0.3907862005200906 -0.7062035287570813 0
+0.4232278160401718 -0.7411489581679015 0
+0.5713740561153012 -0.6625359045153139 0
+0.6010682872210891 -0.6206860660481516 0
+0.6112179453719937 -0.6761467353891316 0
+0.8692747723822687 -0.6024756597924136 0
+0.5035874530909161 -0.3753274065567345 0
+0.4750681344029099 -0.3656498785623524 0
+0.09166361402948706 -0.3533073042236601 0
+0.082651183811651 -0.3350286126905002 0
+0.1125907241605978 -0.3321528468989852 0
+0.6636644470753392 -0.4526639346145671 0
+0.2075616721154559 -0.8704208401102927 0
+0.2027803940891576 -0.8176142029689514 0
+0.2459375133123978 -0.8507637372681375 0
+0.7793718785239874 -0.6082254769659802 0
+0.7257421687619169 -0.5983074729900404 0
+0.0740383516518914 -0.4527734022863631 0
+0.04428358215109178 -0.4722450917388531 0
+0.6167113545810405 -0.7406716340907465 0
+0.6303977191408363 -0.7975879945563921 0
+0.4253214117677079 -0.02685942921686293 0
+0.4192587399865043 -0.05751752407256201 0
+0.8038508164422713 -0.9561849001217492 0
+0.08243764297532494 -0.8195763759608848 0
+0.03864442130806433 -0.8438892543430091 0
+0.1651620014953411 -0.2837643700035116 0
+0.1848218071057251 -0.2643947004647891 0
+0.06096440538276372 -0.3327924349515491 0
+0.08189151551387444 -0.3116379776268742 0
+0.4078363300915304 -0.2166888195513367 0
+0.4059589828644278 -0.2495754084351061 0
+0.4275885110859252 -0.8905313128522637 0
+0.4047111844546025 -0.8514769637729095 0
+0.5483147957341821 -0.6953661312625997 0
+0.5381651375832774 -0.6399054619216197 0
+0.2128992814620702 -0.4594971773049989 0
+0.1867365058646357 -0.4783528245549221 0
+0.1907019857547315 -0.4392239121564105 0
+0.3695331745419307 -0.8155528225961429 0
+0.3557615852692556 -0.8696507149928173 0
+0.1168570847598468 -0.6221345063216835 0
+0.0924122952335818 -0.5989247225924178 0
+0.1353262143516833 -0.5938284206500416 0
+0.1069298076687939 -0.7309267190764458 0
+0.1511944911000334 -0.7200238139489614 0
+0.1318511267657607 -0.7628582201273751 0
+0.8461029397568787 -0.04085933176487281 0
+0.8281960597943774 -0.07761181620400072 0
+0.1151183782408777 -0.3705388660497693 0
+0.0851788378919309 -0.3734146318412843 0
+0.2856511833476399 -0.8686484741127648 0
+0.2808699053213416 -0.8158418369714234 0
+0.1001081688224059 -0.657661560581046 0
+0.1430220879405075 -0.6525652586386697 0
+0.5242958752429288 -0.302911782262553 0
+0.5420482104625706 -0.3398417993200619 0
+0.6500186305596686 -0.1109794490957796 0
+0.6571360846925619 -0.08028059629780047 0
+0.689265836116254 -0.09773994239405405 0
+0.2637645822384539 -0.5749589296540838 0
+0.2288875292781972 -0.5899457804552274 0
+0.2490355681908478 -0.5443639740359335 0
+0.03086203684027014 -0.3534587323701825 0
+0.196913179133172 -0.9136777159072793 0
+0.1537560599099319 -0.8805281816080933 0
+0.9529271602863103 -0.7946717179621449 0
+0.3645008712090635 -0.681443706391646 0
+0.4016875290420389 -0.6601590225941328 0
+0.2035490500473563 -0.3873002201239642 0
+0.1846224512738815 -0.4129025882047867 0
+0.1713067399690719 -0.3798345434222635 0
+0.1559182465604902 -0.3523318568867931 0
+0.1369916477870154 -0.3779342249676156 0
+0.6373842992739438 -0.706616143455426 0
+0.6670785303797316 -0.6647663049882637 0
+0.5034530414110778 -0.1723338880651425 0
+0.7693068977281422 -0.8530669261220749 0
+0.726526536251479 -0.8328918141545599 0
+0.7684730366057556 -0.8097746091152193 0
+0.5008312000069381 -0.7061299119483353 0
+0.2459513312061935 -0.6632334359146265 0
+0.2195493243923321 -0.6913183382885859 0
+0.2172145365119418 -0.6486256384473371 0
+0.4096381034123088 -0.1811978005905962 0
+0.4447595285106158 -0.3295869917377928 0
+0.4511425696171151 -0.3638394188252168 0
+0.1913685683075176 -0.3204576472927776 0
+0.2219944790509597 -0.3039823272919763 0
+0.2208592494859888 -0.3377568553406397 0
+0.2635375011066587 -0.1573712020544351 0
+0.2650850518670733 -0.128620636383554 0
+0.2388918454504797 -0.4423310020676575 0
+0.2349263655603839 -0.4814599144661691 0
+0.3004581954324121 -0.4950710738979675 0
+0.272415775349949 -0.4968354312318088 0
+0.2889613496312565 -0.4625293818949863 0
+0.02154691351214948 -0.4563477668454944 0
+0.4572646905823919 -0.7122214900936664 0
+0.2253593956697641 -0.9517851872047393 0
+0.1715537834642401 -0.9618925287025398 0
+0.3584217555980855 -0.3646710782209211 0
+0.3483645880862353 -0.335352510018869 0
+0.2582858776571336 -0.1817528099578525 0
+0.2406574556374537 -0.1558227483388922 0
+0.572682564461041 -0.2782999244294674 0
+0.5594651312782416 -0.2390612912676034 0
+0.5889262432847411 -0.255329995794901 0
+0.4018778606075677 -0.1541374627206472 0
+0.389176995026483 -0.1223512573490826 0
+0.423027937093075 -0.1350509452522098 0
+0.2464232113615395 -0.5140016064691502 0
+0.8586985704729619 -0.5387891650391936 0
+0.913674419293957 -0.5230415631350822 0
+0.8824243710819508 -0.5684532987246097 0
+0.7094687797053871 -0.7424176051011312 0
+0.7437653907801932 -0.7205616766098387 0
+0.7599892862038985 -0.7677435686564117 0
+0.2484182142748488 -0.2038724415770069 0
+0.2423151093805273 -0.2255058252476109 0
+0.5013485779332565 -0.09418735409397534 0
+0.4786588698539374 -0.07648075337972672 0
+0.5147982246081679 -0.06331090843488023 0
+0.1848908380774581 -0.528941556372175 0
+0.150191172485103 -0.533686801709688 0
+0.1742341359796193 -0.5033713350410235 0
+0.2447211771863416 -0.7519416179413357 0
+0.2086360227415498 -0.7749562075633435 0
+0.2122009646417919 -0.728940725377883 0
+0.2977406417686684 -0.5651484379709051 0
+0.2775926028560178 -0.610730244390199 0
+0.3757871613457168 -0.1684981126874691 0
+0.7380898916710316 -0.6842213984254301 0
+0.7886103981695429 -0.7095473619807106 0
+0.09244240288774883 -0.69590482081669 0
+0.8500701089256626 -0.7676155380449678 0
+0.833406279706755 -0.7246881811380445 0
+0.5217862361530863 -0.2310179961869464 0
+0.5167929716675391 -0.2752180834631376 0
+0.2712982597440537 -0.2054208952925498 0
+0.6205905376021643 -0.264047766343773 0
+0.6529644240981445 -0.2704922976251959 0
+0.6345175629635207 -0.301013160238188 0
+0.2016937736018758 -0.6187894702263425 0
+0.1752917667880143 -0.6468743726003019 0
+0.7414782061709358 -0.07027302923716534 0
+0.7190066114515008 -0.03352054479803744 0
+0.2302890169899579 -0.2471615973786231 0
+0.2072591139597959 -0.2564791764295963 0
+0.0293058168862155 -0.7226736306953245 0
+0.0730990385534761 -0.7387392269951037 0
+0.8529993036850438 -0.4567802964996406 0
+0.8725762202896843 -0.4240829303505356 0
+0.9095255352896087 -0.4606800633005613 0
+0.6073731044193649 -0.224809133181909 0
+0.8585538593275197 -0.8096465785037754 0
+0.8027696476805617 -0.7879186806239268 0
+0.2115461584012827 -0.5289884572702938 0
+0.5220214978290059 -0.1128402564038454 0
+0.1580161875807417 -0.224986842190914 0
+0.122258673333374 -0.4829832654592924 0
+0.1132346045489686 -0.5146905753264407 0
+0.6720129250209292 -0.2478258251865774 0
+0.6859399503822856 -0.2847912190809924 0
+0.1259954981133685 -0.8055162155329831 0
+0.1208466977541722 -0.8513314662390083 0
+0.2149411047265593 -0.2787675952089215 0
+0.08810997607355345 -0.398736067394941 0
+0.1702601815446079 -0.7946133104054988 0
+0.6725719395887786 -0.7292912036898788 0
+0.8090140625050405 -0.1172684806752537 0
+0.8506370002066934 -0.1213753280009986 0
+0.3285697075892491 -0.6992135450882975 0
+0.3394710361111973 -0.6531690389253492 0
+0.0862846131616346 -0.4323379458312683 0
+0.1068082391914027 -0.4242480721037209 0
+0.6219160114934226 -0.1312390174798263 0
+0.5931605407694441 -0.1586859076071725 0
+0.2753593956699721 -0.9517851872047393 0
+0.6242264775051097 -0.06587993301804335 0
+0.6634736830616952 -0.05264042631631775 0
+0.437768147345508 -0.1053109694597335 0
+0.8599021336609266 -0.3865531651343971 0
+0.9164283652654914 -0.3904529319353178 0
+0.1584596756764471 -0.4317582354547099 0
+0.4274514001897595 -0.07849179915718552 0
+0.402134411308735 -0.08229046479602166 0
+0.5142758933473756 -0.6145854700930802 0
+0.4801544262896802 -0.5852110591661617 0
+0.5271029309067012 -0.5777008242474153 0
+0.2216366178380715 -0.1595484569398718 0
+0.9242506212032637 -0.5867280578883022 0
+0.5326255937577082 -0.04050875457456442 0
+0.5099358856783892 -0.02280215386031581 0
+0.2735782079085931 -0.6457398068476891 0
+0.2759129957889833 -0.688432506688938 0
+0.3887823141056946 -0.411851521627338 0
+0.3659394396584946 -0.4261165837447914 0
+0.357829847988593 -0.3886144372570924 0
+0.4213647942306831 -0.6287474526202621 0
+0.3967787901711701 -0.6083000620957334 0
+0.4427413846708414 -0.6016483144872978 0
+0.9518771393183669 -0.376461583359077 0
+0.8891076844049557 -0.04085933176487281 0
+0.5545034267475022 -0.02380315455265965 0
+0.5593657656772809 -0.06431190912722408 0
+0.9555505112517908 -0.6103752094775263 0
+0.3569478377446579 -0.455059346338091 0
+0.3259953716275563 -0.4318222619678454 0
+0.8094775154834808 -0.8711597606631165 0
+0.7675310151292041 -0.8942769657024571 0
+0.7571150669237001 -0.6527285685497707 0
+0.9513882534024575 -0.2196505118530721 0
+0.3370915590218495 -0.7806073931853226 0
+0.3036686758489655 -0.7930223676454469 0
+0.3201766595142312 -0.7399031870147187 0
+0.533466500329272 -0.1465384434563903 0
+0.1875031949067664 -0.5593039239389582 0
+0.4476501235417102 -0.6535072749856973 0
+0.3025781390425004 -0.05967489946282124 0
+0.3341250535663663 -0.06095643416665523 0
+0.4547872042622522 -0.02685942921686293 0
+0.3352767429672555 -0.4823690623162818 0
+0.3187311686859479 -0.5166751116531042 0
+0.8506274511919949 -0.5011731518385711 0
+0.8136781361920706 -0.4645760188885455 0
+0.7202132011212889 -0.3043349074451702 0
+0.7413401854637528 -0.2701743554926506 0
+0.7565649352799714 -0.3123845162954469 0
+0.4151732605330092 -0.4170612903075557 0
+0.6540457629171147 -0.1486983635760798 0
+0.4912166329662564 -0.647415696840366 0
+0.0263149248388202 -0.5759791308870517 0
+0.06328650765969281 -0.5922894950985419 0
+0.160309439230445 -0.5881476137100733 0
+0.1869647595542697 -0.5881945146081922 0
+0.8527708752103192 -0.8621190367104726 0
+0.9000713364554201 -0.8418158941315136 0
+0.2675199477139655 -0.7291221486153591 0
+0.2639550058137233 -0.7751376308008195 0
+0.4548924760232773 -0.08053802873627385 0
+0.03864442130806433 -0.8868939989908114 0
+0.7931865464385215 -0.3112729691908377 0
+0.7720595620960576 -0.3454335211433573 0
+0.1736996406611089 -0.3360531182592533 0
+0.1748348702260799 -0.3022785902105899 0
+0.7052437048584971 -0.5374069836924021 0
+0.7183279998902312 -0.4969695574702656 0
+0.632450604182115 -0.520504094569825 0
+0.6023477652127618 -0.5464752323038536 0
+0.4298014382720811 -0.4379706138658963 0
+0.4480827930294942 -0.405678236058415 0
+0.1286815087375405 -0.4316434310215672 0
+0.1305068716494593 -0.3980415525852398 0
+0.5028915245664362 -0.8938295897852726 0
+0.5325162726482107 -0.8630008438196209 0
+0.2694231128633767 -0.021296701526386 0
+0.5752210327643733 -0.8720003524115932 0
+0.1393845484790525 -0.3341527998046054 0
+0.2670212729362298 -0.04568299166554194 0
+0.3480777449284395 -0.1579734467317411 0
+0.3491341164271944 -0.1314613562414217 0
+0.8562177259456707 -0.3486225703789638 0
+0.8250714304856446 -0.3144870549622086 0
+0.7909427958274295 -0.1492809699135876 0
+0.7685018554151134 -0.1055174581165897 0
+0.8123655809698636 -0.3822525687941816 0
+0.4683421226981889 -0.04966158307717874 0
+0.6915064199529715 -0.3552074375493925 0
+0.6772200839943959 -0.5608999290141709 0
+0.6805506396072981 -0.5993308947994053 0
+0.6375816208648792 -0.5958659311367348 0
+0.2680266409530021 -0.2994346602980386 0
+0.2979381133166795 -0.2976584906763498 0
+0.2813966325931084 -0.3195053657181495 0
+0.5995662389015256 -0.07056320605242269 0
+0.2724064578426283 -0.3427875662523371 0
+0.3023179302063057 -0.3410113966306483 0
+0.321575339768673 -0.8817798414249801 0
+0.2866429477597292 -0.9167017417216942 0
+0.9449743093424841 -0.4966887147241802 0
+0.9645512259471246 -0.4639913485750752 0
+0.6008259769764052 -0.1925246472965818 0
+0.5680433738949806 -0.1822526229436278 0
+0.4682206221772034 -0.4544634872668281 0
+0.4353110896807184 -0.4658465415159688 0
+0.3002855385027075 -0.1012782641022519 0
+0.2775555646513884 -0.1053375510183215 0
+0.2935800785069282 -0.08081568278894007 0
+0.1358646497041801 -0.5649378299808078 0
+0.5207728110725041 -0.9560857050178008 0
+0.5707728110721682 -0.9560857050178008 0
+0.6572331692139681 -0.3356637491852146 0
+0.7011647001985042 -0.3270013798837887 0
+0.413703647152983 -0.4869690916478543 0
+0.3920325523755805 -0.5142788076260451 0
+0.3752208109981937 -0.4766633840932278 0
+0.3968362986025344 -0.5437632532295776 0
+0.3583534624477451 -0.5334575456749512 0
+0.665359441288724 -0.2124493700110678 0
+0.6983349675728652 -0.2267482914668642 0
+0.678814845977627 -0.9570340057940423 0
+0.7002851438055994 -0.9291017720267637 0
+0.7214702978286658 -0.9720677662327212 0
+0.1474930738489324 -0.2993598409699872 0
+0.4617484261896879 -0.5364554642505842 0
+0.4555684222301671 -0.564763668641633 0
+0.4243353845708491 -0.5528927195717203 0
+0.4715393677776122 -0.6788272668142369 0
+0.2180957403447705 -0.3643668643198013 0
+0.2314114516495802 -0.3974349091023245 0
+0.7234069394933249 -0.1022855184754992 0
+0.7162894853604316 -0.1329843712734784 0
+0.6861037056324002 -0.6332734751126045 0
+0.4978383597251692 -0.9279495792298603 0
+0.4591842621486561 -0.9096077589795312 0
+0.1520368402722806 -0.4830980698924351 0
+0.3649123894875372 -0.1165035966094431 0
+0.3860624659730444 -0.09741707914100568 0
+0.6288148459779737 -0.9570340057940423 0
+0.6924950446642131 -0.8951260713747501 0
+0.7351504965152519 -0.910159831813429 0
+0.5879268392533072 -0.02380315455265965 0
+0.4521228310581052 -0.503461965048786 0
+0.8671157548611358 -0.200166508089419 0
+0.8776189498594181 -0.1510407667252076 0
+0.9132797018031973 -0.1901752823423749 0
+0.2487216510882127 -0.347891544319 0
+0.4770655486547239 -0.9718638742120592 0
+0.6324902712938284 -0.2012424178454537 0
+0.3232756833358301 -0.09912066676909691 0
+0.6810940075315219 -0.03352054479803744 0
+0.8095768036695583 -0.2814380501142982 0
+0.3112835520910053 -0.9649165545169547 0
+0.3778698057697892 -0.07644280405638217 0
+0.1252079476063413 -0.5393676086496563 0
+0.09890808176804569 -0.5459416035975604 0
+0.3612835520912133 -0.9649165545169547 0
+0.9687001099514729 -0.5263528484095962 0
+0.896800947148755 -0.1113841022539546 0
+0.9618914484007398 -0.1705247704888606 0
+0.9618914484007398 -0.1205247704889891 0
+0.295146824416365 -0.7116285195484218 0
+0.2444317859050305 -0.2960668032567835 0
+0.5303644787698254 -0.1742093278629709 0
+0.5380299149767864 -0.2080480675523801 0
+0.7945079205128349 -0.1810031112395196 0
+0.7539957134229078 -0.1692520886808556 0
+0.1834641699475403 -0.7143329279105937 0
+0.1347610432183905 -0.4579647549731909 0
+0.3075542674388076 -0.6359293151645103 0
+0.1101982047718883 -0.8945883420359949 0
+0.4555265119789802 -0.3023345026746661 0
+0.4264068945550133 -0.2770416234352409 0
+0.3954697975917958 -0.9527874280847918 0
+0.3567533496813449 -0.9177039826017467 0
+0.6887958350124839 -0.7764730957364517 0
+0.121553783464032 -0.9618925287025398 0
+0.0817556372515294 -0.5639834094269001 0
+0.8623951517475057 -0.235126994869278 0
+0.8267343998037264 -0.1959924792521106 0
+0.2509099939819913 -0.09027291368019587 0
+0.2583795918712939 -0.1081580550702422 0
+0.2384394811976761 -0.1135559990454284 0
+0.1585428508505735 -0.6824014268596643 0
+0.03311660735879958 -0.922436704428849 0
+0.03311660735879958 -0.9682385187714924 0
+0.6869149329120103 -0.1599053157416939 0
+0.7210560362890812 -0.1644508918231391 0
+0.8317377422033889 -0.2578025509588193 0
+0.6934885290093024 -0.4661018600744736 0
+0.6604742250462161 -0.4970111492480565 0
+0.09169654579847131 -0.2518762578195273 0
+0.1136628958663103 -0.2386394688505329 0
+0.1096885832305206 -0.2595458436843091 0
+0.6481844003440698 -0.01911988151828031 0
+0.3235349149129018 -0.5461595572566368 0
+0.3373629355304657 -0.581930871992752 0
+0.2609732666286017 -0.2742199282149838 0
+0.9645512259471246 -0.4139913485752155 0
+0.1127712191404376 -0.2768141267081062 0
+0.588184787966602 -0.3898156831485423 0
+0.61762538565828 -0.3607723061890791 0
+0.3692797042028554 -0.5991705957535908 0
+0.3434854310586221 -0.618159476467859 0
+0.08311660735900757 -0.9682385187714924 0
+0.5977377316081869 -0.582255100262917 0
+0.06978229419415669 -0.5393063761036845 0
+0.6332630676701789 -0.8729486531878348 0
+0.5995876570487549 -0.9131197108118433 0
+0.7312746447066918 -0.2315494883245807 0
+0.7246211609744866 -0.1961730331490711 0
+0.9693234367952885 -0.03212278308051261 0
+0.923521622452229 -0.03212278308051261 0
+0.04256330213010404 -0.2640389574277009 0
+0.01817701185790873 -0.266440797381311 0
+0.01817701185790873 -0.2908312085946855 0
+0.26964294870141 -0.3693975752314987 0
+0.9693234367952885 -0.08212278308041993 0
+0.5507243560299312 -0.2897249187015851 0
+0.31749711925788 -0.2021678400934987 0
+0.2940157951630977 -0.2065639126072153 0
+0.9268470705914378 -0.8186337678938448 0
+0.9210640864742372 -0.871106226100542 0
+0.02273666863894229 -0.4808960045516694 0
+0.02273666863894229 -0.5122782921372632 0
+0.3906562946430137 -0.5720714576206264 0
+0.4785535980929122 -0.02280215386031581 0
+0.9194347441628758 -0.9194347441629055 0
+0.9222905679935578 -0.9722905679938 0
+0.2580232124006576 -0.06682377499166077 0
+0.7122700595343504 -0.6637428831788988 0
+0.3558379877331805 -0.1850337846016901 0
+0.6588123138457644 -0.1801648841257405 0
+0.4833558687174233 -0.5153329141186987 0
+0.7027197520733206 -0.8532891178166691 0
+0.701885890950934 -0.8099968008098134 0
+0.7676263788653742 -0.2395990971748575 0
+0.1352737460604406 -0.2270882287058393 0
+0.3380712801479417 -0.2022726765036416 0
+0.3274398280899185 -0.2299313979511781 0
+0.9042329355433036 -0.07298211484538542 0
+0.9312148851960282 -0.1026475535695944 0
+0.1303721182612165 -0.3158741082714454 0
+0.1206992495304777 -0.297359888064367 0
+0.0682474068535361 -0.2589894763730416 0
+0.5130483597695531 -0.5147470359835252 0
+0.5034227646379705 -0.4817535367817271 0
+0.0717610286668639 -0.9009343321049476 0
+0.01511600708065312 -0.3104981494631791 0
+0.01511600708065312 -0.3364749356123995 0
+0.7897873173992047 -0.2159635980193786 0
+0.5317129645112763 -0.5419209562883519 0
+0.5658344315689716 -0.5712953672152704 0
+0.0263149248388202 -0.5425557183812612 0
+0.2268882412875965 -0.1351668490364543 0
+0.2841481317808128 -0.2286835442263697 0
+0.5801854680364307 -0.3059936232288827 0
+0.5572814274524499 -0.3921107709544341 0
+0.5521785732862614 -0.4236871711175802 0
+0.5207663071536317 -0.3938413813022695 0
+0.6434877750792865 -0.8311116996297537 0
+0.6678543993636681 -0.8722310580300038 0
+0.6622746861160782 -0.5339420200297317 0
+0.6125870778568914 -0.01911988151828031 0
+0.9687001099514729 -0.5763528484097225 0
+0.624859282717988 -0.3292192179037917 0
+0.5949097794078325 -0.3261217172420524 0
+0.5243893543387718 -0.4532927200559846 0
+0.4270655486545267 -0.9718638742120592 0
+0.4891872118780046 -0.4260026705410856 0
+0.494696863286642 -0.4538785981911581 0
+0.5567725218339724 -0.3599698933332315 0
+0.06203812843924954 -0.2778321137079628 0
+0.972290567993766 -0.9722905679938 0
+0.972290567993766 -0.9222905679936685 0
+0.2798481651911813 -0.06373418637889083 0
+0.771470297828319 -0.9720677662327212 0
+0.09565026355272166 -0.2933283940095644 0
+0.9739199103051275 -0.8739620499313049 0
+0.9739199103051275 -0.8239620499311732 0
+0.2474019663888779 -0.4169915877578872 0
+0.2694290504871916 -0.4389543249190573 0
+0.1046703908226235 -0.9301310474740324 0
+0.07396348512383438 -0.2910922162706134 0
+0.04827938040040231 -0.2961416973252726 0
+0.9462104782988934 -0.8962526179252367 0
+0.2974714705696547 -0.437189967585216 0
+0.04905159347776249 -0.5270707556890261 0
+0.04597804392092326 -0.339199273257392 0
+0.04521837562314669 -0.3158086381937661 0
+0.6649890508343255 -0.796870399398561 0
+0.4002406213868382 -0.2887978433250916 0
+0.7753211142705905 -0.9282526663544706 0
+0.2619486566862921 -0.3940582319537243 0
+0.4225353462446583 -0.9246513022968513 0
+0.3064630724834914 -0.4082472049919164 0
+0.5729515709767227 -0.3375467115141701 0
+0.295716894438215 -0.253707173398637 0
+0.3203441778624079 -0.2512130804830102 0
+0.3091954051007661 -0.275093692340612 0
+0.3225653967408724 -0.295164397760723 0
+0.2856334634407077 -0.3889542538870615 0
+0.3141573644986093 -0.3835865482696909 0
+0.3409183387524696 -0.251317916893153 0
+0.356868957604292 -0.06836294543090309 0
+0.339053956396173 -0.08416290713711833 0
+0.7998528581562658 -0.2545884651874484 0
+0.03329301893856185 -0.3025485356311156 0
+0.2494045039711994 -0.2491962990427164 0
+0.3359332461844392 -0.3167207174159977 0
+0.3471905379685258 -0.2941559190802599 0
+0.3460195873737558 -0.1065271780333448 0
+0.2729993590191711 -0.2525641560839715 0
+0.3701755485541727 -0.2885219335302457 0
+0.4720083578152889 -0.4074886957955505 0
+0.4984845989247275 -0.4069038067198806 0
+0.3237394468585819 -0.336360988699332 0
+0.3147492721081018 -0.3596431892335195 0
+0.6059038372706589 -0.04292303607093997 0
+0.3355788811508855 -0.3789361403383746 0
+0.3568076991106058 -0.2669656138749709 0
+0.4573801800762171 -0.38657937223721 0
+$EndNodes
+$Elements
+20 1768 1 1768
+0 3 15 1
+1 2 
+0 4 15 1
+2 3 
+0 5 15 1
+3 4 
+0 17 15 1
+4 7 
+0 21 15 1
+5 8 
+0 22 15 1
+6 9 
+0 36 15 1
+7 11 
+0 57 15 1
+8 12 
+1 2 8 10
+9 2 34 43 
+10 34 35 44 
+11 35 36 45 
+12 36 37 46 
+13 37 38 47 
+14 38 39 48 
+15 39 40 49 
+16 40 41 50 
+17 41 42 51 
+18 42 3 52 
+1 3 8 10
+19 3 53 62 
+20 53 54 63 
+21 54 55 64 
+22 55 56 65 
+23 56 57 66 
+24 57 58 67 
+25 58 59 68 
+26 59 60 69 
+27 60 61 70 
+28 61 4 71 
+1 10 8 10
+29 7 144 153 
+30 144 145 154 
+31 145 146 155 
+32 146 147 156 
+33 147 148 157 
+34 148 149 158 
+35 149 150 159 
+36 150 151 160 
+37 151 152 161 
+38 152 8 162 
+1 11 8 10
+39 8 163 172 
+40 163 164 173 
+41 164 165 174 
+42 165 166 175 
+43 166 167 176 
+44 167 168 177 
+45 168 169 178 
+46 169 170 179 
+47 170 171 180 
+48 171 4 181 
+1 16 8 10
+49 7 218 227 
+50 218 219 228 
+51 219 220 229 
+52 220 221 230 
+53 221 222 231 
+54 222 223 232 
+55 223 224 233 
+56 224 225 234 
+57 225 226 235 
+58 226 11 236 
+1 17 8 10
+59 11 237 246 
+60 237 238 247 
+61 238 239 248 
+62 239 240 249 
+63 240 241 250 
+64 241 242 251 
+65 242 243 252 
+66 243 244 253 
+67 244 245 254 
+68 245 9 255 
+1 22 8 10
+69 2 271 280 
+70 271 272 281 
+71 272 273 282 
+72 273 274 283 
+73 274 275 284 
+74 275 276 285 
+75 276 277 286 
+76 277 278 287 
+77 278 279 288 
+78 279 12 289 
+1 23 8 10
+79 12 290 299 
+80 290 291 300 
+81 291 292 301 
+82 292 293 302 
+83 293 294 303 
+84 294 295 304 
+85 295 296 305 
+86 296 297 306 
+87 297 298 307 
+88 298 9 308 
+2 1 9 420
+89 55 349 403 495 496 497 
+90 374 425 460 498 499 500 
+91 348 330 441 501 502 503 
+92 374 339 425 504 505 498 
+93 81 430 438 506 507 508 
+94 320 358 369 509 510 511 
+95 361 310 382 512 513 514 
+96 18 19 372 29 515 516 
+97 377 348 441 517 503 518 
+98 342 316 398 519 520 521 
+99 350 96 407 522 523 524 
+100 20 21 367 31 525 526 
+101 324 380 424 527 528 529 
+102 379 59 385 530 531 532 
+103 316 342 445 519 533 534 
+104 356 322 446 535 536 537 
+105 334 352 404 538 539 540 
+106 96 350 414 522 541 542 
+107 377 324 424 543 529 544 
+108 360 323 427 545 546 547 
+109 343 379 385 548 532 549 
+110 363 15 405 550 551 552 
+111 372 19 409 515 553 554 
+112 349 55 406 495 555 556 
+113 349 330 392 557 558 559 
+114 352 315 404 560 561 539 
+115 404 315 411 561 562 563 
+116 351 79 438 564 565 566 
+117 15 363 415 550 567 568 
+118 80 81 438 91 508 569 
+119 344 398 424 570 571 572 
+120 73 74 370 84 573 574 
+121 446 322 479 536 575 576 
+122 382 310 427 513 577 578 
+123 452 347 480 579 580 581 
+124 371 407 458 582 583 584 
+125 345 404 411 585 563 586 
+126 337 361 439 587 588 589 
+127 42 384 412 590 591 592 
+128 357 332 449 593 594 595 
+129 368 411 420 596 597 598 
+130 329 352 416 599 600 601 
+131 330 349 406 557 556 602 
+132 323 360 491 545 603 604 
+133 415 321 494 605 606 607 
+134 398 316 424 520 608 571 
+135 328 373 378 609 610 611 
+136 330 348 481 501 612 613 
+137 332 405 449 614 615 594 
+138 352 334 426 538 616 617 
+139 79 351 399 564 618 619 
+140 41 42 412 51 592 620 
+141 367 21 390 525 621 622 
+142 371 335 407 623 624 582 
+143 353 415 494 625 607 626 
+144 310 452 480 627 581 628 
+145 345 411 418 586 629 630 
+146 352 329 413 599 631 632 
+147 359 311 419 633 634 635 
+148 411 331 418 636 637 629 
+149 372 400 475 638 639 640 
+150 338 367 386 641 642 643 
+151 73 370 387 574 644 645 
+152 321 415 484 605 646 647 
+153 373 331 378 648 649 610 
+154 372 338 400 650 651 638 
+155 79 80 438 90 569 565 
+156 427 323 462 546 652 653 
+157 358 333 401 654 655 656 
+158 354 325 442 657 658 659 
+159 14 15 415 25 568 660 
+160 373 328 408 609 661 662 
+161 54 55 403 64 497 663 
+162 336 368 420 664 598 665 
+163 311 376 381 666 667 668 
+164 376 321 381 669 670 667 
+165 352 314 416 671 672 600 
+166 361 382 439 514 673 588 
+167 365 327 389 674 675 676 
+168 315 352 413 560 632 677 
+169 313 354 443 678 679 680 
+170 310 361 452 512 681 627 
+171 360 446 479 682 576 683 
+172 335 376 383 684 685 686 
+173 339 374 461 504 687 688 
+174 311 359 417 633 689 690 
+175 325 355 417 691 692 693 
+176 15 16 405 26 694 551 
+177 411 315 420 562 695 597 
+178 35 373 408 696 662 697 
+179 322 356 477 535 698 699 
+180 414 339 461 700 688 701 
+181 340 395 457 702 703 704 
+182 319 361 421 705 706 707 
+183 359 325 417 708 693 689 
+184 375 330 451 709 710 711 
+185 314 389 440 712 713 714 
+186 414 350 476 541 715 716 
+187 337 369 429 717 718 719 
+188 318 359 432 720 721 722 
+189 378 313 386 723 724 725 
+190 325 354 422 657 726 727 
+191 361 319 452 705 728 681 
+192 392 314 440 729 714 730 
+193 338 372 409 650 554 731 
+194 403 349 440 496 732 733 
+195 340 382 427 734 578 735 
+196 339 414 476 700 716 736 
+197 366 395 487 737 738 739 
+198 354 400 443 740 741 679 
+199 370 74 401 573 742 743 
+200 350 407 431 524 744 745 
+201 20 367 409 526 746 747 
+202 367 338 409 641 731 746 
+203 324 375 450 748 749 750 
+204 395 366 457 737 751 703 
+205 327 403 440 752 733 753 
+206 325 359 442 708 754 658 
+207 369 337 439 717 589 755 
+208 96 95 407 103 756 523 
+209 332 357 432 593 757 758 
+210 312 366 487 759 739 760 
+211 328 367 390 761 622 762 
+212 407 335 431 624 763 744 
+213 415 363 484 567 764 646 
+214 367 328 386 761 765 642 
+215 314 352 426 671 617 766 
+216 370 326 387 767 768 644 
+217 368 336 436 664 769 770 
+218 363 332 484 771 772 764 
+219 358 320 410 509 773 774 
+220 35 36 373 45 775 696 
+221 358 401 473 656 776 777 
+222 361 337 421 587 778 706 
+223 379 324 450 779 750 780 
+224 311 381 419 668 781 634 
+225 399 351 421 618 782 783 
+226 362 329 396 784 785 786 
+227 97 96 414 104 542 787 
+228 330 406 451 602 788 710 
+229 369 77 429 789 790 718 
+230 354 313 436 678 791 792 
+231 391 322 469 793 794 795 
+232 336 362 470 796 797 798 
+233 58 59 379 68 530 799 
+234 72 73 387 83 645 800 
+235 77 369 467 789 801 802 
+236 55 56 406 65 803 555 
+237 355 391 469 804 795 805 
+238 327 365 412 674 806 807 
+239 392 330 481 558 613 808 
+240 59 60 385 69 809 531 
+241 331 368 486 810 811 812 
+242 320 369 439 511 755 813 
+243 328 378 386 611 725 765 
+244 359 318 442 720 814 754 
+245 362 336 420 796 665 815 
+246 430 341 438 816 817 507 
+247 78 79 399 89 619 818 
+248 355 325 434 691 819 820 
+249 375 324 441 748 821 822 
+250 312 380 464 823 824 825 
+251 322 391 479 793 826 575 
+252 332 363 405 771 552 614 
+253 333 358 410 654 774 827 
+254 329 362 413 784 828 631 
+255 18 372 459 516 829 830 
+256 318 400 442 831 832 814 
+257 327 384 403 833 834 752 
+258 313 378 486 723 835 836 
+259 378 331 486 649 812 835 
+260 337 399 421 837 783 778 
+261 21 22 390 32 838 621 
+262 464 380 485 824 839 840 
+263 376 335 444 684 841 842 
+264 348 377 489 517 843 844 
+265 397 316 445 845 534 846 
+266 391 364 479 847 848 826 
+267 332 381 484 849 850 772 
+268 345 394 404 851 852 585 
+269 81 5 430 92 853 506 
+270 394 334 404 854 540 852 
+271 321 376 444 669 842 855 
+272 5 99 430 107 856 853 
+273 425 319 460 857 858 499 
+274 379 343 485 548 859 860 
+275 326 370 492 767 861 862 
+276 324 377 441 543 518 821 
+277 400 354 442 740 659 832 
+278 330 375 441 709 822 502 
+279 324 379 485 779 860 863 
+280 399 337 429 837 719 864 
+281 380 344 424 865 572 528 
+282 348 397 416 866 867 868 
+283 368 331 411 810 636 596 
+284 317 383 455 869 870 871 
+285 369 358 467 510 872 801 
+286 383 346 455 873 874 870 
+287 331 373 472 648 875 876 
+288 375 57 450 877 878 749 
+289 410 320 457 773 879 880 
+290 364 391 456 847 881 882 
+291 374 341 428 883 884 885 
+292 400 318 475 831 886 639 
+293 38 39 394 48 887 888 
+294 344 380 487 865 889 890 
+295 309 391 434 891 892 893 
+296 393 309 434 894 893 895 
+297 380 312 487 823 760 889 
+298 366 312 433 759 896 897 
+299 423 40 482 898 899 900 
+300 335 371 444 623 901 841 
+301 396 309 470 902 903 904 
+302 315 413 420 677 905 695 
+303 376 311 454 666 906 907 
+304 401 333 492 655 908 909 
+305 348 416 481 868 910 612 
+306 370 401 492 743 909 861 
+307 394 345 468 851 911 912 
+308 359 419 432 635 913 721 
+309 319 421 478 707 914 915 
+310 39 40 423 49 898 916 
+311 413 362 420 828 815 905 
+312 365 423 482 917 900 918 
+313 76 77 467 87 802 919 
+314 391 309 456 891 920 881 
+315 381 321 484 670 647 850 
+316 326 385 402 921 922 923 
+317 383 376 454 685 907 924 
+318 38 394 468 888 912 925 
+319 366 410 457 926 880 751 
+320 384 327 412 833 807 591 
+321 341 374 460 883 500 927 
+322 74 75 401 85 928 742 
+323 343 464 485 929 840 859 
+324 373 36 472 775 930 875 
+325 421 351 478 782 931 914 
+326 432 357 475 757 932 933 
+327 362 396 470 786 904 797 
+328 36 37 472 46 934 930 
+329 57 375 451 877 711 935 
+330 387 326 402 768 923 936 
+331 60 61 402 70 937 938 
+332 368 436 486 770 939 811 
+333 335 383 431 686 940 763 
+334 320 382 457 941 942 879 
+335 388 326 492 943 862 944 
+336 386 313 443 724 680 945 
+337 381 332 419 849 946 781 
+338 422 354 436 726 792 947 
+339 328 390 408 762 948 661 
+340 19 20 409 30 747 553 
+341 427 310 446 577 949 950 
+342 385 60 402 809 938 922 
+343 37 418 472 951 952 934 
+344 389 314 426 712 766 953 
+345 34 35 408 44 697 954 
+346 382 340 457 734 704 942 
+347 459 372 475 829 640 955 
+348 385 326 490 921 956 957 
+349 428 98 461 958 959 960 
+350 382 320 439 941 813 673 
+351 338 386 443 643 945 961 
+352 22 2 448 33 962 963 
+353 333 433 492 964 965 908 
+354 343 385 490 549 957 966 
+355 424 316 489 608 967 968 
+356 94 437 458 969 970 971 
+357 401 75 473 928 972 776 
+358 393 325 422 973 727 974 
+359 383 317 431 869 975 940 
+360 360 427 446 547 950 682 
+361 436 313 486 791 836 939 
+362 57 58 450 67 976 878 
+363 437 371 458 977 584 970 
+364 398 344 474 570 978 979 
+365 336 393 422 980 974 981 
+366 2 34 448 43 982 962 
+367 397 329 416 983 601 867 
+368 357 459 475 984 955 932 
+369 318 432 475 722 933 886 
+370 334 394 423 854 985 986 
+371 312 388 433 987 988 896 
+372 4 72 453 82 989 990 
+373 394 39 423 887 916 985 
+374 93 1 447 100 991 992 
+375 1 13 447 23 993 991 
+376 346 383 454 873 924 994 
+377 325 393 434 973 895 819 
+378 61 4 453 71 990 995 
+379 340 427 462 735 653 996 
+380 377 424 489 544 968 843 
+381 425 339 435 505 997 998 
+382 58 379 450 799 780 976 
+383 374 428 461 885 960 687 
+384 433 388 492 988 944 965 
+385 349 392 440 559 730 732 
+386 403 384 483 834 999 1000 
+387 380 324 485 527 863 839 
+388 16 17 449 27 1001 1002 
+389 393 336 470 980 798 1003 
+390 391 355 434 804 820 892 
+391 77 78 429 88 1004 790 
+392 384 42 488 590 1005 1006 
+393 389 327 440 675 753 713 
+394 99 98 428 106 958 1007 
+395 416 314 481 672 1008 910 
+396 319 425 452 857 1009 728 
+397 410 366 433 926 897 1010 
+398 309 396 456 902 1011 920 
+399 365 389 493 676 1012 1013 
+400 314 392 481 729 808 1008 
+401 388 312 464 987 825 1014 
+402 333 410 433 827 1010 964 
+403 407 95 458 756 1015 583 
+404 347 425 435 1016 998 1017 
+405 387 402 453 936 1018 1019 
+406 321 444 494 855 1020 606 
+407 444 371 494 901 1021 1020 
+408 78 399 429 818 864 1004 
+409 94 93 437 101 1022 969 
+410 72 387 453 800 1019 989 
+411 396 342 456 1023 1024 1011 
+412 405 16 449 694 1002 615 
+413 418 331 472 637 876 952 
+414 402 61 453 937 995 1018 
+415 390 22 448 838 963 1025 
+416 13 14 471 24 1026 1027 
+417 326 388 490 943 1028 956 
+418 396 329 445 785 1029 1030 
+419 17 18 459 28 830 1031 
+420 97 414 461 787 701 1032 
+421 329 397 445 983 846 1029 
+422 435 339 476 997 736 1033 
+423 395 340 462 702 996 1034 
+424 398 323 465 1035 1036 1037 
+425 334 423 493 986 1038 1039 
+426 316 397 489 845 1040 967 
+427 75 76 473 86 1041 972 
+428 336 422 436 981 947 769 
+429 419 332 432 946 758 913 
+430 56 57 451 66 935 1042 
+431 423 365 493 917 1013 1038 
+432 309 393 470 894 1003 903 
+433 344 395 474 1043 1044 978 
+434 342 398 465 521 1037 1045 
+435 37 38 468 47 925 1046 
+436 364 456 465 882 1047 1048 
+437 95 94 458 102 971 1015 
+438 397 348 489 866 844 1040 
+439 342 396 445 1023 1030 533 
+440 323 398 474 1035 979 1049 
+441 437 93 447 1022 992 1050 
+442 98 97 461 105 1032 959 
+443 3 53 488 62 1051 1052 
+444 42 3 488 52 1052 1005 
+445 99 428 430 1007 1053 856 
+446 40 41 482 50 1054 899 
+447 371 437 494 977 1055 1021 
+448 53 54 483 63 1056 1057 
+449 400 338 443 651 961 741 
+450 311 417 463 690 1058 1059 
+451 408 390 448 948 1025 1060 
+452 456 342 465 1024 1045 1047 
+453 428 341 430 884 816 1053 
+454 353 437 447 1061 1050 1062 
+455 483 384 488 999 1006 1063 
+456 53 483 488 1057 1063 1051 
+457 406 56 451 803 1042 788 
+458 417 355 463 692 1064 1058 
+459 449 17 459 1001 1031 1065 
+460 14 415 471 660 1066 1026 
+461 395 344 487 1043 890 738 
+462 437 353 494 1061 626 1055 
+463 415 353 471 625 1067 1066 
+464 426 334 493 616 1039 1068 
+465 357 449 459 595 1065 984 
+466 446 310 480 949 628 1069 
+467 34 408 448 954 1060 982 
+468 54 403 483 663 1000 1056 
+469 41 412 482 620 1070 1054 
+470 454 311 463 906 1059 1071 
+471 345 418 468 630 1072 911 
+472 463 355 469 1064 805 1073 
+473 425 347 452 1016 579 1009 
+474 395 462 474 1034 1074 1044 
+475 412 365 482 806 918 1070 
+476 418 37 468 951 1046 1072 
+477 435 317 466 1075 1076 1077 
+478 317 455 466 871 1078 1076 
+479 389 426 493 953 1068 1012 
+480 346 463 469 1079 1073 1080 
+481 347 435 466 1017 1077 1081 
+482 438 341 478 817 1082 1083 
+483 388 464 490 1014 1084 1028 
+484 447 13 471 993 1027 1085 
+485 350 431 476 745 1086 715 
+486 455 356 466 1087 1088 1078 
+487 460 319 478 858 915 1089 
+488 351 438 478 566 1083 931 
+489 353 447 471 1062 1085 1067 
+490 317 435 476 1075 1033 1090 
+491 431 317 476 975 1090 1086 
+492 346 454 463 994 1071 1079 
+493 356 446 480 537 1069 1091 
+494 364 465 491 1048 1092 1093 
+495 455 346 477 874 1094 1095 
+496 462 323 474 652 1049 1074 
+497 465 323 491 1036 604 1092 
+498 76 467 473 919 1096 1041 
+499 346 469 477 1080 1097 1094 
+500 341 460 478 927 1089 1082 
+501 356 455 477 1087 1095 698 
+502 469 322 477 794 699 1097 
+503 467 358 473 872 777 1096 
+504 347 466 480 1081 1098 580 
+505 464 343 490 929 966 1084 
+506 466 356 480 1088 1091 1098 
+507 360 479 491 683 1099 603 
+508 479 364 491 848 1093 1099 
+2 6 9 420
+509 1140 150 1194 1286 1287 1288 
+510 1216 1165 1251 1289 1290 1291 
+511 1121 1139 1232 1292 1293 1294 
+512 1130 1165 1216 1295 1289 1296 
+513 1221 123 1229 1297 1298 1299 
+514 1149 1111 1160 1300 1301 1302 
+515 1101 1152 1173 1303 1304 1305 
+516 75 76 1163 86 1306 1307 
+517 1139 1168 1232 1308 1309 1293 
+518 1107 1133 1189 1310 1311 1312 
+519 111 1141 1198 1313 1314 1315 
+520 73 74 1158 84 1316 1317 
+521 1171 1115 1215 1318 1319 1320 
+522 146 1170 1176 1321 1322 1323 
+523 1133 1107 1236 1310 1324 1325 
+524 1113 1147 1237 1326 1327 1328 
+525 1143 1125 1195 1329 1330 1331 
+526 1141 111 1205 1313 1332 1333 
+527 1115 1168 1215 1334 1335 1319 
+528 1114 1151 1218 1336 1337 1338 
+529 1170 1134 1176 1339 1340 1322 
+530 79 1154 1196 1341 1342 1343 
+531 75 1163 1200 1307 1344 1345 
+532 150 1140 1197 1286 1346 1347 
+533 1121 1140 1183 1348 1349 1350 
+534 1106 1143 1195 1351 1331 1352 
+535 1106 1195 1202 1352 1353 1354 
+536 125 1142 1229 1355 1356 1357 
+537 1154 79 1206 1341 1358 1359 
+538 123 124 1229 134 1360 1298 
+539 1189 1135 1215 1361 1362 1363 
+540 130 131 1161 141 1364 1365 
+541 1113 1237 1270 1328 1366 1367 
+542 1101 1173 1218 1305 1368 1369 
+543 1138 1243 1271 1370 1371 1372 
+544 1198 1162 1249 1373 1374 1375 
+545 1195 1136 1202 1376 1377 1353 
+546 1152 1128 1230 1378 1379 1380 
+547 1175 163 1203 1381 1382 1383 
+548 1123 1148 1240 1384 1385 1386 
+549 1202 1159 1211 1387 1388 1389 
+550 1143 1120 1207 1390 1391 1392 
+551 1140 1121 1197 1348 1393 1346 
+552 1151 1114 1282 1336 1394 1395 
+553 1112 1206 1285 1396 1397 1398 
+554 1107 1189 1215 1312 1363 1399 
+555 1164 1119 1169 1400 1401 1402 
+556 1139 1121 1272 1292 1403 1404 
+557 1196 1123 1240 1405 1386 1406 
+558 1125 1143 1217 1329 1407 1408 
+559 1142 125 1190 1355 1409 1410 
+560 163 164 1203 173 1411 1382 
+561 73 1158 1181 1317 1412 1413 
+562 1126 1162 1198 1414 1373 1415 
+563 1206 1144 1285 1416 1417 1397 
+564 1243 1101 1271 1418 1419 1371 
+565 1202 1136 1209 1377 1420 1421 
+566 1120 1143 1204 1390 1422 1423 
+567 1102 1150 1210 1424 1425 1426 
+568 1122 1202 1209 1427 1421 1428 
+569 1191 1163 1266 1429 1430 1431 
+570 1158 1129 1177 1432 1433 1434 
+571 1161 131 1178 1364 1435 1436 
+572 1206 1112 1275 1396 1437 1438 
+573 1122 1164 1169 1439 1402 1440 
+574 1129 1163 1191 1441 1429 1442 
+575 124 125 1229 135 1357 1360 
+576 1114 1218 1253 1338 1443 1444 
+577 1124 1149 1192 1445 1446 1447 
+578 1116 1145 1233 1448 1449 1450 
+579 79 80 1206 90 1451 1358 
+580 1119 1164 1199 1400 1452 1453 
+581 150 151 1194 160 1454 1287 
+582 1159 1127 1211 1455 1456 1388 
+583 1167 1102 1172 1457 1458 1459 
+584 1112 1167 1172 1460 1459 1461 
+585 1105 1143 1207 1462 1392 1463 
+586 1173 1152 1230 1304 1380 1464 
+587 1118 1156 1180 1465 1466 1467 
+588 1143 1106 1204 1351 1468 1422 
+589 1145 1104 1234 1469 1470 1471 
+590 1152 1101 1243 1303 1418 1472 
+591 1237 1151 1270 1473 1474 1366 
+592 1167 1126 1174 1475 1476 1477 
+593 1165 1130 1252 1295 1478 1479 
+594 1150 1102 1208 1424 1480 1481 
+595 1146 1116 1208 1482 1483 1484 
+596 78 79 1196 89 1343 1485 
+597 1106 1202 1211 1354 1389 1486 
+598 1164 170 1199 1487 1488 1452 
+599 1147 1113 1268 1326 1489 1490 
+600 1130 1205 1252 1491 1492 1478 
+601 1186 1131 1248 1493 1494 1495 
+602 1152 1110 1212 1496 1497 1498 
+603 1116 1150 1208 1499 1481 1483 
+604 1121 1166 1242 1500 1501 1502 
+605 1180 1105 1231 1503 1504 1505 
+606 1141 1205 1267 1333 1506 1507 
+607 1160 1128 1220 1508 1509 1510 
+608 1150 1109 1223 1511 1512 1513 
+609 1104 1169 1177 1514 1515 1516 
+610 1145 1116 1213 1448 1517 1518 
+611 1110 1152 1243 1496 1472 1519 
+612 1105 1183 1231 1520 1521 1504 
+613 1163 1129 1200 1441 1522 1344 
+614 1140 1194 1231 1288 1523 1524 
+615 1173 1131 1218 1525 1526 1368 
+616 1205 1130 1267 1491 1527 1506 
+617 1186 1157 1278 1528 1529 1530 
+618 1191 1145 1234 1531 1471 1532 
+619 130 1161 1192 1365 1533 1534 
+620 1198 1141 1222 1314 1535 1536 
+621 1158 74 1200 1316 1537 1538 
+622 1129 1158 1200 1432 1538 1522 
+623 1166 1115 1241 1539 1540 1541 
+624 1157 1186 1248 1528 1495 1542 
+625 1194 1118 1231 1543 1544 1523 
+626 1150 1116 1233 1499 1450 1545 
+627 1128 1160 1230 1508 1546 1379 
+628 110 111 1198 118 1315 1547 
+629 1148 1123 1223 1384 1548 1549 
+630 1157 1103 1278 1550 1551 1529 
+631 1158 1119 1181 1552 1553 1412 
+632 1126 1198 1222 1415 1536 1554 
+633 1154 1206 1275 1359 1438 1555 
+634 1119 1158 1177 1552 1434 1556 
+635 1143 1105 1217 1462 1557 1407 
+636 1117 1161 1178 1558 1436 1559 
+637 1127 1159 1227 1455 1560 1561 
+638 1123 1154 1275 1562 1555 1563 
+639 1111 1149 1201 1300 1564 1565 
+640 169 170 1164 179 1487 1566 
+641 1192 1149 1264 1446 1567 1568 
+642 1128 1152 1212 1378 1498 1569 
+643 1115 1170 1241 1570 1571 1540 
+644 1172 1102 1210 1458 1426 1572 
+645 1142 1190 1212 1410 1573 1574 
+646 1120 1153 1187 1575 1576 1577 
+647 111 112 1205 119 1578 1332 
+648 1197 1121 1242 1393 1502 1579 
+649 127 1160 1220 1580 1510 1581 
+650 1104 1145 1227 1469 1582 1583 
+651 1113 1182 1260 1584 1585 1586 
+652 1153 1127 1261 1587 1588 1589 
+653 146 147 1170 156 1590 1321 
+654 131 132 1178 142 1591 1435 
+655 1160 127 1258 1580 1592 1593 
+656 149 150 1197 159 1347 1594 
+657 1182 1146 1260 1595 1596 1585 
+658 1156 1118 1203 1465 1597 1598 
+659 1121 1183 1272 1350 1599 1403 
+660 145 146 1176 155 1323 1600 
+661 1159 1122 1277 1601 1602 1603 
+662 1160 1111 1230 1301 1604 1546 
+663 1169 1119 1177 1401 1556 1515 
+664 1109 1150 1233 1511 1545 1605 
+665 1127 1153 1211 1587 1606 1456 
+666 1132 1221 1229 1607 1299 1608 
+667 125 126 1190 136 1609 1409 
+668 1116 1146 1225 1482 1610 1611 
+669 1115 1166 1232 1539 1612 1613 
+670 1171 1103 1255 1614 1615 1616 
+671 1182 1113 1270 1584 1367 1617 
+672 1154 1123 1196 1562 1405 1342 
+673 1149 1124 1201 1445 1618 1564 
+674 1153 1120 1204 1575 1423 1619 
+675 1163 76 1250 1306 1620 1621 
+676 1191 1109 1233 1622 1605 1623 
+677 1175 1118 1194 1624 1543 1625 
+678 1169 1104 1277 1514 1626 1627 
+679 1122 1169 1277 1440 1627 1602 
+680 1190 1128 1212 1628 1569 1573 
+681 72 73 1181 83 1413 1629 
+682 1171 1255 1276 1616 1630 1631 
+683 1126 1167 1235 1475 1632 1633 
+684 1168 1139 1280 1308 1634 1635 
+685 1107 1188 1236 1636 1637 1324 
+686 1155 1182 1270 1638 1617 1639 
+687 1172 1123 1275 1640 1563 1641 
+688 1185 1136 1195 1642 1376 1643 
+689 6 123 1221 133 1297 1644 
+690 1125 1185 1195 1645 1643 1330 
+691 1167 1112 1235 1460 1646 1632 
+692 114 6 1221 122 1644 1647 
+693 1110 1216 1251 1648 1291 1649 
+694 1134 1170 1276 1339 1650 1651 
+695 1161 1117 1283 1558 1652 1653 
+696 1168 1115 1232 1334 1613 1309 
+697 1145 1191 1233 1531 1623 1449 
+698 1166 1121 1232 1500 1294 1612 
+699 1170 1115 1276 1570 1654 1650 
+700 1128 1190 1220 1628 1655 1509 
+701 1135 1171 1215 1656 1320 1362 
+702 1188 1139 1207 1657 1658 1659 
+703 1122 1159 1202 1601 1387 1427 
+704 1174 1108 1246 1660 1661 1662 
+705 1149 1160 1258 1302 1593 1663 
+706 1137 1174 1246 1664 1662 1665 
+707 1164 1122 1263 1439 1666 1667 
+708 148 1166 1241 1668 1541 1669 
+709 1111 1201 1248 1565 1670 1671 
+710 1182 1155 1247 1638 1672 1673 
+711 1132 1165 1219 1674 1675 1676 
+712 1109 1191 1266 1622 1431 1677 
+713 166 167 1185 176 1678 1679 
+714 1171 1135 1278 1656 1680 1681 
+715 1182 1100 1225 1682 1683 1684 
+716 1100 1184 1225 1685 1686 1683 
+717 1103 1171 1278 1614 1681 1551 
+718 1103 1157 1224 1550 1687 1688 
+719 165 1214 1273 1689 1690 1691 
+720 1162 1126 1235 1414 1633 1692 
+721 1100 1187 1261 1693 1694 1695 
+722 1204 1106 1211 1468 1486 1696 
+723 1102 1167 1245 1457 1697 1698 
+724 1124 1192 1283 1447 1699 1700 
+725 1207 1139 1272 1658 1404 1701 
+726 1192 1161 1283 1533 1653 1699 
+727 1136 1185 1259 1642 1702 1703 
+728 1210 1150 1223 1425 1513 1704 
+729 1212 1110 1269 1497 1705 1706 
+730 165 166 1214 175 1707 1689 
+731 1153 1204 1211 1619 1696 1606 
+732 1214 1156 1273 1708 1709 1690 
+733 127 128 1258 138 1710 1592 
+734 1100 1182 1247 1682 1673 1711 
+735 1112 1172 1275 1461 1641 1437 
+736 1176 1117 1193 1712 1713 1714 
+737 1167 1174 1245 1477 1715 1697 
+738 1185 167 1259 1678 1716 1702 
+739 1201 1157 1248 1717 1542 1670 
+740 1118 1175 1203 1624 1383 1597 
+741 1165 1132 1251 1674 1718 1290 
+742 129 130 1192 140 1534 1719 
+743 1255 1134 1276 1720 1651 1630 
+744 169 1164 1263 1566 1667 1721 
+745 1142 1212 1269 1574 1706 1722 
+746 1148 1223 1266 1549 1723 1724 
+747 1187 1153 1261 1576 1589 1694 
+748 168 169 1263 178 1721 1725 
+749 1166 148 1242 1668 1726 1501 
+750 1117 1178 1193 1559 1727 1713 
+751 144 145 1193 154 1728 1729 
+752 1227 1159 1277 1560 1603 1730 
+753 1174 1126 1222 1476 1554 1731 
+754 1173 1111 1248 1732 1671 1733 
+755 1117 1179 1283 1734 1735 1652 
+756 1104 1177 1234 1516 1736 1470 
+757 1123 1172 1210 1640 1572 1737 
+758 1145 1213 1227 1518 1738 1582 
+759 1181 1119 1199 1553 1453 1739 
+760 74 75 1200 85 1345 1537 
+761 1101 1218 1237 1369 1740 1741 
+762 145 1176 1193 1600 1714 1728 
+763 1209 168 1263 1742 1725 1743 
+764 1105 1180 1217 1503 1744 1557 
+765 170 171 1199 180 1745 1488 
+766 1131 1173 1248 1525 1733 1494 
+767 1163 1250 1266 1621 1746 1430 
+768 1117 1176 1281 1712 1747 1748 
+769 113 1219 1252 1749 1750 1751 
+770 1111 1173 1230 1732 1464 1604 
+771 1177 1129 1234 1433 1752 1736 
+772 4 72 1239 82 1753 1754 
+773 1224 1124 1283 1755 1700 1756 
+774 1176 1134 1281 1340 1757 1747 
+775 1107 1215 1280 1399 1758 1759 
+776 1228 109 1249 1760 1761 1762 
+777 129 1192 1264 1719 1568 1763 
+778 1116 1184 1213 1764 1765 1517 
+779 1108 1174 1222 1660 1731 1766 
+780 1218 1151 1237 1337 1473 1740 
+781 1104 1227 1277 1583 1730 1626 
+782 147 148 1241 157 1669 1767 
+783 1162 1228 1249 1768 1762 1374 
+784 1135 1189 1265 1361 1769 1770 
+785 1184 1127 1213 1771 1772 1765 
+786 171 4 1239 181 1754 1773 
+787 1120 1188 1207 1774 1659 1391 
+788 1250 1148 1266 1775 1724 1746 
+789 1223 1109 1266 1512 1677 1723 
+790 1185 1125 1214 1645 1776 1777 
+791 1179 1103 1224 1778 1688 1779 
+792 132 7 1244 143 1780 1781 
+793 166 1185 1214 1679 1777 1707 
+794 5 108 1238 115 1782 1783 
+795 81 5 1238 92 1783 1784 
+796 1174 1137 1245 1664 1785 1715 
+797 1184 1116 1225 1764 1611 1686 
+798 7 144 1244 153 1786 1780 
+799 1218 1131 1253 1526 1787 1443 
+800 1215 1168 1280 1335 1635 1758 
+801 1130 1216 1226 1296 1788 1789 
+802 1170 147 1241 1590 1767 1571 
+803 1219 1165 1252 1675 1479 1750 
+804 1179 1224 1283 1779 1756 1735 
+805 1183 1140 1231 1349 1524 1521 
+806 1175 1194 1274 1625 1790 1791 
+807 1115 1171 1276 1318 1631 1654 
+808 77 78 1240 88 1792 1793 
+809 1127 1184 1261 1771 1794 1588 
+810 1146 1182 1225 1595 1684 1610 
+811 126 127 1220 137 1581 1795 
+812 163 1175 1279 1381 1796 1797 
+813 1118 1180 1231 1467 1505 1544 
+814 113 114 1219 121 1798 1749 
+815 1105 1207 1272 1463 1701 1799 
+816 1216 1110 1243 1648 1519 1800 
+817 1157 1201 1224 1717 1801 1687 
+818 1187 1100 1247 1693 1711 1802 
+819 1180 1156 1284 1466 1803 1804 
+820 1183 1105 1272 1520 1799 1599 
+821 1103 1179 1255 1778 1805 1615 
+822 1201 1124 1224 1618 1755 1801 
+823 110 1198 1249 1547 1375 1806 
+824 1216 1138 1226 1807 1808 1788 
+825 1193 1178 1244 1727 1809 1810 
+826 1235 1112 1285 1646 1398 1811 
+827 1162 1235 1285 1692 1811 1812 
+828 1190 126 1220 1609 1795 1655 
+829 108 109 1228 116 1760 1813 
+830 1178 132 1244 1591 1781 1809 
+831 1133 1187 1247 1814 1802 1815 
+832 78 1196 1240 1485 1406 1792 
+833 1122 1209 1263 1428 1743 1666 
+834 144 1193 1244 1729 1810 1786 
+835 72 1181 1239 1629 1816 1753 
+836 80 81 1262 91 1817 1818 
+837 1179 1117 1281 1734 1748 1819 
+838 1120 1187 1236 1577 1820 1821 
+839 76 77 1250 87 1822 1620 
+840 1205 112 1252 1578 1823 1492 
+841 1188 1120 1236 1774 1821 1637 
+842 1130 1226 1267 1789 1824 1527 
+843 1131 1186 1253 1493 1825 1787 
+844 1114 1189 1256 1826 1827 1828 
+845 1214 1125 1284 1776 1829 1830 
+846 1188 1107 1280 1636 1759 1831 
+847 128 129 1264 139 1763 1832 
+848 1213 1127 1227 1772 1561 1738 
+849 1123 1210 1223 1737 1704 1548 
+850 148 149 1242 158 1833 1726 
+851 1156 1214 1284 1708 1830 1803 
+852 1184 1100 1261 1685 1695 1794 
+853 1186 1135 1265 1834 1770 1835 
+854 1189 1133 1256 1311 1836 1827 
+855 167 168 1259 177 1837 1716 
+856 1247 1155 1256 1672 1838 1839 
+857 109 110 1249 117 1806 1761 
+858 1139 1188 1280 1657 1831 1634 
+859 1187 1133 1236 1814 1325 1820 
+860 1189 1114 1265 1826 1840 1769 
+861 108 1228 1238 1813 1841 1782 
+862 112 113 1252 120 1751 1823 
+863 8 163 1279 172 1797 1842 
+864 152 8 1279 162 1842 1843 
+865 1219 114 1221 1798 1647 1844 
+866 164 165 1273 174 1691 1845 
+867 1228 1162 1285 1768 1812 1846 
+868 151 152 1274 161 1847 1848 
+869 1129 1191 1234 1442 1532 1752 
+870 1208 1102 1254 1480 1849 1850 
+871 1181 1199 1239 1739 1851 1816 
+872 1133 1247 1256 1815 1839 1836 
+873 1132 1219 1221 1676 1844 1607 
+874 1228 1144 1238 1852 1853 1841 
+875 1175 1274 1279 1791 1854 1796 
+876 1274 152 1279 1847 1843 1854 
+877 149 1197 1242 1594 1579 1833 
+878 1146 1208 1254 1484 1850 1855 
+879 77 1240 1250 1793 1856 1822 
+880 1206 80 1262 1451 1818 1857 
+881 1135 1186 1278 1834 1530 1680 
+882 1144 1228 1285 1852 1846 1417 
+883 1144 1206 1262 1416 1857 1858 
+884 1125 1217 1284 1408 1859 1829 
+885 1240 1148 1250 1385 1775 1856 
+886 1101 1237 1271 1741 1860 1419 
+887 1199 171 1239 1745 1773 1851 
+888 1194 151 1274 1454 1848 1790 
+889 1203 164 1273 1411 1845 1861 
+890 1102 1245 1254 1698 1862 1849 
+891 1209 1136 1259 1420 1703 1863 
+892 1146 1254 1260 1855 1864 1596 
+893 1138 1216 1243 1807 1800 1370 
+894 1253 1186 1265 1825 1835 1865 
+895 1156 1203 1273 1598 1861 1709 
+896 168 1209 1259 1742 1863 1837 
+897 1108 1226 1257 1866 1867 1868 
+898 1246 1108 1257 1661 1868 1869 
+899 1217 1180 1284 1744 1804 1859 
+900 1254 1137 1260 1870 1871 1864 
+901 1226 1138 1257 1808 1872 1867 
+902 1132 1229 1269 1608 1873 1874 
+903 1255 1179 1281 1805 1819 1875 
+904 81 1238 1262 1784 1876 1817 
+905 1222 1141 1267 1535 1507 1877 
+906 1147 1246 1257 1878 1869 1879 
+907 1110 1251 1269 1649 1880 1705 
+908 1229 1142 1269 1356 1722 1873 
+909 1238 1144 1262 1853 1858 1876 
+910 1226 1108 1267 1866 1881 1824 
+911 1108 1222 1267 1766 1877 1881 
+912 1245 1137 1254 1785 1870 1862 
+913 1237 1147 1271 1327 1882 1860 
+914 1256 1155 1282 1838 1883 1884 
+915 1137 1246 1268 1665 1885 1886 
+916 1114 1253 1265 1444 1865 1840 
+917 1114 1256 1282 1828 1884 1394 
+918 1258 128 1264 1710 1832 1887 
+919 1260 1137 1268 1871 1886 1888 
+920 1251 1132 1269 1718 1874 1880 
+921 1246 1147 1268 1878 1490 1885 
+922 1113 1260 1268 1586 1888 1489 
+923 1149 1258 1264 1663 1887 1567 
+924 1257 1138 1271 1872 1372 1889 
+925 1134 1255 1281 1720 1875 1757 
+926 1147 1257 1271 1879 1889 1882 
+927 1270 1151 1282 1474 1395 1890 
+928 1155 1270 1282 1639 1890 1883 
+2 12 9 420
+929 1931 224 1985 2077 2078 2079 
+930 2007 1956 2042 2080 2081 2082 
+931 1912 1930 2023 2083 2084 2085 
+932 1921 1956 2007 2086 2080 2087 
+933 2012 123 2020 2088 2089 2090 
+934 1940 1902 1951 2091 2092 2093 
+935 1892 1943 1964 2094 2095 2096 
+936 185 186 1954 196 2097 2098 
+937 1930 1959 2023 2099 2100 2084 
+938 1898 1924 1980 2101 2102 2103 
+939 206 1932 1989 2104 2105 2106 
+940 183 184 1949 194 2107 2108 
+941 1962 1906 2006 2109 2110 2111 
+942 220 1961 1967 2112 2113 2114 
+943 1924 1898 2027 2101 2115 2116 
+944 1904 1938 2028 2117 2118 2119 
+945 1934 1916 1986 2120 2121 2122 
+946 1932 206 1996 2104 2123 2124 
+947 1906 1959 2006 2125 2126 2110 
+948 1905 1942 2009 2127 2128 2129 
+949 1961 1925 1967 2130 2131 2113 
+950 189 1945 1987 2132 2133 2134 
+951 185 1954 1991 2098 2135 2136 
+952 224 1931 1988 2077 2137 2138 
+953 1912 1931 1974 2139 2140 2141 
+954 1897 1934 1986 2142 2122 2143 
+955 1897 1986 1993 2143 2144 2145 
+956 125 1933 2020 2146 2147 2148 
+957 1945 189 1997 2132 2149 2150 
+958 123 124 2020 134 2151 2089 
+959 1980 1926 2006 2152 2153 2154 
+960 130 131 1952 141 2155 2156 
+961 1904 2028 2061 2119 2157 2158 
+962 1892 1964 2009 2096 2159 2160 
+963 1929 2034 2062 2161 2162 2163 
+964 1989 1953 2040 2164 2165 2166 
+965 1986 1927 1993 2167 2168 2144 
+966 1943 1919 2021 2169 2170 2171 
+967 1966 237 1994 2172 2173 2174 
+968 1914 1939 2031 2175 2176 2177 
+969 1993 1950 2002 2178 2179 2180 
+970 1934 1911 1998 2181 2182 2183 
+971 1931 1912 1988 2139 2184 2137 
+972 1942 1905 2073 2127 2185 2186 
+973 1903 1997 2076 2187 2188 2189 
+974 1898 1980 2006 2103 2154 2190 
+975 1955 1910 1960 2191 2192 2193 
+976 1930 1912 2063 2083 2194 2195 
+977 1987 1914 2031 2196 2177 2197 
+978 1916 1934 2008 2120 2198 2199 
+979 1933 125 1981 2146 2200 2201 
+980 237 238 1994 247 2202 2173 
+981 183 1949 1972 2108 2203 2204 
+982 1917 1953 1989 2205 2164 2206 
+983 1997 1935 2076 2207 2208 2188 
+984 2034 1892 2062 2209 2210 2162 
+985 1993 1927 2000 2168 2211 2212 
+986 1911 1934 1995 2181 2213 2214 
+987 1893 1941 2001 2215 2216 2217 
+988 1913 1993 2000 2218 2212 2219 
+989 1982 1954 2057 2220 2221 2222 
+990 1949 1920 1968 2223 2224 2225 
+991 1952 131 1969 2155 2226 2227 
+992 1997 1903 2066 2187 2228 2229 
+993 1913 1955 1960 2230 2193 2231 
+994 1920 1954 1982 2232 2220 2233 
+995 124 125 2020 135 2148 2151 
+996 1905 2009 2044 2129 2234 2235 
+997 1915 1940 1983 2236 2237 2238 
+998 1907 1936 2024 2239 2240 2241 
+999 189 190 1997 200 2242 2149 
+1000 1910 1955 1990 2191 2243 2244 
+1001 224 225 1985 234 2245 2078 
+1002 1950 1918 2002 2246 2247 2179 
+1003 1958 1893 1963 2248 2249 2250 
+1004 1903 1958 1963 2251 2250 2252 
+1005 1896 1934 1998 2253 2183 2254 
+1006 1964 1943 2021 2095 2171 2255 
+1007 1909 1947 1971 2256 2257 2258 
+1008 1934 1897 1995 2142 2259 2213 
+1009 1936 1895 2025 2260 2261 2262 
+1010 1943 1892 2034 2094 2209 2263 
+1011 2028 1942 2061 2264 2265 2157 
+1012 1958 1917 1965 2266 2267 2268 
+1013 1956 1921 2043 2086 2269 2270 
+1014 1941 1893 1999 2215 2271 2272 
+1015 1937 1907 1999 2273 2274 2275 
+1016 188 189 1987 199 2134 2276 
+1017 1897 1993 2002 2145 2180 2277 
+1018 1955 244 1990 2278 2279 2243 
+1019 1938 1904 2059 2117 2280 2281 
+1020 1921 1996 2043 2282 2283 2269 
+1021 1977 1922 2039 2284 2285 2286 
+1022 1943 1901 2003 2287 2288 2289 
+1023 1907 1941 1999 2290 2272 2274 
+1024 1912 1957 2033 2291 2292 2293 
+1025 1971 1896 2022 2294 2295 2296 
+1026 1932 1996 2058 2124 2297 2298 
+1027 1951 1919 2011 2299 2300 2301 
+1028 1941 1900 2014 2302 2303 2304 
+1029 1895 1960 1968 2305 2306 2307 
+1030 1936 1907 2004 2239 2308 2309 
+1031 1901 1943 2034 2287 2263 2310 
+1032 1896 1974 2022 2311 2312 2295 
+1033 1954 1920 1991 2232 2313 2135 
+1034 1931 1985 2022 2079 2314 2315 
+1035 1964 1922 2009 2316 2317 2159 
+1036 1996 1921 2058 2282 2318 2297 
+1037 1977 1948 2069 2319 2320 2321 
+1038 1982 1936 2025 2322 2262 2323 
+1039 130 1952 1983 2156 2324 2325 
+1040 1989 1932 2013 2105 2326 2327 
+1041 1949 184 1991 2107 2328 2329 
+1042 1920 1949 1991 2223 2329 2313 
+1043 1957 1906 2032 2330 2331 2332 
+1044 1948 1977 2039 2319 2286 2333 
+1045 1985 1909 2022 2334 2335 2314 
+1046 1941 1907 2024 2290 2241 2336 
+1047 1919 1951 2021 2299 2337 2170 
+1048 205 206 1989 213 2106 2338 
+1049 1939 1914 2014 2175 2339 2340 
+1050 1948 1894 2069 2341 2342 2320 
+1051 1949 1910 1972 2343 2344 2203 
+1052 1917 1989 2013 2206 2327 2345 
+1053 1945 1997 2066 2150 2229 2346 
+1054 1910 1949 1968 2343 2225 2347 
+1055 1934 1896 2008 2253 2348 2198 
+1056 1908 1952 1969 2349 2227 2350 
+1057 1918 1950 2018 2246 2351 2352 
+1058 1914 1945 2066 2353 2346 2354 
+1059 1902 1940 1992 2091 2355 2356 
+1060 243 244 1955 253 2278 2357 
+1061 1983 1940 2055 2237 2358 2359 
+1062 1919 1943 2003 2169 2289 2360 
+1063 1906 1961 2032 2361 2362 2331 
+1064 1963 1893 2001 2249 2217 2363 
+1065 1933 1981 2003 2201 2364 2365 
+1066 1911 1944 1978 2366 2367 2368 
+1067 206 207 1996 214 2369 2123 
+1068 1988 1912 2033 2184 2293 2370 
+1069 127 1951 2011 2371 2301 2372 
+1070 1895 1936 2018 2260 2373 2374 
+1071 1904 1973 2051 2375 2376 2377 
+1072 1944 1918 2052 2378 2379 2380 
+1073 220 221 1961 230 2381 2112 
+1074 131 132 1969 142 2382 2226 
+1075 1951 127 2049 2371 2383 2384 
+1076 223 224 1988 233 2138 2385 
+1077 1973 1937 2051 2386 2387 2376 
+1078 1947 1909 1994 2256 2388 2389 
+1079 1912 1974 2063 2141 2390 2194 
+1080 219 220 1967 229 2114 2391 
+1081 1950 1913 2068 2392 2393 2394 
+1082 1951 1902 2021 2092 2395 2337 
+1083 1960 1910 1968 2192 2347 2306 
+1084 1900 1941 2024 2302 2336 2396 
+1085 1918 1944 2002 2378 2397 2247 
+1086 1923 2012 2020 2398 2090 2399 
+1087 125 126 1981 136 2400 2200 
+1088 1907 1937 2016 2273 2401 2402 
+1089 1906 1957 2023 2330 2403 2404 
+1090 1962 1894 2046 2405 2406 2407 
+1091 1973 1904 2061 2375 2158 2408 
+1092 1945 1914 1987 2353 2196 2133 
+1093 1940 1915 1992 2236 2409 2355 
+1094 1944 1911 1995 2366 2214 2410 
+1095 1954 186 2041 2097 2411 2412 
+1096 1982 1900 2024 2413 2396 2414 
+1097 1966 1909 1985 2415 2334 2416 
+1098 1960 1895 2068 2305 2417 2418 
+1099 1913 1960 2068 2231 2418 2393 
+1100 1981 1919 2003 2419 2360 2364 
+1101 182 183 1972 193 2204 2420 
+1102 1962 2046 2067 2407 2421 2422 
+1103 1917 1958 2026 2266 2423 2424 
+1104 1959 1930 2071 2099 2425 2426 
+1105 1898 1979 2027 2427 2428 2115 
+1106 1946 1973 2061 2429 2408 2430 
+1107 1963 1914 2066 2431 2354 2432 
+1108 1976 1927 1986 2433 2167 2434 
+1109 6 123 2012 133 2088 2435 
+1110 1916 1976 1986 2436 2434 2121 
+1111 1958 1903 2026 2251 2437 2423 
+1112 209 6 2012 217 2435 2438 
+1113 1901 2007 2042 2439 2082 2440 
+1114 1925 1961 2067 2130 2441 2442 
+1115 1952 1908 2074 2349 2443 2444 
+1116 1959 1906 2023 2125 2404 2100 
+1117 1936 1982 2024 2322 2414 2240 
+1118 1957 1912 2023 2291 2085 2403 
+1119 1961 1906 2067 2361 2445 2441 
+1120 1919 1981 2011 2419 2446 2300 
+1121 1926 1962 2006 2447 2111 2153 
+1122 1979 1930 1998 2448 2449 2450 
+1123 1913 1950 1993 2392 2178 2218 
+1124 1965 1899 2037 2451 2452 2453 
+1125 1940 1951 2049 2093 2384 2454 
+1126 1928 1965 2037 2455 2453 2456 
+1127 1955 1913 2054 2230 2457 2458 
+1128 222 1957 2032 2459 2332 2460 
+1129 1902 1992 2039 2356 2461 2462 
+1130 1973 1946 2038 2429 2463 2464 
+1131 1923 1956 2010 2465 2466 2467 
+1132 1900 1982 2057 2413 2222 2468 
+1133 240 241 1976 250 2469 2470 
+1134 1962 1926 2069 2447 2471 2472 
+1135 1973 1891 2016 2473 2474 2475 
+1136 1891 1975 2016 2476 2477 2474 
+1137 1894 1962 2069 2405 2472 2342 
+1138 1894 1948 2015 2341 2478 2479 
+1139 239 2005 2064 2480 2481 2482 
+1140 1953 1917 2026 2205 2424 2483 
+1141 1891 1978 2052 2484 2485 2486 
+1142 1995 1897 2002 2259 2277 2487 
+1143 1893 1958 2036 2248 2488 2489 
+1144 1915 1983 2074 2238 2490 2491 
+1145 1998 1930 2063 2449 2195 2492 
+1146 1983 1952 2074 2324 2444 2490 
+1147 1927 1976 2050 2433 2493 2494 
+1148 2001 1941 2014 2216 2304 2495 
+1149 2003 1901 2060 2288 2496 2497 
+1150 239 240 2005 249 2498 2480 
+1151 1944 1995 2002 2410 2487 2397 
+1152 2005 1947 2064 2499 2500 2481 
+1153 127 128 2049 138 2501 2383 
+1154 1891 1973 2038 2473 2464 2502 
+1155 1903 1963 2066 2252 2432 2228 
+1156 1967 1908 1984 2503 2504 2505 
+1157 1958 1965 2036 2268 2506 2488 
+1158 1976 241 2050 2469 2507 2493 
+1159 1992 1948 2039 2508 2333 2461 
+1160 1909 1966 1994 2415 2174 2388 
+1161 1956 1923 2042 2465 2509 2081 
+1162 129 130 1983 140 2325 2510 
+1163 2046 1925 2067 2511 2442 2421 
+1164 243 1955 2054 2357 2458 2512 
+1165 1933 2003 2060 2365 2497 2513 
+1166 1939 2014 2057 2340 2514 2515 
+1167 1978 1944 2052 2367 2380 2485 
+1168 242 243 2054 252 2512 2516 
+1169 1957 222 2033 2459 2517 2292 
+1170 1908 1969 1984 2350 2518 2504 
+1171 218 219 1984 228 2519 2520 
+1172 2018 1950 2068 2351 2394 2521 
+1173 1965 1917 2013 2267 2345 2522 
+1174 1964 1902 2039 2523 2462 2524 
+1175 1908 1970 2074 2525 2526 2443 
+1176 1895 1968 2025 2307 2527 2261 
+1177 1914 1963 2001 2431 2363 2528 
+1178 1936 2004 2018 2309 2529 2373 
+1179 1972 1910 1990 2344 2244 2530 
+1180 184 185 1991 195 2136 2328 
+1181 1892 2009 2028 2160 2531 2532 
+1182 219 1967 1984 2391 2505 2519 
+1183 2000 242 2054 2533 2516 2534 
+1184 1896 1971 2008 2294 2535 2348 
+1185 244 245 1990 254 2536 2279 
+1186 1922 1964 2039 2316 2524 2285 
+1187 1954 2041 2057 2412 2537 2221 
+1188 1908 1967 2072 2503 2538 2539 
+1189 208 2010 2043 2540 2541 2542 
+1190 1902 1964 2021 2523 2255 2395 
+1191 1968 1920 2025 2224 2543 2527 
+1192 9 182 2030 192 2544 2545 
+1193 2015 1915 2074 2546 2491 2547 
+1194 1967 1925 2072 2131 2548 2538 
+1195 1898 2006 2071 2190 2549 2550 
+1196 2019 204 2040 2551 2552 2553 
+1197 129 1983 2055 2510 2359 2554 
+1198 1907 1975 2004 2555 2556 2308 
+1199 1899 1965 2013 2451 2522 2557 
+1200 2009 1942 2028 2128 2264 2531 
+1201 1895 2018 2068 2374 2521 2417 
+1202 221 222 2032 231 2460 2558 
+1203 1953 2019 2040 2559 2553 2165 
+1204 1926 1980 2056 2152 2560 2561 
+1205 1975 1918 2004 2562 2563 2556 
+1206 245 9 2030 255 2545 2564 
+1207 1911 1979 1998 2565 2450 2182 
+1208 2041 1939 2057 2566 2515 2537 
+1209 2014 1900 2057 2303 2468 2514 
+1210 1976 1916 2005 2436 2567 2568 
+1211 1970 1894 2015 2569 2479 2570 
+1212 132 7 2035 143 2571 2572 
+1213 240 1976 2005 2470 2568 2498 
+1214 10 203 2029 210 2573 2574 
+1215 191 10 2029 202 2574 2575 
+1216 1965 1928 2036 2455 2576 2506 
+1217 1975 1907 2016 2555 2402 2477 
+1218 7 218 2035 227 2577 2571 
+1219 2009 1922 2044 2317 2578 2234 
+1220 2006 1959 2071 2126 2426 2549 
+1221 1921 2007 2017 2087 2579 2580 
+1222 1961 221 2032 2381 2558 2362 
+1223 2010 1956 2043 2466 2270 2541 
+1224 1970 2015 2074 2570 2547 2526 
+1225 1974 1931 2022 2140 2315 2312 
+1226 1966 1985 2065 2416 2581 2582 
+1227 1906 1962 2067 2109 2422 2445 
+1228 187 188 2031 198 2583 2584 
+1229 1918 1975 2052 2562 2585 2379 
+1230 1937 1973 2016 2386 2475 2401 
+1231 126 127 2011 137 2372 2586 
+1232 237 1966 2070 2172 2587 2588 
+1233 1909 1971 2022 2258 2296 2335 
+1234 208 209 2010 216 2589 2540 
+1235 1896 1998 2063 2254 2492 2590 
+1236 2007 1901 2034 2439 2310 2591 
+1237 1948 1992 2015 2508 2592 2478 
+1238 1978 1891 2038 2484 2502 2593 
+1239 1971 1947 2075 2257 2594 2595 
+1240 1974 1896 2063 2311 2590 2390 
+1241 1894 1970 2046 2569 2596 2406 
+1242 1992 1915 2015 2409 2546 2592 
+1243 205 1989 2040 2338 2166 2597 
+1244 2007 1929 2017 2598 2599 2579 
+1245 1984 1969 2035 2518 2600 2601 
+1246 2026 1903 2076 2437 2189 2602 
+1247 1953 2026 2076 2483 2602 2603 
+1248 1981 126 2011 2400 2586 2446 
+1249 203 204 2019 211 2551 2604 
+1250 1969 132 2035 2382 2572 2600 
+1251 1924 1978 2038 2605 2593 2606 
+1252 188 1987 2031 2276 2197 2583 
+1253 1913 2000 2054 2219 2534 2457 
+1254 218 1984 2035 2520 2601 2577 
+1255 182 1972 2030 2420 2607 2544 
+1256 190 191 2053 201 2608 2609 
+1257 1970 1908 2072 2525 2539 2610 
+1258 1911 1978 2027 2368 2611 2612 
+1259 186 187 2041 197 2613 2411 
+1260 1996 207 2043 2369 2614 2283 
+1261 1979 1911 2027 2565 2612 2428 
+1262 1921 2017 2058 2580 2615 2318 
+1263 1922 1977 2044 2284 2616 2578 
+1264 1905 1980 2047 2617 2618 2619 
+1265 2005 1916 2075 2567 2620 2621 
+1266 1979 1898 2071 2427 2550 2622 
+1267 128 129 2055 139 2554 2623 
+1268 2004 1918 2018 2563 2352 2529 
+1269 1914 2001 2014 2528 2495 2339 
+1270 222 223 2033 232 2624 2517 
+1271 1947 2005 2075 2499 2621 2594 
+1272 1975 1891 2052 2476 2486 2585 
+1273 1977 1926 2056 2625 2561 2626 
+1274 1980 1924 2047 2102 2627 2618 
+1275 241 242 2050 251 2628 2507 
+1276 2038 1946 2047 2463 2629 2630 
+1277 204 205 2040 212 2597 2552 
+1278 1930 1979 2071 2448 2622 2425 
+1279 1978 1924 2027 2605 2116 2611 
+1280 1980 1905 2056 2617 2631 2560 
+1281 203 2019 2029 2604 2632 2573 
+1282 207 208 2043 215 2542 2614 
+1283 11 237 2070 246 2588 2633 
+1284 226 11 2070 236 2633 2634 
+1285 2010 209 2012 2589 2438 2635 
+1286 238 239 2064 248 2482 2636 
+1287 2019 1953 2076 2559 2603 2637 
+1288 225 226 2065 235 2638 2639 
+1289 1920 1982 2025 2233 2323 2543 
+1290 1999 1893 2045 2271 2640 2641 
+1291 1972 1990 2030 2530 2642 2607 
+1292 1924 2038 2047 2606 2630 2627 
+1293 1923 2010 2012 2467 2635 2398 
+1294 2019 1935 2029 2643 2644 2632 
+1295 1966 2065 2070 2582 2645 2587 
+1296 2065 226 2070 2638 2634 2645 
+1297 223 1988 2033 2385 2370 2624 
+1298 1937 1999 2045 2275 2641 2646 
+1299 187 2031 2041 2584 2647 2613 
+1300 1997 190 2053 2242 2609 2648 
+1301 1926 1977 2069 2625 2321 2471 
+1302 1935 2019 2076 2643 2637 2208 
+1303 1935 1997 2053 2207 2648 2649 
+1304 1916 2008 2075 2199 2650 2620 
+1305 2031 1939 2041 2176 2566 2647 
+1306 1892 2028 2062 2532 2651 2210 
+1307 1990 245 2030 2536 2564 2642 
+1308 1985 225 2065 2245 2639 2581 
+1309 1994 238 2064 2202 2636 2652 
+1310 1893 2036 2045 2489 2653 2640 
+1311 2000 1927 2050 2211 2494 2654 
+1312 1937 2045 2051 2646 2655 2387 
+1313 1929 2007 2034 2598 2591 2161 
+1314 2044 1977 2056 2616 2626 2656 
+1315 1947 1994 2064 2389 2652 2500 
+1316 242 2000 2050 2533 2654 2628 
+1317 1899 2017 2048 2657 2658 2659 
+1318 2037 1899 2048 2452 2659 2660 
+1319 2008 1971 2075 2535 2595 2650 
+1320 2045 1928 2051 2661 2662 2655 
+1321 2017 1929 2048 2599 2663 2658 
+1322 1923 2020 2060 2399 2664 2665 
+1323 2046 1970 2072 2596 2610 2666 
+1324 191 2029 2053 2575 2667 2608 
+1325 2013 1932 2058 2326 2298 2668 
+1326 1938 2037 2048 2669 2660 2670 
+1327 1901 2042 2060 2440 2671 2496 
+1328 2020 1933 2060 2147 2513 2664 
+1329 2029 1935 2053 2644 2649 2667 
+1330 2017 1899 2058 2657 2672 2615 
+1331 1899 2013 2058 2557 2668 2672 
+1332 2036 1928 2045 2576 2661 2653 
+1333 2028 1938 2062 2118 2673 2651 
+1334 2047 1946 2073 2629 2674 2675 
+1335 1928 2037 2059 2456 2676 2677 
+1336 1905 2044 2056 2235 2656 2631 
+1337 1905 2047 2073 2619 2675 2185 
+1338 2049 128 2055 2501 2623 2678 
+1339 2051 1928 2059 2662 2677 2679 
+1340 2042 1923 2060 2509 2665 2671 
+1341 2037 1938 2059 2669 2281 2676 
+1342 1904 2051 2059 2377 2679 2280 
+1343 1940 2049 2055 2454 2678 2358 
+1344 2048 1929 2062 2663 2163 2680 
+1345 1925 2046 2072 2511 2666 2548 
+1346 1938 2048 2062 2670 2680 2673 
+1347 2061 1942 2073 2265 2186 2681 
+1348 1946 2061 2073 2430 2681 2674 
+2 18 9 420
+1349 2722 277 2776 2868 2869 2870 
+1350 2798 2747 2833 2871 2872 2873 
+1351 2703 2721 2814 2874 2875 2876 
+1352 2712 2747 2798 2877 2871 2878 
+1353 2803 13 2811 2879 2880 2881 
+1354 2731 2693 2742 2882 2883 2884 
+1355 2683 2734 2755 2885 2886 2887 
+1356 185 186 2745 196 2888 2889 
+1357 2721 2750 2814 2890 2891 2875 
+1358 2689 2715 2771 2892 2893 2894 
+1359 259 2723 2780 2895 2896 2897 
+1360 183 184 2740 194 2898 2899 
+1361 2753 2697 2797 2900 2901 2902 
+1362 273 2752 2758 2903 2904 2905 
+1363 2715 2689 2818 2892 2906 2907 
+1364 2695 2729 2819 2908 2909 2910 
+1365 2725 2707 2777 2911 2912 2913 
+1366 2723 259 2787 2895 2914 2915 
+1367 2697 2750 2797 2916 2917 2901 
+1368 2696 2733 2800 2918 2919 2920 
+1369 2752 2716 2758 2921 2922 2904 
+1370 189 2736 2778 2923 2924 2925 
+1371 185 2745 2782 2889 2926 2927 
+1372 277 2722 2779 2868 2928 2929 
+1373 2703 2722 2765 2930 2931 2932 
+1374 2688 2725 2777 2933 2913 2934 
+1375 2688 2777 2784 2934 2935 2936 
+1376 15 2724 2811 2937 2938 2939 
+1377 2736 189 2788 2923 2940 2941 
+1378 13 14 2811 24 2942 2880 
+1379 2771 2717 2797 2943 2944 2945 
+1380 20 21 2743 31 2946 2947 
+1381 2695 2819 2852 2910 2948 2949 
+1382 2683 2755 2800 2887 2950 2951 
+1383 2720 2825 2853 2952 2953 2954 
+1384 2780 2744 2831 2955 2956 2957 
+1385 2777 2718 2784 2958 2959 2935 
+1386 2734 2710 2812 2960 2961 2962 
+1387 2757 290 2785 2963 2964 2965 
+1388 2705 2730 2822 2966 2967 2968 
+1389 2784 2741 2793 2969 2970 2971 
+1390 2725 2702 2789 2972 2973 2974 
+1391 2722 2703 2779 2930 2975 2928 
+1392 2733 2696 2864 2918 2976 2977 
+1393 2694 2788 2867 2978 2979 2980 
+1394 2689 2771 2797 2894 2945 2981 
+1395 2746 2701 2751 2982 2983 2984 
+1396 2721 2703 2854 2874 2985 2986 
+1397 2778 2705 2822 2987 2968 2988 
+1398 2707 2725 2799 2911 2989 2990 
+1399 2724 15 2772 2937 2991 2992 
+1400 290 291 2785 300 2993 2964 
+1401 183 2740 2763 2899 2994 2995 
+1402 2708 2744 2780 2996 2955 2997 
+1403 2788 2726 2867 2998 2999 2979 
+1404 2825 2683 2853 3000 3001 2953 
+1405 2784 2718 2791 2959 3002 3003 
+1406 2702 2725 2786 2972 3004 3005 
+1407 2684 2732 2792 3006 3007 3008 
+1408 2704 2784 2791 3009 3003 3010 
+1409 2773 2745 2848 3011 3012 3013 
+1410 2740 2711 2759 3014 3015 3016 
+1411 2743 21 2760 2946 3017 3018 
+1412 2788 2694 2857 2978 3019 3020 
+1413 2704 2746 2751 3021 2984 3022 
+1414 2711 2745 2773 3023 3011 3024 
+1415 14 15 2811 25 2939 2942 
+1416 2696 2800 2835 2920 3025 3026 
+1417 2706 2731 2774 3027 3028 3029 
+1418 2698 2727 2815 3030 3031 3032 
+1419 189 190 2788 200 3033 2940 
+1420 2701 2746 2781 2982 3034 3035 
+1421 277 278 2776 287 3036 2869 
+1422 2741 2709 2793 3037 3038 2970 
+1423 2749 2684 2754 3039 3040 3041 
+1424 2694 2749 2754 3042 3041 3043 
+1425 2687 2725 2789 3044 2974 3045 
+1426 2755 2734 2812 2886 2962 3046 
+1427 2700 2738 2762 3047 3048 3049 
+1428 2725 2688 2786 2933 3050 3004 
+1429 2727 2686 2816 3051 3052 3053 
+1430 2734 2683 2825 2885 3000 3054 
+1431 2819 2733 2852 3055 3056 2948 
+1432 2749 2708 2756 3057 3058 3059 
+1433 2747 2712 2834 2877 3060 3061 
+1434 2732 2684 2790 3006 3062 3063 
+1435 2728 2698 2790 3064 3065 3066 
+1436 188 189 2778 199 2925 3067 
+1437 2688 2784 2793 2936 2971 3068 
+1438 2746 297 2781 3069 3070 3034 
+1439 2729 2695 2850 2908 3071 3072 
+1440 2712 2787 2834 3073 3074 3060 
+1441 2768 2713 2830 3075 3076 3077 
+1442 2734 2692 2794 3078 3079 3080 
+1443 2698 2732 2790 3081 3063 3065 
+1444 2703 2748 2824 3082 3083 3084 
+1445 2762 2687 2813 3085 3086 3087 
+1446 2723 2787 2849 2915 3088 3089 
+1447 2742 2710 2802 3090 3091 3092 
+1448 2732 2691 2805 3093 3094 3095 
+1449 2686 2751 2759 3096 3097 3098 
+1450 2727 2698 2795 3030 3099 3100 
+1451 2692 2734 2825 3078 3054 3101 
+1452 2687 2765 2813 3102 3103 3086 
+1453 2745 2711 2782 3023 3104 2926 
+1454 2722 2776 2813 2870 3105 3106 
+1455 2755 2713 2800 3107 3108 2950 
+1456 2787 2712 2849 3073 3109 3088 
+1457 2768 2739 2860 3110 3111 3112 
+1458 2773 2727 2816 3113 3053 3114 
+1459 20 2743 2774 2947 3115 3116 
+1460 2780 2723 2804 2896 3117 3118 
+1461 2740 184 2782 2898 3119 3120 
+1462 2711 2740 2782 3014 3120 3104 
+1463 2748 2697 2823 3121 3122 3123 
+1464 2739 2768 2830 3110 3077 3124 
+1465 2776 2700 2813 3125 3126 3105 
+1466 2732 2698 2815 3081 3032 3127 
+1467 2710 2742 2812 3090 3128 2961 
+1468 258 259 2780 266 2897 3129 
+1469 2730 2705 2805 2966 3130 3131 
+1470 2739 2685 2860 3132 3133 3111 
+1471 2740 2701 2763 3134 3135 2994 
+1472 2708 2780 2804 2997 3118 3136 
+1473 2736 2788 2857 2941 3020 3137 
+1474 2701 2740 2759 3134 3016 3138 
+1475 2725 2687 2799 3044 3139 2989 
+1476 2699 2743 2760 3140 3018 3141 
+1477 2709 2741 2809 3037 3142 3143 
+1478 2705 2736 2857 3144 3137 3145 
+1479 2693 2731 2783 2882 3146 3147 
+1480 296 297 2746 306 3069 3148 
+1481 2774 2731 2846 3028 3149 3150 
+1482 2710 2734 2794 2960 3080 3151 
+1483 2697 2752 2823 3152 3153 3122 
+1484 2754 2684 2792 3040 3008 3154 
+1485 2724 2772 2794 2992 3155 3156 
+1486 2702 2735 2769 3157 3158 3159 
+1487 259 260 2787 267 3160 2914 
+1488 2779 2703 2824 2975 3084 3161 
+1489 17 2742 2802 3162 3092 3163 
+1490 2686 2727 2809 3051 3164 3165 
+1491 2695 2764 2842 3166 3167 3168 
+1492 2735 2709 2843 3169 3170 3171 
+1493 273 274 2752 283 3172 2903 
+1494 21 22 2760 32 3173 3017 
+1495 2742 17 2840 3162 3174 3175 
+1496 276 277 2779 286 2929 3176 
+1497 2764 2728 2842 3177 3178 3167 
+1498 2738 2700 2785 3047 3179 3180 
+1499 2703 2765 2854 2932 3181 2985 
+1500 272 273 2758 282 2905 3182 
+1501 2741 2704 2859 3183 3184 3185 
+1502 2742 2693 2812 2883 3186 3128 
+1503 2751 2701 2759 2983 3138 3097 
+1504 2691 2732 2815 3093 3127 3187 
+1505 2709 2735 2793 3169 3188 3038 
+1506 2714 2803 2811 3189 2881 3190 
+1507 15 16 2772 26 3191 2991 
+1508 2698 2728 2807 3064 3192 3193 
+1509 2697 2748 2814 3121 3194 3195 
+1510 2753 2685 2837 3196 3197 3198 
+1511 2764 2695 2852 3166 2949 3199 
+1512 2736 2705 2778 3144 2987 2924 
+1513 2731 2706 2783 3027 3200 3146 
+1514 2735 2702 2786 3157 3005 3201 
+1515 2745 186 2832 2888 3202 3203 
+1516 2773 2691 2815 3204 3187 3205 
+1517 2757 2700 2776 3206 3125 3207 
+1518 2751 2686 2859 3096 3208 3209 
+1519 2704 2751 2859 3022 3209 3184 
+1520 2772 2710 2794 3210 3151 3155 
+1521 182 183 2763 193 2995 3211 
+1522 2753 2837 2858 3198 3212 3213 
+1523 2708 2749 2817 3057 3214 3215 
+1524 2750 2721 2862 2890 3216 3217 
+1525 2689 2770 2818 3218 3219 2906 
+1526 2737 2764 2852 3220 3199 3221 
+1527 2754 2705 2857 3222 3145 3223 
+1528 2767 2718 2777 3224 2958 3225 
+1529 1 13 2803 23 2879 3226 
+1530 2707 2767 2777 3227 3225 2912 
+1531 2749 2694 2817 3042 3228 3214 
+1532 262 1 2803 270 3226 3229 
+1533 2692 2798 2833 3230 2873 3231 
+1534 2716 2752 2858 2921 3232 3233 
+1535 2743 2699 2865 3140 3234 3235 
+1536 2750 2697 2814 2916 3195 2891 
+1537 2727 2773 2815 3113 3205 3031 
+1538 2748 2703 2814 3082 2876 3194 
+1539 2752 2697 2858 3152 3236 3232 
+1540 2710 2772 2802 3210 3237 3091 
+1541 2717 2753 2797 3238 2902 2944 
+1542 2770 2721 2789 3239 3240 3241 
+1543 2704 2741 2784 3183 2969 3009 
+1544 2756 2690 2828 3242 3243 3244 
+1545 2731 2742 2840 2884 3175 3245 
+1546 2719 2756 2828 3246 3244 3247 
+1547 2746 2704 2845 3021 3248 3249 
+1548 275 2748 2823 3250 3123 3251 
+1549 2693 2783 2830 3147 3252 3253 
+1550 2764 2737 2829 3220 3254 3255 
+1551 2714 2747 2801 3256 3257 3258 
+1552 2691 2773 2848 3204 3013 3259 
+1553 293 294 2767 303 3260 3261 
+1554 2753 2717 2860 3238 3262 3263 
+1555 2764 2682 2807 3264 3265 3266 
+1556 2682 2766 2807 3267 3268 3265 
+1557 2685 2753 2860 3196 3263 3133 
+1558 2685 2739 2806 3132 3269 3270 
+1559 292 2796 2855 3271 3272 3273 
+1560 2744 2708 2817 2996 3215 3274 
+1561 2682 2769 2843 3275 3276 3277 
+1562 2786 2688 2793 3050 3068 3278 
+1563 2684 2749 2827 3039 3279 3280 
+1564 2706 2774 2865 3029 3281 3282 
+1565 2789 2721 2854 3240 2986 3283 
+1566 2774 2743 2865 3115 3235 3281 
+1567 2718 2767 2841 3224 3284 3285 
+1568 2792 2732 2805 3007 3095 3286 
+1569 2794 2692 2851 3079 3287 3288 
+1570 292 293 2796 302 3289 3271 
+1571 2735 2786 2793 3201 3278 3188 
+1572 2796 2738 2855 3290 3291 3272 
+1573 17 18 2840 28 3292 3174 
+1574 2682 2764 2829 3264 3255 3293 
+1575 2694 2754 2857 3043 3223 3019 
+1576 2758 2699 2775 3294 3295 3296 
+1577 2749 2756 2827 3059 3297 3279 
+1578 2767 294 2841 3260 3298 3284 
+1579 2783 2739 2830 3299 3124 3252 
+1580 2700 2757 2785 3206 2965 3179 
+1581 2747 2714 2833 3256 3300 2872 
+1582 19 20 2774 30 3116 3301 
+1583 2837 2716 2858 3302 3233 3212 
+1584 296 2746 2845 3148 3249 3303 
+1585 2724 2794 2851 3156 3288 3304 
+1586 2730 2805 2848 3131 3305 3306 
+1587 2769 2735 2843 3158 3171 3276 
+1588 295 296 2845 305 3303 3307 
+1589 2748 275 2824 3250 3308 3083 
+1590 2699 2760 2775 3141 3309 3295 
+1591 271 272 2775 281 3310 3311 
+1592 2809 2741 2859 3142 3185 3312 
+1593 2756 2708 2804 3058 3136 3313 
+1594 2755 2693 2830 3314 3253 3315 
+1595 2699 2761 2865 3316 3317 3234 
+1596 2686 2759 2816 3098 3318 3052 
+1597 2705 2754 2792 3222 3154 3319 
+1598 2727 2795 2809 3100 3320 3164 
+1599 2763 2701 2781 3135 3035 3321 
+1600 184 185 2782 195 2927 3119 
+1601 2683 2800 2819 2951 3322 3323 
+1602 272 2758 2775 3182 3296 3310 
+1603 2791 295 2845 3324 3307 3325 
+1604 2687 2762 2799 3085 3326 3139 
+1605 297 298 2781 307 3327 3070 
+1606 2713 2755 2830 3107 3315 3076 
+1607 2745 2832 2848 3203 3328 3012 
+1608 2699 2758 2863 3294 3329 3330 
+1609 261 2801 2834 3331 3332 3333 
+1610 2693 2755 2812 3314 3046 3186 
+1611 2759 2711 2816 3015 3334 3318 
+1612 9 182 2821 192 3335 3336 
+1613 2806 2706 2865 3337 3282 3338 
+1614 2758 2716 2863 2922 3339 3329 
+1615 2689 2797 2862 2981 3340 3341 
+1616 2810 257 2831 3342 3343 3344 
+1617 19 2774 2846 3301 3150 3345 
+1618 2698 2766 2795 3346 3347 3099 
+1619 2690 2756 2804 3242 3313 3348 
+1620 2800 2733 2819 2919 3055 3322 
+1621 2686 2809 2859 3165 3312 3208 
+1622 274 275 2823 284 3251 3349 
+1623 2744 2810 2831 3350 3344 2956 
+1624 2717 2771 2847 2943 3351 3352 
+1625 2766 2709 2795 3353 3354 3347 
+1626 298 9 2821 308 3336 3355 
+1627 2702 2770 2789 3356 3241 2973 
+1628 2832 2730 2848 3357 3306 3328 
+1629 2805 2691 2848 3094 3259 3305 
+1630 2767 2707 2796 3227 3358 3359 
+1631 2761 2685 2806 3360 3270 3361 
+1632 22 2 2826 33 3362 3363 
+1633 293 2767 2796 3261 3359 3289 
+1634 10 256 2820 263 3364 3365 
+1635 191 10 2820 202 3365 3366 
+1636 2756 2719 2827 3246 3367 3297 
+1637 2766 2698 2807 3346 3193 3268 
+1638 2 271 2826 280 3368 3362 
+1639 2800 2713 2835 3108 3369 3025 
+1640 2797 2750 2862 2917 3217 3340 
+1641 2712 2798 2808 2878 3370 3371 
+1642 2752 274 2823 3172 3349 3153 
+1643 2801 2747 2834 3257 3061 3332 
+1644 2761 2806 2865 3361 3338 3317 
+1645 2765 2722 2813 2931 3106 3103 
+1646 2757 2776 2856 3207 3372 3373 
+1647 2697 2753 2858 2900 3213 3236 
+1648 187 188 2822 198 3374 3375 
+1649 2709 2766 2843 3353 3376 3170 
+1650 2728 2764 2807 3177 3266 3192 
+1651 16 17 2802 27 3163 3377 
+1652 290 2757 2861 2963 3378 3379 
+1653 2700 2762 2813 3049 3087 3126 
+1654 261 262 2801 269 3380 3331 
+1655 2687 2789 2854 3045 3283 3381 
+1656 2798 2692 2825 3230 3101 3382 
+1657 2739 2783 2806 3299 3383 3269 
+1658 2769 2682 2829 3275 3293 3384 
+1659 2762 2738 2866 3048 3385 3386 
+1660 2765 2687 2854 3102 3381 3181 
+1661 2685 2761 2837 3360 3387 3197 
+1662 2783 2706 2806 3200 3337 3383 
+1663 258 2780 2831 3129 2957 3388 
+1664 2798 2720 2808 3389 3390 3370 
+1665 2775 2760 2826 3309 3391 3392 
+1666 2817 2694 2867 3228 2980 3393 
+1667 2744 2817 2867 3274 3393 3394 
+1668 2772 16 2802 3191 3377 3237 
+1669 256 257 2810 264 3342 3395 
+1670 2760 22 2826 3173 3363 3391 
+1671 2715 2769 2829 3396 3384 3397 
+1672 188 2778 2822 3067 2988 3374 
+1673 2704 2791 2845 3010 3325 3248 
+1674 271 2775 2826 3311 3392 3368 
+1675 182 2763 2821 3211 3398 3335 
+1676 190 191 2844 201 3399 3400 
+1677 2761 2699 2863 3316 3330 3401 
+1678 2702 2769 2818 3159 3402 3403 
+1679 186 187 2832 197 3404 3202 
+1680 2787 260 2834 3160 3405 3074 
+1681 2770 2702 2818 3356 3403 3219 
+1682 2712 2808 2849 3371 3406 3109 
+1683 2713 2768 2835 3075 3407 3369 
+1684 2696 2771 2838 3408 3409 3410 
+1685 2796 2707 2866 3358 3411 3412 
+1686 2770 2689 2862 3218 3341 3413 
+1687 18 19 2846 29 3345 3414 
+1688 2795 2709 2809 3354 3143 3320 
+1689 2705 2792 2805 3319 3286 3130 
+1690 275 276 2824 285 3415 3308 
+1691 2738 2796 2866 3290 3412 3385 
+1692 2766 2682 2843 3267 3277 3376 
+1693 2768 2717 2847 3416 3352 3417 
+1694 2771 2715 2838 2893 3418 3409 
+1695 294 295 2841 304 3419 3298 
+1696 2829 2737 2838 3254 3420 3421 
+1697 257 258 2831 265 3388 3343 
+1698 2721 2770 2862 3239 3413 3216 
+1699 2769 2715 2818 3396 2907 3402 
+1700 2771 2696 2847 3408 3422 3351 
+1701 256 2810 2820 3395 3423 3364 
+1702 260 261 2834 268 3333 3405 
+1703 12 290 2861 299 3379 3424 
+1704 279 12 2861 289 3424 3425 
+1705 2801 262 2803 3380 3229 3426 
+1706 291 292 2855 301 3273 3427 
+1707 2810 2744 2867 3350 3394 3428 
+1708 278 279 2856 288 3429 3430 
+1709 2711 2773 2816 3024 3114 3334 
+1710 2790 2684 2836 3062 3431 3432 
+1711 2763 2781 2821 3321 3433 3398 
+1712 2715 2829 2838 3397 3421 3418 
+1713 2714 2801 2803 3258 3426 3189 
+1714 2810 2726 2820 3434 3435 3423 
+1715 2757 2856 2861 3373 3436 3378 
+1716 2856 279 2861 3429 3425 3436 
+1717 276 2779 2824 3176 3161 3415 
+1718 2728 2790 2836 3066 3432 3437 
+1719 187 2822 2832 3375 3438 3404 
+1720 2788 190 2844 3033 3400 3439 
+1721 2717 2768 2860 3416 3112 3262 
+1722 2726 2810 2867 3434 3428 2999 
+1723 2726 2788 2844 2998 3439 3440 
+1724 2707 2799 2866 2990 3441 3411 
+1725 2822 2730 2832 2967 3357 3438 
+1726 2683 2819 2853 3323 3442 3001 
+1727 2781 298 2821 3327 3355 3433 
+1728 2776 278 2856 3036 3430 3372 
+1729 2785 291 2855 2993 3427 3443 
+1730 2684 2827 2836 3280 3444 3431 
+1731 2791 2718 2841 3002 3285 3445 
+1732 2728 2836 2842 3437 3446 3178 
+1733 2720 2798 2825 3389 3382 2952 
+1734 2835 2768 2847 3407 3417 3447 
+1735 2738 2785 2855 3180 3443 3291 
+1736 295 2791 2841 3324 3445 3419 
+1737 2690 2808 2839 3448 3449 3450 
+1738 2828 2690 2839 3243 3450 3451 
+1739 2799 2762 2866 3326 3386 3441 
+1740 2836 2719 2842 3452 3453 3446 
+1741 2808 2720 2839 3390 3454 3449 
+1742 2714 2811 2851 3190 3455 3456 
+1743 2837 2761 2863 3387 3401 3457 
+1744 191 2820 2844 3366 3458 3399 
+1745 2804 2723 2849 3117 3089 3459 
+1746 2729 2828 2839 3460 3451 3461 
+1747 2692 2833 2851 3231 3462 3287 
+1748 2811 2724 2851 2938 3304 3455 
+1749 2820 2726 2844 3435 3440 3458 
+1750 2808 2690 2849 3448 3463 3406 
+1751 2690 2804 2849 3348 3459 3463 
+1752 2827 2719 2836 3367 3452 3444 
+1753 2819 2729 2853 2909 3464 3442 
+1754 2838 2737 2864 3420 3465 3466 
+1755 2719 2828 2850 3247 3467 3468 
+1756 2696 2835 2847 3026 3447 3422 
+1757 2696 2838 2864 3410 3466 2976 
+1758 2840 18 2846 3292 3414 3469 
+1759 2842 2719 2850 3453 3468 3470 
+1760 2833 2714 2851 3300 3456 3462 
+1761 2828 2729 2850 3460 3072 3467 
+1762 2695 2842 2850 3168 3470 3071 
+1763 2731 2840 2846 3245 3469 3149 
+1764 2839 2720 2853 3454 2954 3471 
+1765 2716 2837 2863 3302 3457 3339 
+1766 2729 2839 2853 3461 3471 3464 
+1767 2852 2733 2864 3056 2977 3472 
+1768 2737 2852 2864 3221 3472 3465 
+$EndElements
diff --git a/dG3D/benchmarks/testPBCWithReducedRVE/full/rveFull.py b/dG3D/benchmarks/testPBCWithReducedRVE/full/rveFull.py
new file mode 100644
index 0000000000000000000000000000000000000000..36d23de3165a204929025930f0e7ea76122841ad
--- /dev/null
+++ b/dG3D/benchmarks/testPBCWithReducedRVE/full/rveFull.py
@@ -0,0 +1,102 @@
+#coding-Utf-8-*-
+
+from gmshpy import *
+from dG3Dpy import*
+
+#script to launch PBC problem with a python script
+
+# material law
+E = 3.2E3
+nu = 0.3
+K = E/3./(1.-2.*nu)	# Bulk mudulus
+mu =E/2./(1.+nu)	  # Shear mudulus
+rho = 2.7e-9 # Bulk mass
+
+# creation of material law
+
+law1 = dG3DLinearElasticMaterialLaw(11,rho,E,nu)
+
+# geometry
+meshfile="rveFull.msh" # name of mesh file
+
+# creation of part Domain
+myfield1 = dG3DDomain(11,11,0,11,0,2)
+
+
+# solver
+sol = 2  # Gmm=0 (default) Taucs=1 PETsc=2
+soltype =1 # StaticLinear=0 (default) StaticNonLinear=1
+nstep = 10  # number of step (used only if soltype=1)
+ftime =1.   # Final time (used only if soltype=1)
+tol=1.e-6  # relative tolerance for NR scheme (used only if soltype=1)
+nstepArch=1 # Number of step between 2 archiving (used only if soltype=1)
+
+
+# creation of Solver
+mysolver = nonLinearMechSolver(1000)
+mysolver.loadModel(meshfile)
+mysolver.addDomain(myfield1)
+mysolver.addMaterialLaw(law1)
+mysolver.Scheme(soltype)
+mysolver.Solver(sol)
+mysolver.snlData(nstep,ftime,tol)
+
+# bc 1
+rh1 = linearCombinationOfVertices()
+rh1.setVertex(12,1.)
+rh1.setVertex(13,-1.)
+vop1 = vertexGroupOperation_periodic(1.,0.,0.)
+mysolver.linearConstraintBCBetweenTwoGroups('Edge',2,4,0,rh1,vop1,1.)
+mysolver.linearConstraintBCBetweenTwoGroups('Edge',2,4,1,rh1,vop1,1.)
+
+rh2 = linearCombinationOfVertices()
+rh2.setVertex(14,1.)
+rh2.setVertex(15,-1.)
+vop2 = vertexGroupOperation_periodic(0.,1.,0.)
+mysolver.linearConstraintBCBetweenTwoGroups('Edge',3,1,0,rh2,vop2,1.)
+mysolver.linearConstraintBCBetweenTwoGroups('Edge',3,1,1,rh2,vop2,1.)
+
+mysolver.displacementBC("Face",11,2,0.)
+mysolver.displacementBC("Node",15,1,0.)
+mysolver.displacementBC("Node",13,0,0)
+mysolver.displacementBC("Node",12,1,0)
+
+#mysolver.displacementBC("Node",14,0,0.5)
+#mysolver.displacementBC("Node",15,0,0)
+mysolver.forceBC('Edge',3,0,1e2)
+#mysolver.forceBC('Edge',1,0,-1e2)
+
+mysolver.archivingAverageValue(IPField.P_XX)
+mysolver.archivingAverageValue(IPField.P_YY)
+mysolver.archivingAverageValue(IPField.P_XY)
+mysolver.archivingAverageValue(IPField.P_YX)
+mysolver.archivingAverageValue(IPField.P_ZZ)
+
+
+# build view
+mysolver.internalPointBuildView("Green-Lagrange_xx",IPField.STRAIN_XX, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_yy",IPField.STRAIN_YY, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_zz",IPField.STRAIN_ZZ, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_xy",IPField.STRAIN_XY, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_yz",IPField.STRAIN_YZ, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_xz",IPField.STRAIN_XZ, 1, 1);
+mysolver.internalPointBuildView("sig_xx",IPField.SIG_XX, 1, 1);
+mysolver.internalPointBuildView("sig_yy",IPField.SIG_YY, 1, 1);
+mysolver.internalPointBuildView("sig_zz",IPField.SIG_ZZ, 1, 1);
+mysolver.internalPointBuildView("sig_xy",IPField.SIG_XY, 1, 1);
+mysolver.internalPointBuildView("sig_yz",IPField.SIG_YZ, 1, 1);
+mysolver.internalPointBuildView("sig_xz",IPField.SIG_XZ, 1, 1);
+mysolver.internalPointBuildView("sig_VM",IPField.SVM, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange equivalent strain",IPField.GL_EQUIVALENT_STRAIN, 1, 1);
+mysolver.internalPointBuildView("Equivalent plastic strain",IPField.PLASTICSTRAIN, 1, 1);
+
+# solve
+mysolver.solve()
+
+# test check
+check = TestCheck()
+import linecache
+homoStress = linecache.getline('Average_P_XY.csv',2)
+val = float(homoStress.split(';')[1])
+check.equal(2.871301e+02,val,1.e-4)
+
diff --git a/dG3D/benchmarks/testPBCWithReducedRVE/run.py b/dG3D/benchmarks/testPBCWithReducedRVE/run.py
new file mode 100644
index 0000000000000000000000000000000000000000..3b588ababd2115a6975543e0cde13a6a23ac4eb9
--- /dev/null
+++ b/dG3D/benchmarks/testPBCWithReducedRVE/run.py
@@ -0,0 +1,154 @@
+#coding-Utf-8-*-
+
+from gmshpy import *
+from dG3Dpy import*
+
+#script to launch PBC problem with a python script
+
+# material law
+E = 3.2E3
+nu = 0.3
+K = E/3./(1.-2.*nu)	# Bulk mudulus
+mu =E/2./(1.+nu)	  # Shear mudulus
+rho = 2.7e-9 # Bulk mass
+
+# creation of material law
+
+law1 = dG3DLinearElasticMaterialLaw(11,rho,E,nu)
+
+# geometry
+meshfile="rve.msh" # name of mesh file
+
+# creation of part Domain
+myfield1 = dG3DDomain(1,1,0,11,0,2)
+
+
+# solver
+sol = 2  # Gmm=0 (default) Taucs=1 PETsc=2
+soltype =1 # StaticLinear=0 (default) StaticNonLinear=1
+nstep = 10  # number of step (used only if soltype=1)
+ftime =1.   # Final time (used only if soltype=1)
+tol=1.e-6  # relative tolerance for NR scheme (used only if soltype=1)
+nstepArch=1 # Number of step between 2 archiving (used only if soltype=1)
+
+
+# creation of Solver
+mysolver = nonLinearMechSolver(1000)
+mysolver.loadModel(meshfile)
+mysolver.addDomain(myfield1)
+mysolver.addMaterialLaw(law1)
+mysolver.Scheme(soltype)
+mysolver.Solver(sol)
+mysolver.snlData(nstep,ftime,tol)
+
+mysolver.displacementBC("Face",1,2,0.)
+
+# bc 1
+rh1 = linearCombinationOfVertices()
+rh1.clear()
+rh1.setVertex(9,0,1.)
+rh1.setVertex(8,0,-1.)
+ex1 = setInt()
+ex1.insertPhysical(0,10)
+vop1 = vertexGroupOperation_periodic(1.,0.,0.)
+mysolver.linearConstraintBCBetweenTwoGroups('Edge',3,2,0,1.,rh1,vop1,ex1)
+rh1.clear()
+rh1.setVertex(9,1,1.)
+rh1.setVertex(8,1,-1.)
+mysolver.linearConstraintBCBetweenTwoGroups('Edge',3,2,1,1.,rh1,vop1,ex1)
+
+# bc 2
+rh2 = linearCombinationOfVertices()
+rh2.setVertex(14,0,2.)
+ex2 = setInt()
+ex2.insertPhysical(0,10)
+vop2 = vertexGroupOperation_symmetric(1.,0.,0.,0.)
+mysolver.linearConstraintBCBetweenTwoGroups('Edge',5,4,0,-1.,rh2,vop2,ex2)
+
+# bc 3
+rh3 = linearCombinationOfVertices()
+rh3.setVertex(14,1,2.)
+ex3 = setInt()
+ex3.insertPhysical(0,10)
+vop3 = vertexGroupOperation_symmetric(1.,0.,0.,0.)
+mysolver.linearConstraintBCBetweenTwoGroups('Edge',5,4,1,-1.,rh3,vop3,ex3)
+
+# bc 4
+rh4 = linearCombinationOfVertices()
+ex4 = setInt()
+ex4.insertPhysical(0,9)
+vop4 = vertexGroupOperation_symmetric(1.,0.,0.,0.)
+mysolver.linearConstraintBCBetweenTwoGroups('Edge',6,7,0,-1.,rh4,vop4,ex4)
+mysolver.linearConstraintBCBetweenTwoGroups('Edge',6,7,1,-1.,rh4,vop4,ex4)
+
+
+# bc 5
+rh5 = linearCombinationOfVertices()
+rh5.setVertex(14,0,1)
+rh5.setVertex(8,0,-1)
+ex5 = setInt()
+mysolver.linearConstraintBCBetweenTwoGroups('Node',10,0,rh5,ex5)
+
+# bc 6
+rh6 = linearCombinationOfVertices()
+rh6.setVertex(14,0,1)
+rh6.setVertex(8,0,1)
+ex6 = setInt()
+mysolver.linearConstraintBCBetweenTwoGroups('Node',11,0,rh6,ex6)
+
+# bc 7
+rh7= linearCombinationOfVertices()
+rh7.setVertex(14,1,1.)
+ex7 = setInt()
+mysolver.linearConstraintBCBetweenTwoGroups('Node',10,1,rh7,ex7)
+mysolver.linearConstraintBCBetweenTwoGroups('Node',11,1,rh7,ex7)
+
+
+Ux = 0.05
+Uy = 0.1
+Uxy = 0.2
+
+mysolver.displacementBC("Node",8,0,-0.5*Ux)
+mysolver.displacementBC("Node",8,1,0.)
+mysolver.displacementBC("Node",9,0,0.5*Ux)
+mysolver.displacementBC("Node",9,1,0.)
+mysolver.displacementBC("Node",14,0,0.5*Uxy)
+mysolver.displacementBC("Node",14,1,0.5*Uy)
+mysolver.displacementBC("Node",14,1,0.5*Uy)
+
+
+mysolver.archivingAverageValue(IPField.P_XX)
+mysolver.archivingAverageValue(IPField.P_YY)
+mysolver.archivingAverageValue(IPField.P_XY)
+mysolver.archivingAverageValue(IPField.P_YX)
+mysolver.archivingAverageValue(IPField.P_ZZ)
+
+
+
+# build view
+mysolver.internalPointBuildView("Green-Lagrange_xx",IPField.STRAIN_XX, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_yy",IPField.STRAIN_YY, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_zz",IPField.STRAIN_ZZ, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_xy",IPField.STRAIN_XY, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_yz",IPField.STRAIN_YZ, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_xz",IPField.STRAIN_XZ, 1, 1);
+mysolver.internalPointBuildView("sig_xx",IPField.SIG_XX, 1, 1);
+mysolver.internalPointBuildView("sig_yy",IPField.SIG_YY, 1, 1);
+mysolver.internalPointBuildView("sig_zz",IPField.SIG_ZZ, 1, 1);
+mysolver.internalPointBuildView("sig_xy",IPField.SIG_XY, 1, 1);
+mysolver.internalPointBuildView("sig_yz",IPField.SIG_YZ, 1, 1);
+mysolver.internalPointBuildView("sig_xz",IPField.SIG_XZ, 1, 1);
+mysolver.internalPointBuildView("sig_VM",IPField.SVM, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange equivalent strain",IPField.GL_EQUIVALENT_STRAIN, 1, 1);
+mysolver.internalPointBuildView("Equivalent plastic strain",IPField.PLASTICSTRAIN, 1, 1);
+
+# solve
+mysolver.solve()
+
+# test check
+check = TestCheck()
+import linecache
+homoStress = linecache.getline('Average_P_XY.csv',2)
+val = float(homoStress.split(';')[1])
+check.equal(2.237950e+01,val,1.e-4)
+
diff --git a/dG3D/benchmarks/testPBCWithReducedRVE/rve.geo b/dG3D/benchmarks/testPBCWithReducedRVE/rve.geo
new file mode 100644
index 0000000000000000000000000000000000000000..bbefbae9d3fd3e2c7f4493f6b0e6050c5ce156e0
--- /dev/null
+++ b/dG3D/benchmarks/testPBCWithReducedRVE/rve.geo
@@ -0,0 +1,59 @@
+mm = 1.;
+H = 1.*mm;
+L = 1*mm;
+R = 0.25*L;
+
+lsca1 = 0.1*R;
+lsca2 = 3*lsca1;
+Point(1) = {0,0,0,lsca1};
+Point(2) = {R,0,0,lsca1};
+Point(3) = {L,0,0,lsca2};
+Point(4) = {L,H,0,lsca2};
+Point(5) = {0,H,0,lsca2};
+Point(6) = {0,R,0,lsca1};
+//+
+Line(1) = {2, 3};
+//+
+Line(2) = {3, 4};
+//+
+Line(3) = {4, 5};
+//+
+Line(4) = {5, 6};
+//+
+Circle(5) = {2, 1, 6};
+//+
+Curve Loop(1) = {4, -5, 1, 2, 3};
+//+
+Plane Surface(1) = {1};
+//+
+Symmetry {1, 0, 0, 0} {
+  Duplicata { Surface{1}; }
+}
+//+
+Physical Surface("plate") = {6, 1};
+//+
+Physical Curve("left") = {10};
+//+
+Physical Curve("right") = {2};
+//+
+Physical Curve("topleft") = {11};
+//+
+Physical Curve("topright") = {3};
+//+
+Physical Curve("downright") = {1};
+//+
+Physical Curve("downleft") = {9};
+//+
+Physical Point("A") = {17};
+//+
+Physical Point("B") = {3};
+//+
+Physical Point("C") = {4};
+//+
+Physical Point("D") = {21};
+//+
+Physical Point("E") = {2};
+//+
+Physical Point("F") = {13};
+//+
+Physical Point("G") = {5};
diff --git a/dG3D/benchmarks/testPBCWithReducedRVE/rve.msh b/dG3D/benchmarks/testPBCWithReducedRVE/rve.msh
new file mode 100644
index 0000000000000000000000000000000000000000..f03e3c92136e955ff64524014c9f87ec423b2ace
--- /dev/null
+++ b/dG3D/benchmarks/testPBCWithReducedRVE/rve.msh
@@ -0,0 +1,10406 @@
+$MeshFormat
+4.1 0 8
+$EndMeshFormat
+$PhysicalNames
+14
+0 8 "A"
+0 9 "B"
+0 10 "C"
+0 11 "D"
+0 12 "E"
+0 13 "F"
+0 14 "G"
+1 2 "left"
+1 3 "right"
+1 4 "topleft"
+1 5 "topright"
+1 6 "downright"
+1 7 "downleft"
+2 1 "plate"
+$EndPhysicalNames
+$Entities
+9 9 2 0
+1 0 0 0 0 
+2 0.25 0 0 1 12 
+3 1 0 0 1 9 
+4 1 1 0 1 10 
+5 0 1 0 1 14 
+6 0 0.25 0 0 
+13 -0.25 0 0 1 13 
+17 -1 0 0 1 8 
+21 -1 1 0 1 11 
+1 0.25 0 0 1 0 0 1 6 2 2 -3 
+2 1 0 0 1 1 0 1 3 2 3 -4 
+3 0 1 0 1 1 0 1 5 2 4 -5 
+4 0 0.25 0 0 1 0 0 2 5 -6 
+5 1.387778780781446e-17 0 0 0.25 0.25 0 0 2 2 -6 
+8 -0.25 0 0 -1.387778780781446e-17 0.25 0 0 2 6 -13 
+9 -1 0 0 -0.25 0 0 1 7 2 13 -17 
+10 -1 0 0 -1 1 0 1 2 2 17 -21 
+11 -1 1 0 0 1 0 1 4 2 21 -5 
+1 0 0 0 1 1 0 1 1 5 4 -5 1 2 3 
+6 -1 0 0 0 1 0 1 1 5 4 8 9 10 11 
+$EndEntities
+$Nodes
+19 4115 1 4115
+0 2 0 1
+1
+0.25 0 0
+0 3 0 1
+2
+1 0 0
+0 4 0 1
+3
+1 1 0
+0 5 0 1
+4
+0 1 0
+0 6 0 1
+5
+0 0.25 0
+0 13 0 1
+6
+-0.25 0 0
+0 17 0 1
+7
+-1 0 0
+0 21 0 1
+8
+-1 1 0
+1 1 0 33
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+0.2750342966595382 0 0
+0.3017398316913208 0 0
+0.3302281830497028 0 0
+0.3606183577549315 0 0
+0.3930373253975223 0 0
+0.4276205180176943 0 0
+0.4645124289211852 0 0
+0.5038671677460108 0 0
+0.5458491537447746 0 0
+0.5906337800998306 0 0
+0.6384081425175199 0 0
+0.6893718340224197 0 0
+0.7437377640988159 0 0
+0.8017330737825223 0 0
+0.863600026608546 0 0
+0.9295970963892841 0 0
+0.2625171483297683 0 0
+0.2883870641754235 0 0
+0.3159840073705059 0 0
+0.3454232704023211 0 0
+0.3768278415762363 0 0
+0.4103289217076059 0 0
+0.4460664734694456 0 0
+0.4841897983335908 0 0
+0.5248581607453848 0 0
+0.5682414669223473 0 0
+0.6145209613086269 0 0
+0.6638899882699686 0 0
+0.7165547990606118 0 0
+0.7727354189406809 0 0
+0.832666550195534 0 0
+0.8965985614989417 0 0
+0.9647985481946473 0 0
+1 2 0 27
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+1 0.07142857142842936 0
+1 0.1428571428568666 0
+1 0.2142857142852295 0
+1 0.2857142857135924 0
+1 0.3571428571419553 0
+1 0.4285714285703182 0
+1 0.4999999999986919 0
+1 0.5714285714274404 0
+1 0.6428571428562001 0
+1 0.71428571428496 0
+1 0.78571428571372 0
+1 0.8571428571424801 0
+1 0.92857142857124 0
+1 0.03571428571421743 0
+1 0.1071428571426604 0
+1 0.178571428571048 0
+1 0.2499999999994109 0
+1 0.3214285714277738 0
+1 0.3928571428561367 0
+1 0.464285714284505 0
+1 0.5357142857130661 0
+1 0.6071428571418203 0
+1 0.6785714285705801 0
+1 0.74999999999934 0
+1 0.8214285714281 0
+1 0.89285714285686 0
+1 0.9642857142856199 0
+1 3 0 27
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+0.9285714285711314 1 0
+0.8571428571424611 1 0
+0.7857142857143855 1 0
+0.7142857142863099 1 0
+0.6428571428582344 1 0
+0.5714285714301588 1 0
+0.5000000000020616 1 0
+0.4285714285732146 1 0
+0.3571428571443458 1 0
+0.2857142857154765 1 0
+0.2142857142866074 1 0
+0.1428571428577383 1 0
+0.07142857142886905 1 0
+0.964285714285569 1 0
+0.8928571428567829 1 0
+0.8214285714284112 1 0
+0.7500000000003585 1 0
+0.6785714285722988 1 0
+0.6071428571441484 1 0
+0.5357142857161319 1 0
+0.4642857142876381 1 0
+0.3928571428587802 1 0
+0.3214285714299112 1 0
+0.2500000000010419 1 0
+0.1785714285721728 1 0
+0.1071428571433037 1 0
+0.03571428571443447 1 0
+1 4 0 33
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+0 0.9295970963901145 0
+0 0.8636000266099321 0
+0 0.8017330737839685 0
+0 0.74373776410031 0
+0 0.6893718340239486 0
+0 0.6384081425190744 0
+0 0.5906337801014014 0
+0 0.545849153746354 0
+0 0.5038671677475908 0
+0 0.4645124289225044 0
+0 0.4276205180187547 0
+0 0.3930373253983509 0
+0 0.3606183577555531 0
+0 0.3302281830501399 0
+0 0.3017398316915941 0
+0 0.2750342966596664 0
+0 0.96479854819502 0
+0 0.8965985615000233 0
+0 0.8326665501969088 0
+0 0.7727354189421319 0
+0 0.7165547990620871 0
+0 0.6638899882714802 0
+0 0.6145209613102929 0
+0 0.5682414669238641 0
+0 0.5248581607469834 0
+0 0.4841897983350476 0
+0 0.4460664734706496 0
+0 0.4103289217085506 0
+0 0.3768278415769375 0
+0 0.3454232704028437 0
+0 0.3159840073708589 0
+0 0.288387064175639 0
+0 0.262517148329827 0
+1 5 0 31
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+0.2487961816625646 0.02450428513807634 0
+0.2451963200759565 0.04877258062896718 0
+0.2392350838756083 0.07257116950298295 0
+0.2309698830204473 0.09567085835049716 0
+0.2204803159226008 0.1178491845142347 0
+0.2078674028419922 0.1388925586045737 0
+0.1932526130210492 0.1585983214303878 0
+0.1767766948933362 0.1767766956999375 0
+0.1585983206617395 0.1932526136518626 0
+0.1388925579061399 0.2078674033086707 0
+0.1178491838805263 0.2204803162613251 0
+0.09567085780795143 0.2309698832451771 0
+0.07257116909207297 0.2392350840002564 0
+0.04877258035364216 0.245196320130722 0
+0.02450428500755848 0.2487961816754195 0
+0.2496988640498746 0.01226691861072837 0
+0.2472941274776624 0.03668261870507167 0
+0.2425078132591863 0.06074504513330794 0
+0.235386016214857 0.08422246357415025 0
+0.2259973231439935 0.1068887736469522 0
+0.2144321523006162 0.1285256863810707 0
+0.2008018825991386 0.14892482648854 0
+0.1852377809769806 0.1678897391108943 0
+0.1678897383101295 0.1852377817027516 0
+0.1489248257537588 0.2008018831440896 0
+0.12852568571371 0.2144321527006168 0
+0.1068887730534694 0.2259973234246899 0
+0.08422246309408521 0.235386016386627 0
+0.06074504478322915 0.2425078133468765 0
+0.03668261850008876 0.2472941275080687 0
+0.01226691854476508 0.2496988640531152 0
+1 8 0 31
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+-0.02450428496100614 0.2487961816800045 0
+-0.0487725805443906 0.2451963200927798 0
+-0.07257116950961508 0.2392350838735964 0
+-0.09567085843426101 0.2309698829857512 0
+-0.1178491846769726 0.2204803158356156 0
+-0.1388925588225216 0.2078674026963641 0
+-0.1585983216841224 0.1932526128128146 0
+-0.1767766959916714 0.1767766946016024 0
+-0.1932526138912561 0.1585983203700377 0
+-0.2078674034882143 0.138892557637434 0
+-0.2204803163666301 0.1178491836835144 0
+-0.2309698833083734 0.09567085765538208 0
+-0.2392350840349686 0.07257116897764238 0
+-0.2451963201457061 0.04877258027831189 0
+-0.2487961816787121 0.02450428497412832 0
+-0.01226691852170236 0.2496988640542482 0
+-0.03668261857151912 0.247294127497473 0
+-0.06074504510110062 0.2425078132672538 0
+-0.08422246363344814 0.2353860161936399 0
+-0.1068887737680919 0.2259973230866987 0
+-0.1285256865611328 0.2144321521926911 0
+-0.1489248267180586 0.2008018824289161 0
+-0.1678897394013957 0.1852377807136855 0
+-0.1852377819534622 0.1678897380335129 0
+-0.2008018833449197 0.1489248254829707 0
+-0.2144321528423109 0.1285256854773077 0
+-0.2259973235088712 0.1068887728754831 0
+-0.2353860164355745 0.08422246295728621 0
+-0.2425078133688792 0.06074504469538924 0
+-0.2472941275161164 0.03668261844583554 0
+-0.2496988640539934 0.01226691852688972 0
+1 9 0 33
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+-0.2750342966595382 0 0
+-0.3017398316913208 0 0
+-0.3302281830497028 0 0
+-0.3606183577549315 0 0
+-0.3930373253975223 0 0
+-0.4276205180176943 0 0
+-0.4645124289211852 0 0
+-0.5038671677460108 0 0
+-0.5458491537447746 0 0
+-0.5906337800998306 0 0
+-0.6384081425175199 0 0
+-0.6893718340224197 0 0
+-0.7437377640988159 0 0
+-0.8017330737825223 0 0
+-0.863600026608546 0 0
+-0.9295970963892841 0 0
+-0.2625171483297683 0 0
+-0.2883870641754235 0 0
+-0.3159840073705059 0 0
+-0.3454232704023211 0 0
+-0.3768278415762363 0 0
+-0.4103289217076059 0 0
+-0.4460664734694456 0 0
+-0.4841897983335908 0 0
+-0.5248581607453848 0 0
+-0.5682414669223473 0 0
+-0.6145209613086269 0 0
+-0.6638899882699686 0 0
+-0.7165547990606118 0 0
+-0.7727354189406809 0 0
+-0.832666550195534 0 0
+-0.8965985614989417 0 0
+-0.9647985481946473 0 0
+1 10 0 27
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+-1 0.07142857142842936 0
+-1 0.1428571428568666 0
+-1 0.2142857142852295 0
+-1 0.2857142857135924 0
+-1 0.3571428571419553 0
+-1 0.4285714285703182 0
+-1 0.4999999999986919 0
+-1 0.5714285714274404 0
+-1 0.6428571428562001 0
+-1 0.71428571428496 0
+-1 0.78571428571372 0
+-1 0.8571428571424801 0
+-1 0.92857142857124 0
+-1 0.03571428571421743 0
+-1 0.1071428571426604 0
+-1 0.178571428571048 0
+-1 0.2499999999994109 0
+-1 0.3214285714277738 0
+-1 0.3928571428561367 0
+-1 0.464285714284505 0
+-1 0.5357142857130661 0
+-1 0.6071428571418203 0
+-1 0.6785714285705801 0
+-1 0.74999999999934 0
+-1 0.8214285714281 0
+-1 0.89285714285686 0
+-1 0.9642857142856199 0
+1 11 0 27
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+-0.9285714285711314 1 0
+-0.8571428571424611 1 0
+-0.7857142857143855 1 0
+-0.7142857142863099 1 0
+-0.6428571428582344 1 0
+-0.5714285714301588 1 0
+-0.5000000000020616 1 0
+-0.4285714285732146 1 0
+-0.3571428571443458 1 0
+-0.2857142857154765 1 0
+-0.2142857142866074 1 0
+-0.1428571428577383 1 0
+-0.07142857142886905 1 0
+-0.964285714285569 1 0
+-0.8928571428567829 1 0
+-0.8214285714284112 1 0
+-0.7500000000003585 1 0
+-0.6785714285722988 1 0
+-0.6071428571441484 1 0
+-0.5357142857161319 1 0
+-0.4642857142876381 1 0
+-0.3928571428587802 1 0
+-0.3214285714299112 1 0
+-0.2500000000010419 1 0
+-0.1785714285721728 1 0
+-0.1071428571433037 1 0
+-0.03571428571443447 1 0
+2 1 0 1919
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+657
+658
+659
+660
+661
+662
+663
+664
+665
+666
+667
+668
+669
+670
+671
+672
+673
+674
+675
+676
+677
+678
+679
+680
+681
+682
+683
+684
+685
+686
+687
+688
+689
+690
+691
+692
+693
+694
+695
+696
+697
+698
+699
+700
+701
+702
+703
+704
+705
+706
+707
+708
+709
+710
+711
+712
+713
+714
+715
+716
+717
+718
+719
+720
+721
+722
+723
+724
+725
+726
+727
+728
+729
+730
+731
+732
+733
+734
+735
+736
+737
+738
+739
+740
+741
+742
+743
+744
+745
+746
+747
+748
+749
+750
+751
+752
+753
+754
+755
+756
+757
+758
+759
+760
+761
+762
+763
+764
+765
+766
+767
+768
+769
+770
+771
+772
+773
+774
+775
+776
+777
+778
+779
+780
+781
+782
+783
+784
+785
+786
+787
+788
+789
+790
+791
+792
+793
+794
+795
+796
+797
+798
+799
+800
+801
+802
+803
+804
+805
+806
+807
+808
+809
+810
+811
+812
+813
+814
+815
+816
+817
+818
+819
+820
+821
+822
+823
+824
+825
+826
+827
+828
+829
+830
+831
+832
+833
+834
+835
+836
+837
+838
+839
+840
+841
+842
+843
+844
+845
+846
+847
+848
+849
+850
+851
+852
+853
+854
+855
+856
+857
+858
+859
+860
+861
+862
+863
+864
+865
+866
+867
+868
+869
+870
+871
+872
+873
+874
+875
+876
+877
+878
+879
+880
+881
+882
+883
+884
+885
+886
+887
+888
+889
+890
+891
+892
+893
+894
+895
+896
+897
+898
+899
+900
+901
+902
+903
+904
+905
+906
+907
+908
+909
+910
+911
+912
+913
+914
+915
+916
+917
+918
+919
+920
+921
+922
+923
+924
+925
+926
+927
+928
+929
+930
+931
+932
+933
+934
+935
+936
+937
+938
+939
+940
+941
+942
+943
+944
+945
+946
+947
+948
+949
+950
+951
+952
+953
+954
+955
+956
+957
+958
+959
+960
+961
+962
+963
+964
+965
+966
+967
+968
+969
+970
+971
+972
+973
+974
+975
+976
+977
+978
+979
+980
+981
+982
+983
+984
+985
+986
+987
+988
+989
+990
+991
+992
+993
+994
+995
+996
+997
+998
+999
+1000
+1001
+1002
+1003
+1004
+1005
+1006
+1007
+1008
+1009
+1010
+1011
+1012
+1013
+1014
+1015
+1016
+1017
+1018
+1019
+1020
+1021
+1022
+1023
+1024
+1025
+1026
+1027
+1028
+1029
+1030
+1031
+1032
+1033
+1034
+1035
+1036
+1037
+1038
+1039
+1040
+1041
+1042
+1043
+1044
+1045
+1046
+1047
+1048
+1049
+1050
+1051
+1052
+1053
+1054
+1055
+1056
+1057
+1058
+1059
+1060
+1061
+1062
+1063
+1064
+1065
+1066
+1067
+1068
+1069
+1070
+1071
+1072
+1073
+1074
+1075
+1076
+1077
+1078
+1079
+1080
+1081
+1082
+1083
+1084
+1085
+1086
+1087
+1088
+1089
+1090
+1091
+1092
+1093
+1094
+1095
+1096
+1097
+1098
+1099
+1100
+1101
+1102
+1103
+1104
+1105
+1106
+1107
+1108
+1109
+1110
+1111
+1112
+1113
+1114
+1115
+1116
+1117
+1118
+1119
+1120
+1121
+1122
+1123
+1124
+1125
+1126
+1127
+1128
+1129
+1130
+1131
+1132
+1133
+1134
+1135
+1136
+1137
+1138
+1139
+1140
+1141
+1142
+1143
+1144
+1145
+1146
+1147
+1148
+1149
+1150
+1151
+1152
+1153
+1154
+1155
+1156
+1157
+1158
+1159
+1160
+1161
+1162
+1163
+1164
+1165
+1166
+1167
+1168
+1169
+1170
+1171
+1172
+1173
+1174
+1175
+1176
+1177
+1178
+1179
+1180
+1181
+1182
+1183
+1184
+1185
+1186
+1187
+1188
+1189
+1190
+1191
+1192
+1193
+1194
+1195
+1196
+1197
+1198
+1199
+1200
+1201
+1202
+1203
+1204
+1205
+1206
+1207
+1208
+1209
+1210
+1211
+1212
+1213
+1214
+1215
+1216
+1217
+1218
+1219
+1220
+1221
+1222
+1223
+1224
+1225
+1226
+1227
+1228
+1229
+1230
+1231
+1232
+1233
+1234
+1235
+1236
+1237
+1238
+1239
+1240
+1241
+1242
+1243
+1244
+1245
+1246
+1247
+1248
+1249
+1250
+1251
+1252
+1253
+1254
+1255
+1256
+1257
+1258
+1259
+1260
+1261
+1262
+1263
+1264
+1265
+1266
+1267
+1268
+1269
+1270
+1271
+1272
+1273
+1274
+1275
+1276
+1277
+1278
+1279
+1280
+1281
+1282
+1283
+1284
+1285
+1286
+1287
+1288
+1289
+1290
+1291
+1292
+1293
+1294
+1295
+1296
+1297
+1298
+1299
+1300
+1301
+1302
+1303
+1304
+1305
+1306
+1307
+1308
+1309
+1310
+1311
+1312
+1313
+1314
+1315
+1316
+1317
+1318
+1319
+1320
+1321
+1322
+1323
+1324
+1325
+1326
+1327
+1328
+1329
+1330
+1331
+1332
+1333
+1334
+1335
+1336
+1337
+1338
+1339
+1340
+1341
+1342
+1343
+1344
+1345
+1346
+1347
+1348
+1349
+1350
+1351
+1352
+1353
+1354
+1355
+1356
+1357
+1358
+1359
+1360
+1361
+1362
+1363
+1364
+1365
+1366
+1367
+1368
+1369
+1370
+1371
+1372
+1373
+1374
+1375
+1376
+1377
+1378
+1379
+1380
+1381
+1382
+1383
+1384
+1385
+1386
+1387
+1388
+1389
+1390
+1391
+1392
+1393
+1394
+1395
+1396
+1397
+1398
+1399
+1400
+1401
+1402
+1403
+1404
+1405
+1406
+1407
+1408
+1409
+1410
+1411
+1412
+1413
+1414
+1415
+1416
+1417
+1418
+1419
+1420
+1421
+1422
+1423
+1424
+1425
+1426
+1427
+1428
+1429
+1430
+1431
+1432
+1433
+1434
+1435
+1436
+1437
+1438
+1439
+1440
+1441
+1442
+1443
+1444
+1445
+1446
+1447
+1448
+1449
+1450
+1451
+1452
+1453
+1454
+1455
+1456
+1457
+1458
+1459
+1460
+1461
+1462
+1463
+1464
+1465
+1466
+1467
+1468
+1469
+1470
+1471
+1472
+1473
+1474
+1475
+1476
+1477
+1478
+1479
+1480
+1481
+1482
+1483
+1484
+1485
+1486
+1487
+1488
+1489
+1490
+1491
+1492
+1493
+1494
+1495
+1496
+1497
+1498
+1499
+1500
+1501
+1502
+1503
+1504
+1505
+1506
+1507
+1508
+1509
+1510
+1511
+1512
+1513
+1514
+1515
+1516
+1517
+1518
+1519
+1520
+1521
+1522
+1523
+1524
+1525
+1526
+1527
+1528
+1529
+1530
+1531
+1532
+1533
+1534
+1535
+1536
+1537
+1538
+1539
+1540
+1541
+1542
+1543
+1544
+1545
+1546
+1547
+1548
+1549
+1550
+1551
+1552
+1553
+1554
+1555
+1556
+1557
+1558
+1559
+1560
+1561
+1562
+1563
+1564
+1565
+1566
+1567
+1568
+1569
+1570
+1571
+1572
+1573
+1574
+1575
+1576
+1577
+1578
+1579
+1580
+1581
+1582
+1583
+1584
+1585
+1586
+1587
+1588
+1589
+1590
+1591
+1592
+1593
+1594
+1595
+1596
+1597
+1598
+1599
+1600
+1601
+1602
+1603
+1604
+1605
+1606
+1607
+1608
+1609
+1610
+1611
+1612
+1613
+1614
+1615
+1616
+1617
+1618
+1619
+1620
+1621
+1622
+1623
+1624
+1625
+1626
+1627
+1628
+1629
+1630
+1631
+1632
+1633
+1634
+1635
+1636
+1637
+1638
+1639
+1640
+1641
+1642
+1643
+1644
+1645
+1646
+1647
+1648
+1649
+1650
+1651
+1652
+1653
+1654
+1655
+1656
+1657
+1658
+1659
+1660
+1661
+1662
+1663
+1664
+1665
+1666
+1667
+1668
+1669
+1670
+1671
+1672
+1673
+1674
+1675
+1676
+1677
+1678
+1679
+1680
+1681
+1682
+1683
+1684
+1685
+1686
+1687
+1688
+1689
+1690
+1691
+1692
+1693
+1694
+1695
+1696
+1697
+1698
+1699
+1700
+1701
+1702
+1703
+1704
+1705
+1706
+1707
+1708
+1709
+1710
+1711
+1712
+1713
+1714
+1715
+1716
+1717
+1718
+1719
+1720
+1721
+1722
+1723
+1724
+1725
+1726
+1727
+1728
+1729
+1730
+1731
+1732
+1733
+1734
+1735
+1736
+1737
+1738
+1739
+1740
+1741
+1742
+1743
+1744
+1745
+1746
+1747
+1748
+1749
+1750
+1751
+1752
+1753
+1754
+1755
+1756
+1757
+1758
+1759
+1760
+1761
+1762
+1763
+1764
+1765
+1766
+1767
+1768
+1769
+1770
+1771
+1772
+1773
+1774
+1775
+1776
+1777
+1778
+1779
+1780
+1781
+1782
+1783
+1784
+1785
+1786
+1787
+1788
+1789
+1790
+1791
+1792
+1793
+1794
+1795
+1796
+1797
+1798
+1799
+1800
+1801
+1802
+1803
+1804
+1805
+1806
+1807
+1808
+1809
+1810
+1811
+1812
+1813
+1814
+1815
+1816
+1817
+1818
+1819
+1820
+1821
+1822
+1823
+1824
+1825
+1826
+1827
+1828
+1829
+1830
+1831
+1832
+1833
+1834
+1835
+1836
+1837
+1838
+1839
+1840
+1841
+1842
+1843
+1844
+1845
+1846
+1847
+1848
+1849
+1850
+1851
+1852
+1853
+1854
+1855
+1856
+1857
+1858
+1859
+1860
+1861
+1862
+1863
+1864
+1865
+1866
+1867
+1868
+1869
+1870
+1871
+1872
+1873
+1874
+1875
+1876
+1877
+1878
+1879
+1880
+1881
+1882
+1883
+1884
+1885
+1886
+1887
+1888
+1889
+1890
+1891
+1892
+1893
+1894
+1895
+1896
+1897
+1898
+1899
+1900
+1901
+1902
+1903
+1904
+1905
+1906
+1907
+1908
+1909
+1910
+1911
+1912
+1913
+1914
+1915
+1916
+1917
+1918
+1919
+1920
+1921
+1922
+1923
+1924
+1925
+1926
+1927
+1928
+1929
+1930
+1931
+1932
+1933
+1934
+1935
+1936
+1937
+1938
+1939
+1940
+1941
+1942
+1943
+1944
+1945
+1946
+1947
+1948
+1949
+1950
+1951
+1952
+1953
+1954
+1955
+1956
+1957
+1958
+1959
+1960
+1961
+1962
+1963
+1964
+1965
+1966
+1967
+1968
+1969
+1970
+1971
+1972
+1973
+1974
+1975
+1976
+1977
+1978
+1979
+1980
+1981
+1982
+1983
+1984
+1985
+1986
+1987
+1988
+1989
+1990
+1991
+1992
+1993
+1994
+1995
+1996
+1997
+1998
+1999
+2000
+2001
+2002
+2003
+2004
+2005
+2006
+2007
+2008
+2009
+2010
+2011
+2012
+2013
+2014
+2015
+2016
+2017
+2018
+2019
+2020
+2021
+2022
+2023
+2024
+2025
+2026
+2027
+2028
+2029
+2030
+2031
+2032
+2033
+2034
+2035
+2036
+2037
+2038
+2039
+2040
+2041
+2042
+2043
+2044
+2045
+2046
+2047
+2048
+2049
+2050
+2051
+2052
+2053
+2054
+2055
+2056
+2057
+2058
+2059
+2060
+2061
+2062
+2063
+2064
+2065
+2066
+2067
+2068
+2069
+2070
+2071
+2072
+2073
+2074
+2075
+2076
+2077
+2078
+2079
+2080
+2081
+2082
+2083
+2084
+2085
+2086
+2087
+2088
+2089
+2090
+2091
+2092
+2093
+2094
+2095
+2096
+2097
+2098
+2099
+2100
+2101
+2102
+2103
+2104
+2105
+2106
+2107
+2108
+2109
+2110
+2111
+2112
+2113
+2114
+2115
+2116
+2117
+2118
+2119
+2120
+2121
+2122
+2123
+2124
+2125
+2126
+2127
+2128
+2129
+2130
+2131
+2132
+2133
+2134
+2135
+2136
+2137
+2138
+2139
+2140
+2141
+2142
+2143
+2144
+2145
+2146
+2147
+2148
+2149
+2150
+2151
+2152
+2153
+2154
+2155
+2156
+2157
+2158
+2159
+2160
+2161
+2162
+2163
+2164
+2165
+2166
+2167
+2168
+2169
+2170
+2171
+2172
+2173
+2174
+2175
+2176
+2177
+2178
+2179
+2180
+2181
+2182
+2183
+2184
+2185
+2186
+2187
+2188
+2189
+2190
+2191
+2192
+2193
+2194
+2195
+2196
+0.4899567006370907 0.3698227175547718 0
+0.248843890073452 0.4255682907134319 0
+0.3905078052609846 0.1861465887264376 0
+0.451862548991862 0.6833516370196729 0
+0.7185285501981428 0.2480008897514371 0
+0.709880120613028 0.5637285832136757 0
+0.120588937693381 0.3572853272475529 0
+0.2832111589818107 0.2538186695876172 0
+0.2240624132773706 0.6488423196109019 0
+0.5534737503716642 0.164682246668146 0
+0.399510822752874 0.5128490594539542 0
+0.131101432015343 0.4765306937233179 0
+0.6392311914200421 0.7861415568357525 0
+0.336741001750768 0.09992206482579732 0
+0.3665391665113619 0.3470756331948879 0
+0.3175263702025041 0.8108235239420037 0
+0.1923836607290843 0.2859066286724571 0
+0.6547460118838893 0.4064156516898011 0
+0.2842158472733722 0.1713633006803278 0
+0.5540514469444378 0.5032717152661599 0
+0.4297630878690882 0.09844752294703155 0
+0.8289572883631701 0.3800450755494123 0
+0.8171103508506532 0.7119040661286891 0
+0.1543070851881226 0.7914588812435605 0
+0.4840848907167701 0.2519639675299056 0
+0.8312629001670993 0.1517807929427595 0
+0.2802531711028645 0.5410829904242643 0
+0.124636058950808 0.5974248543835282 0
+0.480220201071811 0.8380825862807433 0
+0.5980368573158651 0.3074684483418555 0
+0.6800482630314634 0.1381736906962831 0
+0.06964562692315175 0.312507296809856 0
+0.5814530720205954 0.6501225058588433 0
+0.2606908327053948 0.3389635518327899 0
+0.2344298092321332 0.2096723221850489 0
+0.3645775291413398 0.2692259412335121 0
+0.5248581607453929 0.08840412820764669 0
+0.07214726666445018 0.4100043112433308 0
+0.8537781636892932 0.5265748392216686 0
+0.1391989132642233 0.2764248320777665 0
+0.4739436203050754 0.16613618579442 0
+0.7736464253165413 0.8489481529233422 0
+0.3384407510576278 0.6497531485190875 0
+0.3004797779732459 0.05717011393832307 0
+0.1773770661938044 0.4177914617472114 0
+0.3483744112514194 0.444932687394495 0
+0.1958208675924111 0.5520970692003164 0
+0.4275765978682963 0.317917867711125 0
+0.1018913722119729 0.7021938947172304 0
+0.4209051231564767 0.4089395348943891 0
+0.4841755895727579 0.5832982125476471 0
+0.2814825515282395 0.1186284709988381 0
+0.1941276521549436 0.3548909041892531 0
+0.8306628252259265 0.2648660672762689 0
+0.3768278415762269 0.05738892766746748 0
+0.3322936788077161 0.2156154367588967 0
+0.5358155347590239 0.7499394031922463 0
+0.7538019960252829 0.4617629296532634 0
+0.6097986099761612 0.0767206806225741 0
+0.175887269255328 0.2416299685255027 0
+0.6949842598525358 0.6703273504821262 0
+0.3360015038021956 0.1568371913059846 0
+0.2228948577338233 0.8867648921979573 0
+0.106914371091699 0.8902905526124112 0
+0.5729753702863735 0.8787669101044342 0
+0.06642323346693482 0.5234857318897276 0
+0.3128308360477049 0.3104274907882841 0
+0.633588116930951 0.2203365848766725 0
+0.5700110080563062 0.4169070798166281 0
+0.8838280650056085 0.8100789103098092 0
+0.2869786738763062 0.7211988493087514 0
+0.7360039588416187 0.3429879485041844 0
+0.2096115762573987 0.4804943153962875 0
+0.05268696385345822 0.3624229918485286 0
+0.3861169832005603 0.1258469896396303 0
+0.6434455031379716 0.4977233386243046 0
+0.4995780455415517 0.4442220604787851 0
+0.3083974860849327 0.3857782704358287 0
+0.7668767148360743 0.08742811273940991 0
+0.4242823013807475 0.2412366864263715 0
+0.4007286092172467 0.7664955996888076 0
+0.8907349404243863 0.6301788412188088 0
+0.3788499558508656 0.8959033317232423 0
+0.2495571089852078 0.1473889417055736 0
+0.556812326510108 0.2406873682947929 0
+0.4018425868000013 0.5955272399008381 0
+0.05382397202375412 0.4665498778047245 0
+0.0452972288234165 0.2843225427172716 0
+0.2294910772632848 0.2554149391937944 0
+0.4760557436660891 0.05691882203735144 0
+0.09054910877569802 0.2762875136813239 0
+0.7921267491744161 0.6160990925577734 0
+0.1546574860922531 0.3212341652613012 0
+0.5255746522975253 0.3086551429601009 0
+0.9084567553377711 0.3236201485828528 0
+0.7540879840676832 0.178516928494358 0
+0.6838010796676425 0.9024872886634481 0
+0.9063217714681313 0.436438924180387 0
+0.9060711009101774 0.2085734376829063 0
+0.1852728056579222 0.7164192750485979 0
+0.8953062349523706 0.08977864176840938 0
+0.2902854832042325 0.4782185389707282 0
+0.125664087579318 0.4051732702911379 0
+0.4219649772540062 0.05168588068799882 0
+0.0869942901378474 0.7814790785350122 0
+0.7399960976742577 0.7586301621188151 0
+0.5973756777123069 0.5649971207899139 0
+0.3407422642614405 0.04164701923690405 0
+0.8842235095534859 0.9086140250282366 0
+0.4747991755504123 0.5155061877267775 0
+0.1109183198034546 0.3091885573148412 0
+0.671269087820196 0.3088615534200223 0
+0.2759797659476569 0.213091850418173 0
+0.06532171651206832 0.6440870938489189 0
+0.4336546083352904 0.1564519335414458 0
+0.1974733583701844 0.207993755023278 0
+0.2769846214796794 0.07894212427063149 0
+0.2364733162037448 0.7891913216785365 0
+0.1271579984281506 0.5445222346998004 0
+0.2268603248536262 0.1803471074874052 0
+0.04860689172874982 0.5851842910377598 0
+0.914509654769897 0.7212103461482764 0
+0.635159021541115 0.1438602624502687 0
+0.2403949332910246 0.3092504292749211 0
+0.4954186806455533 0.1169472579782263 0
+0.3418058668139771 0.5154338504309074 0
+0.2669264044822476 0.6138857407656572 0
+0.6718041547389318 0.0626555325972612 0
+0.1431589700162205 0.2459120349045337 0
+0.3394887556301517 0.5797186956737713 0
+0.5121394919881861 0.6516017687671093 0
+0.2379146067461115 0.3802646481918545 0
+0.165496502094728 0.6419125639123918 0
+0.03126393161681131 0.325045578003947 0
+0.2828306901088955 0.03532821204547082 0
+0.3517190267073673 0.7266285141056906 0
+0.5652988651458974 0.0513123615769752 0
+0.5698178172743402 0.3588716902439236 0
+0.5164563957024884 0.2261949525868981 0
+0.5081658225452682 0.9163587281127359 0
+0.2934369267449807 0.9163169193402054 0
+0.08789769281922123 0.3534598988343704 0
+0.3238964270105729 0.2550721516159078 0
+0.4214250318771267 0.3635810166740973 0
+0.6893768787723117 0.1907657936113911 0
+0.2757037127535121 0.2983673046063902 0
+0.3749440088790161 0.2258564794657893 0
+0.4384955817816785 0.1968465706084592 0
+0.3074239006232679 0.1393434290642109 0
+0.1072907036595313 0.4531126427549066 0
+0.2508279000651993 0.119532713312445 0
+0.7786703436525725 0.5329175492307432 0
+0.672914425339172 0.6142137086477992 0
+0.8289098160620035 0.4554202196441884 0
+0.5694158466167355 0.1174399932879854 0
+0.5993184467367431 0.7211900269037957 0
+0.3860236321833953 0.3121383699752773 0
+0.6271691332178486 0.3535977937504129 0
+0.16883548378308 0.382600232139114 0
+0.4619156554904859 0.744993203611122 0
+0.5202570415580443 0.1492003733941581 0
+0.8307135969702539 0.05134700844855893 0
+0.0417481973354008 0.397247252819339 0
+0.3067450014946408 0.08627084262619733 0
+0.8136837909341343 0.9248894917679618 0
+0.3738858913961499 0.41067174773267 0
+0.3988728456694856 0.4606833581053809 0
+0.5138802541170105 0.04327962317619657 0
+0.5392705809640809 0.8198348878629703 0
+0.9197998914890773 0.563904953582786 0
+0.2372516706502319 0.5219549455814655 0
+0.1709826779168645 0.5966253672158258 0
+0.1130915498535183 0.258581660018836 0
+0.4540735264689177 0.4627878056981505 0
+0.768342041580476 0.2925526320093805 0
+0.7014221709817011 0.8363804799592252 0
+0.2052673581313541 0.2347512853678216 0
+0.2566912742141232 0.1879341150454059 0
+0.4807076981293982 0.3003330931002576 0
+0.3721630470207895 0.09370802845806213 0
+0.5522546952698049 0.5928424218535496 0
+0.1669687015354988 0.2680436851002161 0
+0.8041180484205491 0.7851180087156542 0
+0.3118289028659607 0.02754078464600552 0
+0.2488926181572106 0.5692383621878943 0
+0.1654704229124024 0.5118468006220209 0
+0.06438571383145993 0.2676161897543494 0
+0.1699804887298281 0.4619349558310401 0
+0.7259313225757011 0.399878789299035 0
+0.05457976587065862 0.831356133873586 0
+0.3029329018934941 0.4325606303088668 0
+0.3266712281603043 0.06742407315688398 0
+0.1696888675827211 0.9324839466726016 0
+0.03806113961443412 0.434668579555321 0
+0.3256871249543465 0.1846618533786725 0
+0.6888995986747237 0.4567687226116295 0
+0.2835189561625128 0.6620917490927827 0
+0.3961010697477912 0.6519282144929746 0
+0.04678699751459418 0.7149400940045731 0
+0.5958454391922121 0.4676665968516636 0
+0.1004958547862603 0.3853634740249883 0
+0.8061232166839202 0.2068346102403622 0
+0.2130219007331806 0.4437805211016555 0
+0.3558365895368496 0.1878224160684553 0
+0.1626322227229526 0.8565335855501741 0
+0.4074935369591591 0.2783349390253415 0
+0.2989874414646504 0.3459210008548914 0
+0.3781783881277689 0.8268503412895508 0
+0.404862523359579 0.07774712402140953 0
+0.7652930252878043 0.6738802133790172 0
+0.9329101211503454 0.1447499964504205 0
+0.4396045963604787 0.9308070462925272 0
+0.2028241086846379 0.3145533037896609 0
+0.2526466818872931 0.2355031089820193 0
+0.7249845434642828 0.04652575584138483 0
+0.4372839200171477 0.5557759301556904 0
+0.4478038262623495 0.2732468421133809 0
+0.4474419540875988 0.6267939224269702 0
+0.7348791052653723 0.9452118269435511 0
+0.2777715901086357 0.1467545715193128 0
+0.2708096001199987 0.05491074158744914 0
+0.4722384444149816 0.4108161060729802 0
+0.9448160651596766 0.3843343281967975 0
+0.3560765078801729 0.1272639910646158 0
+0.1589925585639863 0.219015538064606 0
+0.2347184282450012 0.6963983807304276 0
+0.6364797637431018 0.8491934793230905 0
+0.5172875809672546 0.5447095264008068 0
+0.624268402973215 0.9348427141347841 0
+0.3024355916527539 0.2278346128768219 0
+0.3748045953221825 0.0276545588357513 0
+0.7308867433339203 0.6206121363537808 0
+0.3711025730803719 0.1555411120942431 0
+0.2009079525738253 0.1820923548349175 0
+0.5876985547489573 0.2092172782877699 0
+0.4771223356839543 0.2123664971400799 0
+0.2495699948815802 0.4729288482967962 0
+0.1988208016187814 0.3900216641666047 0
+0.04215717473268794 0.497070524982194 0
+0.4597366459663763 0.3458746267209688 0
+0.8432760643919581 0.8593588422931497 0
+0.6108672213318044 0.03239551758446419 0
+0.5249090482905896 0.4005489503767287 0
+0.6345430051631462 0.2747564848579855 0
+0.08575439427465582 0.4842397254296915 0
+0.9448974862095258 0.2598349082161526 0
+0.8148749859287971 0.3260209207085109 0
+0.05628296881274859 0.9437026946626675 0
+0.7146163459151892 0.5078555320687232 0
+0.6496018853243509 0.553512619198446 0
+0.5457198155945427 0.6955430071668562 0
+0.2773340920721254 0.3714035840130572 0
+0.227000507641361 0.3404483063899916 0
+0.6881626099701631 0.3540673059089757 0
+0.02674051180153997 0.3499292398710865 0
+0.7842351306386139 0.4115690841755265 0
+0.1378629985131113 0.4338432423753334 0
+0.9363355699338246 0.8584824442715259 0
+0.2693106495733279 0.8388382348500615 0
+0.5822327066565275 0.7815851156793848 0
+0.13606775043166 0.7413877517526567 0
+0.3195591359700203 0.762255461562005 0
+0.3737578870253445 0.5503902902267825 0
+0.1072885942146685 0.653357819753232 0
+0.2579276068083765 0.09405232021742156 0
+0.6380028278232074 0.6667563224957994 0
+0.9293326353251327 0.5041016776926474 0
+0.3505565752544445 0.3061187372781711 0
+0.2392494606790742 0.9454769933862306 0
+0.848825373513409 0.5921519266169303 0
+0.543963259319807 0.456559223668025 0
+0.113085547002256 0.8302236463629488 0
+0.500698081905234 0.704975858071019 0
+0.7328439853655857 0.1308208659501665 0
+0.446669487950101 0.03310967839455382 0
+0.03903141524728194 0.5501167269498439 0
+0.5226437022972745 0.267779959069669 0
+0.08981693116973437 0.2538016942656236 0
+0.2985960860681939 0.2797497742035163 0
+0.9405924350022056 0.6675031720407666 0
+0.3085543036136225 0.1128225022015452 0
+0.9374129652594193 0.776435249853426 0
+0.4041028161978821 0.7082943062351528 0
+0.6656127997126884 0.7225829502004358 0
+0.597743574574916 0.253151240604895 0
+0.4063984455871634 0.02637994940474402 0
+0.1963134391328309 0.260325460944382 0
+0.8297598806893214 0.6536126443318767 0
+0.7171273627723667 0.2986908299194666 0
+0.08912439906655731 0.5584483555821151 0
+0.05813405301224132 0.3332609272035696 0
+0.1552193063126301 0.3500105308511833 0
+0.02248264097716242 0.2710574132917856 0
+0.7736091386303898 0.03706017540587073 0
+0.3503919355428345 0.3793191301207807 0
+0.3347027551003716 0.3398449853715285 0
+0.03784179849810476 0.6224008211706443 0
+0.5969854663262257 0.517122385781051 0
+0.3284107753398686 0.8686026609723264 0
+0.2276916998509473 0.1542053279559384 0
+0.6145304576499042 0.4263216453768717 0
+0.8578431735842179 0.7559802846167909 0
+0.5553676334474152 0.9459936704703908 0
+0.7841515361644115 0.1410637967262545 0
+0.6509805724190034 0.1046411356466197 0
+0.4653139953764319 0.09148632862114486 0
+0.7668309777754515 0.2354608322504062 0
+0.1350239359773683 0.3031717965683381 0
+0.2576112261878131 0.2736295363411481 0
+0.4514949094973233 0.1257652529162605 0
+0.02229790976707526 0.3774029360869761 0
+0.6471970314504403 0.1785760054769866 0
+0.4067802044363997 0.2130275188800523 0
+0.560489414584906 0.2829388755418591 0
+0.3629346706757367 0.4818002271352002 0
+0.4171157402061161 0.124411994151003 0
+0.9452857018741991 0.05494694025561727 0
+0.6735535347225949 0.2482255667081796 0
+0.1955786875150868 0.7602197272404873 0
+0.4832166054955547 0.02648131207622618 0
+0.2119648258577745 0.6056179750297483 0
+0.9403051218752991 0.942774033190948 0
+0.4934108213948333 0.7921024143556383 0
+0.8842747510839551 0.3747253351854644 0
+0.5100464881587283 0.4867470218684852 0
+0.3489216425551898 0.2406028256788003 0
+0.6046068599396319 0.3902184876609582 0
+0.5281773169152109 0.3484237815158844 0
+0.3480938589571539 0.9438014219477316 0
+0.4255075545187401 0.8618203232245772 0
+0.02282282851139388 0.3030644024777232 0
+0.8847020104275277 0.2670988323954933 0
+0.3204406664011116 0.6870035608700931 0
+0.2079194527321155 0.825949031339028 0
+0.1576716058111574 0.5628656510107044 0
+0.1674415479655316 0.2986614454574973 0
+0.7050928652179445 0.09161036944220824 0
+0.9502254533831339 0.6151745362252004 0
+0.3520753351170702 0.07222210653331869 0
+0.04196355534225348 0.2646768982898947 0
+0.8563110226056916 0.1954111220534998 0
+0.5478661567809433 0.204408689806914 0
+0.2340327169294837 0.1340157663549812 0
+0.03484801886663942 0.6650219189942335 0
+0.2956297266261796 0.1953535102682081 0
+0.439993538303481 0.8050574114084064 0
+0.178915254413396 0.1985865059947534 0
+0.07638346561184442 0.444443937053519 0
+0.3929219869410523 0.2510392984229206 0
+0.7809569932212674 0.360047445231226 0
+0.2198364075481126 0.2831800497027272 0
+0.06978686966558041 0.2907262079060209 0
+0.07045819334606943 0.3829230288360583 0
+0.7582154651137522 0.5794467129168986 0
+0.1480590563311712 0.6882915307486345 0
+0.04339449550019927 0.889884446544519 0
+0.1135142395207513 0.2870832240691878 0
+0.112630787865434 0.9528784430210908 0
+0.5613557964009698 0.5462201533468731 0
+0.02943848808940951 0.4644274509068746 0
+0.8771819965568544 0.1417206542375109 0
+0.3298510959898857 0.1294527253832694 0
+0.3449602316290263 0.01815370352768034 0
+0.2150650987218833 0.1990911613574444 0
+0.3602282515169551 0.6166529158943941 0
+0.202038634353111 0.5165982827000226 0
+0.6785714285722716 0.9576436353502116 0
+0.1219990346975973 0.3311581215919669 0
+0.5588783708684413 0.08490406302714472 0
+0.4543577871651001 0.2351321127636394 0
+0.515636520057681 0.8654575764498937 0
+0.4446056248178949 0.07048961022784186 0
+0.4030045420763738 0.1542396846305159 0
+0.1917548331940493 0.6772599755237643 0
+0.03928653635817587 0.7706090931344811 0
+0.2784539293810302 0.7777509251093853 0
+0.3261094068909276 0.4751021802912637 0
+0.2792559463116122 0.4064842852827187 0
+0.2673501724244975 0.01820204495316026 0
+0.2726844828424062 0.506521905383405 0
+0.5361198774250726 0.1198286571092855 0
+0.4968306027891203 0.3346218723703967 0
+0.6043177618196325 0.1644150953090677 0
+0.2623930191365467 0.164451505339284 0
+0.4501883685230615 0.3810231205061432 0
+0.08205494136818729 0.6122016312452003 0
+0.1361042224655096 0.2263607116548919 0
+0.727874536263684 0.2065990525724557 0
+0.04949175642543253 0.3081544925197314 0
+0.4951053669100954 0.07940723200411318 0
+0.7468837012577232 0.8061710834872937 0
+0.8965985614989151 0.03601479070298792 0
+0.8609281926028174 0.417752798260823 0
+0.2186373878119764 0.4101557193590865 0
+0.2959729750931364 0.5773146062525708 0
+0.803790079857288 0.4941688844374659 0
+0.9611688526232969 0.3214285714277738 0
+0.1138519097987421 0.5125349361910136 0
+0.9543106308476687 0.1904629971812536 0
+0.3946042924010059 0.3434348559134705 0
+0.1362510265386095 0.3804769964995063 0
+0.2375686754742571 0.7437207216038185 0
+0.5904281039641439 0.8288461022920178 0
+0.8309154966078439 0.1105198344771505 0
+0.2624716994941362 0.0370280798781428 0
+0.5564192116775696 0.3212715877207247 0
+0.2880654899788035 0.01525743705972899 0
+0.4378469029333913 0.5015360451156529 0
+0.3367965252337661 0.4106524931985283 0
+0.08968756418487236 0.3237565750661814 0
+0.7414865144330783 0.8915834480515058 0
+0.3056663539271722 0.5105490990905166 0
+0.8726682779352837 0.4772179755519799 0
+0.1033073961357526 0.421990146290536 0
+0.6143324003849033 0.6076094161282288 0
+0.3228597127086257 0.5469351290425315 0
+0.514853216733695 0.1871648242317693 0
+0.08283003757321249 0.7381607778573225 0
+0.6414430650094722 0.4523340587893748 0
+0.632754520879264 0.3111710700925691 0
+0.8870467363518881 0.9568900217909311 0
+0.6440499925173674 0.0343543461608599 0
+0.02721182068916607 0.5243008038299508 0
+0.1772373321222506 0.3301693316302318 0
+0.07122733986398865 0.6759201642636375 0
+0.3559320186902215 0.7832436961811529 0
+0.3936592186954777 0.956740994964528 0
+0.2582067250486947 0.07051207124436434 0
+0.7276738783662389 0.7099622918483105 0
+0.9563811147881132 0.1014583079809258 0
+0.9538814849710968 0.4499228439931089 0
+0.3976073848845277 0.1030852809049663 0
+0.3996441724652212 0.04984929273140962 0
+0.2754010344881279 0.4482507585358284 0
+0.4144885483781454 0.1813424592773821 0
+0.2292909519094958 0.2319501062870218 0
+0.4668494678541535 0.8901963667007314 0
+0.6110079763611108 0.1200948227925435 0
+0.8720566265530125 0.6921782734644415 0
+0.3890387040443251 0.3767727900173818 0
+0.7114553413412916 0.161156773629949 0
+0.3140960156571052 0.6165694760330438 0
+0.3198442000699553 0.04797595042324201 0
+0.6944661940773635 0.781120152636831 0
+0.2870532057428155 0.3234198370205889 0
+0.01833113924432505 0.4087496216601547 0
+0.09068362147891808 0.2999248958079018 0
+0.328283859181548 0.285137095800753 0
+0.2443788538918915 0.1674228847178867 0
+0.8063232190286886 0.5694380241088028 0
+0.1501140643667644 0.4040610823636379 0
+0.2549368828203016 0.2115503491576618 0
+0.1216278419606751 0.2385282657353243 0
+0.362160866022356 0.6847215488445997 0
+0.2869430182960905 0.0966147457115646 0
+0.8586547693945247 0.3227293966163337 0
+0.2111925206793929 0.1633255940234568 0
+0.3070935572262776 0.1645240940485116 0
+0.1814318253886914 0.2199679810458172 0
+0.2163053152730102 0.216691726044123 0
+0.7720612584046068 0.7261721344478986 0
+0.2887321997264626 0.06805611910447729 0
+0.3036123897339433 0.07172047828226019 0
+0.2918648114871601 0.08260648344841441 0
+0.120650687662985 0.7864689798892863 0
+0.1115310202847537 0.7614334151438344 0
+0.1451874178098913 0.7664233164981086 0
+0.9681677849669124 0.8935269364213829 0
+0.9701525609376496 0.9356727308810939 0
+0.9383203459045619 0.900628238731237 0
+0.4846811504753143 0.1415417218863232 0
+0.5078378611017988 0.1330738156861922 0
+0.4971003309315599 0.1576682795942891 0
+0.2505428829982097 0.3241069905538555 0
+0.2580493230222684 0.3038088669406557 0
+0.2681972727294535 0.3186654282195901 0
+0.577966322622864 0.0256561807884876 0
+0.5555740094453361 0.0256561807884876 0
+0.01124132048858121 0.273045854975726 0
+0.02265273474427815 0.2870609078847544 0
+0.01141141425569694 0.2890493495686948 0
+0.3762813993473786 0.3296070015850826 0
+0.3585478708829032 0.3265971852365295 0
+0.3682901037189199 0.3091285536267242 0
+0.3506209608058667 0.3434603092832082 0
+0.3426296651774081 0.3229818613248498 0
+0.4537991143201829 0.1612940596679329 0
+0.4562196010433769 0.1814913782014396 0
+0.4360750950584844 0.1766492520749525 0
+0.5614447984941999 0.1410611199780658 0
+0.5868668042181839 0.1409275442985266 0
+0.5788957560956484 0.1645486709886069 0
+0.9598999457445386 0.5676667625051133 0
+0.924566263407105 0.5340033156377166 0
+0.9646663176625663 0.5377651245600439 0
+0.5002706432096292 0.2390794600584019 0
+0.5195500489998814 0.2469874558282835 0
+0.5033642965070223 0.2598719632997873 0
+0.3587850529188337 0.04951797345218576 0
+0.3577734297918115 0.03465078903632767 0
+0.3758162184492047 0.04252174325160939 0
+0.1947794576860493 0.6453774417616469 0
+0.1887306639762513 0.62376526947107 0
+0.2180136195675726 0.6272301473203251 0
+0.1682395900057963 0.6192689655641088 0
+0.1914737518873195 0.6011216711227871 0
+0.3611301513237847 0.4278022175635825 0
+0.3863793685328177 0.4356775529190254 0
+0.3736236284604525 0.4528080227499379 0
+0.9681677849669124 0.857812650707003 0
+0.4371450029838977 0.01655483919727691 0
+0.4265339667686322 0.02974481389964892 0
+0.4170094818024288 0.01318997470237201 0
+0.6790309245265804 0.5027894353465139 0
+0.6821091156197701 0.5306840756335847 0
+0.6465236942311612 0.5256179789113753 0
+0.5902119114889232 0.1187674080402645 0
+0.6076628690903716 0.1422549590508056 0
+0.5395895596314539 0.04729599237658588 0
+0.5298647039308926 0.02163981158809828 0
+0.02430344586437491 0.5879090355695806 0
+0.01951570762364097 0.5703752535256227 0
+0.04381915348801588 0.5676505089938019 0
+0.5040829112736649 0.9581793640563679 0
+0.4698022981812702 0.9654035231462637 0
+0.4738852094528735 0.9235828872026315 0
+0.145066280522768 0.61966870914796 0
+0.1478093684338362 0.597025110799677 0
+0.3973955072763133 0.4098056413135296 0
+0.4098889844129812 0.434811446499885 0
+0.2454944088798091 0.6313640301882795 0
+0.2394456151700111 0.6097518578977028 0
+0.9646663176625663 0.5020508388456697 0
+0.6601404217053721 0.8758403839932694 0
+0.6540347413204287 0.9186650013991161 0
+0.6303740833581584 0.8920180967289373 0
+0.5839273372951026 0.3331700692928896 0
+0.6126029952668568 0.3305331210461342 0
+0.5984934752460944 0.3562347419971683 0
+0.5699144126653233 0.3878893850302759 0
+0.5474600281734479 0.4087280150966784 0
+0.5473634327824649 0.3797103203103261 0
+0.258165892239402 0.9015409057690813 0
+0.2461027536535756 0.8628015635240094 0
+0.2813737881591543 0.8775775770951335 0
+0.4425747589163068 0.1411085932288532 0
+0.4627192649011994 0.1459507193553403 0
+0.5265431826029002 0.3744863659463066 0
+0.5489975670947755 0.353647735879904 0
+0.498157540780472 0.6174499906573783 0
+0.4797907230378924 0.6391978455970397 0
+0.4658087718301783 0.6050460674873086 0
+0.5182151424212813 0.5880703172005983 0
+0.5321970936289955 0.6222220953103295 0
+0.4734567950714383 0.1213562554472434 0
+0.6047275670147376 0.8639801947137624 0
+0.5986218866297942 0.9068048121196092 0
+0.09652254896709356 0.4686761840922991 0
+0.08106892994325013 0.4643418312416053 0
+0.09183708463568785 0.4487782899042128 0
+0.01141141425569694 0.3024021170846587 0
+0.06978918314920497 0.475394801617208 0
+0.06510371881779928 0.4554969074291217 0
+0.273897110799839 0.06692643292904032 0
+0.2856446890466223 0.05604042776288611 0
+0.4343172326020536 0.04239777954127632 0
+0.4141817114205848 0.03903291504637142 0
+0.6408013823575465 0.06968810660991764 0
+0.6269243012467642 0.055537513391717 0
+0.6579270736281496 0.04850493937906054 0
+0.2306450670428797 0.1950097148362271 0
+0.2417757995338747 0.1841406112664055 0
+0.2455605417231282 0.1988032186152274 0
+0.1336963160951893 0.8108412638032546 0
+0.1000399185700517 0.8058513624489805 0
+0.06847844146176645 0.2534256368773029 0
+0.08119405013090367 0.24651838913294 0
+0.07710132250059715 0.2607089420099865 0
+0.9572548273849485 0.7177480302166181 0
+0.9687064826297096 0.745360482069193 0
+0.9259613100146582 0.7488227980008513 0
+0.1411789416402219 0.26116843349115 0
+0.1550638357758596 0.2569778600023749 0
+0.153083807399861 0.2722342585889913 0
+0.6103329156539827 0.05455809910351915 0
+0.6274586069245859 0.03337493187266204 0
+0.6805879943806759 0.0313277662986306 0
+0.7071781887433513 0.02326287792069242 0
+0.6983943491016074 0.05459064421932301 0
+0.9681677849669124 0.822098364992623 0
+0.936874267596622 0.817458847062476 0
+0.9687064826297096 0.781074767783573 0
+0.4794873825615851 0.5494022001372123 0
+0.4607297547949528 0.5695370713516688 0
+0.45604154778378 0.5356410589412339 0
+0.5366343611062983 0.2334411604408455 0
+0.5397280144036913 0.2542336636822309 0
+0.6576036422862892 0.1410169765732759 0
+0.6636226472409519 0.1583748480866349 0
+0.6411780264957776 0.1612181339636277 0
+0.1595231196357742 0.2437710017150182 0
+0.1510757642901034 0.2324637864845698 0
+0.1674399139096571 0.2303227532950544 0
+0.482001020490024 0.6674767028933911 0
+0.4496522515397304 0.6550727797233216 0
+0.5450785129456452 0.06985824489231095 0
+0.5193692074312017 0.06584187569192163 0
+0.05694773199992549 0.4036257820313349 0
+0.05510420313944215 0.4223364453993259 0
+0.03990466847491746 0.41595791618733 0
+0.1463142106702765 0.5281845176609107 0
+0.1205049541134463 0.528528585445407 0
+0.1396611663555722 0.5121908684065173 0
+0.2579095113197291 0.5915620514767757 0
+0.2304287220074925 0.5874281686088213 0
+0.2661552257967194 0.1190805921556415 0
+0.2796270708184376 0.1326915212590755 0
+0.2642997450869175 0.1331436424158789 0
+0.4374893248126972 0.4358636702962698 0
+0.4465717837857291 0.4098778204836847 0
+0.4631559854419497 0.4368019558855654 0
+0.2501925045252035 0.1334608275090093 0
+0.2636643495469218 0.1470717566124432 0
+0.1714279853954134 0.2548368268128594 0
+0.02728988293532931 0.8165446038287772 0
+0.01964326817908794 0.7861710834592248 0
+0.04693315111441725 0.8009826135040335 0
+0.1736787774618163 0.4398632087891257 0
+0.1951994834634925 0.4307859914244334 0
+0.1915011947315044 0.4528577384663478 0
+0.05657914709255105 0.2564062549425357 0
+0.6941982252962813 0.3037761916697445 0
+0.6724113112713954 0.2785435600641009 0
+0.6953404487474808 0.2734581983138231 0
+0.1049483637584092 0.3423090102131687 0
+0.08879262850204681 0.3386082369502759 0
+0.1058432994412348 0.3274573483290742 0
+0.5467962820043908 0.6508621373129764 0
+0.5668538836452002 0.6214824638561964 0
+0.8576824178267271 0.2659824498358812 0
+0.843486923915809 0.2301385946648844 0
+0.8705065165166097 0.2312549772244966 0
+0.1042433152563011 0.3553726130409617 0
+0.1105423962398207 0.3713244006362706 0
+0.09419677380274077 0.3694116864296794 0
+0.4195632534085745 0.5756515850282642 0
+0.4423629370523732 0.5912849262913302 0
+0.4246422704438001 0.6111605811639041 0
+0.5101384206954731 0.1026756930929365 0
+0.5304890190852327 0.1041163926584661 0
+0.515769279035313 0.1183879575437559 0
+0.1615710143617799 0.5373562258163627 0
+0.142414802119654 0.5536939428552524 0
+0.5317667279963417 0.9311761992915634 0
+0.5276838167247384 0.9729968352351954 0
+0.1261452315588708 0.2675032460483012 0
+0.1281252599348694 0.2522468474616849 0
+0.2247474539770082 0.2043817417712467 0
+0.2209627117877547 0.1897191344224248 0
+0.0281414844063743 0.936649895526391 0
+0.0281414844063743 0.9718513473313337 0
+0.3644515883466486 0.06480551710039309 0
+0.3464087996892554 0.05693456288511137 0
+0.3293947108138836 0.3825487002783047 0
+0.3215501205926521 0.3628116279036786 0
+0.3425473453216031 0.3595820577461546 0
+0.2752226803223802 0.6379887449292199 0
+0.2537906847199417 0.6554670343518423 0
+0.2795954624647338 0.2334552600028951 0
+0.2679289204345519 0.2446608892848183 0
+0.264313223917475 0.2242974797000962 0
+0.2160211294505275 0.3675777761905538 0
+0.2105640798981523 0.3476696052896223 0
+0.2324575571937362 0.3603564772909231 0
+0.3036924637747915 0.36584963564536 0
+0.316845098282511 0.3428829931132099 0
+0.3210285429578317 0.01377039232300276 0
+0.3375942073393645 0.009076851763840172 0
+0.3283945672474935 0.02284724408684293 0
+0.01563196580840566 0.3276368805270434 0
+0.01141141425569694 0.3166462927639315 0
+0.0270433800641026 0.3140549902408351 0
+0.2543777534367879 0.1067925167649333 0
+0.269705079168308 0.1063403956081298 0
+0.8635520646987833 0.8347188763014795 0
+0.9100818174697165 0.8342806772906675 0
+0.8898058171628913 0.8589206432823377 0
+0.6613923635789676 0.08364833412194043 0
+0.6303895911975823 0.09068090813459689 0
+0.5368653959648543 0.1569413100311521 0
+0.5341634835526796 0.1759235354499577 0
+0.5175551291458697 0.1681825988129637 0
+0.563118514475955 0.3400716389823242 0
+0.5772280344967173 0.3143700180312901 0
+0.4264920650799119 0.1890945149429206 0
+0.4240715783567179 0.168897196409414 0
+0.863749786972722 0.8839864336606932 0
+0.9102795397436553 0.8835482346498813 0
+0.5506699535763038 0.18454546823753 0
+0.5313596867573191 0.1957867570193416 0
+0.4960433782588335 0.5301078570637922 0
+0.5007315852700063 0.564003869474227 0
+0.2234316234538153 0.5012246304888766 0
+0.2295907855694894 0.4767115818465418 0
+0.2434108327659061 0.4974418969391308 0
+0.2408988915428233 0.1076017858314711 0
+0.2356541079939 0.1186909489133398 0
+0.1363925481546983 0.6476351918328119 0
+0.1159623265827382 0.6253913370683801 0
+0.1482859274638727 0.4941887471726694 0
+0.1224766709070425 0.4945328149571657 0
+0.2988607124565982 0.8537204479111939 0
+0.3109238510424246 0.8924597901562659 0
+0.6007505007158175 0.0161977587922321 0
+0.5880830432388509 0.04185393958071969 0
+0.8867890275891852 0.5452398964022274 0
+0.891555399507213 0.515338258457158 0
+0.6847125709018875 0.1644697421538371 0
+0.6682869551113759 0.1846708995441889 0
+0.5620886180071694 0.06810821230205996 0
+0.5418682658069172 0.0866540956173957 0
+0.4340880124668467 0.9654035231462637 0
+0.5281884594915585 0.1345145152517218 0
+0.5447968138983684 0.1422554518887157 0
+0.7996990383242599 0.9624447458839809 0
+0.8354133240382977 0.9624447458839809 0
+0.1212939861954891 0.34422172441976 0
+0.8630099159613123 0.07056282510848416 0
+0.8631108657801072 0.10014923812278 0
+0.8308145467890489 0.08093342146285473 0
+0.3067843672786408 0.01377039232300276 0
+0.4768257860052347 0.4535049330884678 0
+0.4859082449782667 0.4275190832758827 0
+0.7178279564852548 0.2733458598354518 0
+0.6960410424603689 0.2481132282298083 0
+0.2433792484097818 0.4029164694526432 0
+0.2585852765288619 0.3933744667372866 0
+0.2640499181925321 0.4160262879980753 0
+0.9275510448860513 0.6943567590945214 0
+0.9702962175011027 0.6908944431628633 0
+0.5088737109315107 0.02163981158809828 0
+0.2493027197257531 0.3596141000123222 0
+0.2438456701733779 0.3397059291113907 0
+0.1258970286894793 0.5709735445416644 0
+0.1411538323809827 0.5801452526971163 0
+0.2183677041824464 0.3851431561792296 0
+0.1964742268868624 0.3724562841779289 0
+0.552767862020904 0.1186343251986355 0
+0.2576243494091184 0.3758341161024559 0
+0.2782950191918688 0.3889439346478879 0
+0.2079086232357099 0.6630511475673331 0
+0.1786256676443887 0.6595862697180781 0
+0.2704535607437477 0.1796487078628669 0
+0.2899227869497759 0.183358405474268 0
+0.2761605004201514 0.191643812656807 0
+0.1672051247505152 0.2833525652788567 0
+0.1533202306148774 0.2875431387676319 0
+0.4823962944230842 0.2761485303150816 0
+0.5016757002133364 0.2840565260849633 0
+0.3428512479452334 0.02990036138229219 0
+0.3598824134756045 0.02290413118171582 0
+0.04799057337822103 0.4818102013934592 0
+0.06395578450367188 0.4906551252059427 0
+0.02728988293532931 0.847478080241759 0
+0.2916552340410707 0.04624916299189694 0
+0.2768201451144471 0.04511947681645998 0
+0.07078702800425302 0.8064176062042991 0
+0.06314041324801165 0.7760440858347466 0
+0.04322434511342729 0.6037925561042021 0
+0.01892089924905238 0.6065173006360229 0
+0.7309676407086599 0.3714333689016097 0
+0.7584804760314431 0.3515176968677052 0
+0.7534441578984843 0.3799631172651305 0
+0.317364635230235 0.2217250248178593 0
+0.2990326591394667 0.211594061572515 0
+0.3139617027169478 0.2054844735135524 0
+0.3544520243857788 0.09681504664192972 0
+0.3641197774504812 0.110486009761339 0
+0.3464087548154705 0.1135930279452066 0
+0.8632232208122884 0.5018964073868242 0
+0.9010004566302081 0.4906598266223136 0
+0.3536188438433661 0.220735958112343 0
+0.3440651341722828 0.201718926413676 0
+0.3653902992079329 0.2068394477671223 0
+0.01951570762364097 0.5479829403480989 0
+0.07029232833633972 0.3579414453414494 0
+0.07917794308264534 0.3681914638352144 0
+0.06157257859976382 0.3726730103422934 0
+0.01903056980721706 0.4311445487870378 0
+0.03374981385192181 0.4495480152310978 0
+0.01471924404470475 0.4460239844628147 0
+0.7801056003758017 0.1926757693673601 0
+0.7691197601160473 0.1597903626103063 0
+0.7951373764241658 0.1739492034833083 0
+0.3706583447834255 0.5141414549424308 0
+0.3523702687448569 0.4986170387830538 0
+0.3812227467143053 0.4973246432945772 0
+0.8471568117893999 0.02567350422427946 0
+0.8162233353763881 0.02567350422427946 0
+0.8439730567130788 0.7975984595127317 0
+0.8236970564062536 0.822238425504402 0
+0.06385577012080881 0.9718513473313337 0
+0.50481226685014 0.4654845411736351 0
+0.482060007313823 0.4747674137833179 0
+0.4264731860692016 0.4617355819017657 0
+0.02900222170917564 0.3374874089375167 0
+0.01337025590076999 0.3400787114606132 0
+0.2944532260757537 0.1289859500315245 0
+0.2925977453659518 0.1430490002917618 0
+0.2892076788002054 0.2204632316474975 0
+0.2928233753172823 0.2408266412322196 0
+0.8503652636430112 0.9408897567794464 0
+0.8720947967471746 0.9784450108954655 0
+0.2587524208765482 0.5315189680028649 0
+0.2645728946300375 0.5551606763060792 0
+0.2430721444037213 0.5455966538846799 0
+0.6661725509063476 0.4772460306179671 0
+0.7017579722949565 0.4823121273401764 0
+0.6667109132698936 0.01717717308042995 0
+0.2973297964874281 0.03143449834573817 0
+0.3061543404196033 0.0423554492921643 0
+0.1371114246207958 0.2897983143230523 0
+0.15123274197145 0.3009166210129177 0
+0.1897960324936134 0.4712146356136638 0
+0.2113167384952897 0.4621374182489715 0
+0.8953865556688525 0.2378361350391998 0
+0.8811910617579345 0.2019922798682031 0
+0.1068802290086826 0.5779366049828216 0
+0.108141198747354 0.5514852951409578 0
+0.01471924404470475 0.4644699399146895 0
+0.01471924404470475 0.4841473093272327 0
+0.8862441157546125 0.1157496480029601 0
+0.8540487465823492 0.1261202443573307 0
+0.6957518021863776 0.149665232163116 0
+0.7004161100568016 0.17596128362067 0
+0.6913972729761 0.5889711459307374 0
+0.7203834319734741 0.5921703597837282 0
+0.7019005843365462 0.6174129225007901 0
+0.464436351009665 0.489146996712464 0
+0.4924228318545704 0.5011266047976314 0
+0.7936651081253379 0.886918822345652 0
+0.7775851526836064 0.9082364699097338 0
+0.7575664698748098 0.870265800487424 0
+0.3308443143782711 0.1707495223423285 0
+0.3459190466695226 0.17232980368722 0
+0.340761857245598 0.1862421347235639 0
+0.2895756062302286 0.9581584596701027 0
+0.3207653928510673 0.9300591706439685 0
+0.3169040723363152 0.9719007109738658 0
+0.3827259070700003 0.2060015340961134 0
+0.373172197398917 0.1869845023974465 0
+0.2663355200808901 0.2005129827317895 0
+0.2858047462869182 0.2042226803431906 0
+0.1851328283250847 0.3066073746235791 0
+0.1900307204034442 0.3223613177099464 0
+0.1723394400438911 0.3144153885438645 0
+0.7122482332641086 0.5357920576411994 0
+0.6797410029686894 0.5586206012060608 0
+0.3109798536100703 0.6559224488059351 0
+0.298807485909809 0.6393306125629132 0
+0.3262683833573665 0.6331613122760656 0
+0.4541421479988472 0.3091254804056913 0
+0.4702221720478873 0.3231038599106132 0
+0.4436566219173363 0.3318962472160469 0
+0.13830161933721 0.9113872496425064 0
+0.1347732969073258 0.8734120690812927 0
+0.1661605451528368 0.8945087661113879 0
+0.3289904018810313 0.2001386450687846 0
+0.310658425790263 0.1900076818234403 0
+0.5633981024387871 0.9729968352351954 0
+0.387800236912673 0.5729587650638104 0
+0.4055209035212461 0.5530831101912365 0
+0.2724353125522335 0.09533353296449308 0
+0.2842127849121651 0.1076216083552013 0
+0.1976038847068611 0.300229966231059 0
+0.1799126043473079 0.2922840370649772 0
+0.7550832266071575 0.4057239367372807 0
+0.7825960619299407 0.3858082647033763 0
+0.4952620237778244 0.09817724499116975 0
+0.5099817638277442 0.08390568010587993 0
+0.2490030797394189 0.2914399828080346 0
+0.2666574694706626 0.2859984204737691 0
+0.1962918626582722 0.9096244194352794 0
+0.1927635402283879 0.8716492388740658 0
+0.1834017727546378 0.5743612182080711 0
+0.2038928467250928 0.5788575221150324 0
+0.2173792176973195 0.245083112280808 0
+0.2129022581980579 0.2578702000690882 0
+0.2007903986320925 0.2475383731561018 0
+0.3262855835637006 0.03459390194145479 0
+0.2905112100696764 0.6152276083993504 0
+0.2690124623887601 0.3551835679229235 0
+0.2165362691213215 0.537026007390891 0
+0.2223567428748108 0.5606677156941053 0
+0.3035537929961918 0.2544454106017625 0
+0.3131660093316634 0.2414533822463649 0
+0.1191960678374372 0.4648216682391122 0
+0.1084279131449994 0.4803852095765047 0
+0.8843126325012431 0.5780284400998581 0
+0.8513017686013511 0.5593633829192994 0
+0.8186930584255097 0.1793077015915608 0
+0.8077072181657554 0.146422294834507 0
+0.2881130730980004 0.5591987983384176 0
+0.2724327966251734 0.5732764842202325 0
+0.4183973713850108 0.5343124948048223 0
+0.3866343548891092 0.5316196748403683 0
+0.4806036132003622 0.2321652323349928 0
+0.4967893656932214 0.219280724863489 0
+0.02107858736634397 0.5004688463648923 0
+0.03579783141104873 0.4807489879445342 0
+0.5031411752134618 0.3044941180301792 0
+0.5241091772973999 0.288217551014885 0
+0.6839493425958538 0.6422705295649627 0
+0.712935501593228 0.6454697434179535 0
+0.3193488502918367 0.723913681707221 0
+0.3037096701387089 0.7041012050894222 0
+0.3360798465542394 0.7068160374878918 0
+0.05484147132743821 0.2759693662358105 0
+0.06708629174852017 0.2791711988301852 0
+0.05754204924449845 0.2875243753116463 0
+0.5875487375610293 0.06401652109977465 0
+0.3280950529091445 0.2353437941874023 0
+0.2301156704195686 0.2962152394888241 0
+0.2387238168679628 0.2784047930219377 0
+0.5064187869467101 0.6782888134190641 0
+0.476280315448548 0.6941637475453459 0
+0.4211650775168017 0.3862602757842432 0
+0.4049719136004009 0.3928561624558855 0
+0.4052318679607259 0.3701769033457395 0
+0.7888822368685452 0.8170330808194982 0
+0.8084612448542496 0.854153497608246 0
+0.6197383916803738 0.1541376788796682 0
+0.6230834989511129 0.1319775426214061 0
+0.2336977204661928 0.3248493678324563 0
+0.6430697969800592 0.1242506990484442 0
+0.6655144177252335 0.1214074131714514 0
+0.05429020409981138 0.5102781284359608 0
+0.07608881387079533 0.5038627286597095 0
+0.376223817962307 0.7465620568972491 0
+0.3783303139537341 0.7748696479349803 0
+0.3538255226987944 0.7549361051434218 0
+0.6966433390394636 0.7162726210243732 0
+0.7110700362218012 0.7455412222425708 0
+0.680039496895026 0.7518515514186335 0
+0.3753005806623676 0.2906821556043947 0
+0.3860355330502495 0.2737804401294268 0
+0.3967585845712772 0.2952366545003094 0
+0.8489536502438102 0.9167517583980992 0
+0.8856351229526871 0.9327520234095839 0
+0.1225768510863213 0.44347794256512 0
+0.1344822152642272 0.4551869680493257 0
+0.9052674159567318 0.5970418974007974 0
+0.8697801569688977 0.6111653839178696 0
+0.3706656712150765 0.5876229677873047 0
+0.3566233213277481 0.565054492950277 0
+0.3135755030667751 0.06229709354760352 0
+0.3167081148274725 0.07684745789154065 0
+0.7521730002110474 0.3177702902567824 0
+0.7746495174008717 0.3263000386203032 0
+0.3577818769196608 0.532912070328845 0
+0.6797158488951796 0.331464429664499 0
+0.7026449863712649 0.3263790679142211 0
+0.2968440098953657 0.09144279416888096 0
+0.281963819887885 0.08777843499109805 0
+0.4245008148727115 0.3407494421926112 0
+0.4080146621390662 0.3535079362937839 0
+0.4110904451346511 0.3306763618122978 0
+0.7442752321328002 0.5483230662222094 0
+0.7466433447838808 0.5203865406497332 0
+0.7662361698389277 0.4973402394420033 0
+0.7342091709702361 0.4848092308609934 0
+0.139631596240865 0.2361363732797128 0
+0.1475483905147479 0.222688124859749 0
+0.5074328744638401 0.3851858339657502 0
+0.5090670087761509 0.3591232495353281 0
+0.431388941581213 0.2190416285174153 0
+0.4464266844733893 0.2159893416860493 0
+0.4393200442729238 0.2381843995950055 0
+0.7742814480997533 0.9350506593557564 0
+0.7381828098492254 0.9183976374975285 0
+0.0742653661381473 0.4272241241484249 0
+0.05722230261313927 0.43955625830442 0
+0.1505409603725856 0.469232824777179 0
+0.1677254558211153 0.4868908782265305 0
+0.456889102241174 0.7141724203153974 0
+0.433009235844184 0.7266437549231374 0
+0.427982682594872 0.6958229716274129 0
+0.7913559060436433 0.4585915746487259 0
+0.7690185633319484 0.4366660069143949 0
+0.8065724733503088 0.4334946519098575 0
+0.07746741130357898 0.2719518517178366 0
+0.09018301997271619 0.2650446039734737 0
+0.3791400151106749 0.1097775090488462 0
+0.3710967455403666 0.126555490352123 0
+0.6614824978516314 0.2055511892440318 0
+0.6814652067474534 0.2194956801597853 0
+0.6535708258267729 0.234281075792426 0
+0.2663431937120275 0.930896956363218 0
+0.2310721592064487 0.916120942792094 0
+0.1749428863516047 0.7758393042420239 0
+0.2017490701236012 0.7930843792897576 0
+0.1811132689601191 0.8087039562912942 0
+0.5635864438075691 0.6728327565128498 0
+0.5289296537913644 0.6735723879669828 0
+0.6884485099784381 0.07713295101973472 0
+0.6780367188184739 0.09812575254441396 0
+0.7343611537815493 0.02326287792069242 0
+0.4755329779945149 0.18925134146725 0
+0.4578089587328164 0.2046065338742695 0
+0.2061100341385984 0.2845433391875922 0
+0.2113302581163752 0.298866676746194 0
+0.243551151725549 0.2645222377674712 0
+0.2246637424056987 0.2692974944482608 0
+0.4068001150258458 0.3150281188432011 0
+0.4175350674137277 0.2981264033682333 0
+0.6403925741906956 0.1994562951768296 0
+0.4405808389217515 0.354727821697533 0
+0.7338349880202483 0.7342962269835628 0
+0.7172311458758106 0.7698751573778231 0
+0.3356390813386938 0.7444419878338477 0
+0.3032689049231632 0.7417271554353781 0
+0.3814622977202375 0.3937222688750259 0
+0.295018427570931 0.1157254866001916 0
+0.3079891021184452 0.126082965632878 0
+0.05541050843284977 0.3478419595260491 0
+0.07301587291573128 0.34336041301897 0
+0.5405705964158208 0.897562819108585 0
+0.5119011713014746 0.8909081522813148 0
+0.5443059451720272 0.872112243277164 0
+0.1919872909346642 0.9662419733363008 0
+0.2044691641308977 0.9389804700294161 0
+0.2267675874828408 0.9727384966931153 0
+0.1562730052202297 0.9662419733363008 0
+0.08547702406616488 0.3841432514305233 0
+0.5843384904223012 0.08081237182485941 0
+0.2611272388619932 0.4897253768401006 0
+0.2549680767463191 0.5142384254824353 0
+0.1806456452524068 0.5319719349111687 0
+0.1767462367017842 0.5574813601055104 0
+0.02349346299236045 0.2599267974836026 0
+0.01124132048858121 0.2605287066458928 0
+0.07777381626674607 0.5409670437359213 0
+0.09013757163283845 0.5180103340403706 0
+0.1014881544326497 0.5354916458865644 0
+0.1814815679690118 0.3687455681641836 0
+0.1838281427009307 0.3863109481528594 0
+0.6492191105190224 0.3312296735852176 0
+0.6576658715940058 0.3538325498296943 0
+0.1018203293146081 0.2674345868500799 0
+0.1133028946871348 0.2728324420440119 0
+0.1020316741482247 0.2816853688752559 0
+0.08491216385552994 0.7598199281961673 0
+0.1094488940024362 0.7397742648049896 0
+0.2909036225250023 0.2667842218955668 0
+0.2781036561280035 0.2766896552723322 0
+0.2704111925848119 0.2637241029643826 0
+0.6299618270485563 0.332384431921491 0
+0.6520118043497301 0.3100163117562956 0
+0.3217430016227044 0.09309645372599733 0
+0.3317061149555361 0.08367306899134065 0
+0.915663687713296 0.6488410066297877 0
+0.9063245307776091 0.679840722752604 0
+0.8813957834886994 0.6611785573416251 0
+0.2624818731972753 0.9727384966931153 0
+0.8289335522125868 0.4177326475968004 0
+0.8065962095008921 0.3958070798624694 0
+0.2080749233404718 0.2717527553235546 0
+0.5675669907478835 0.735564715048021 0
+0.5907755766966353 0.7513875712915903 0
+0.5590241207077757 0.7657622594358156 0
+0.05963931304550647 0.2994403502128762 0
+0.04739449262442451 0.2962385176185015 0
+0.3810354191584783 0.6060900778976162 0
+0.3498585035735534 0.5981858057840828 0
+0.3894534986725078 0.7966729704891793 0
+0.4203610737603639 0.785776505548607 0
+0.409085963215625 0.8159538763489786 0
+0.1875409995849006 0.4961705580091542 0
+0.4459602147011545 0.4821619254069017 0
+0.4183598743014384 0.4811097016105169 0
+0.6409575725508689 0.380006722720107 0
+0.6296764359117606 0.3983170696753797 0
+0.6158879965787403 0.3719081407056856 0
+0.7602966954898789 0.9726059134717755 0
+0.2813784592481638 0.3108935708134896 0
+0.2738720192241051 0.3311916944266894 0
+0.7787960379412855 0.4779659070453647 0
+0.7912302117549302 0.5135432168341045 0
+0.3991918342111798 0.4867662087796675 0
+0.4186788628431326 0.5071925522848035 0
+0.6926116253246718 0.8694338843113366 0
+0.6689509673624014 0.8427869796411578 0
+0.692570564124704 0.1148920300692457 0
+0.1164586772505259 0.3201733394534041 0
+0.1003029419941635 0.3164725661905113 0
+0.7987951559031641 0.06938756059398442 0
+0.770242926733232 0.06224414407264033 0
+0.8021613678003219 0.04420359192721483 0
+0.4313221323538663 0.7557444016499648 0
+0.4024157127075644 0.7373949529619802 0
+0.1643271418640109 0.5797455091132651 0
+0.3112462565393834 0.2674109629097121 0
+0.8163499479596458 0.4747945520408272 0
+0.9122643157143926 0.9256940291095923 0
+0.7120832844058909 0.34852762720658 0
+0.7265656608069927 0.3208393892118255 0
+0.1610495170288924 0.3099478053593993 0
+0.1659474091072519 0.3257017484457665 0
+0.281449689787692 0.595600173509114 0
+0.6612581553317615 0.5838631639231227 0
+0.6903386672297952 0.403147220494418 0
+0.7074154606252124 0.4283237559553322 0
+0.6718228052793065 0.4315921871507153 0
+0.5978484872016869 0.9674213570673921 0
+0.6335627729157247 0.9674213570673921 0
+0.866746509581273 0.1685658881455054 0
+0.8916265487335159 0.1751470459602086 0
+0.2528919828885364 0.814014778264299 0
+0.2574636227923875 0.7834711233939609 0
+0.2738822894771791 0.8082945799797234 0
+0.4018429713232545 0.844335332257064 0
+0.4327505464111105 0.8334388673164919 0
+0.293418509887916 0.8248308793960326 0
+0.2979901497917671 0.7942872245256944 0
+0.3619328257171029 0.2332296525722948 0
+0.340607660681453 0.2281091312188485 0
+0.3364090347828813 0.2478374886473541 0
+0.5641715018668944 0.9123802902874125 0
+0.1880989339062929 0.403906562956908 0
+0.2087290947153789 0.4000886917628456 0
+0.1980072270028904 0.413973590553149 0
+0.1539217436214697 0.4478890991031867 0
+0.5903857593786692 0.6856562663813195 0
+0.5725191311656429 0.7083665170353259 0
+0.3744954442985082 0.0755484780627648 0
+0.3908451824679029 0.0675680258444385 0
+0.3885127851901842 0.08572757623973583 0
+0.2013703582507693 0.2213725201955498 0
+0.1933495917600228 0.2273596332068194 0
+0.1894525918794379 0.2139808680345476 0
+0.739866659300492 0.4308208594761492 0
+0.7213507973500033 0.4592658261324465 0
+0.3903139622922006 0.3277866129443739 0
+0.6097279499219014 0.6584394141773213 0
+0.6186606372799752 0.6939731746997976 0
+0.7876711062064561 0.01853008770293537 0
+0.1620273950478551 0.3663053814951487 0
+0.1746734792337868 0.3524507175202182 0
+0.7787098872311102 0.6449896529683953 0
+0.8109433149318688 0.6348558684448251 0
+0.7975264529885628 0.6637464288554469 0
+0.287149899410853 0.2890585394049533 0
+0.1099999590469775 0.8602570994876799 0
+0.1378588848626043 0.8433786159565615 0
+0.2337406389427142 0.4178620050362592 0
+0.228275997279044 0.3952101837754705 0
+0.3575670521978922 0.2876723392558416 0
+0.2216095209878312 0.311901866532291 0
+0.6192748190783925 0.7536657918697741 0
+0.6107319490382848 0.7838633362575687 0
+0.3442369780759563 0.26214904642471 0
+0.3464306941614439 0.2771815185171326 0
+0.3260901430960604 0.2701046237083304 0
+0.7995024334032013 0.2787093496428247 0
+0.7675865096779637 0.2640067321298933 0
+0.7987469015006889 0.2501634497633375 0
+0.3377455773301209 0.7727495788715789 0
+0.8800992940537306 0.01800739535149396 0
+0.8636560792345845 0.04368089957577342 0
+0.3779109214526247 0.7174614101704218 0
+0.5321612762417158 0.215301821196906 0
+0.5156548062180917 0.2066798884093337 0
+0.7916085137546366 0.3092867763589457 0
+0.7979159895750323 0.3430341829698684 0
+0.3337067462108724 0.05453554619689401 0
+0.3393732816386872 0.06982308984510133 0
+0.7039527144852272 0.2193833416814141 0
+0.2551289540375531 0.2545663226615837 0
+0.6714543109270261 0.3802414787993884 0
+0.2158296442725785 0.426968120230371 0
+0.5896072282964484 0.09708033695527978 0
+0.5641471087425884 0.1011720281575651 0
+0.5347711381185297 0.5687759741271783 0
+0.1731062749884422 0.4001958469431627 0
+0.4155312529085736 0.2271321026532119 0
+0.4226378931090391 0.2049370447442557 0
+0.2444487449144119 0.09486158928395935 0
+0.241068879575289 0.2454590240879068 0
+0.9194906110302614 0.1766617170666634 0
+0.9050460588535999 0.1432353253439657 0
+0.5407676751767834 0.7227412051795512 0
+0.8284799276630462 0.8921241670305557 0
+0.190577313693341 0.2381906269466622 0
+0.1786595473220097 0.2307989747856599 0
+0.2309328954033163 0.4346744059075437 0
+0.2492069424775161 0.449248569505114 0
+0.2312959478073804 0.4583546846992258 0
+0.48130686869786 0.7249845308410705 0
+0.2099956169514617 0.7064088278895128 0
+0.2361435518596292 0.7200595511671231 0
+0.2114207405660896 0.7300699983262082 0
+0.3809037581726111 0.4712417926202905 0
+0.2160260018594158 0.7747055244595118 0
+0.2221963844679302 0.8075701765087822 0
+0.8183930209549233 0.2358503387583156 0
+0.8312171196448059 0.201122866146931 0
+0.7912016880692287 0.6928921397538531 0
+0.8234351157699873 0.6827583552302829 0
+0.04721758059442951 0.3798351223339338 0
+0.03202305355123802 0.3873250944531575 0
+0.03749243681026674 0.3699129639677523 0
+0.4810975725260362 0.390319411813876 0
+0.4985737463527856 0.4056825282248545 0
+0.5748151864910559 0.5789197713217318 0
+0.6058540390486051 0.5863032684590714 0
+0.5832935478273541 0.6002259189908892 0
+0.8162242536709328 0.5297461942262058 0
+0.8287841217732905 0.5103718618295672 0
+0.1263565763924873 0.2817540280734772 0
+0.3535520384412838 0.1561891517001139 0
+0.3634695813086107 0.1716817640813492 0
+0.4943984185193852 0.1766505050130946 0
+0.4959877762088247 0.1997656606859246 0
+0.7684429043831623 0.5561821310738209 0
+0.7340477928633901 0.5715876480652872 0
+0.5872123386069861 0.3745450889524409 0
+0.5873089339979691 0.4035627837387932 0
+0.623488781518329 0.5592548699941799 0
+0.6319671428546272 0.5805610176633373 0
+0.6529060464916712 0.2918090191390039 0
+0.6540482699428706 0.2614910257830825 0
+0.3526183580507499 0.9719007109738658 0
+0.8932831406614548 0.7066943098063589 0
+0.3989718282738963 0.6237277271969064 0
+0.421771511917695 0.6393610684599724 0
+0.4555909584356431 0.01655483919727691 0
+0.0807470684811788 0.8608233432429986 0
+0.08383265643645732 0.8307898901182673 0
+0.4239818093698265 0.6676399257563237 0
+0.4001019429728366 0.6801112603640637 0
+0.05610319534073512 0.3900851408276987 0
+0.6106433358399541 0.2147769315822212 0
+0.5960081582842949 0.1868161867984188 0
+0.6189529393752917 0.1923758400928701 0
+0.8413439898756483 0.4909975294329285 0
+0.9724487431047629 0.2727745969648725 0
+0.9724487431047629 0.237060311250691 0
+0.7070469662729322 0.3769730476040053 0
+0.02339349875729709 0.7021559640142609 0
+0.02339349875729709 0.7293389290524416 0
+0.3217127022127317 0.1480903101850977 0
+0.3215475305142366 0.1606806426772481 0
+0.3072587289247727 0.1519337615563612 0
+0.4642557621958738 0.2867899676068192 0
+0.4659443584895598 0.2626054048216433 0
+0.6703266812008717 0.8112610183974889 0
+0.6378554775815719 0.8176675180794215 0
+0.4376902120653229 0.2955823549122529 0
+0.6232936758252883 0.5353175024897485 0
+0.6202154847320986 0.5074228622026777 0
+0.01337025590076999 0.3552737988133198 0
+0.5898180182103151 0.9404181923025875 0
+0.2068893368215973 0.2123427405337005 0
+0.2107863367021822 0.2257215057059723 0
+0.9496040585285972 0.2251489526987031 0
+0.9771553154238344 0.2023743557332416 0
+0.2924325736674567 0.1556393327839122 0
+0.1033455001594976 0.6048132428143642 0
+0.08558967021737229 0.5853249934136577 0
+0.614829647692093 0.8074938295638852 0
+0.5863304053103358 0.8052156089857013 0
+0.1284199821159953 0.3688811618735296 0
+0.1183734406624349 0.3829202352622473 0
+0.7864770972296858 0.2211477212453842 0
+0.4949679988915499 0.050099222606774 0
+0.504492810513553 0.06134342759015488 0
+0.4855805552880923 0.06816302702073231 0
+0.4887691504592593 0.3174774827353272 0
+0.4782836243777483 0.3402482495456828 0
+0.5978927362027493 0.6288659609935361 0
+0.5523392416455257 0.2225480290508534 0
+0.3444081684339191 0.08607208567955801 0
+0.3621191910689299 0.08296506749569041 0
+0.4657400614245272 0.2237493049518596 0
+0.03388993490028946 0.2776899780045287 0
+0.03406002866740519 0.2936934725974975 0
+0.1576200323534579 0.4258173520612724 0
+0.3986440048486921 0.1995870538032449 0
+0.3908621066577079 0.2194419991729208 0
+0.4276486816107543 0.2757908905693612 0
+0.6257573966350364 0.1714955503930272 0
+0.6153956890975645 0.3093197592172123 0
+0.6436234128620377 0.610911562388014 0
+0.2966091925488633 0.4553895846397975 0
+0.3145211543922108 0.4538314053000652 0
+0.3081974450475801 0.476660359630996 0
+0.5971805720192663 0.5410597532854824 0
+0.7604594809215673 0.2069888803723821 0
+0.8976280694218186 0.7662077672351084 0
+0.8861764141770574 0.7385953153825336 0
+0.2424303084973415 0.1267742398337131 0
+0.2272565164260423 0.1259324754346079 0
+0.2674561141440279 0.08649722224402653 0
+0.1904257465865045 0.7383195011445426 0
+0.216573681494672 0.7519702244221529 0
+0.3567495858482648 0.2549143834561562 0
+0.5375430578615523 0.7848871455276083 0
+0.5607516438103042 0.8007100017711776 0
+0.4134137503067926 0.06471650235470418 0
+0.4332853010359505 0.06108774545792034 0
+0.4247340740887369 0.07411836712462569 0
+0.280993718691004 0.1590589360998203 0
+0.2956547022498249 0.1679436973644197 0
+0.3831318411101191 0.6965079275398762 0
+0.3791309678850736 0.6683248816687871 0
+0.369760769010178 0.2475412103496507 0
+0.3425854682425927 0.4277925902965116 0
+0.355341208314958 0.4106621204655991 0
+0.8309806110023835 0.7705491466662225 0
+0.8708356192949132 0.7830295974633 0
+0.5163407011794571 0.8059686511093043 0
+0.5146131780769285 0.7710209087739424 0
+0.8959523982256429 0.06289671623569865 0
+0.6664935438378716 0.6685418364889628 0
+0.6554586265811897 0.6404850155717994 0
+0.8449427404829937 0.3988989369051176 0
+0.8449190043324104 0.4365865089525057 0
+0.1043812038307348 0.2447757716320066 0
+0.1086493498843133 0.2347490744902507 0
+0.1173596959070967 0.2485549628770802 0
+0.2591186922037571 0.6792450649116051 0
+0.2293904207611859 0.6726203501706647 0
+0.6134539338536229 0.8390197908075542 0
+0.3229685727711863 0.8397130924571651 0
+0.9726428509370996 0.02747347012780864 0
+0.9374413991317416 0.02747347012780864 0
+0.910620515132514 0.7932570800816177 0
+0.1014542405116263 0.2561916771422298 0
+0.0927438944888429 0.2423857887554003 0
+0.6346382347668967 0.4163686485333364 0
+0.6095686587947681 0.408270066518915 0
+0.05272732435710838 0.5368012294197857 0
+0.06407790715691963 0.5542825412659795 0
+0.3186374983065767 0.1343980772237401 0
+0.3329262998960406 0.143144958344627 0
+0.2942672744006085 0.3043973976973372 0
+0.3057134610579494 0.2950886324959002 0
+0.2149123081629994 0.3275008050898263 0
+0.7086257075179978 0.1986824230919234 0
+0.7232015432309133 0.2272999711619464 0
+0.9344382752232152 0.971387016595474 0
+0.9701525609376496 0.971387016595474 0
+0.2356195893727588 0.173884996102646 0
+0.2505350640530074 0.1776784998816463 0
+0.1861003541940794 0.2509777147349423 0
+0.1816410703341649 0.264184573022299 0
+0.435806700200094 0.3723020685901203 0
+0.4355467458397691 0.3949813277002662 0
+0.1317635430462147 0.4195082563332357 0
+0.120585197324432 0.4279166943329347 0
+0.1144857418575353 0.413581708290837 0
+0.1045899832133207 0.6777758572352313 0
+0.08655935603798076 0.6890570294904339 0
+0.08925796703932855 0.6646389920084348 0
+0.06886564539765357 0.5718163233099375 0
+0.06533091654846855 0.5986929611414801 0
+0.4158879191699533 0.2597858127258565 0
+0.4360430638215485 0.2572417642698762 0
+0.9724080325798383 0.4064528783835578 0
+0.9724080325798383 0.3707385926693764 0
+0.2798391370850226 0.3424422763438406 0
+0.2881607667683879 0.3586622924339743 0
+0.8227689055773618 0.2954434939923899 0
+0.8446587973102255 0.2937977319463013 0
+0.836764877661661 0.3243751586624223 0
+0.8716783899110262 0.2949141145059135 0
+0.4988655951247549 0.7474663034016842 0
+0.4776632384426596 0.7685478089833802 0
+0.8300506913589909 0.5480064316652358 0
+0.7924967813406305 0.551177786669773 0
+0.3226476526821953 0.1063722835136712 0
+0.3076496525541317 0.09954667241387125 0
+0.7988961057219591 0.09897397360828022 0
+0.2485813453419924 0.08331174486020226 0
+0.7245824097758411 0.9726059134717755 0
+0.3294407087293697 0.6683783546945903 0
+0.3019798112818122 0.6745476549814379 0
+0.4796361745808219 0.04170006705678882 0
+0.4985484298062826 0.03488046762621137 0
+0.1584696539555376 0.8239962333968673 0
+0.1852758377275341 0.8412413084446011 0
+0.3808051891706782 0.1708438504103403 0
+0.3460390058411843 0.1420505911853002 0
+0.3635895404802724 0.1414025515794295 0
+0.5122435469160707 0.4223855054277569 0
+0.5182568083321289 0.7274576306316327 0
+0.2999420208952602 0.3169236639044365 0
+0.3584655510270982 0.3631973816578343 0
+0.04469899231452631 0.3291532526037583 0
+0.04243728240689065 0.341595083537328 0
+0.6324656232247157 0.7218864885521158 0
+0.6524219955663653 0.7543622535180942 0
+0.3256536565724568 0.4387466588516809 0
+0.3372419090711735 0.4600174338428794 0
+0.4935418866207827 0.01324065603811309 0
+0.6104032931686361 0.0984077517075588 0
+0.3536303655953671 0.8822529963477843 0
+0.3634719074040098 0.9198523768354869 0
+0.3382523171485112 0.906202041460029 0
+0.6668486927487028 0.7836308547362918 0
+0.6979441825295323 0.8087503162980281 0
+0.3805717294561839 0.3452552445541792 0
+0.7480898843108623 0.6472461748663989 0
+0.7615067462541683 0.6183556144557771 0
+0.8507890469986437 0.4663190975980842 0
+0.1276738252729198 0.6708246752509333 0
+0.1249752142715721 0.6952427127329324 0
+0.5561229756252272 0.8493008989837023 0
+0.5274535505108809 0.8426462321564321 0
+0.259542146675335 0.176192810192345 0
+0.2733044332049595 0.1679074030098059 0
+0.1549383962024417 0.3356223480562422 0
+0.1386091705051137 0.3405843262215751 0
+0.1383282603949252 0.3261961434266341 0
+0.3839329979100342 0.238447888944355 0
+0.3787497580411961 0.2601326198282163 0
+0.4173128056143336 0.08809732348422053 0
+0.4371843563434915 0.08446856658743671 0
+0.1052990498976419 0.4375513945227213 0
+0.0713027300052598 0.3964636700396946 0
+0.4092272761056721 0.9133551890078848 0
+0.4021787551848028 0.8788618274739097 0
+0.4325560754396094 0.8963136847585522 0
+0.3556545409635781 0.4633664572648476 0
+0.9726428509370996 0.06318775584202331 0
+0.7434352958893093 0.2702767608804088 0
+0.7427347021764213 0.2956217309644236 0
+0.2196451525016715 0.5192766141407441 0
+0.2058251053052549 0.4985462990481551 0
+0.01742400943331971 0.677196876509091 0
+0.0408175081906168 0.6899810064994033 0
+0.1587954396128629 0.2061340758582343 0
+0.1489425582350631 0.2134414706866384 0
+0.04681752707805045 0.5238932678598391 0
+0.03468449771092701 0.5106856644060724 0
+0.5344361538051983 0.4285540870223769 0
+0.5217706524306793 0.4503906420734051 0
+0.5829282236242592 0.4422868383341458 0
+0.5699043492560096 0.4621129102598443 0
+0.5569871336880566 0.4367331517423266 0
+0.4375654114752695 0.5286559876356716 0
+0.4563230392419018 0.5085211164212151 0
+0.3786097781404661 0.1406940508669367 0
+0.1637455652802844 0.4109262720554246 0
+0.1594747740749222 0.3933306572513759 0
+0.08630515536336839 0.6487224568010754 0
+0.06827452818802848 0.6600036290562783 0
+0.2852488150194095 0.6916452992007671 0
+0.2608485510606537 0.7087986150195895 0
+0.3839209603598525 0.01382727941787565 0
+0.367711476538557 0.01382727941787565 0
+0.220950059885738 0.1364541624797774 0
+0.7426797639867971 0.2417308610009216 0
+0.04303676693638503 0.7427745935695271 0
+0.06480851754390334 0.7265504359309478 0
+0.06105828696569418 0.7543849354959018 0
+0.7473527570195677 0.2210299424114309 0
+0.7409812601656836 0.1925579905334068 0
+0.9254842935598516 0.2342041729495294 0
+0.9301908658789231 0.19951821743208 0
+0.5097453910179459 0.8289587370718567 0
+0.4868155112333221 0.8150925003181908 0
+0.07391080859855684 0.3285087511348755 0
+0.2417949129573458 0.1407023540302774 0
+0.73013864257017 0.6721037819305717 0
+0.5136670345629915 0.5157282741346461 0
+0.4509545968969835 0.7750253075097642 0
+0.9350126724361056 0.5895397449039932 0
+0.9204801969037602 0.6226766887220045 0
+0.6246376819246622 0.0161977587922321 0
+0.9702962175011027 0.6551801574484833 0
+0.7459306291501786 0.06697693429039737 0
+0.7359847900270093 0.08951924109080908 0
+0.7150387043411136 0.06906806264179653 0
+0.292865789078529 0.3785909272244429 0
+0.2828432588461802 0.4632346487532784 0
+0.289166968190811 0.4404056944223476 0
+0.4612134064690215 0.3959196132895617 0
+0.4700725345800761 0.3754229190304575 0
+0.4748466733017335 0.3578486721378703 0
+0.4549625072447189 0.363448873613556 0
+0.3163903410903121 0.174592973713592 0
+0.06388983996769654 0.3228841120067127 0
+0.07966659555401207 0.3181319359380187 0
+0.1323934059884478 0.242220150319929 0
+0.1606702780447911 0.7289035134006273 0
+0.1658232189733734 0.750803739496572 0
+0.413685236376808 0.1007664019259989 0
+0.4012349541220533 0.09041620246318791 0
+0.1970802827974373 0.1703453381326526 0
+0.1888423237335807 0.1794345252674275 0
+0.925568918313904 0.4103866261885922 0
+0.8952982612760432 0.4055821296829257 0
+0.9145454081218158 0.379529831691131 0
+0.5749484430683249 0.4854691560589117 0
+0.5490073531321225 0.4799154694670925 0
+0.7720570730474035 0.7718740854172346 0
+0.7560286780394323 0.7424011482833568 0
+0.788089653412578 0.7556450715817764 0
+0.1796761811322915 0.2769751568863367 0
+0.1943485499309576 0.2731160448084196 0
+0.03312161796822401 0.5372087653898974 0
+0.3316937056510747 0.3082731140332277 0
+0.3237667955740383 0.3251362380799063 0
+0.3394202172179962 0.2956279165394621 0
+0.0397137378274991 0.3561761158598075 0
+0.3997178854923429 0.01318997470237201 0
+0.8106141996356011 0.7485110374221716 0
+0.79458580462763 0.7190381002882938 0
+0.5356695139558462 0.5239906208334834 0
+0.532048967551583 0.4950093685673226 0
+0.497928360564746 0.8517700813653185 0
+0.0531746345868567 0.2661465440221221 0
+0.04536806784794782 0.2549366092103084 0
+0.1989297509727611 0.5343476759501695 0
+0.01964326817908794 0.7571734286173956 0
+0.7498603501008301 0.1091244893447882 0
+0.7189684252917651 0.1112156176961873 0
+0.07515443329594913 0.8900874995784651 0
+0.04898713068542894 0.8606202902090525 0
+0.5568052458353874 0.5695312876002114 0
+0.5793657370566383 0.5556086370683935 0
+0.2854480900438495 0.02529282455259991 0
+0.2999471964223821 0.02139911085286725 0
+0.8374767622174355 0.73394217537274 0
+0.7375342981491212 0.8426643164412837 0
+0.7214543427073897 0.8639819640053654 0
+0.4106343764072725 0.1971849890787172 0
+0.7126437970503604 0.897035368357477 0
+0.5978902159453905 0.2803098444733753 0
+0.5792631359503855 0.2952036619418573 0
+0.579116494579911 0.2680450580733771 0
+0.09980315203669894 0.4983873308103526 0
+0.1687567875375678 0.1959195598233079 0
+0.1689539064886912 0.2088010220296797 0
+0.4234394140376021 0.1114297585490173 0
+0.4073615625453219 0.1137486375279847 0
+0.402498176819565 0.1837445240019099 0
+0.4613626158080951 0.04501425021595263 0
+0.460330684241992 0.06370421613259665 0
+0.4456375563839979 0.05179964431119784 0
+0.5648493424641123 0.8243404950774941 0
+0.5817017371252586 0.8538065061982261 0
+0.9751127266915669 0.5933015538263204 0
+0.2949026608350622 0.007628718529864497 0
+0.02451921078430761 0.3636660879790313 0
+0.1374983901858247 0.2171140574817813 0
+0.3527892946919789 0.009076851763840172 0
+0.6412290675174437 0.01717717308042995 0
+0.1379041220030056 0.3536479290493681 0
+0.1457351664256198 0.3652437636753448 0
+0.7241529361197121 0.8212757817232594 0
+0.7602650632871322 0.827559618205318 0
+0.7755008748391361 0.7956445461014739 0
+0.7434398994659904 0.7824006228030544 0
+0.3302932321656979 0.04481148483007303 0
+0.315836551467958 0.03775836753462376 0
+0.8204760613439126 0.6041255095873519 0
+0.8392926271013652 0.6228822854744035 0
+0.1984758804197907 0.334722103989457 0
+0.3621389134694922 0.3949954389267253 0
+0.3435942303883003 0.3949858116596545 0
+0.9147997483185268 0.2634668703058229 0
+0.2558140785172124 0.1997422321015339 0
+0.2446833460262174 0.2106113356713554 0
+0.1197385129206007 0.2295042909983247 0
+0.2487209044621515 0.07154162037367365 0
+0.2580671659285356 0.08228219573089296 0
+0.5772779505425121 0.2469193044498439 0
+0.5586508705475071 0.261813121918326 0
+0.5922707328531052 0.4216143625967499 0
+0.6051879484210582 0.4469941211142676 0
+0.9769407424855484 0.4392471362817135 0
+0.9493487750653867 0.4171285860949532 0
+0.2177795513464698 0.1465489432802561 0
+0.2308622083902155 0.1441105471554598 0
+0.1411598277240775 0.9426811948468462 0
+0.1097725794785665 0.921584497816751 0
+0.3478523791651365 0.8188369326157773 0
+0.3532945817338188 0.8477265011309386 0
+0.1899116034936106 0.1903394304148354 0
+0.1778459746533661 0.1876816008473454 0
+0.6162899312395056 0.2911124665999205 0
+0.6161432898690311 0.2639538627314403 0
+0.44753854162276 0.0949669257840882 0
+0.4584044524368776 0.1086257907687027 0
+0.4406289986832057 0.112106387931646 0
+0.8542224483619768 0.1467507235901352 0
+0.8310891983874715 0.131150313709955 0
+0.02819613942937958 0.4217091006077378 0
+0.03003966828986292 0.4029984372397469 0
+0.08632156072535525 0.3976838926341595 0
+0.1019016254610065 0.4036768101577621 0
+0.08772733140010139 0.4159972287669334 0
+0.1130799711827891 0.3952683721580631 0
+0.1309575570589637 0.3928251333953221 0
+0.2764688269726353 0.5238024479038347 0
+0.04594255581909412 0.4506092286800227 0
+0.3870535575783728 0.1548903983623795 0
+0.3967561736686792 0.1701931366784767 0
+0.1448407110348107 0.3122029809148197 0
+0.1567777792129496 0.6651020473305131 0
+0.04037784402112192 0.3166000352618392 0
+0.05381290471883693 0.3207077098616505 0
+0.4461785111864468 0.8760083449626543 0
+0.4532270321073161 0.9105017064966293 0
+0.04363039208283499 0.2744997205035832 0
+0.009165569622162523 0.4181850698394547 0
+0.5964154527592189 0.4923944913163573 0
+0.5755184566353317 0.5101970505236054 0
+0.3059091387561776 0.3281742458215877 0
+0.2699277390429063 0.4755736936337622 0
+0.2814849830233194 0.4923702221770666 0
+0.3781646606323732 0.6342905651936843 0
+0.8602474105568538 0.6418957427753428 0
+0.05956869167429214 0.3103308946647937 0
+0.8836249820354743 0.4270958612206049 0
+0.8726014718433863 0.3962390667231437 0
+0.1662283192174404 0.3400899312407075 0
+0.1856824921385971 0.3425301179097424 0
+0.5112026275433228 0.3216385076652488 0
+0.3056651939892134 0.4091694503723478 0
+0.2910944241025532 0.4195224577957927 0
+0.2938267161982724 0.3961312778592737 0
+0.3672709104027095 0.650840681506031 0
+0.3493345012872915 0.6332030322067408 0
+0.3777889352778435 0.3619242116061349 0
+0.3697153197935799 0.3780459600690813 0
+0.914108178051358 0.117264319109415 0
+0.9258436748702419 0.0956184748746676 0
+0.9446456179692293 0.1231041522156732 0
+0.3225970056593494 0.3982153818171785 0
+0.3198647135636301 0.4216065617536975 0
+0.1837545286327567 0.5142225416610218 0
+0.293020323603733 0.3346704189377401 0
+0.1525432551608447 0.3815386143193101 0
+0.2711922345420179 0.009101022476580132 0
+0.2586750862122488 0.009101022476580132 0
+0.1991906554720048 0.1950430549290977 0
+0.1881943063917902 0.2032901305090157 0
+0.2580731770435311 0.0213531650456183 0
+0.2517015225623256 0.05964232593666576 0
+0.7093400924665074 0.9238495578034995 0
+0.706725266918822 0.9514277311468813 0
+0.681186254119957 0.9300654620068298 0
+0.5393216886841121 0.54546483987384 0
+0.3785141719893172 0.8613768365063965 0
+0.6196454711650918 0.4826949677379841 0
+0.665171331842098 0.4545513907005022 0
+0.6480945384466807 0.429374855239588 0
+0.6518078137679479 0.6946696363481176 0
+0.03323392017490598 0.2567365399826571 0
+0.4166319075279782 0.9437740206285277 0
+0.3862545872731716 0.9263221633438852 0
+0.01892089924905238 0.6304044818448593 0
+0.2580029600979776 0.05184166110820816 0
+0.2645081625843467 0.06271140641590675 0
+0.05158175750508654 0.6332439575097817 0
+0.05008486768935387 0.6545545064215762 0
+0.03634490868237209 0.6437113700824388 0
+0.08159866995222378 0.9169966236375393 0
+0.04983873215647393 0.9167935706035932 0
+0.6261676141040553 0.6371828693120141 0
+0.2654583243839792 0.2123210997879174 0
+0.7586734513646028 0.01853008770293537 0
+0.1439885314399379 0.4189521623694856 0
+0.3101619890216006 0.05257303218078254 0
+0.3232577141151298 0.057700011790063 0
+0.02169724775009963 0.8767422365772255 0
+0.02169724775009963 0.9097407714673167 0
+0.05994836993314603 0.6173012262079223 0
+0.07368832894012781 0.6281443625470596 0
+0.3872243838937018 0.03875192578358046 0
+0.388236007020724 0.05361911019943855 0
+0.05303767936531403 0.6704710416289354 0
+0.05900716868929141 0.6954301291341054 0
+0.4803663380109926 0.1042167932996856 0
+0.5232089487498883 0.7002594326189376 0
+0.9266364102487239 0.3539772383898251 0
+0.934812803980534 0.3225243600053133 0
+0.9529924588914868 0.3528814498122856 0
+0.7492968410473363 0.04179296562362778 0
+0.3429638019350293 0.1283583582239426 0
+0.3569399463648616 0.7056750314751452 0
+0.01114895488353763 0.3690106469212646 0
+0.01114895488353763 0.3852201307426635 0
+0.5722554406295326 0.2249523232912814 0
+0.5927210646619366 0.2311842594463325 0
+0.6964285714292908 0.9788218176751058 0
+0.850908253621167 0.672895458898159 0
+0.4738645172083699 0.01324065603811309 0
+0.8437869613863954 0.1735959574981297 0
+0.2095299617606926 0.1511090763140153 0
+0.2022225668502211 0.1609619577269223 0
+0.3332960488703268 0.1146873951045334 0
+0.3192026998017541 0.1211376137924073 0
+0.6186442521008422 0.4600003278205192 0
+0.6424442840737219 0.4750286987068397 0
+0.3483087998669852 0.548662709634657 0
+0.3323327897613014 0.5311844897367195 0
+0.4022533479124001 0.06379820837640957 0
+0.4108045748596137 0.05076758670970422 0
+0.08016798922063922 0.2835068607936724 0
+0.04163123005658181 0.4654886643557996 0
+0.4528638777952755 0.8499514547526603 0
+0.460106869687646 0.8215699988445748 0
+0.9301016282196141 0.4431808840867479 0
+0.2172791550204249 0.2333506958274217 0
+0.2293910145863903 0.2436825227404081 0
+0.0920296796471515 0.9764392215105454 0
+0.1277439653615861 0.9764392215105454 0
+0.6802985297826121 0.696455150341281 0
+0.7113290691093873 0.6901448211652184 0
+0.4087465452272596 0.167791071953949 0
+0.3906015204546729 0.02701725412024766 0
+0.2154071552329694 0.8563569617684926 0
+0.9769407424855484 0.4749614219959004 0
+0.3013616419262286 0.1799388021583598 0
+0.01742400943331971 0.6517150307566539 0
+0.6340655610470486 0.247546534867329 0
+0.6156658457529335 0.2367439127407838 0
+0.3848852159526586 0.09839665468151421 0
+0.391862184042544 0.1144661352722983 0
+0.2700823046225912 0.1556030384292984 0
+0.2559750640608773 0.1559202235224288 0
+0.3367291944463628 0.7970336100615782 0
+0.3670552034089952 0.8050470187353518 0
+0.4002077619501057 0.2646871187241311 0
+0.9664550605751727 0.1438035696536435 0
+0.9771553154238344 0.1666600700190601 0
+0.9436103759990071 0.1676064968158371 0
+0.2977486609548565 0.1047186239565549 0
+0.1285114853374828 0.3171649590801525 0
+0.7445511042238362 0.6000294246353397 0
+0.7751711071440841 0.597772902737336 0
+0.8275742962710488 0.5807949753628665 0
+0.4086021441608999 0.2461379924246461 0
+0.08445687833909127 0.9482905688418792 0
+0.07433918486328353 0.7085669943609018 0
+0.2132366307195253 0.6868291781270959 0
+0.02031452450570015 0.3930762788735654 0
+0.009165569622162523 0.4008934735292528 0
+0.9805844263116484 0.3392857142848645 0
+0.9751127266915669 0.6290158395407002 0
+0.4030213090261923 0.03811462106807682 0
+0.3503008085399919 0.6672373486818436 0
+0.1242690877490598 0.295127510318763 0
+0.4802096811432637 0.08544678031262902 0
+0.4510808067137247 0.2541894774385102 0
+0.2435382455597132 0.2225877155835341 0
+0.2537917823537973 0.2235267290698406 0
+0.9178272033966319 0.4702703009365172 0
+0.8894950247017075 0.4568284498661834 0
+0.3311742341693887 0.5633269123581515 0
+0.1378890759730412 0.4046171763273879 0
+0.2773284903998701 0.4273675219092735 0
+0.2621224622807899 0.4369095246246302 0
+0.8963657532108631 0.3491727418841586 0
+0.1189795613218164 0.7217908232349435 0
+0.09236070489259268 0.7201773362872764 0
+0.4933936517131055 0.3522222949625843 0
+0.1801735399010437 0.2092772435202853 0
+0.1702121919763389 0.2194917595552116 0
+0.4692213389409351 0.2435480401467725 0
+0.399851095688726 0.2320334086514864 0
+0.1420634033814156 0.7148396412506456 0
+0.03222309815970795 0.2678671557908402 0
+0.9130978289440996 0.01800739535149396 0
+0.4875076451997109 0.9032775474067336 0
+0.2409688168983944 0.2337266076345206 0
+0.2318603805708145 0.2208112142360354 0
+0.1229711278904115 0.3061801769415897 0
+0.112216279662103 0.2981358906920145 0
+0.7464834518270216 0.6919212526136638 0
+0.1885138194259857 0.696839625286181 0
+0.9454089441926697 0.6413388541329834 0
+0.2815498933191708 0.007628718529864497 0
+0.01360591034458303 0.5140839857887708 0
+0.01360591034458303 0.5350749787881524 0
+0.09467176779142787 0.6327797254992162 0
+0.5705861525603108 0.186949762477958 0
+0.5677823557649503 0.2068129840473419 0
+0.5270048737392676 0.4716531227682551 0
+0.9416070601481148 0.4770122608428782 0
+0.2194421102651701 0.1587654609896976 0
+0.1666659309945467 0.7023554028986162 0
+0.7196649388024878 0.1838779131012023 0
+0.7327716627044873 0.1698368510621535 0
+0.5415665584410903 0.2753594173057641 0
+0.9202959684132849 0.07236279101201333 0
+0.9508334083311561 0.07820262411827154 0
+0.9266771207736485 0.2917275283995027 0
+0.9530331694164114 0.2906317398219632 0
+0.4649430467228278 0.02979549523539 0
+0.8965793828826494 0.295359490489173 0
+0.660714285715253 0.9788218176751058 0
+0.6514199157727433 0.9462431747424979 0
+0.3754010379199118 0.978370497482264 0
+0.4111153236343462 0.978370497482264 0
+0.9781905573940566 0.1221577254188962 0
+0.9781905573940566 0.08644343970467758 0
+0.1699069447626103 0.6827757531361993 0
+0.7064461241985245 0.1344972783232248 0
+0.2538340097850463 0.04290033025355499 0
+0.2666406498070675 0.04596941073279597 0
+0.9805844263116484 0.3035714285706831 0
+0.6279867613296882 0.4393278520831232 0
+0.2386150511527217 0.8323936330945447 0
+0.267595673264187 0.07472709775749792 0
+0.7686771418462055 0.7000261739134579 0
+0.8219161371459835 0.3530329981289616 0
+0.8438060288788474 0.351387236082873 0
+0.3185427530862622 0.7865394927520044 0
+0.2990065326755252 0.7700031933356951 0
+0.06971624829436608 0.3016167523579384 0
+0.7755141255002429 0.1142459547328322 0
+0.7584977607649985 0.1359423313382105 0
+0.1269767031730179 0.2234205139581085 0
+0.6336487630212051 0.2929637774752772 0
+0.7434659847166345 0.1546688972222622 0
+0.9078090824615097 0.9784450108954655 0
+0.5430320334412156 0.2957970092509801 0
+0.2079865256478542 0.190591758096181 0
+0.2062692285460338 0.2035424581903612 0
+0.3708765388263158 0.9502712084561298 0
+0.0361572924684132 0.3056094474987273 0
+0.4343053248517197 0.1250886235336318 0
+0.2556339405783504 0.03076618250810957 0
+0.8075335163861277 0.1257918156017025 0
+0.08984543087379851 0.4332170416720275 0
+0.2726511948015159 0.03617814596180681 0
+0.2138841387137257 0.1812197311611613 0
+0.8049571407922187 0.3700462603903192 0
+0.5577036216727038 0.5247459343065165 0
+0.5474991241467569 0.1023663600682151 0
+0.2622736746752816 0.732459785456285 0
+0.2060502366266091 0.1727089744291871 0
+0.394560762638467 0.1400433371350731 0
+0.4253851742707032 0.1404319638462244 0
+0.8667982352690505 0.4474853869064014 0
+0.262485514684854 0.4605898034163123 0
+0.4706848695212605 0.07420257532924815 0
+0.4549598100971634 0.08098796942449336 0
+0.4667021798491572 0.7985799128820223 0
+0.3339576368524524 0.4952680153610856 0
+0.3445220387833322 0.4784512037132319 0
+0.3237361103705747 0.5129914747607121 0
+0.3158878804090499 0.4928256396908901 0
+0.2827163016286682 0.7494748872090684 0
+0.08016462420103491 0.3062160963088789 0
+0.09018559283189523 0.3118407354370416 0
+0.8835557623661479 0.3231747725995933 0
+0.8566160197235626 0.3773852053674384 0
+0.8714647602392399 0.348727365900899 0
+0.5268759846063681 0.3285394622379927 0
+0.5409969319875474 0.3149633653404128 0
+0.5422982642963903 0.3348476846183046 0
+0.5791706313635978 0.531671269563962 0
+0.6309942743900572 0.1123679792195816 0
+0.8649499000686152 0.7240792790406162 0
+0.5125039598521656 0.3415228269431405 0
+0.4016163617033381 0.1251294918953166 0
+0.4100601411412449 0.1393258393907594 0
+0.7221496633534387 0.1459888197900577 0
+0.2190264227665095 0.171836350755431 0
+0.8445834887018329 0.7020411697965653 0
+0.2386244044180776 0.150797134830756 0
+0.2272760123522868 0.1672762177216718 0
+0.2360352768714195 0.1608141063369126 0
+0.3205573476146264 0.2977822932945186 0
+0.3371621335870302 0.6166111959637189 0
+0.3267923856436284 0.5981440858534075 0
+0.08023524557224924 0.2953255518569614 0
+0.2469679814385497 0.1574059132117301 0
+0.7992249841015524 0.5927685583332881 0
+0.4735348344629823 0.8641394764907373 0
+0.4183295752058321 0.1553458090859808 0
+0.9209421316865571 0.04548086547930259 0
+0.7206749476675434 0.7936456180620624 0
+0.2750904312666965 0.02676512849931554 0
+0.2649109359593169 0.02761506241565153 0
+0.2979759185657024 0.4943838190306225 0
+0.2370209958390009 0.7664560216411775 0
+0.2929597625150183 0.5258160447573905 0
+0.314263033317899 0.528742114066524 0
+0.3015564419057451 0.544009059733398 0
+0.2777078312016505 0.01672974100644463 0
+0.3413007662117338 0.6858625548573464 0
+0.5584543131312378 0.3021052316312919 0
+0.3134399726248709 0.2824434350021346 0
+0.4912429939559173 0.8778269715753126 0
+0.2580113024276436 0.7607358233566019 0
+0.9136759291135936 0.9498320274909395 0
+0.1431825454526869 0.3922690394315721 0
+0.2891754183847892 0.5085355022369609 0
+0.1020989304998347 0.2935040599385448 0
+0.09061636512730806 0.2881062047446128 0
+0.1008009706411863 0.3045567265613715 0
+0.1288660322130923 0.2324444886951081 0
+0.309416343900881 0.5621248676475512 0
+0.3918214982226655 0.3601038229654262 0
+0.3177308653616441 0.5785166509631711 0
+0.3050344953751208 0.5969420411428072 0
+0.7498675683854228 0.7180672131481045 0
+0.2533859365142191 0.1659371950285854 0
+0.7822693420712203 0.5744423685128508 0
+0.222798133591253 0.2243209161655724 0
+0.2253675622525717 0.213182024114586 0
+0.2156852069974467 0.2078914437007837 0
+2 6 0 1919
+2197
+2198
+2199
+2200
+2201
+2202
+2203
+2204
+2205
+2206
+2207
+2208
+2209
+2210
+2211
+2212
+2213
+2214
+2215
+2216
+2217
+2218
+2219
+2220
+2221
+2222
+2223
+2224
+2225
+2226
+2227
+2228
+2229
+2230
+2231
+2232
+2233
+2234
+2235
+2236
+2237
+2238
+2239
+2240
+2241
+2242
+2243
+2244
+2245
+2246
+2247
+2248
+2249
+2250
+2251
+2252
+2253
+2254
+2255
+2256
+2257
+2258
+2259
+2260
+2261
+2262
+2263
+2264
+2265
+2266
+2267
+2268
+2269
+2270
+2271
+2272
+2273
+2274
+2275
+2276
+2277
+2278
+2279
+2280
+2281
+2282
+2283
+2284
+2285
+2286
+2287
+2288
+2289
+2290
+2291
+2292
+2293
+2294
+2295
+2296
+2297
+2298
+2299
+2300
+2301
+2302
+2303
+2304
+2305
+2306
+2307
+2308
+2309
+2310
+2311
+2312
+2313
+2314
+2315
+2316
+2317
+2318
+2319
+2320
+2321
+2322
+2323
+2324
+2325
+2326
+2327
+2328
+2329
+2330
+2331
+2332
+2333
+2334
+2335
+2336
+2337
+2338
+2339
+2340
+2341
+2342
+2343
+2344
+2345
+2346
+2347
+2348
+2349
+2350
+2351
+2352
+2353
+2354
+2355
+2356
+2357
+2358
+2359
+2360
+2361
+2362
+2363
+2364
+2365
+2366
+2367
+2368
+2369
+2370
+2371
+2372
+2373
+2374
+2375
+2376
+2377
+2378
+2379
+2380
+2381
+2382
+2383
+2384
+2385
+2386
+2387
+2388
+2389
+2390
+2391
+2392
+2393
+2394
+2395
+2396
+2397
+2398
+2399
+2400
+2401
+2402
+2403
+2404
+2405
+2406
+2407
+2408
+2409
+2410
+2411
+2412
+2413
+2414
+2415
+2416
+2417
+2418
+2419
+2420
+2421
+2422
+2423
+2424
+2425
+2426
+2427
+2428
+2429
+2430
+2431
+2432
+2433
+2434
+2435
+2436
+2437
+2438
+2439
+2440
+2441
+2442
+2443
+2444
+2445
+2446
+2447
+2448
+2449
+2450
+2451
+2452
+2453
+2454
+2455
+2456
+2457
+2458
+2459
+2460
+2461
+2462
+2463
+2464
+2465
+2466
+2467
+2468
+2469
+2470
+2471
+2472
+2473
+2474
+2475
+2476
+2477
+2478
+2479
+2480
+2481
+2482
+2483
+2484
+2485
+2486
+2487
+2488
+2489
+2490
+2491
+2492
+2493
+2494
+2495
+2496
+2497
+2498
+2499
+2500
+2501
+2502
+2503
+2504
+2505
+2506
+2507
+2508
+2509
+2510
+2511
+2512
+2513
+2514
+2515
+2516
+2517
+2518
+2519
+2520
+2521
+2522
+2523
+2524
+2525
+2526
+2527
+2528
+2529
+2530
+2531
+2532
+2533
+2534
+2535
+2536
+2537
+2538
+2539
+2540
+2541
+2542
+2543
+2544
+2545
+2546
+2547
+2548
+2549
+2550
+2551
+2552
+2553
+2554
+2555
+2556
+2557
+2558
+2559
+2560
+2561
+2562
+2563
+2564
+2565
+2566
+2567
+2568
+2569
+2570
+2571
+2572
+2573
+2574
+2575
+2576
+2577
+2578
+2579
+2580
+2581
+2582
+2583
+2584
+2585
+2586
+2587
+2588
+2589
+2590
+2591
+2592
+2593
+2594
+2595
+2596
+2597
+2598
+2599
+2600
+2601
+2602
+2603
+2604
+2605
+2606
+2607
+2608
+2609
+2610
+2611
+2612
+2613
+2614
+2615
+2616
+2617
+2618
+2619
+2620
+2621
+2622
+2623
+2624
+2625
+2626
+2627
+2628
+2629
+2630
+2631
+2632
+2633
+2634
+2635
+2636
+2637
+2638
+2639
+2640
+2641
+2642
+2643
+2644
+2645
+2646
+2647
+2648
+2649
+2650
+2651
+2652
+2653
+2654
+2655
+2656
+2657
+2658
+2659
+2660
+2661
+2662
+2663
+2664
+2665
+2666
+2667
+2668
+2669
+2670
+2671
+2672
+2673
+2674
+2675
+2676
+2677
+2678
+2679
+2680
+2681
+2682
+2683
+2684
+2685
+2686
+2687
+2688
+2689
+2690
+2691
+2692
+2693
+2694
+2695
+2696
+2697
+2698
+2699
+2700
+2701
+2702
+2703
+2704
+2705
+2706
+2707
+2708
+2709
+2710
+2711
+2712
+2713
+2714
+2715
+2716
+2717
+2718
+2719
+2720
+2721
+2722
+2723
+2724
+2725
+2726
+2727
+2728
+2729
+2730
+2731
+2732
+2733
+2734
+2735
+2736
+2737
+2738
+2739
+2740
+2741
+2742
+2743
+2744
+2745
+2746
+2747
+2748
+2749
+2750
+2751
+2752
+2753
+2754
+2755
+2756
+2757
+2758
+2759
+2760
+2761
+2762
+2763
+2764
+2765
+2766
+2767
+2768
+2769
+2770
+2771
+2772
+2773
+2774
+2775
+2776
+2777
+2778
+2779
+2780
+2781
+2782
+2783
+2784
+2785
+2786
+2787
+2788
+2789
+2790
+2791
+2792
+2793
+2794
+2795
+2796
+2797
+2798
+2799
+2800
+2801
+2802
+2803
+2804
+2805
+2806
+2807
+2808
+2809
+2810
+2811
+2812
+2813
+2814
+2815
+2816
+2817
+2818
+2819
+2820
+2821
+2822
+2823
+2824
+2825
+2826
+2827
+2828
+2829
+2830
+2831
+2832
+2833
+2834
+2835
+2836
+2837
+2838
+2839
+2840
+2841
+2842
+2843
+2844
+2845
+2846
+2847
+2848
+2849
+2850
+2851
+2852
+2853
+2854
+2855
+2856
+2857
+2858
+2859
+2860
+2861
+2862
+2863
+2864
+2865
+2866
+2867
+2868
+2869
+2870
+2871
+2872
+2873
+2874
+2875
+2876
+2877
+2878
+2879
+2880
+2881
+2882
+2883
+2884
+2885
+2886
+2887
+2888
+2889
+2890
+2891
+2892
+2893
+2894
+2895
+2896
+2897
+2898
+2899
+2900
+2901
+2902
+2903
+2904
+2905
+2906
+2907
+2908
+2909
+2910
+2911
+2912
+2913
+2914
+2915
+2916
+2917
+2918
+2919
+2920
+2921
+2922
+2923
+2924
+2925
+2926
+2927
+2928
+2929
+2930
+2931
+2932
+2933
+2934
+2935
+2936
+2937
+2938
+2939
+2940
+2941
+2942
+2943
+2944
+2945
+2946
+2947
+2948
+2949
+2950
+2951
+2952
+2953
+2954
+2955
+2956
+2957
+2958
+2959
+2960
+2961
+2962
+2963
+2964
+2965
+2966
+2967
+2968
+2969
+2970
+2971
+2972
+2973
+2974
+2975
+2976
+2977
+2978
+2979
+2980
+2981
+2982
+2983
+2984
+2985
+2986
+2987
+2988
+2989
+2990
+2991
+2992
+2993
+2994
+2995
+2996
+2997
+2998
+2999
+3000
+3001
+3002
+3003
+3004
+3005
+3006
+3007
+3008
+3009
+3010
+3011
+3012
+3013
+3014
+3015
+3016
+3017
+3018
+3019
+3020
+3021
+3022
+3023
+3024
+3025
+3026
+3027
+3028
+3029
+3030
+3031
+3032
+3033
+3034
+3035
+3036
+3037
+3038
+3039
+3040
+3041
+3042
+3043
+3044
+3045
+3046
+3047
+3048
+3049
+3050
+3051
+3052
+3053
+3054
+3055
+3056
+3057
+3058
+3059
+3060
+3061
+3062
+3063
+3064
+3065
+3066
+3067
+3068
+3069
+3070
+3071
+3072
+3073
+3074
+3075
+3076
+3077
+3078
+3079
+3080
+3081
+3082
+3083
+3084
+3085
+3086
+3087
+3088
+3089
+3090
+3091
+3092
+3093
+3094
+3095
+3096
+3097
+3098
+3099
+3100
+3101
+3102
+3103
+3104
+3105
+3106
+3107
+3108
+3109
+3110
+3111
+3112
+3113
+3114
+3115
+3116
+3117
+3118
+3119
+3120
+3121
+3122
+3123
+3124
+3125
+3126
+3127
+3128
+3129
+3130
+3131
+3132
+3133
+3134
+3135
+3136
+3137
+3138
+3139
+3140
+3141
+3142
+3143
+3144
+3145
+3146
+3147
+3148
+3149
+3150
+3151
+3152
+3153
+3154
+3155
+3156
+3157
+3158
+3159
+3160
+3161
+3162
+3163
+3164
+3165
+3166
+3167
+3168
+3169
+3170
+3171
+3172
+3173
+3174
+3175
+3176
+3177
+3178
+3179
+3180
+3181
+3182
+3183
+3184
+3185
+3186
+3187
+3188
+3189
+3190
+3191
+3192
+3193
+3194
+3195
+3196
+3197
+3198
+3199
+3200
+3201
+3202
+3203
+3204
+3205
+3206
+3207
+3208
+3209
+3210
+3211
+3212
+3213
+3214
+3215
+3216
+3217
+3218
+3219
+3220
+3221
+3222
+3223
+3224
+3225
+3226
+3227
+3228
+3229
+3230
+3231
+3232
+3233
+3234
+3235
+3236
+3237
+3238
+3239
+3240
+3241
+3242
+3243
+3244
+3245
+3246
+3247
+3248
+3249
+3250
+3251
+3252
+3253
+3254
+3255
+3256
+3257
+3258
+3259
+3260
+3261
+3262
+3263
+3264
+3265
+3266
+3267
+3268
+3269
+3270
+3271
+3272
+3273
+3274
+3275
+3276
+3277
+3278
+3279
+3280
+3281
+3282
+3283
+3284
+3285
+3286
+3287
+3288
+3289
+3290
+3291
+3292
+3293
+3294
+3295
+3296
+3297
+3298
+3299
+3300
+3301
+3302
+3303
+3304
+3305
+3306
+3307
+3308
+3309
+3310
+3311
+3312
+3313
+3314
+3315
+3316
+3317
+3318
+3319
+3320
+3321
+3322
+3323
+3324
+3325
+3326
+3327
+3328
+3329
+3330
+3331
+3332
+3333
+3334
+3335
+3336
+3337
+3338
+3339
+3340
+3341
+3342
+3343
+3344
+3345
+3346
+3347
+3348
+3349
+3350
+3351
+3352
+3353
+3354
+3355
+3356
+3357
+3358
+3359
+3360
+3361
+3362
+3363
+3364
+3365
+3366
+3367
+3368
+3369
+3370
+3371
+3372
+3373
+3374
+3375
+3376
+3377
+3378
+3379
+3380
+3381
+3382
+3383
+3384
+3385
+3386
+3387
+3388
+3389
+3390
+3391
+3392
+3393
+3394
+3395
+3396
+3397
+3398
+3399
+3400
+3401
+3402
+3403
+3404
+3405
+3406
+3407
+3408
+3409
+3410
+3411
+3412
+3413
+3414
+3415
+3416
+3417
+3418
+3419
+3420
+3421
+3422
+3423
+3424
+3425
+3426
+3427
+3428
+3429
+3430
+3431
+3432
+3433
+3434
+3435
+3436
+3437
+3438
+3439
+3440
+3441
+3442
+3443
+3444
+3445
+3446
+3447
+3448
+3449
+3450
+3451
+3452
+3453
+3454
+3455
+3456
+3457
+3458
+3459
+3460
+3461
+3462
+3463
+3464
+3465
+3466
+3467
+3468
+3469
+3470
+3471
+3472
+3473
+3474
+3475
+3476
+3477
+3478
+3479
+3480
+3481
+3482
+3483
+3484
+3485
+3486
+3487
+3488
+3489
+3490
+3491
+3492
+3493
+3494
+3495
+3496
+3497
+3498
+3499
+3500
+3501
+3502
+3503
+3504
+3505
+3506
+3507
+3508
+3509
+3510
+3511
+3512
+3513
+3514
+3515
+3516
+3517
+3518
+3519
+3520
+3521
+3522
+3523
+3524
+3525
+3526
+3527
+3528
+3529
+3530
+3531
+3532
+3533
+3534
+3535
+3536
+3537
+3538
+3539
+3540
+3541
+3542
+3543
+3544
+3545
+3546
+3547
+3548
+3549
+3550
+3551
+3552
+3553
+3554
+3555
+3556
+3557
+3558
+3559
+3560
+3561
+3562
+3563
+3564
+3565
+3566
+3567
+3568
+3569
+3570
+3571
+3572
+3573
+3574
+3575
+3576
+3577
+3578
+3579
+3580
+3581
+3582
+3583
+3584
+3585
+3586
+3587
+3588
+3589
+3590
+3591
+3592
+3593
+3594
+3595
+3596
+3597
+3598
+3599
+3600
+3601
+3602
+3603
+3604
+3605
+3606
+3607
+3608
+3609
+3610
+3611
+3612
+3613
+3614
+3615
+3616
+3617
+3618
+3619
+3620
+3621
+3622
+3623
+3624
+3625
+3626
+3627
+3628
+3629
+3630
+3631
+3632
+3633
+3634
+3635
+3636
+3637
+3638
+3639
+3640
+3641
+3642
+3643
+3644
+3645
+3646
+3647
+3648
+3649
+3650
+3651
+3652
+3653
+3654
+3655
+3656
+3657
+3658
+3659
+3660
+3661
+3662
+3663
+3664
+3665
+3666
+3667
+3668
+3669
+3670
+3671
+3672
+3673
+3674
+3675
+3676
+3677
+3678
+3679
+3680
+3681
+3682
+3683
+3684
+3685
+3686
+3687
+3688
+3689
+3690
+3691
+3692
+3693
+3694
+3695
+3696
+3697
+3698
+3699
+3700
+3701
+3702
+3703
+3704
+3705
+3706
+3707
+3708
+3709
+3710
+3711
+3712
+3713
+3714
+3715
+3716
+3717
+3718
+3719
+3720
+3721
+3722
+3723
+3724
+3725
+3726
+3727
+3728
+3729
+3730
+3731
+3732
+3733
+3734
+3735
+3736
+3737
+3738
+3739
+3740
+3741
+3742
+3743
+3744
+3745
+3746
+3747
+3748
+3749
+3750
+3751
+3752
+3753
+3754
+3755
+3756
+3757
+3758
+3759
+3760
+3761
+3762
+3763
+3764
+3765
+3766
+3767
+3768
+3769
+3770
+3771
+3772
+3773
+3774
+3775
+3776
+3777
+3778
+3779
+3780
+3781
+3782
+3783
+3784
+3785
+3786
+3787
+3788
+3789
+3790
+3791
+3792
+3793
+3794
+3795
+3796
+3797
+3798
+3799
+3800
+3801
+3802
+3803
+3804
+3805
+3806
+3807
+3808
+3809
+3810
+3811
+3812
+3813
+3814
+3815
+3816
+3817
+3818
+3819
+3820
+3821
+3822
+3823
+3824
+3825
+3826
+3827
+3828
+3829
+3830
+3831
+3832
+3833
+3834
+3835
+3836
+3837
+3838
+3839
+3840
+3841
+3842
+3843
+3844
+3845
+3846
+3847
+3848
+3849
+3850
+3851
+3852
+3853
+3854
+3855
+3856
+3857
+3858
+3859
+3860
+3861
+3862
+3863
+3864
+3865
+3866
+3867
+3868
+3869
+3870
+3871
+3872
+3873
+3874
+3875
+3876
+3877
+3878
+3879
+3880
+3881
+3882
+3883
+3884
+3885
+3886
+3887
+3888
+3889
+3890
+3891
+3892
+3893
+3894
+3895
+3896
+3897
+3898
+3899
+3900
+3901
+3902
+3903
+3904
+3905
+3906
+3907
+3908
+3909
+3910
+3911
+3912
+3913
+3914
+3915
+3916
+3917
+3918
+3919
+3920
+3921
+3922
+3923
+3924
+3925
+3926
+3927
+3928
+3929
+3930
+3931
+3932
+3933
+3934
+3935
+3936
+3937
+3938
+3939
+3940
+3941
+3942
+3943
+3944
+3945
+3946
+3947
+3948
+3949
+3950
+3951
+3952
+3953
+3954
+3955
+3956
+3957
+3958
+3959
+3960
+3961
+3962
+3963
+3964
+3965
+3966
+3967
+3968
+3969
+3970
+3971
+3972
+3973
+3974
+3975
+3976
+3977
+3978
+3979
+3980
+3981
+3982
+3983
+3984
+3985
+3986
+3987
+3988
+3989
+3990
+3991
+3992
+3993
+3994
+3995
+3996
+3997
+3998
+3999
+4000
+4001
+4002
+4003
+4004
+4005
+4006
+4007
+4008
+4009
+4010
+4011
+4012
+4013
+4014
+4015
+4016
+4017
+4018
+4019
+4020
+4021
+4022
+4023
+4024
+4025
+4026
+4027
+4028
+4029
+4030
+4031
+4032
+4033
+4034
+4035
+4036
+4037
+4038
+4039
+4040
+4041
+4042
+4043
+4044
+4045
+4046
+4047
+4048
+4049
+4050
+4051
+4052
+4053
+4054
+4055
+4056
+4057
+4058
+4059
+4060
+4061
+4062
+4063
+4064
+4065
+4066
+4067
+4068
+4069
+4070
+4071
+4072
+4073
+4074
+4075
+4076
+4077
+4078
+4079
+4080
+4081
+4082
+4083
+4084
+4085
+4086
+4087
+4088
+4089
+4090
+4091
+4092
+4093
+4094
+4095
+4096
+4097
+4098
+4099
+4100
+4101
+4102
+4103
+4104
+4105
+4106
+4107
+4108
+4109
+4110
+4111
+4112
+4113
+4114
+4115
+-0.3698227188182048 0.4899567013476933 -0
+-0.4255682914335646 0.2488438896114501 -0
+-0.1861465891083343 0.3905078055418578 -0
+-0.6833516374755464 0.451862547937233 -0
+-0.2480008897693647 0.7185285501959432 -0
+-0.5637285854268229 0.7098801205666363 -0
+-0.3572853270849495 0.1205889373895429 -0
+-0.2538186702782618 0.2832111589212492 -0
+-0.6488423200329313 0.2240624129107143 -0
+-0.1646822467378341 0.5534737505940479 -0
+-0.5128490601670143 0.3995108225170176 -0
+-0.4765306936205214 0.1311014319265258 -0
+-0.7861415577899493 0.6392311892214473 -0
+-0.09992206499775169 0.3367410019060892 -0
+-0.3470756340916058 0.3665391667229985 -0
+-0.810823524186286 0.3175263694845384 -0
+-0.2859066286957583 0.192383660529009 -0
+-0.4064156529514793 0.6547460132411045 -0
+-0.171363301089722 0.2842158473653471 -0
+-0.503271717468436 0.5540514474388375 -0
+-0.09844752305817107 0.4297630882454095 -0
+-0.3800450744654534 0.8289572887966313 -0
+-0.7119040691952705 0.8171103503724609 -0
+-0.7914588813396428 0.1543070848764639 -0
+-0.2519639684191153 0.4840848912021306 -0
+-0.1517807929290039 0.8312629002136568 -0
+-0.5410829907713521 0.2802531711319988 -0
+-0.5974248544143107 0.1246360588803552 -0
+-0.8380825867077755 0.4802201999887202 -0
+-0.3074684491886607 0.5980368581023233 -0
+-0.1381736907651777 0.6800482630838643 -0
+-0.3125072966764934 0.06964562678003954 -0
+-0.6501225073835732 0.5814530706987278 -0
+-0.3389635525131381 0.2606908321795259 -0
+-0.2096723226366322 0.2344298090978258 -0
+-0.269225941909488 0.364577529294147 -0
+-0.08840412788045715 0.5248581607469726 -0
+-0.4100043112200796 0.07214726663057638 -0
+-0.5265748386141716 0.8537781632491064 -0
+-0.2764248322022974 0.1391989130110163 -0
+-0.1661361862503325 0.4739436208575535 -0
+-0.8489481537396508 0.7736464225126395 -0
+-0.6497531491941577 0.3384407504735452 -0
+-0.05717011404232987 0.3004797780607442 -0
+-0.4177914615018798 0.1773770658624539 -0
+-0.4449326880968769 0.3483744111470286 -0
+-0.5520970693183719 0.195820867576839 -0
+-0.3179178684932776 0.4275765983350535 -0
+-0.7021938946325478 0.1018913722271058 -0
+-0.4089395360118986 0.4209051235116375 -0
+-0.5832982133329051 0.4841755889411641 -0
+-0.118628471240365 0.2814825516163177 -0
+-0.354890904099216 0.1941276516301872 -0
+-0.2648660667319667 0.8306628247502648 -0
+-0.05738892769094582 0.3768278415769518 -0
+-0.2156154374009891 0.3322936788064456 -0
+-0.7499394042264601 0.5358155330369624 -0
+-0.4617629316174441 0.7538019981603745 -0
+-0.07672068059096682 0.6097986100153567 -0
+-0.2416299687404292 0.175887268914492 -0
+-0.6703273520941 0.6949842584281392 -0
+-0.1568371916515761 0.3360015040243326 -0
+-0.8867648922671043 0.2228948572386688 -0
+-0.8902905524658922 0.1069143708428479 -0
+-0.8787669104639895 0.5729753685858914 -0
+-0.523485731875978 0.06642323353596205 -0
+-0.3104274917444975 0.3128308359118871 -0
+-0.2203365850836297 0.6335881169072654 -0
+-0.416907081768283 0.570011009000537 -0
+-0.8100789149545216 0.8838280646027086 -0
+-0.7211988497467623 0.2869786731949494 -0
+-0.3429879491059054 0.7360039592398211 -0
+-0.4804943154330057 0.2096115753561591 -0
+-0.3624229917956664 0.05268696387765978 -0
+-0.1258469898090556 0.3861169835148439 -0
+-0.4977233397545209 0.6434455041248918 -0
+-0.4442220623586157 0.49957804610335 -0
+-0.3857782712189033 0.308397485878625 -0
+-0.08742811273228585 0.7668767149810887 -0
+-0.2412366869479425 0.4242823017332456 -0
+-0.7664956000668566 0.4007286083137552 -0
+-0.6301788420895322 0.8907349391904331 -0
+-0.8959033317882426 0.3788499550398985 -0
+-0.1473889420002498 0.2495571089745869 -0
+-0.2406873687357176 0.5568123272832082 -0
+-0.5955272405265052 0.401842586121289 -0
+-0.4665498777905723 0.05382397207899811 -0
+-0.2843225426556435 0.04529722874845073 -0
+-0.2554149396257553 0.2294910771041615 -0
+-0.05691882194773549 0.4760557436281915 -0
+-0.2762875136583341 0.09054910861681233 -0
+-0.6160990958778663 0.7921267480837646 -0
+-0.3212341652590135 0.1546574858499276 -0
+-0.3086551441014521 0.5255746529836581 -0
+-0.3236201471591851 0.9084567557066685 -0
+-0.1785169284468842 0.7540879841517948 -0
+-0.9024872900635836 0.6838010773246804 -0
+-0.4364389235967069 0.9063217715222596 -0
+-0.2085734377377174 0.9060711008957185 -0
+-0.7164192753541241 0.185272805348999 -0
+-0.08977864176683414 0.8953062349827439 -0
+-0.4782185397351093 0.2902854831488809 -0
+-0.4051732700796083 0.1256640875030695 -0
+-0.05168588070711705 0.4219649774303308 -0
+-0.7814790783741421 0.08699428995276969 -0
+-0.7586301634110617 0.7399960958253339 -0
+-0.5649971228256334 0.5973756789956262 -0
+-0.04164701923940778 0.3407422643009742 -0
+-0.9086140260604223 0.8842235090962226 -0
+-0.515506188913784 0.4747991751054478 -0
+-0.3091885572520929 0.1109183195459918 -0
+-0.3088615534182331 0.6712690884020271 -0
+-0.2130918509570909 0.2759797659393619 -0
+-0.644087093765124 0.06532171646435289 -0
+-0.1564519338479619 0.4336546087459118 -0
+-0.2079937553038847 0.1974733581852857 -0
+-0.07894212443952897 0.2769846215303697 -0
+-0.7891913219550384 0.2364733156625571 -0
+-0.5445222347304558 0.1271579984564501 -0
+-0.1803471078412995 0.2268603247401633 -0
+-0.5851842910133029 0.04860689174100871 -0
+-0.7212103475052976 0.9145096544093335 -0
+-0.1438602625243734 0.6351590215222852 -0
+-0.3092504297116029 0.2403949329758766 -0
+-0.1169472579878561 0.4954186808820049 -0
+-0.5154338512048796 0.3418058666707849 -0
+-0.6138857412179488 0.266926404242831 -0
+-0.06265553261688152 0.6718041548102104 -0
+-0.245912035057543 0.143158969694543 -0
+-0.5797186961067948 0.3394887553465709 -0
+-0.6516017693622838 0.5121394907347507 -0
+-0.3802646485262733 0.2379146060582047 -0
+-0.6419125641276758 0.1654965018836615 -0
+-0.325045577926848 0.03126393156820785 -0
+-0.03532821208056963 0.2828306901842512 -0
+-0.7266285146214075 0.3517190259401644 -0
+-0.05131236148475354 0.5652988653372395 -0
+-0.3588716916943093 0.5698178181654473 -0
+-0.226194953236375 0.5164563963312278 -0
+-0.9163587283067908 0.5081658213319716 -0
+-0.9163169193923473 0.2934369261140845 -0
+-0.3534598987351039 0.08789769262233105 -0
+-0.2550721523527612 0.3238964270477844 -0
+-0.3635810175559019 0.4214250324434243 -0
+-0.1907657937185422 0.6893768784901733 -0
+-0.2983673055028819 0.2757037126647853 -0
+-0.2258564799505212 0.374944009046171 -0
+-0.1968465710928237 0.4384955821980826 -0
+-0.1393434293532226 0.3074239007934814 -0
+-0.4531126426389476 0.1072907036427177 -0
+-0.1195327135035324 0.2508279000858262 -0
+-0.5329175518076713 0.7786703436188929 -0
+-0.6142137102640236 0.6729144251500924 -0
+-0.4554202184239445 0.8289098177905881 -0
+-0.1174399931628109 0.5694158465201817 -0
+-0.7211900278761801 0.5993184449264464 -0
+-0.3121383706858776 0.3860236323352949 -0
+-0.3535977948396571 0.6271691342870824 -0
+-0.3826002319377731 0.1688354833622418 -0
+-0.7449932040385805 0.4619156542652374 -0
+-0.1492003735637076 0.5202570418227848 -0
+-0.05134700843520915 0.8307135970335321 -0
+-0.3972472527692257 0.04174819733186996 -0
+-0.08627084279547451 0.3067450016040313 -0
+-0.9248894919796472 0.8136837898816036 -0
+-0.4106717486320279 0.3738858915741402 -0
+-0.4606833591590968 0.3988728456237359 -0
+-0.04327962303219633 0.5138802541566799 -0
+-0.8198348884077313 0.5392705794806928 -0
+-0.5639049540864264 0.9197998908758787 -0
+-0.5219549456157044 0.2372516706075067 -0
+-0.5966253674777386 0.1709826779735673 -0
+-0.258581660082156 0.1130915496341313 -0
+-0.4627878073434317 0.4540735265968595 -0
+-0.2925526320245285 0.7683420415075973 -0
+-0.8363804808560444 0.7014221683984612 -0
+-0.234751285710821 0.2052673578807727 -0
+-0.1879341154908146 0.2566912741697672 -0
+-0.3003330939741054 0.4807076987452249 -0
+-0.0937080285676485 0.3721630472167392 -0
+-0.5928424236599883 0.5522546950087656 -0
+-0.2680436852732847 0.1669687012134172 -0
+-0.7851180106077394 0.804118046451922 -0
+-0.02754078467796397 0.3118289029265017 -0
+-0.5692383624858413 0.2488926181230711 -0
+-0.5118468007654746 0.1654704226905984 -0
+-0.2676161897328572 0.06438571373418733 -0
+-0.4619349554400006 0.1699804883654466 -0
+-0.3998787906132211 0.7259313236258952 -0
+-0.8313561337671571 0.05457976575676331 -0
+-0.4325606308934131 0.302932901787684 -0
+-0.06742407326948582 0.3266712282590483 -0
+-0.9324839466576011 0.1696888671865646 -0
+-0.434668579517458 0.03806113964673839 -0
+-0.1846618538871211 0.3256871250903812 -0
+-0.4567687240271733 0.6888996003722343 -0
+-0.6620917496165533 0.2835189556715699 -0
+-0.6519282151009899 0.3961010690198483 -0
+-0.714940093983419 0.04678699751876797 -0
+-0.4676665986959955 0.5958454402849247 -0
+-0.3853634738982302 0.1004958546244692 -0
+-0.2068346098722052 0.8061232166416202 -0
+-0.4437805213068795 0.2130219000371127 -0
+-0.1878224165004679 0.3558365897384762 -0
+-0.8565335855346259 0.162632222377158 -0
+-0.2783349396946528 0.4074935372885962 -0
+-0.3459210016149048 0.2989874408967579 -0
+-0.8268503415291528 0.3781783873139724 -0
+-0.07774712399991147 0.4048625236436454 -0
+-0.6738802160759318 0.7652930239936303 -0
+-0.1447499964699691 0.9329101211477043 -0
+-0.9308070463358072 0.4396045953252191 -0
+-0.3145533038829142 0.2028241083823017 -0
+-0.2355031095482041 0.2526466817830925 -0
+-0.04652575583209618 0.7249845435120639 -0
+-0.5557759309766098 0.4372839194558913 -0
+-0.2732468428321294 0.4478038267589651 -0
+-0.6267939230628341 0.4474419533216705 -0
+-0.9452118274252017 0.7348791041613627 -0
+-0.1467545718308843 0.2777715901863708 -0
+-0.05491074163267191 0.2708096001926523 -0
+-0.4108161075221186 0.4722384449744455 -0
+-0.3843343276726008 0.9448160652526619 -0
+-0.1272639912613706 0.3560765081242759 -0
+-0.2190155382698036 0.1589925582736833 -0
+-0.6963983810842633 0.2347184277571586 -0
+-0.849193479622377 0.636479761307538 -0
+-0.5447095274265481 0.517287580368891 -0
+-0.9348427150109647 0.6242684005477461 -0
+-0.2278346135140918 0.3024355916555778 -0
+-0.02765455886021721 0.374804595352115 -0
+-0.620612138714199 0.7308867428985886 -0
+-0.1555411123660513 0.3711025733631426 -0
+-0.1820923551813039 0.2009079523577797 -0
+-0.209217278188475 0.5876985549330959 -0
+-0.212366497903554 0.4771223361306986 -0
+-0.4729288488151967 0.2495699946127783 -0
+-0.3900216636840705 0.1988208007705611 -0
+-0.4970705249807804 0.04215717476844226 -0
+-0.3458746275935313 0.4597366466375848 -0
+-0.8593588427473177 0.8432760612734486 -0
+-0.03239551756342356 0.610867221384255 -0
+-0.4005489520131703 0.5249090490285657 -0
+-0.2747564851330838 0.6345430056793766 -0
+-0.4842397253865585 0.08575439433833938 -0
+-0.2598349077784459 0.9448974863121328 -0
+-0.3260209203412846 0.8148749858357478 -0
+-0.9437026946700757 0.0562829687511077 -0
+-0.5078555339866938 0.7146163472942493 -0
+-0.5535126212086643 0.6496018860618612 -0
+-0.6955430079944165 0.5457198139328253 -0
+-0.3714035846881229 0.2773340916161008 -0
+-0.3404483065840461 0.2270005071458105 -0
+-0.3540673064824842 0.6881626106017116 -0
+-0.3499292397937295 0.02674051180369894 -0
+-0.4115690847363419 0.7842351315857892 -0
+-0.4338432422056436 0.1378629983684357 -0
+-0.8584824453864119 0.9363355693804508 -0
+-0.8388382350353408 0.2693106489726796 -0
+-0.7815851165032013 0.5822327048989492 -0
+-0.7413877519074029 0.13606775012654 -0
+-0.7622554619112362 0.3195591351921455 -0
+-0.5503902908903826 0.3737578867448396 -0
+-0.653357819795767 0.1072885941543511 -0
+-0.09405232037064193 0.2579276068217425 -0
+-0.666756322402869 0.6380028265511056 -0
+-0.5041016776414611 0.9293326352861695 -0
+-0.3061187380717042 0.3505565752952965 -0
+-0.9454769933621865 0.2392494602586107 -0
+-0.5921519278823107 0.8488253726032385 -0
+-0.456559225866323 0.5439632600416617 -0
+-0.8302236462962922 0.1130855467612006 -0
+-0.7049758584173978 0.5006980801214038 -0
+-0.1308208659943003 0.732843985513388 -0
+-0.03310967839130467 0.4466694880351283 -0
+-0.5501167268559212 0.03903141526057244 -0
+-0.2677799599065344 0.5226437030128211 -0
+-0.2538016942793164 0.08981693101333393 -0
+-0.279749775026702 0.2985960860230732 -0
+-0.667503172453233 0.9405924346586152 -0
+-0.1128225024165755 0.3085543037370025 -0
+-0.7764352520108334 0.9374129641809847 -0
+-0.7082943067511738 0.4041028153283046 -0
+-0.7225829513092208 0.6656127977839521 -0
+-0.2531512404710297 0.5977435753390986 -0
+-0.02637994945733693 0.4063984456734567 -0
+-0.2603254611314146 0.1963134387699298 -0
+-0.6536126466736804 0.8297598797148532 -0
+-0.2986908298994272 0.7171273631736013 -0
+-0.5584483556222319 0.08912439914609352 -0
+-0.3332609271028854 0.05813405291335888 -0
+-0.3500105307539257 0.1552193059581143 -0
+-0.2710574132618742 0.02248264094151139 -0
+-0.03706017539991823 0.7736091386821925 -0
+-0.3793191310777456 0.3503919355904504 -0
+-0.3398449868943473 0.3347027548494813 -0
+-0.6224008211409335 0.03784179848702637 -0
+-0.51712238792586 0.5969854676226104 -0
+-0.8686026611111859 0.3284107746142035 -0
+-0.154205328239183 0.2276916997623204 -0
+-0.4263216471731391 0.6145304589606704 -0
+-0.7559802887713682 0.8578431728140081 -0
+-0.945993670756349 0.5553676323783482 -0
+-0.1410637966973335 0.7841515363528521 -0
+-0.1046411356780602 0.6509805724483351 -0
+-0.09148632859498375 0.4653139956294849 -0
+-0.2354608320802753 0.7668309777256466 -0
+-0.3031717965754098 0.135023935723698 -0
+-0.2736295369951011 0.2576112260594101 -0
+-0.1257652531011893 0.451494909858396 -0
+-0.3774029360211512 0.02229790979690853 -0
+-0.1785760057303305 0.6471970312192364 -0
+-0.2130275193423513 0.4067802047491266 -0
+-0.2829388762817734 0.5604894153356212 -0
+-0.4818002278966924 0.3629346705355251 -0
+-0.1244119943689151 0.4171157405550844 -0
+-0.05494694025721033 0.9452857018728704 -0
+-0.2482255667275832 0.6735535348012983 -0
+-0.7602197275097758 0.1955786871915579 -0
+-0.02648131201997148 0.483216605481565 -0
+-0.6056179752170077 0.2119648259413082 -0
+-0.9427740338794781 0.9403051219706989 -0
+-0.792102414741409 0.4934108202565866 -0
+-0.3747253334327406 0.8842747511891303 -0
+-0.4867470240179793 0.5100464889063587 -0
+-0.2406028263563216 0.3489216426839123 -0
+-0.3902184892227656 0.6046068610755756 -0
+-0.3484237828559041 0.5281773176478611 -0
+-0.9438014220665948 0.348093858235699 -0
+-0.8618203234186337 0.4255075536084011 -0
+-0.3030644023654633 0.02282282847220967 -0
+-0.2670988313727809 0.8847020104981181 -0
+-0.6870035614734601 0.3204406657633248 -0
+-0.8259490315355554 0.2079194523294478 -0
+-0.5628656513084298 0.1576716057615867 -0
+-0.2986614455207963 0.167441547751761 -0
+-0.09161036943994406 0.7050928652898106 -0
+-0.6151745365835168 0.9502254529449853 -0
+-0.07222210664430025 0.3520753352280213 -0
+-0.2646768982784936 0.04196355527670739 -0
+-0.1954111220411406 0.8563110226267637 -0
+-0.2044086901199473 0.547866157335743 -0
+-0.134015766576735 0.2340327168868303 -0
+-0.6650219189723034 0.03484801886077418 -0
+-0.1953535107843415 0.2956297267346273 -0
+-0.8050574117504012 0.4399935372911121 -0
+-0.1985865062876774 0.1789152541494042 -0
+-0.4444439370085232 0.07638346562776616 -0
+-0.2510392989691449 0.3929219872365006 -0
+-0.3600474464574711 0.7809569929943987 -0
+-0.283180050007091 0.2198364073034481 -0
+-0.2907262078258883 0.06978686954911614 -0
+-0.3829230288495777 0.07045819322837651 -0
+-0.5794467154362761 0.7582154649622419 -0
+-0.6882915309026501 0.1480590561066967 -0
+-0.8898844464392672 0.04339449562877453 -0
+-0.2870832240633285 0.1135142393033924 -0
+-0.9528784431508597 0.1126307876711704 -0
+-0.5462201570118802 0.5613557966432776 -0
+-0.4644274508563726 0.02943848809308065 -0
+-0.1417206542394506 0.8771819965830913 -0
+-0.129452725537926 0.329851096161982 -0
+-0.01815370352047617 0.3449602316362413 -0
+-0.19909116170352 0.2150650985815038 -0
+-0.6166529165413381 0.3602282509376062 -0
+-0.5165982827831392 0.2020386340577758 -0
+-0.9576436362678624 0.6785714285705797 -0
+-0.3311581215093277 0.1219990344364407 -0
+-0.08490406288439165 0.5588783708741378 -0
+-0.2351321134391129 0.4543577876046245 -0
+-0.8654575769894304 0.5156365186664894 -0
+-0.07048961028850909 0.4446056252332352 -0
+-0.1542396849142766 0.4030045424099571 -0
+-0.6772599758140588 0.1917548328294681 -0
+-0.7706090930965168 0.03928653628031856 -0
+-0.7777509254134004 0.2784539287014263 -0
+-0.475102180855594 0.3261094067190585 -0
+-0.4064842860693053 0.2792559460123972 -0
+-0.01820204495699716 0.2673501724933386 -0
+-0.5065219059107076 0.2726844828847431 -0
+-0.119828656939294 0.5361198772400551 -0
+-0.3346218734686395 0.4968306034724045 -0
+-0.1644150953740578 0.6043177618199599 -0
+-0.164451505702617 0.2623930191490436 -0
+-0.3810231215057813 0.4501883692542997 -0
+-0.6122016311798553 0.08205494132533656 -0
+-0.2263607118157111 0.1361042221929116 -0
+-0.2065990525494068 0.7278745361203165 -0
+-0.3081544924255369 0.04949175633856379 -0
+-0.07940723188864576 0.4951053670086668 -0
+-0.8061710848818013 0.7468836983174296 -0
+-0.03601479070732749 0.8965985615000224 -0
+-0.4177527965588851 0.8609281934785483 -0
+-0.4101557194473317 0.2186373866444256 -0
+-0.5773146067315706 0.2959729748876096 -0
+-0.4941688851158078 0.8037900807047405 -0
+-0.3214285714299112 0.9611688528699475 -0
+-0.5125349361361835 0.1138519099213321 -0
+-0.190462997220192 0.9543106308276564 -0
+-0.3434348566891301 0.3946042929089776 -0
+-0.3804769963254784 0.1362510262649447 -0
+-0.7437207219301358 0.2375686748977025 -0
+-0.8288461026576348 0.5904281020607799 -0
+-0.1105198344666862 0.8309154966911607 -0
+-0.03702807981970424 0.2624716995785888 -0
+-0.32127158882442 0.5564192124469823 -0
+-0.01525743708112511 0.2880654899998343 -0
+-0.501536046440432 0.4378469026678163 -0
+-0.4106524939837934 0.3367965251955856 -0
+-0.323756574904799 0.08968756396547907 -0
+-0.8915834488128255 0.7414865124557496 -0
+-0.5105490996802267 0.3056663538414806 -0
+-0.4772179753761145 0.8726682786146837 -0
+-0.4219901461751721 0.1033073960661724 -0
+-0.6076094180487833 0.6143324003923323 -0
+-0.5469351296037178 0.3228597124934175 -0
+-0.1871648246352917 0.5148532171786759 -0
+-0.7381607777107277 0.08283003760821991 -0
+-0.4523340602221536 0.6414430664657776 -0
+-0.3111710706449087 0.6327545216177024 -0
+-0.9568900226339081 0.8870467366021155 -0
+-0.03435434615425438 0.6440499925505688 -0
+-0.5243008038134644 0.02721182069987675 -0
+-0.3301693315680995 0.1772373318170201 -0
+-0.6759201642298323 0.07122733984507038 -0
+-0.7832436964692733 0.3559320178977761 -0
+-0.9567409952467081 0.3936592180481196 -0
+-0.07051207140806529 0.2582067250842212 -0
+-0.7099622937740261 0.7276738752308677 -0
+-0.1014583079901075 0.95638111479024 -0
+-0.4499228442608977 0.9538814849325074 -0
+-0.1030852809814355 0.3976073852079072 -0
+-0.04984929281535126 0.3996441725551908 -0
+-0.4482507595219417 0.2754010344277871 -0
+-0.1813424596611496 0.4144885487289872 -0
+-0.231950106770404 0.2292909517457235 -0
+-0.8901963669170783 0.4668494668056105 -0
+-0.1200948228160243 0.6110079763447614 -0
+-0.6921782757260941 0.8720566258177529 -0
+-0.3767727909273819 0.3890387044776477 -0
+-0.1611567737615249 0.7114553414250014 -0
+-0.6165694765680606 0.3140960152599555 -0
+-0.04797595048221778 0.3198442001375202 -0
+-0.7811201539182008 0.6944661923457073 -0
+-0.3234198378438556 0.2870532054132391 -0
+-0.4087496216482066 0.01833113926329197 -0
+-0.2999248957301561 0.09068362129347186 -0
+-0.2851370967187258 0.3282838592779842 -0
+-0.1674228850681419 0.2443788538420248 -0
+-0.5694380259236591 0.8063232185034489 -0
+-0.4040610821960615 0.1501140641514807 -0
+-0.2115503496581855 0.2549368827475119 -0
+-0.2385282658963647 0.1216278416753835 -0
+-0.6847215494282377 0.3621608653050374 -0
+-0.096614745930689 0.2869430183733715 -0
+-0.3227293955839018 0.8586547694627601 -0
+-0.1633255943164874 0.2111925205243693 -0
+-0.1645240944196772 0.3070935573906358 -0
+-0.2199679812129706 0.1814318250936284 -0
+-0.2166917264250524 0.2163053150982223 -0
+-0.7261721345709768 0.7720612564647876 -0
+-0.06805611924092941 0.2887321997955569 -0
+-0.08260648361750174 0.2918648115672005 -0
+-0.07172047841890219 0.3036123898323878 -0
+-0.7864689798568925 0.1206506874146168 -0
+-0.7664233166235228 0.145187417501502 -0
+-0.7614334151407725 0.1115310200396548 -0
+-0.8935269369787717 0.9681677846902254 -0
+-0.900628239632945 0.9383203456755749 -0
+-0.9356727312253048 0.9701525609853493 -0
+-0.1415417221190943 0.4846811508697792 -0
+-0.15766827990702 0.4971003313401691 -0
+-0.1330738157757818 0.5078378613523947 -0
+-0.3241069911123705 0.2505428825777012 -0
+-0.31866542900801 0.2681972724221556 -0
+-0.3038088676072423 0.2580493228203309 -0
+-0.02565618074237677 0.5555740095417966 -0
+-0.02565618074237677 0.5779663227193204 -0
+-0.2730458549607062 0.0112413204707557 -0
+-0.2890493495125007 0.01141141423610483 -0
+-0.2870609078136688 0.02265273470686053 -0
+-0.3296070023887417 0.3762813995291467 -0
+-0.3091285543787909 0.3682901038152957 -0
+-0.326597186081655 0.3585478710091475 -0
+-0.3229818624830257 0.3426296650723888 -0
+-0.3434603104929765 0.3506209607862399 -0
+-0.1612940600491472 0.4537991148017327 -0
+-0.1766492524703928 0.4360750954719972 -0
+-0.1814913786715781 0.456219601527818 -0
+-0.1410611199503225 0.5614447985571148 -0
+-0.1645486710559459 0.578895756207004 -0
+-0.1409275442684343 0.5868668041700708 -0
+-0.5676667627582925 0.9598999454379392 -0
+-0.5377651245358099 0.9646663176430846 -0
+-0.5340033158639437 0.9245662630810241 -0
+-0.2390794608277451 0.5002706437666792 -0
+-0.2598719641628248 0.5033642971074758 -0
+-0.2469874565714547 0.5195500496720244 -0
+-0.0495179734651768 0.358785052938963 -0
+-0.04252174327558152 0.3758162184645334 -0
+-0.0346507890498125 0.3577734298265445 -0
+-0.6453774420803036 0.1947794573971879 -0
+-0.6272301476249695 0.2180136194260112 -0
+-0.6237652696723417 0.1887306639124849 -0
+-0.6192689658027073 0.1682395899286144 -0
+-0.6011216713473732 0.1914737519574378 -0
+-0.4278022183644524 0.3611301513605844 -0
+-0.4528080236279869 0.3736236283853823 -0
+-0.4356775538955624 0.386379368598938 -0
+-0.8578126512644365 0.9681677846902254 -0
+-0.01655483919565233 0.4371450030269414 -0
+-0.01318997472866846 0.4170094818461056 -0
+-0.0297448139243208 0.4265339668542925 -0
+-0.5027894368706074 0.6790309257095705 -0
+-0.5256179804815926 0.6465236950933765 -0
+-0.5306840775976791 0.6821091166780552 -0
+-0.142254959095041 0.6076628690823607 -0
+-0.1187674079894176 0.5902119114324716 -0
+-0.02163981151609816 0.5298647039515169 -0
+-0.04729599225847493 0.5395895597469597 -0
+-0.5879090355565668 0.02430344587050436 -0
+-0.567650508934612 0.04381915350079058 -0
+-0.5703752534778759 0.01951570763028622 -0
+-0.9581793641533953 0.5040829106653317 -0
+-0.923582887321299 0.4738852083285954 -0
+-0.9654035231679037 0.4698022976619554 -0
+-0.6196687092709933 0.1450662803820083 -0
+-0.5970251109460247 0.1478093684269612 -0
+-0.4098056423219633 0.3973955075428888 -0
+-0.4348114475854977 0.4098889845676867 -0
+-0.63136403062544 0.2454944085767727 -0
+-0.6097518582174782 0.2394456150920696 -0
+-0.5020508388217613 0.9646663176430846 -0
+-0.8758403848429803 0.6601404193161092 -0
+-0.8920180973166709 0.630374080927642 -0
+-0.9186650025372742 0.6540347389362132 -0
+-0.3331700704414851 0.5839273381338853 -0
+-0.3562347432669832 0.5984934762262649 -0
+-0.330533122014159 0.6126029961947029 -0
+-0.3878893867312961 0.5699144135829922 -0
+-0.3797103218537398 0.5473634335970065 -0
+-0.4087280168907266 0.5474600290145514 -0
+-0.9015409058297258 0.2581658916763767 -0
+-0.8775775772138441 0.281373787543382 -0
+-0.8628015636512225 0.2461027531056742 -0
+-0.1459507196757609 0.4627192653579748 -0
+-0.1411085934745756 0.4425747593021539 -0
+-0.3536477372751067 0.5489975679066542 -0
+-0.3744863674345372 0.5265431833382134 -0
+-0.6174499913475944 0.4981575398379575 -0
+-0.6050460681978695 0.4658087711314173 -0
+-0.6391978462125589 0.4797907220282107 -0
+-0.622222096511136 0.5321970928717582 -0
+-0.5880703184964466 0.5182151419749649 -0
+-0.1213562555445227 0.4734567953702004 -0
+-0.8639801950431832 0.6047275649467146 -0
+-0.906804812737477 0.5986218845668188 -0
+-0.468676184012753 0.09652254899052852 -0
+-0.4487782898237354 0.09183708463524191 -0
+-0.4643418311975408 0.08106892998305278 -0
+-0.302402117028392 0.01141141423610483 -0
+-0.4753948015885654 0.06978918320866874 -0
+-0.4554969073995477 0.06510371885338213 -0
+-0.05604042783750089 0.2856446891266982 -0
+-0.06692643303610044 0.273897110861511 -0
+-0.04239777954921085 0.4343172327327295 -0
+-0.03903291508222699 0.4141817115518937 -0
+-0.06968810660392416 0.6408013824127835 -0
+-0.04850493938556795 0.6579270736803896 -0
+-0.0555375133726106 0.6269243012829627 -0
+-0.1950097152389658 0.2306450669189946 -0
+-0.1988032190637234 0.2455605416337965 -0
+-0.184140611666057 0.2417757994549653 -0
+-0.8058513623352171 0.1000399183569851 -0
+-0.8108412638179675 0.1336963158188323 -0
+-0.2534256368839128 0.06847844135591484 -0
+-0.2607089420060868 0.07710132237376063 -0
+-0.2465183891571425 0.08119404999548814 -0
+-0.7177480308958037 0.9572548272046667 -0
+-0.7488227997580654 0.9259613092951592 -0
+-0.7453604831485716 0.9687064820904923 -0
+-0.2611684336299202 0.1411789413527796 -0
+-0.2722342587377911 0.1530838071122167 -0
+-0.2569778601654139 0.1550638354539801 -0
+-0.05455809907719519 0.6103329156998059 -0
+-0.03337493185883897 0.6274586069674118 -0
+-0.03132776630844076 0.6805879944170794 -0
+-0.05459064422448885 0.6983943491611372 -0
+-0.02326287791604809 0.7071781887680061 -0
+-0.8220983655503987 0.9681677846902254 -0
+-0.7810747688626094 0.9687064820904923 -0
+-0.8174588486986227 0.9368742667807178 -0
+-0.5494022011233446 0.479487382023306 -0
+-0.5356410599451968 0.4560415472806695 -0
+-0.5695370721547575 0.4607297541985277 -0
+-0.2334411609860463 0.5366343618072179 -0
+-0.2542336643211259 0.5397280151480147 -0
+-0.1410169766447756 0.6576036423030748 -0
+-0.1612181341273519 0.6411780263707608 -0
+-0.1583748482477541 0.6636226471515504 -0
+-0.2437710018989862 0.1595231193045175 -0
+-0.2303227535051164 0.1674399135940877 -0
+-0.2324637866636733 0.1510757639841132 -0
+-0.6674767034189151 0.4820010193359919 -0
+-0.6550727802691902 0.4496522506294517 -0
+-0.06985824468260535 0.545078513042106 -0
+-0.06584187545632673 0.5193692074518262 -0
+-0.4036257819946527 0.05694773198122317 -0
+-0.4159579161433418 0.03990466848930418 -0
+-0.4223364453687688 0.05510420313865739 -0
+-0.5281845177479652 0.1463142105735243 -0
+-0.5121908684508291 0.1396611663059652 -0
+-0.5285285854333197 0.1205049541888911 -0
+-0.591562051851895 0.2579095111829511 -0
+-0.5874281688514245 0.2304287220321897 -0
+-0.1190805923719487 0.2661552258510719 -0
+-0.1331436426672084 0.2642997451360985 -0
+-0.1326915215356246 0.2796270709013443 -0
+-0.4358636716776652 0.4374893250542485 -0
+-0.4368019574327752 0.4631559857856525 -0
+-0.4098778217670086 0.4465717842430415 -0
+-0.1334608277518911 0.2501925045302066 -0
+-0.1470717569155671 0.2636643495804789 -0
+-0.2548368270068569 0.1714279850639546 -0
+-0.8165446037748397 0.02728988287838166 -0
+-0.800982613431837 0.04693315101854093 -0
+-0.7861710834395196 0.01964326814015928 -0
+-0.4398632084709402 0.1736787771139502 -0
+-0.4528577383734401 0.1915011942012797 -0
+-0.4307859914043797 0.1951994829497833 -0
+-0.2564062549392817 0.05657914700624961 -0
+-0.3037761916588302 0.6941982257878142 -0
+-0.2734581983135052 0.6953404489874498 -0
+-0.2785435600729081 0.6724113116016627 -0
+-0.3423090101222158 0.1049483635293858 -0
+-0.3274573482070634 0.1058432992009599 -0
+-0.3386082368199514 0.08879262829390507 -0
+-0.6508621383729285 0.5467962807167392 -0
+-0.6214824655217808 0.5668538828537467 -0
+-0.2659824490523738 0.8576824176241914 -0
+-0.2312549767069607 0.8705065165624409 -0
+-0.2301385943865536 0.8434869236885142 -0
+-0.3553726129100268 0.104243315005937 -0
+-0.3694116863166671 0.09419677362340011 -0
+-0.3713244004915899 0.110542396007006 -0
+-0.5756515857515575 0.4195632527885901 -0
+-0.6111605817946697 0.4246422697214797 -0
+-0.591284927019722 0.4423629363887809 -0
+-0.1026756929341566 0.5101384208144887 -0
+-0.118387957463575 0.5157692790610299 -0
+-0.1041163924098756 0.5304890189935138 -0
+-0.5536939430194427 0.1424148021090184 -0
+-0.5373562260369522 0.1615710142260925 -0
+-0.9729968353781745 0.52768381618852 -0
+-0.9311761995315699 0.5317667268551599 -0
+-0.2522468475698495 0.1281252596643371 -0
+-0.2675032461422267 0.1261452313225738 -0
+-0.1897191347724097 0.2209627116608336 -0
+-0.2043817421700761 0.2247474538396648 -0
+-0.9718513473350379 0.02814148437555385 -0
+-0.9366498955296799 0.02814148437555385 -0
+-0.05693456294185401 0.3464087997644977 -0
+-0.06480551716762303 0.3644515884024865 -0
+-0.3825487011483245 0.3293947107345377 -0
+-0.3595820589860464 0.3425473452199658 -0
+-0.3628116290566253 0.3215501203640531 -0
+-0.6554670348247422 0.2537906842911421 -0
+-0.637988745417251 0.2752226799572005 -0
+-0.2334552606176764 0.2795954624303055 -0
+-0.2242974802526475 0.2643132238612272 -0
+-0.2446608899132329 0.2679289203521708 -0
+-0.3675777763127446 0.2160211288441959 -0
+-0.3603564775551596 0.2324575566020076 -0
+-0.347669605341631 0.2105640793879988 -0
+-0.365849636416904 0.3036924633876915 -0
+-0.3428829942546261 0.3168450978731196 -0
+-0.01377039233898199 0.3210285429883208 -0
+-0.02284724409922007 0.3283945672813715 -0
+-0.009076851760238083 0.3375942073431905 -0
+-0.3276368804882754 0.01563196578410393 -0
+-0.3140549901461557 0.02704338002020876 -0
+-0.316646292707583 0.01141141423610483 -0
+-0.1063403958055034 0.2697050792190301 -0
+-0.1067925169370872 0.2543777534537844 -0
+-0.8347188788509197 0.8635520629380785 -0
+-0.8589206440668649 0.8898058153269497 -0
+-0.8342806801704667 0.9100818169915798 -0
+-0.09068090813451352 0.6303895912318459 -0
+-0.08364833414747086 0.6613923636292728 -0
+-0.1569413101507708 0.5368653962084163 -0
+-0.1681825990994996 0.5175551295007303 -0
+-0.1759235356865629 0.5341634838863619 -0
+-0.3143700190065404 0.5772280352746528 -0
+-0.3400716402593646 0.5631185153062148 -0
+-0.1688971967545557 0.4240715787374496 -0
+-0.1890945153769866 0.4264920654635349 -0
+-0.8839864344038699 0.8637497851848356 -0
+-0.8835482357234171 0.9102795392383367 -0
+-0.1845454684288907 0.5506699539648955 -0
+-0.1957867573776195 0.5313596872572094 -0
+-0.5640038703797265 0.5007315846550275 -0
+-0.530107858170166 0.4960433777371694 -0
+-0.5012246305243551 0.2234316229818329 -0
+-0.4974418972154506 0.2434108326101425 -0
+-0.4767115821241012 0.2295907849844687 -0
+-0.1186909490902525 0.2356541079607209 -0
+-0.1076017859688967 0.2408988915357887 -0
+-0.6253913371050388 0.1159623265173532 -0
+-0.6476351919617214 0.1363925480190063 -0
+-0.494188747192998 0.1482859273085621 -0
+-0.4945328148783524 0.1224766709239289 -0
+-0.8924597902517666 0.310923850364144 -0
+-0.8537204480732634 0.2988607117934415 -0
+-0.04185393952408856 0.5880830433607472 -0
+-0.01619775878171178 0.6007505007428281 -0
+-0.545239896350299 0.8867890270624925 -0
+-0.5153382581278163 0.8915553992676379 -0
+-0.16446974224186 0.6847125707870189 -0
+-0.1846708997244363 0.6682869548547049 -0
+-0.0866540953824244 0.5418682658105552 -0
+-0.06810821218457259 0.5620886181056887 -0
+-0.9654035231679037 0.4340880119477685 -0
+-0.1422554518385641 0.5447968139170515 -0
+-0.1345145152515008 0.5281884595314199 -0
+-0.9624447459898235 0.8354133235120417 -0
+-0.9624447459898235 0.7996990377976617 -0
+-0.3442217242971386 0.1212939859129918 -0
+-0.07056282510102165 0.863009916008138 -0
+-0.08093342145094766 0.8308145468623463 -0
+-0.1001492381167602 0.8631108658369523 -0
+-0.01377039233898199 0.3067843673090478 -0
+-0.4535049348510237 0.4768257863501047 -0
+-0.4275190849403672 0.4859082455388977 -0
+-0.273345859834396 0.7178279566847722 -0
+-0.248113228248474 0.6960410424986208 -0
+-0.4029164699799189 0.2433792478348274 -0
+-0.4160262887514349 0.2640499178119237 -0
+-0.3933744672977893 0.258585276035301 -0
+-0.6908944433697715 0.9702962173293075 -0
+-0.6943567599792653 0.9275510445339744 -0
+-0.02163981151609816 0.5088737109521352 -0
+-0.3596141005197057 0.2493027191188653 -0
+-0.3397059295485921 0.2438456696626682 -0
+-0.5709735445723833 0.1258970286684027 -0
+-0.5801452528613702 0.1411538323209709 -0
+-0.3724562838916433 0.1964742262003742 -0
+-0.3851431561051719 0.2183677034143829 -0
+-0.1186343250510524 0.5527678618801184 -0
+-0.3758341166071981 0.2576243488371527 -0
+-0.3889439353787141 0.278295018814249 -0
+-0.6595862699708673 0.1786256673565648 -0
+-0.6630511479234951 0.2079086228700912 -0
+-0.1796487082902683 0.2704535607675571 -0
+-0.1916438131375781 0.2761605004521973 -0
+-0.1833584059370317 0.2899227870499872 -0
+-0.2875431388615469 0.1533202303813886 -0
+-0.2833525653970405 0.1672051244825891 -0
+-0.2761485311966103 0.4823962949736777 -0
+-0.2840565269403199 0.501675700879023 -0
+-0.02290413119034669 0.3598824134941781 -0
+-0.02990036137994197 0.3428512479686077 -0
+-0.4818102013856763 0.04799057342372019 -0
+-0.4906551251836694 0.06395578455339082 -0
+-0.8474780801878515 0.02728988287838166 -0
+-0.04624916306144975 0.2916552341224977 -0
+-0.04511947685662077 0.2768201451884517 -0
+-0.8064176060706496 0.0707870278547665 -0
+-0.7760440857353295 0.06314041311654411 -0
+-0.6065173006203821 0.01892089924351318 -0
+-0.6037925560771182 0.04322434511401754 -0
+-0.3714333698595632 0.7309676414328582 -0
+-0.3799631185353461 0.7534441583101469 -0
+-0.3515176977816882 0.7584804761171099 -0
+-0.2217250254575404 0.3173646352310117 -0
+-0.2054844740926653 0.3139617027705365 -0
+-0.2115940621492167 0.2990326591951025 -0
+-0.09681504678270009 0.3544520245614142 -0
+-0.1135930281295611 0.3464087550151826 -0
+-0.1104860099145095 0.3641197776705076 -0
+-0.4906598265087878 0.9010004569504265 -0
+-0.501896406995143 0.863223220931895 -0
+-0.2207359586757551 0.3536188439263083 -0
+-0.2068394482254945 0.3653902993923235 -0
+-0.2017189269507285 0.3440651342724609 -0
+-0.5479829403003479 0.01951570763028622 -0
+-0.3579414452653852 0.07029232824999541 -0
+-0.3726730103226221 0.06157257855301815 -0
+-0.3681914637923408 0.07917794292535378 -0
+-0.4311445487675761 0.0190305698233692 -0
+-0.4460239844370334 0.01471924404654032 -0
+-0.4495480151869153 0.03374981386990952 -0
+-0.1926757691595447 0.7801056003967075 -0
+-0.1739492032847694 0.7951373764972361 -0
+-0.1597903625721089 0.7691197602523234 -0
+-0.5141414556859469 0.3706583445939013 -0
+-0.4973246440318533 0.3812227465262714 -0
+-0.498617039550786 0.3523702686031551 -0
+-0.02567350421760457 0.8162233354087501 -0
+-0.02567350421760457 0.847156811821732 -0
+-0.7975984627811306 0.8439730555273153 -0
+-0.8222384266775286 0.8236970538626852 -0
+-0.9718513473350379 0.06385577008976852 -0
+-0.4747674156807055 0.4820600077516091 -0
+-0.4654845431882975 0.5048122675048543 -0
+-0.4617355832512643 0.4264731861102977 -0
+-0.3400787114217161 0.01337025590184947 -0
+-0.3374874088602888 0.0290022216859534 -0
+-0.1289859502967938 0.2944532262048996 -0
+-0.1430490005920534 0.2925977454899261 -0
+-0.2408266418961768 0.2928233752884135 -0
+-0.2204632322355914 0.2892076787974698 -0
+-0.978445011316954 0.8720947968722977 -0
+-0.9408897573067776 0.8503652632418596 -0
+-0.5315189681935283 0.2587524208697528 -0
+-0.5455966540507728 0.2430721443652889 -0
+-0.5551606766285967 0.2645728946275349 -0
+-0.4772460318908471 0.666172552248563 -0
+-0.4823121290069335 0.7017579738332418 -0
+-0.01717717307712719 0.6667109132872586 -0
+-0.04235544936014692 0.3061543404936229 -0
+-0.0314344983792668 0.2973297965553764 -0
+-0.2897983143888536 0.1371114243673571 -0
+-0.300916621048103 0.1512327417377295 -0
+-0.4712146354365032 0.1897960318608028 -0
+-0.4621374183699426 0.2113167376966359 -0
+-0.2378361345552492 0.8953865556969184 -0
+-0.201992279889429 0.8811910617612412 -0
+-0.5514852951763438 0.1081411988012718 -0
+-0.5779366050182713 0.1068802290132243 -0
+-0.4841473093011917 0.01471924404654032 -0
+-0.4644699398887789 0.01471924404654032 -0
+-0.1157496480031424 0.8862441157829176 -0
+-0.1261202443530684 0.8540487466371259 -0
+-0.1759612837400336 0.7004161099575873 -0
+-0.1496652322633513 0.6957518022544329 -0
+-0.5889711478454233 0.6913972728583643 -0
+-0.6174129244891113 0.7019005840243405 -0
+-0.592170362070511 0.7203834317326124 -0
+-0.4891469981286078 0.4644363508511536 -0
+-0.5011266064658816 0.4924228320059033 -0
+-0.886918822859649 0.7936651061971215 -0
+-0.8702658012762381 0.7575664674841945 -0
+-0.9082364703962363 0.7775851511686765 -0
+-0.1707495227693486 0.3308443145573569 -0
+-0.1862421351937945 0.3407618574144287 -0
+-0.172329804076022 0.3459190468814043 -0
+-0.9581584596961736 0.2895756059138384 -0
+-0.9719007110332973 0.3169040719746457 -0
+-0.930059170729471 0.3207653921748918 -0
+-0.2060015345294278 0.3827259072940144 -0
+-0.1869845028044011 0.373172197640167 -0
+-0.2005129832239528 0.2663355200545645 -0
+-0.2042226808707162 0.2858047463369946 -0
+-0.3066073747018553 0.1851328280670314 -0
+-0.3144153885444479 0.1723394397843906 -0
+-0.3223613177255069 0.1900307200996608 -0
+-0.5357920597067584 0.7122482339304428 -0
+-0.5586206033177437 0.6797410033142487 -0
+-0.6559224494053555 0.3109798530725575 -0
+-0.6331613128811091 0.3262683828667504 -0
+-0.6393306130923069 0.2988074854657627 -0
+-0.3091254812336915 0.4541421485401392 -0
+-0.3318962480434045 0.4436566224863192 -0
+-0.3231038607838184 0.4702221726914048 -0
+-0.9113872495617467 0.1383016190147063 -0
+-0.8945087660961135 0.1661605447818613 -0
+-0.873412069000259 0.1347732966100029 -0
+-0.2001386456440551 0.3289904019484134 -0
+-0.1900076823357313 0.3106584259125043 -0
+-0.9729968353781745 0.5633981019028942 -0
+-0.5530831109334962 0.4055209031003654 -0
+-0.5729587657084438 0.3878002364330643 -0
+-0.107621608585527 0.2842127849948446 -0
+-0.09533353315066546 0.272435312597557 -0
+-0.3002299662893363 0.1976038844556553 -0
+-0.2922840371082773 0.179912604140385 -0
+-0.4057239376747815 0.7550832276058422 -0
+-0.3858082655969065 0.7825960622900939 -0
+-0.08390567988455146 0.5099817638778196 -0
+-0.09817724493825095 0.4952620239453358 -0
+-0.2859984212489914 0.2666574693620977 -0
+-0.291439983353352 0.2490030795176434 -0
+-0.9096244194623527 0.1962918622126167 -0
+-0.8716492389008651 0.1927635398079134 -0
+-0.5743612183980553 0.1834017727752032 -0
+-0.5788575222676897 0.2038928467590736 -0
+-0.2450831126682881 0.2173792174924671 -0
+-0.2475383734211178 0.2007903983253513 -0
+-0.2578702003785849 0.2129022579370457 -0
+-0.03459390195868588 0.3262855836137379 -0
+-0.6152276088930047 0.2905112097513933 -0
+-0.3551835686006305 0.2690124618978133 -0
+-0.5370260074670381 0.2165362690921729 -0
+-0.5606677159021065 0.2223567428499551 -0
+-0.2544454113155115 0.3035537929845167 -0
+-0.2414533829334265 0.3131660093516811 -0
+-0.4648216681297345 0.1191960677846217 -0
+-0.4803852095035399 0.1084279131324326 -0
+-0.5593633832482412 0.8513017679261724 -0
+-0.5780284409843686 0.8843126317395585 -0
+-0.1793077014006045 0.8186930584276385 -0
+-0.1464222948131687 0.8077072182832544 -0
+-0.5732764846087059 0.2724327965053404 -0
+-0.5591987987514614 0.2881130730098042 -0
+-0.534312495571812 0.4183973709864544 -0
+-0.5316196755286984 0.3866343546309286 -0
+-0.2192807255699645 0.4967893662309632 -0
+-0.2321652331613346 0.4806036136664146 -0
+-0.5004688463633956 0.02107858738422113 -0
+-0.4807489879185765 0.03579783143076145 -0
+-0.3044941190377788 0.5031411758644415 -0
+-0.2882175520039932 0.5241091779982396 -0
+-0.6422705311790617 0.6839493417891157 -0
+-0.6454697454041495 0.7129355006633639 -0
+-0.7239136821840849 0.3193488495675569 -0
+-0.7068160380474338 0.3360798458517446 -0
+-0.7041012056101112 0.3037096694791371 -0
+-0.2759693661942503 0.05484147124131904 -0
+-0.2875243752407659 0.05754204914878344 -0
+-0.2791711987793727 0.06708629164165174 -0
+-0.06401652103786018 0.5875487376762981 -0
+-0.2353437948768751 0.328095052927115 -0
+-0.278404793501096 0.2387238166814291 -0
+-0.2962152398593469 0.2301156701396623 -0
+-0.6941637479464722 0.4762803140293184 -0
+-0.6782888138898409 0.5064187854280773 -0
+-0.3862602767839002 0.4211650779775309 -0
+-0.3701769042416419 0.405231868460536 -0
+-0.3928561634696403 0.4049719139946426 -0
+-0.8170330821736951 0.7888822344822807 -0
+-0.8541534982434842 0.808461241893044 -0
+-0.1541376789492156 0.6197383916711225 -0
+-0.1319775426701989 0.6230834989335233 -0
+-0.3248493681478245 0.2336977200608435 -0
+-0.121407413221619 0.6655144177660998 -0
+-0.1242506991012168 0.6430697969853102 -0
+-0.5102781284283793 0.05429020415220216 -0
+-0.5038627286312682 0.07608881393715071 -0
+-0.7465620573441321 0.3762238171269598 -0
+-0.7549361055453404 0.3538255219189703 -0
+-0.7748696482680649 0.3783303131057656 -0
+-0.7162726225416234 0.6966433365074099 -0
+-0.7518515526137108 0.6800394950648297 -0
+-0.7455412238461134 0.7110700337882875 -0
+-0.2906821562976828 0.375300580814721 -0
+-0.2952366551902652 0.3967585848119455 -0
+-0.2737804408020704 0.3860355332913716 -0
+-0.9167517590200347 0.8489536494889131 -0
+-0.9327520243471652 0.8856351228491691 -0
+-0.4551869679130824 0.1344822151474807 -0
+-0.4434779424222955 0.1225768510055767 -0
+-0.5970418980879793 0.9052674150331559 -0
+-0.6111653849859215 0.8697801558968358 -0
+-0.5876229683166501 0.37066567073393 -0
+-0.5650544934985887 0.3566233210457053 -0
+-0.07684745803248016 0.3167081149315398 -0
+-0.06229709365590785 0.3135755031598962 -0
+-0.3177702905652169 0.7521730003737092 -0
+-0.3263000392409998 0.7746495172509981 -0
+-0.5329120710476312 0.3577818767078123 -0
+-0.3314644299503587 0.6797158495018694 -0
+-0.3263790681909557 0.7026449868876564 -0
+-0.08777843518510899 0.2819638199518706 -0
+-0.09144279436308175 0.2968440099887014 -0
+-0.3407494430245898 0.4245008153892389 -0
+-0.3306763625912038 0.4110904456220155 -0
+-0.353507937122516 0.408014662676201 -0
+-0.5483230686172471 0.7442752320927646 -0
+-0.5203865428971826 0.7466433454565711 -0
+-0.4973402417125577 0.7662361708896337 -0
+-0.4848092328020689 0.7342091727273119 -0
+-0.2226881250427574 0.1475483902332975 -0
+-0.2361363734366271 0.1396315959437273 -0
+-0.3851858354156875 0.5074328751881295 -0
+-0.3591232508370545 0.5090670094977772 -0
+-0.2190416290203831 0.4313889419656641 -0
+-0.2381844001935277 0.439320044668935 -0
+-0.2159893422659683 0.4464266849013536 -0
+-0.9350506597024244 0.7742814470214832 -0
+-0.9183976381190135 0.7381828083085561 -0
+-0.4395562582629906 0.05722230263725227 -0
+-0.4272241241143014 0.07426536612917127 -0
+-0.4868908781027376 0.1677254555280225 -0
+-0.469232824530261 0.1505409601459862 -0
+-0.7141724207570634 0.4568891011012352 -0
+-0.6958229721133601 0.4279826816327688 -0
+-0.7266437553948771 0.433009234796771 -0
+-0.4585915750206943 0.7913559079754814 -0
+-0.4334946515801432 0.8065724746881887 -0
+-0.436666008176893 0.7690185648730818 -0
+-0.2719518516955957 0.07746741117549984 -0
+-0.2650446039688252 0.09018301981507314 -0
+-0.1097775091883521 0.3791400153657915 -0
+-0.1265554905352131 0.3710967458195599 -0
+-0.205551189401086 0.6614824976987194 -0
+-0.2342810759056065 0.6535708258542818 -0
+-0.2194956802230627 0.6814652066457357 -0
+-0.9161209428146454 0.2310721587486398 -0
+-0.9308969563772669 0.2663431931863476 -0
+-0.7758393044247094 0.1749428860340109 -0
+-0.8087039564375991 0.1811132686029559 -0
+-0.7930843795226656 0.2017490697605028 -0
+-0.6735723886783501 0.528929652333788 -0
+-0.6728327576889949 0.5635864423157765 -0
+-0.09812575255900213 0.6780367188690729 -0
+-0.07713295102841279 0.6884485100500105 -0
+-0.02326287791604809 0.7343611538061868 -0
+-0.2046065344981888 0.4578089591643906 -0
+-0.1892513420769432 0.4755329784941261 -0
+-0.2988666769450026 0.2113302578428749 -0
+-0.2845433393514247 0.2061100339162285 -0
+-0.2645222383104282 0.2435511515817858 -0
+-0.2692974948164232 0.2246637422038048 -0
+-0.3150281195895776 0.4068001153351742 -0
+-0.2981264040939652 0.4175350678118248 -0
+-0.1994562954069801 0.6403925740632509 -0
+-0.3547278225747166 0.4405808395405046 -0
+-0.7342962285925438 0.7338349855281008 -0
+-0.7698751586646313 0.7172311440855206 -0
+-0.7417271558289993 0.3032689041935474 -0
+-0.7444419882663218 0.3356390805661549 -0
+-0.3937222697797049 0.3814622980258939 -0
+-0.126082965884899 0.307989102265242 -0
+-0.1157254868284702 0.2950184276766601 -0
+-0.3433604129189947 0.07301587276784496 -0
+-0.3478419594492759 0.05541050839550933 -0
+-0.8975628193853902 0.5405705949589316 -0
+-0.8721122437267099 0.5443059436261904 -0
+-0.8909081526481106 0.5119011699992305 -0
+-0.9662419733288006 0.191987290735897 -0
+-0.9727384966810932 0.2267675872719201 -0
+-0.9389804700098938 0.2044691637225877 -0
+-0.9662419733288006 0.1562730050217156 -0
+-0.384143251373904 0.08547702392642284 -0
+-0.08081237173767923 0.5843384904447473 -0
+-0.514238425763206 0.2549680767461249 -0
+-0.4897253773629521 0.2611272387487606 -0
+-0.5319719350419232 0.1806456451337187 -0
+-0.5574813603134008 0.1767462366692129 -0
+-0.2605287066309371 0.0112413204707557 -0
+-0.2599267974702931 0.02349346295781985 -0
+-0.540967043749105 0.07777381634102778 -0
+-0.5354916458792077 0.1014881545337128 -0
+-0.5180103340060808 0.09013757172864707 -0
+-0.3687455680184946 0.1814815674962145 -0
+-0.3863109478109218 0.1838281420664014 -0
+-0.3312296741289451 0.6492191113445548 -0
+-0.3538325506610707 0.657665872444397 -0
+-0.267434586870245 0.1018203291254718 -0
+-0.2816853688608313 0.1020316739601023 -0
+-0.2728324420727423 0.1133028944687618 -0
+-0.7397742648090653 0.10944889386738 -0
+-0.7598199280424349 0.08491216378049481 -0
+-0.2667842226524819 0.2909036224721612 -0
+-0.2637241036366814 0.2704111924903296 -0
+-0.2766896560109015 0.2781036560412417 -0
+-0.3100163120315709 0.6520118050098648 -0
+-0.3323844327422829 0.6299618279523924 -0
+-0.0930964538966131 0.3217430017550603 -0
+-0.08367306913361876 0.3317061150825688 -0
+-0.6488410072713826 0.9156636869245242 -0
+-0.6611785589078132 0.881395782504093 -0
+-0.6798407240896636 0.906324530238184 -0
+-0.9727384966810932 0.2624818729861015 -0
+-0.417732646444699 0.8289335532936097 -0
+-0.3958070796008977 0.8065962101912102 -0
+-0.2717527555692528 0.2080749230366889 -0
+-0.7355647160513201 0.5675669889817044 -0
+-0.7657622603648306 0.5590241189679558 -0
+-0.7513875721896908 0.5907755749126978 -0
+-0.2962385175405902 0.04739449254350726 -0
+-0.2994403501257126 0.05963931294383997 -0
+-0.5981858063240665 0.3498585031420886 -0
+-0.6060900785339216 0.3810354185294476 -0
+-0.7966729707980047 0.3894534978138638 -0
+-0.815953876639777 0.4090859623025422 -0
+-0.7857765059086289 0.4203610728024336 -0
+-0.4961705580992402 0.1875409990233788 -0
+-0.4811097027997644 0.4183598741457761 -0
+-0.4821619268919319 0.4459602146323379 -0
+-0.3800067238955682 0.6409575737640935 -0
+-0.3719081420312114 0.6158879976813291 -0
+-0.3983170710871224 0.62967643715834 -0
+-0.9726059137126009 0.7602966949375413 -0
+-0.3311916951784969 0.2738720187963825 -0
+-0.3108935716733687 0.2813784590390122 -0
+-0.5135432184617396 0.7912302121618167 -0
+-0.4779659083666259 0.7787960394325575 -0
+-0.4867662096630555 0.3991918340703767 -0
+-0.5071925533037231 0.4186788625924169 -0
+-0.869433885459814 0.6926116228615707 -0
+-0.8427869802392107 0.6689509648529995 -0
+-0.1148920301025609 0.6925705641868375 -0
+-0.3201733393807104 0.1164586769912162 -0
+-0.316472566078446 0.1003029417557354 -0
+-0.0693875605837475 0.7987951560073104 -0
+-0.04420359191756369 0.8021613678578623 -0
+-0.06224414406610204 0.7702429268316405 -0
+-0.7557444020527185 0.4313221312894963 -0
+-0.7373949534090152 0.4024157118210299 -0
+-0.5797455093930842 0.164327141867577 -0
+-0.2674109636897316 0.3112462565354288 -0
+-0.4747945517698762 0.8163499492476644 -0
+-0.9256940299699502 0.9122643155334608 -0
+-0.3485276277941948 0.7120832849207663 -0
+-0.3208393895026663 0.7265656612067112 -0
+-0.3099478053899049 0.1610495168008443 -0
+-0.3257017484135565 0.1659474088334738 -0
+-0.5956001739747597 0.2814496895652203 -0
+-0.583863165736344 0.6612581556059768 -0
+-0.4031472217823502 0.6903386684334999 -0
+-0.4315921884893263 0.6718228068066694 -0
+-0.4283237573201972 0.7074154619990648 -0
+-0.9674213575054824 0.6335627717019731 -0
+-0.9674213575054824 0.5978484859875931 -0
+-0.175147045988584 0.8916265487394049 -0
+-0.1685658881402956 0.8667465096049275 -0
+-0.8140147784951897 0.2528919823176183 -0
+-0.8082945802243706 0.273882288837053 -0
+-0.7834711236842193 0.2574636221819917 -0
+-0.8443353324738933 0.4018429704611868 -0
+-0.8334388675845175 0.4327505454497566 -0
+-0.8248308796108135 0.293418509228609 -0
+-0.7942872247998432 0.2979901490929823 -0
+-0.2281091318786553 0.340607660745179 -0
+-0.2332296531534214 0.3619328258650417 -0
+-0.2478374893545414 0.3364090348658483 -0
+-0.9123802906101692 0.5641715004821198 -0
+-0.4039065625929752 0.1880989333165075 -0
+-0.4139735904746058 0.1980072262534397 -0
+-0.4000886915657011 0.2087290937074933 -0
+-0.4478890988228221 0.1539217433669412 -0
+-0.6856562676298767 0.5903857578125871 -0
+-0.7083665179352983 0.5725191294296358 -0
+-0.07554847812929716 0.3744954443968455 -0
+-0.08572757628377999 0.3885127854301923 -0
+-0.06756802584542865 0.3908451826102986 -0
+-0.2213725205073528 0.2013703580330292 -0
+-0.2139808682584276 0.189452591639457 -0
+-0.2273596334618958 0.1933495914872006 -0
+-0.4308208611153326 0.7398666608931349 -0
+-0.4592658278223087 0.7213507992663044 -0
+-0.3277866136875038 0.3903139626221363 -0
+-0.6939731751395246 0.6186606357387759 -0
+-0.6584394148932211 0.6097279486249166 -0
+-0.01853008769995912 0.7876711062330805 -0
+-0.3524507174265709 0.1746734787941508 -0
+-0.3663053813458494 0.162027394660178 -0
+-0.6449896559768991 0.7787098860386975 -0
+-0.663746431374806 0.7975264518542418 -0
+-0.6348558712757733 0.8109433138993088 -0
+-0.2890585402647919 0.2871498993439293 -0
+-0.843378615915459 0.1378588845691793 -0
+-0.8602570993810922 0.1099999588020242 -0
+-0.3952101839868025 0.2282759963513151 -0
+-0.4178620054404482 0.2337406381279379 -0
+-0.2876723399905961 0.3575670522947217 -0
+-0.3119018667972585 0.2216095206790891 -0
+-0.7536657928330648 0.6192748170739468 -0
+-0.7838633371465753 0.6107319470601983 -0
+-0.2621490471311246 0.3442369781709657 -0
+-0.2701046245357435 0.3260901431628843 -0
+-0.2771815193141069 0.3464306942860656 -0
+-0.2787093493782476 0.799502433128931 -0
+-0.250163449406121 0.7987469012379557 -0
+-0.2640067320524019 0.767586509616622 -0
+-0.7727495791902548 0.3377455765449608 -0
+-0.04368089957126832 0.8636560792667772 -0
+-0.01800739535366375 0.8800992940549771 -0
+-0.7174614106862907 0.3779109206342345 -0
+-0.2153018216781611 0.5321612768334854 -0
+-0.2066798889358333 0.5156548067549519 -0
+-0.3092867761829066 0.7916085136716725 -0
+-0.3430341833993779 0.7979159894150732 -0
+-0.0545355462544468 0.3337067462800112 -0
+-0.06982308995689304 0.3393732817435348 -0
+-0.2193833417439535 0.7039527143430583 -0
+-0.2545663232716526 0.2551289539212513 -0
+-0.3802414797169817 0.671454311921408 -0
+-0.4269681203771056 0.2158296433407692 -0
+-0.09708033687688886 0.5896072282677692 -0
+-0.1011720280236013 0.5641471086971598 -0
+-0.5687759755432682 0.5347711376888283 -0
+-0.4001958467198264 0.1731062746123478 -0
+-0.2049370452175875 0.4226378934736046 -0
+-0.2271321031451469 0.4155312532411861 -0
+-0.09486158940245147 0.2444487449037468 -0
+-0.2454590245869797 0.241068879443627 -0
+-0.1766617171038433 0.9194906110217115 -0
+-0.1432353253547098 0.9050460588653978 -0
+-0.7227412061104384 0.5407676734848939 -0
+-0.8921241673634824 0.828479925577526 -0
+-0.2381906272256251 0.1905773133976324 -0
+-0.2307989749766999 0.1786595470040602 -0
+-0.434674406370222 0.2309328948242814 -0
+-0.4583546850610381 0.2312959473249455 -0
+-0.4492485701243806 0.2492069421121142 -0
+-0.7249845312279892 0.4813068671933207 -0
+-0.7064088282191937 0.2099956165530788 -0
+-0.73006999864213 0.2114207401233507 -0
+-0.7200595515071996 0.2361435513274305 -0
+-0.4712417935278946 0.3809037580796305 -0
+-0.7747055247324071 0.2160260014270575 -0
+-0.807570176745297 0.2221963839960024 -0
+-0.2358503383020859 0.8183930206959426 -0
+-0.2011228659566729 0.831217119634192 -0
+-0.6928921426356012 0.7912016871830456 -0
+-0.6827583579344754 0.8234351150436571 -0
+-0.3798351222824461 0.04721758060476487 -0
+-0.3699129639084088 0.03749243683728416 -0
+-0.3873250943951884 0.03202305356438924 -0
+-0.3903194131701617 0.4810975731610694 -0
+-0.4056825297676444 0.4985737470015056 -0
+-0.5789197732428109 0.5748151870021959 -0
+-0.6002259208543859 0.5832935477005489 -0
+-0.5863032704372084 0.6058540396939792 -0
+-0.5297461952109215 0.8162242534339996 -0
+-0.5103718618649897 0.8287841219769234 -0
+-0.2817540281328129 0.1263565761572043 -0
+-0.1716817644332596 0.3634695815508094 -0
+-0.1561891520088137 0.3535520386937376 -0
+-0.1997656612694229 0.4959877766546873 -0
+-0.1766505054428121 0.4943984190181147 -0
+-0.5715876504315496 0.7340477927644391 -0
+-0.5561821336219737 0.7684429042905674 -0
+-0.4035627854955243 0.5873089350380564 -0
+-0.3745450904585375 0.5872123396205114 -0
+-0.5592548720171489 0.6234887825287437 -0
+-0.5805610196287239 0.6319671432270967 -0
+-0.2918090192756585 0.6529060470407019 -0
+-0.2614910259303335 0.6540482702403375 -0
+-0.9719007110332973 0.3526183576888271 -0
+-0.7066943116156958 0.8932831401135432 -0
+-0.6237277278137475 0.3989718275705686 -0
+-0.639361069081912 0.4217715111707593 -0
+-0.01655483919565233 0.4555909584788163 -0
+-0.8608233431165246 0.08074706829980559 -0
+-0.8307898900317247 0.08383265625898194 -0
+-0.6676399262882682 0.4239818084785407 -0
+-0.6801112609260818 0.4001019421740764 -0
+-0.3900851408094017 0.05610319528012324 -0
+-0.2147769316360524 0.6106433359201806 -0
+-0.1923758402288437 0.6189529393636126 -0
+-0.1868161867812664 0.5960081583765279 -0
+-0.4909975285190581 0.8413439905198473 -0
+-0.2370603110325266 0.9724487431560663 -0
+-0.2727745967469612 0.9724487431560663 -0
+-0.3769730485478527 0.7070469671138034 -0
+-0.7293389290411174 0.02339349875938398 -0
+-0.7021559640029194 0.02339349875938398 -0
+-0.1480903105023993 0.321712702408907 -0
+-0.1519337618864499 0.3072587290920586 -0
+-0.1606806430356266 0.3215475307074842 -0
+-0.2626054056256223 0.4659443589805478 -0
+-0.2867899684031174 0.464255762752095 -0
+-0.8112610193229969 0.6703266788099542 -0
+-0.8176675187061632 0.6378554752644926 -0
+-0.2955823556627035 0.4376902125470093 -0
+-0.5074228638401904 0.6202154858737511 -0
+-0.5353175045672621 0.6232936768422358 -0
+-0.3552737987743305 0.01337025590184947 -0
+-0.9404181928836568 0.5898180164630472 -0
+-0.2257215060679367 0.2107863364894975 -0
+-0.2123427408644685 0.206889336641754 -0
+-0.2023743557533997 0.9771553154138281 -0
+-0.2251489524993189 0.9496040585698946 -0
+-0.1556393331252807 0.2924325737885033 -0
+-0.5853249934010436 0.08558967023571504 -0
+-0.6048132427970829 0.1033455001028459 -0
+-0.805215609580418 0.5863304034798645 -0
+-0.8074938302237921 0.6148296456411136 -0
+-0.3829202351118543 0.1183734404447069 -0
+-0.368881161705214 0.1284199818272438 -0
+-0.2211477209762402 0.7864770971836333 -0
+-0.05009922248996591 0.4949679988924358 -0
+-0.06816302691819062 0.4855805553184291 -0
+-0.06134342746042104 0.5044928105826733 -0
+-0.3402482505310854 0.4782836250549946 -0
+-0.3174774837213725 0.4887691511088147 -0
+-0.6288659627161783 0.59789273554553 -0
+-0.2225480294278324 0.5523392423094756 -0
+-0.08296506760597437 0.3621191912223802 -0
+-0.08607208582102596 0.3444081685670553 -0
+-0.2237493056713335 0.4657400618676615 -0
+-0.2776899779587588 0.03388993484498106 -0
+-0.2936934725105534 0.0340600286103302 -0
+-0.4258173518537617 0.1576200321154448 -0
+-0.2194419996464363 0.3908621068976488 -0
+-0.1995870542253428 0.3986440051454922 -0
+-0.2757908912633911 0.4276486820237806 -0
+-0.1714955505521941 0.6257573965195982 -0
+-0.3093197599167847 0.6153956898600129 -0
+-0.6109115641564035 0.6436234127712123 -0
+-0.4553895853142612 0.2966091924682824 -0
+-0.4766603602953516 0.3081974449339697 -0
+-0.4538314058745035 0.3145211542533712 -0
+-0.5410597553757467 0.5971805733091183 -0
+-0.2069888802635797 0.7604594809387207 -0
+-0.7385953181383329 0.8861764136116709 -0
+-0.7662077703911008 0.8976280684974964 -0
+-0.1259324756268538 0.2272565163612229 -0
+-0.1267742400401337 0.2424303084863283 -0
+-0.08649722240508545 0.2674561141760561 -0
+-0.7383195014319499 0.1904257462702784 -0
+-0.7519702247199558 0.2165736810446302 -0
+-0.2549143841329048 0.3567495859890297 -0
+-0.7848871463170957 0.5375430562588276 -0
+-0.8007100024554663 0.560751642189821 -0
+-0.06471650235351425 0.4134137505369881 -0
+-0.07411836714421027 0.4247340744384403 -0
+-0.06108774549781307 0.433285301331783 -0
+-0.1590589364603031 0.2809937187758589 -0
+-0.1679436977546996 0.2956547023779915 -0
+-0.6683248822646137 0.3791309671624428 -0
+-0.6965079280897057 0.383131840316671 -0
+-0.2475412109300046 0.369760769170159 -0
+-0.4106621213079107 0.3553412083848629 -0
+-0.4277925910403352 0.3425854681713071 -0
+-0.7830296018629449 0.8708356187083583 -0
+-0.7705491496895538 0.8309806096329651 -0
+-0.7710209094839345 0.5146131766467744 -0
+-0.8059686515745701 0.5163406998686396 -0
+-0.06289671623708082 0.8959523982413832 -0
+-0.6404850163334463 0.655458625850599 -0
+-0.6685418372484845 0.6664935424896224 -0
+-0.4365865074914148 0.8449190056345682 -0
+-0.3988989355121693 0.8449427411375898 -0
+-0.2447757716952647 0.1043812036447567 -0
+-0.2485549629892603 0.1173596956547574 -0
+-0.234749074602369 0.1086493496653828 -0
+-0.6726203505585973 0.2293904203339364 -0
+-0.6792450653504083 0.2591186917143642 -0
+-0.8390197911400059 0.613453931684159 -0
+-0.8397130926487359 0.322968572049371 -0
+-0.02747347012860516 0.9374413991314924 -0
+-0.02747347012860516 0.9726428509364351 -0
+-0.7932570834826775 0.9106205143918467 -0
+-0.2423857887938449 0.09274389433435799 -0
+-0.2561916771807362 0.1014542403237326 -0
+-0.4163686500623092 0.6346382361008874 -0
+-0.4082700681979524 0.609568660018123 -0
+-0.5368012293659497 0.05272732439826725 -0
+-0.5542825412390766 0.06407790720333298 -0
+-0.143144958594751 0.3329263000931573 -0
+-0.1343980774455742 0.3186374984777317 -0
+-0.3043973986236897 0.2942672742883362 -0
+-0.2950886333855998 0.3057134609674801 -0
+-0.3275008052334801 0.2149123077640561 -0
+-0.2272999711593858 0.7232015431581299 -0
+-0.1986824231339745 0.7086257073052449 -0
+-0.9713870169397391 0.9701525609853493 -0
+-0.9713870169397391 0.9344382752709693 -0
+-0.1776785002794782 0.250535064005896 -0
+-0.1738849964547207 0.2356195892910941 -0
+-0.2641845732023497 0.1816410699916735 -0
+-0.2509777149359219 0.1861003538422109 -0
+-0.39498132875884 0.4355467463829686 -0
+-0.3723020695308416 0.435806700848862 -0
+-0.4195082561426259 0.1317635429357526 -0
+-0.4135817081273901 0.114485741784621 -0
+-0.4279166941904078 0.1205851972173041 -0
+-0.6777758572141575 0.1045899831907285 -0
+-0.6646389920127996 0.08925796699971077 -0
+-0.68905702943119 0.08655935603608811 -0
+-0.5718163233177674 0.06886564544355112 -0
+-0.5986929610965791 0.06533091653317263 -0
+-0.2597858133212976 0.4158879195109209 -0
+-0.2572417648900359 0.4360430642461053 -0
+-0.3707385924084733 0.9724080326263308 -0
+-0.4064528781229077 0.9724080326263308 -0
+-0.3424422770640215 0.2798391365381419 -0
+-0.3586622931515139 0.2881607662564293 -0
+-0.2954434935366256 0.8227689052930063 -0
+-0.3243751579625932 0.8367648776492539 -0
+-0.2937977311579343 0.8446587971065124 -0
+-0.2949141134783414 0.8716783899804391 -0
+-0.7474663041325202 0.4988655936510999 -0
+-0.7685478093899947 0.477663237260912 -0
+-0.5511777888656653 0.7924967810611708 -0
+-0.5480064322689153 0.8300506908762776 -0
+-0.09954667260602498 0.307649652670517 -0
+-0.1063722837071636 0.3226476528215459 -0
+-0.09897397359948601 0.7988961058361247 -0
+-0.0833117449401285 0.2485813453476694 -0
+-0.9726059137126009 0.7245824092231613 -0
+-0.6745476555450067 0.3019798107174473 -0
+-0.668378355333809 0.329440708118435 -0
+-0.0348804675260839 0.4985484298191225 -0
+-0.04170006698385349 0.4796361745548783 -0
+-0.8239962334371344 0.158469653626811 -0
+-0.8412413085350907 0.1852758373533029 -0
+-0.1708438507371928 0.3808051894525002 -0
+-0.1420505914564733 0.3460390060743042 -0
+-0.141402551813711 0.3635895407437092 -0
+-0.422385507185893 0.5122435475659578 -0
+-0.727457631321929 0.5182568065791832 -0
+-0.3169236647941766 0.2999420206625631 -0
+-0.3631973825846757 0.3584655511567245 -0
+-0.3415950834483075 0.0424372823585289 -0
+-0.3291532525148667 0.04469899224078337 -0
+-0.7543622545495851 0.6524219935026997 -0
+-0.7218864895927004 0.6324656213551992 -0
+-0.438746659495145 0.3256536564673563 -0
+-0.4600174344762354 0.3372419089330436 -0
+-0.01324065600998574 0.4935418866145778 -0
+-0.09840775170349557 0.610403293180059 -0
+-0.8822529964497142 0.353630364827051 -0
+-0.9062020415888903 0.3382523164249513 -0
+-0.9198523769274187 0.3634719066377988 -0
+-0.8087503173871227 0.6979441803720842 -0
+-0.783630855854075 0.6668486907835772 -0
+-0.3452552453903679 0.380571729815988 -0
+-0.6183556172960326 0.7615067454911766 -0
+-0.6472461773950654 0.7480898834461095 -0
+-0.4663190969000295 0.8507890482026359 -0
+-0.6952427127675989 0.1249752141669013 -0
+-0.6708246753492085 0.1276738251305239 -0
+-0.8493008994358604 0.5561229740332921 -0
+-0.8426462326985809 0.5274535490735911 -0
+-0.1679074033961695 0.2733044332571953 -0
+-0.1761928105967158 0.2595421466594054 -0
+-0.3356223480064696 0.1549383959040209 -0
+-0.3261961433841706 0.1383282601431841 -0
+-0.3405843261316267 0.1386091701972774 -0
+-0.2601326204393165 0.3787497582653238 -0
+-0.238447889459833 0.3839329981413358 -0
+-0.08809732352904127 0.4173128059445275 -0
+-0.08446856667334007 0.4371843567393224 -0
+-0.4375513944070598 0.105299049854445 -0
+-0.3964636700348287 0.07130272992947645 -0
+-0.9133551890620248 0.4092272751825588 -0
+-0.8963136848772204 0.4325560744668101 -0
+-0.8788618276034381 0.4021787543241498 -0
+-0.4633664579967847 0.3556545408412768 -0
+-0.06318775584303969 0.9726428509364351 -0
+-0.2702767608969466 0.7434352958517703 -0
+-0.2956217309619779 0.7427347023405994 -0
+-0.4985462991080725 0.2058251047069675 -0
+-0.5192766141994218 0.2196451523326413 -0
+-0.6899810064778612 0.04081750818977107 -0
+-0.6771968764973616 0.01742400943038709 -0
+-0.2134414708790089 0.1489425579555586 -0
+-0.2061340760805298 0.1587954393218605 -0
+-0.5106856643971225 0.03468449773415951 -0
+-0.5238932678447212 0.0468175271179194 -0
+-0.4503906441124693 0.5217706530725058 -0
+-0.4285540889397466 0.5344361545351137 -0
+-0.4422868402321393 0.5829282246427309 -0
+-0.436733153817303 0.5569871345210994 -0
+-0.4621129122811592 0.5699043501632932 -0
+-0.5085211176771081 0.4563230388866321 -0
+-0.5286559887085209 0.4375654110618538 -0
+-0.1406940510875535 0.3786097784389932 -0
+-0.3933306570669173 0.1594747737568612 -0
+-0.4109262718489707 0.1637455650069673 -0
+-0.6487224567804455 0.08630515530935202 -0
+-0.6600036289974781 0.06827452815471163 -0
+-0.6916452996816578 0.2852488144332597 -0
+-0.7087986154155128 0.260848550476054 -0
+-0.0138272794301086 0.367711476553834 -0
+-0.0138272794301086 0.3839209603752329 -0
+-0.1364541626996283 0.2209500597915971 -0
+-0.24173086092482 0.7426797639607948 -0
+-0.7427745935399679 0.04303676689954326 -0
+-0.7543849354036223 0.06105828694426924 -0
+-0.7265504358470734 0.06480851756349394 -0
+-0.1925579904981455 0.7409812601360556 -0
+-0.2210299423148411 0.7473527569229815 -0
+-0.2342041727580816 0.9254842936039257 -0
+-0.1995182174789547 0.9301908658616874 -0
+-0.8289587375577534 0.5097453897347065 -0
+-0.8150925007245922 0.4868155101226534 -0
+-0.3285087510038422 0.07391080843941897 -0
+-0.1407023542884924 0.2417949129307086 -0
+-0.6721037840850159 0.7301386412108847 -0
+-0.5157282757222637 0.5136670346376249 -0
+-0.7750253078944909 0.4509545957781747 -0
+-0.6226766893365245 0.9204801960677093 -0
+-0.5895397453349716 0.935012671910432 -0
+-0.01619775878171178 0.6246376819516646 -0
+-0.6551801576557337 0.9702962173293075 -0
+-0.06697693428219101 0.7459306292465763 -0
+-0.06906806263602012 0.7150387044009373 -0
+-0.08951924108611495 0.7359847901354496 -0
+-0.3785909279535131 0.2928657887473629 -0
+-0.4404056952076774 0.2891669681077355 -0
+-0.4632346496285255 0.282843258788334 -0
+-0.3754229201619931 0.4700725353009965 -0
+-0.39591961451395 0.4612134071143726 -0
+-0.3578486732058681 0.474846673992639 -0
+-0.3634488745496563 0.4549625079459422 -0
+-0.1745929741533991 0.3163903412405085 -0
+-0.3228841118896894 0.0638898398466992 -0
+-0.3181319357906462 0.0796665953727593 -0
+-0.2422201504769538 0.1323934056849632 -0
+-0.7289035136307636 0.1606702777377695 -0
+-0.7508037397085894 0.1658232186590489 -0
+-0.09041620249067348 0.4012349544257763 -0
+-0.1007664020198033 0.4136852367266584 -0
+-0.1794345255864876 0.188842323479691 -0
+-0.1703453384327132 0.1970802825852971 -0
+-0.4103866256346538 0.9255689183874608 -0
+-0.3795298305526707 0.9145454082208961 -0
+-0.4055821285147237 0.8952982613556949 -0
+-0.4854691580822158 0.5749484438618812 -0
+-0.4799154716673795 0.5490073537402497 -0
+-0.7718740870094005 0.772057071138628 -0
+-0.7556450725893582 0.7880896514583547 -0
+-0.7424011489910193 0.7560286761450608 -0
+-0.2769751569845215 0.1796761808712131 -0
+-0.2731160449135864 0.1943485496494694 -0
+-0.5372087653346929 0.03312161798022459 -0
+-0.3082731149081008 0.3316937056035918 -0
+-0.3251362393194224 0.3237667953806841 -0
+-0.295627917395215 0.3394202172866403 -0
+-0.356176115794698 0.03971373784067936 -0
+-0.01318997472866846 0.3997178855359038 -0
+-0.7485110399015049 0.8106141984121914 -0
+-0.7190381018831237 0.7945858034186243 -0
+-0.5239906224474921 0.5356695139038642 -0
+-0.4950093707432076 0.5320489681725981 -0
+-0.8517700818486029 0.4979283593276048 -0
+-0.2549366092120999 0.04536806777750963 -0
+-0.2661465440056754 0.05317463450544736 -0
+-0.5343476760507555 0.1989297508173074 -0
+-0.7571734285976663 0.01964326814015928 -0
+-0.1091244893632931 0.7498603502472384 -0
+-0.1112156177171222 0.7189684254015993 -0
+-0.8606202901032122 0.04898713069276892 -0
+-0.8900874994525797 0.0751544332358112 -0
+-0.5556086399187568 0.5793657378194519 -0
+-0.5695312903359342 0.5568052458260216 -0
+-0.02139911087954454 0.299947196463168 -0
+-0.02529282458084737 0.2854480900920427 -0
+-0.7339421789833194 0.8374767615932345 -0
+-0.8426643172978476 0.7375342954555503 -0
+-0.8639819648344349 0.7214543404271053 -0
+-0.1971849895017505 0.4106343767390569 -0
+-0.8970353694382045 0.712643794890215 -0
+-0.2803098448298452 0.597890216720711 -0
+-0.2680450583764016 0.5791164953373599 -0
+-0.295203662735217 0.5792631367189723 -0
+-0.498387330761371 0.09980315212983573 -0
+-0.2088010222787405 0.1689539062115437 -0
+-0.1959195600894667 0.1687567872597209 -0
+-0.1114297587135431 0.423439414400247 -0
+-0.1137486376751753 0.4073615628814958 -0
+-0.183744524384742 0.4024981771354225 -0
+-0.04501425016952008 0.4613626158316599 -0
+-0.05179964433990687 0.4456375566341818 -0
+-0.06370421611812228 0.4603306844307134 -0
+-0.8538065065608121 0.5817017353233357 -0
+-0.8243404955326831 0.5648493407707363 -0
+-0.5933015540068378 0.9751127264724925 -0
+-0.007628718540562554 0.2949026608457142 -0
+-0.3636660879074404 0.02451921080030373 -0
+-0.2171140576519627 0.1374983899151728 -0
+-0.009076851760238083 0.3527892946958971 -0
+-0.01717717307712719 0.6412290675348215 -0
+-0.3536479289194376 0.1379041216738286 -0
+-0.3652437635397021 0.1457351661115295 -0
+-0.8275596193107261 0.7602650604150346 -0
+-0.8212757828689229 0.7241529333579454 -0
+-0.7824006241464315 0.7434398970713817 -0
+-0.7956445477447704 0.7755008723846758 -0
+-0.03775836758009088 0.315836551532011 -0
+-0.04481148486081278 0.3302932322192472 -0
+-0.6041255118800886 0.8204760603435016 -0
+-0.6228822872779955 0.8392926261590459 -0
+-0.3347221039910651 0.1984758800062444 -0
+-0.3949954398548868 0.3621389135822953 -0
+-0.3949858125307695 0.343594230393018 -0
+-0.2634668695756134 0.9147997484051255 -0
+-0.2106113361474088 0.2446833459226689 -0
+-0.1997422325745001 0.2558140784586395 -0
+-0.2295042911314974 0.1197385126794489 -0
+-0.08228219588935361 0.2580671659529818 -0
+-0.07154162045884019 0.2487209044789088 -0
+-0.2469193046033736 0.5772779513111533 -0
+-0.2618131225087454 0.5586508713094147 -0
+-0.4469941229345673 0.6051879496227975 -0
+-0.421614364470711 0.5922707339806037 -0
+-0.4171285859667492 0.9493487750925846 -0
+-0.4392471364170561 0.9769407424662536 -0
+-0.1465489435308523 0.2177795512293422 -0
+-0.144110547407959 0.2308622083245754 -0
+-0.9215844978083759 0.1097725792570091 -0
+-0.9426811949042304 0.1411598274288675 -0
+-0.8188369328577194 0.3478523783992554 -0
+-0.8477265013201694 0.3532945809640879 -0
+-0.1876816011396744 0.1778459743755032 -0
+-0.1903394307344906 0.1899116032535919 -0
+-0.2911124671608722 0.61628993189085 -0
+-0.2639538628020568 0.6161432905092376 -0
+-0.09496692582657741 0.4475385419374472 -0
+-0.1121063880796802 0.4406289990519028 -0
+-0.1086257908480865 0.4584044527439404 -0
+-0.1467507235842272 0.854222448398374 -0
+-0.131150313697845 0.8310891984524088 -0
+-0.4029984372087161 0.03003966829758097 -0
+-0.4217091005828323 0.02819613945501518 -0
+-0.3976838925591549 0.08632156062752278 -0
+-0.4159972286976258 0.08772733134837442 -0
+-0.4036768100367011 0.1019016253453208 -0
+-0.3952683719889193 0.1130799710637693 -0
+-0.3928251332025433 0.1309575568840071 -0
+-0.5238024483410298 0.2764688270083709 -0
+-0.4506092286540151 0.04594255586286825 -0
+-0.1701931370113055 0.3967561739759075 -0
+-0.154890398640164 0.3870535578865499 -0
+-0.3122029809172117 0.1448407107868128 -0
+-0.665102047515163 0.1567777789951791 -0
+-0.3207077097642111 0.05381290462596134 -0
+-0.3166000351761925 0.04037784395338582 -0
+-0.9105017066264427 0.4532270310654148 -0
+-0.876008345167856 0.4461785102070058 -0
+-0.2744997204670686 0.04363039201257906 -0
+-0.4181850698329505 0.009165569631645986 -0
+-0.510197052697148 0.5755184575307239 -0
+-0.4923944933109278 0.5964154539537675 -0
+-0.3281742466797012 0.3059091384043225 -0
+-0.475573694275153 0.2699277388808295 -0
+-0.4923702228229084 0.281484983016812 -0
+-0.6342905658211639 0.3781646599787272 -0
+-0.6418957443816062 0.8602474094526432 -0
+-0.3103308945510151 0.05956869155930167 -0
+-0.3962390649958129 0.8726014723338393 -0
+-0.427095860077796 0.883624982500404 -0
+-0.3425301178336577 0.1856824917236037 -0
+-0.3400899311610126 0.1662283188875672 -0
+-0.3216385087850459 0.5112026282280313 -0
+-0.4091694510561582 0.3056651938331545 -0
+-0.3961312786441043 0.2938267159455111 -0
+-0.4195224584813592 0.2910944239000406 -0
+-0.6508406821475738 0.3672709097466967 -0
+-0.6332030328677479 0.3493345007055757 -0
+-0.3780459610025638 0.369715320034049 -0
+-0.3619242125094939 0.3777889356003231 -0
+-0.1172643191184016 0.9141081780652242 -0
+-0.1231041522300383 0.9446456179689722 -0
+-0.09561847487847083 0.9258436748864919 -0
+-0.4216065624386033 0.3198647134916348 -0
+-0.3982153826013484 0.3225970055371053 -0
+-0.5142225417743069 0.1837545283741871 -0
+-0.3346704197293802 0.2930203231549985 -0
+-0.3815386141316257 0.1525432548135932 -0
+-0.009101022478498578 0.2586750862466693 -0
+-0.009101022478498578 0.2711922345765025 -0
+-0.1950430552425943 0.1991906552715327 -0
+-0.203290130795781 0.1881943061673449 -0
+-0.02135316495900165 0.2580731770866715 -0
+-0.05964232597622794 0.2517015225885004 -0
+-0.9238495587443927 0.7093400907430215 -0
+-0.930065463165723 0.6811862529476301 -0
+-0.9514277318465321 0.7067252663659712 -0
+-0.5454648422192141 0.5393216885060843 -0
+-0.8613768366586977 0.3785141711769355 -0
+-0.4826949692252582 0.6196454722049082 -0
+-0.4293748565868165 0.6480945398534411 -0
+-0.4545513921246634 0.665171333419006 -0
+-0.6946696368560449 0.6518078121675289 -0
+-0.2567365399786029 0.03323392012541785 -0
+-0.9263221635174753 0.3862545865440091 -0
+-0.9437740207912577 0.4166319066866693 -0
+-0.6304044818292267 0.01892089924351318 -0
+-0.05184166108853126 0.258002960142716 -0
+-0.06271140652036861 0.2645081626384367 -0
+-0.6332439574530287 0.05158175747568963 -0
+-0.6437113700566185 0.03634490867390027 -0
+-0.6545545063687137 0.05008486766256354 -0
+-0.9169966235679839 0.08159866979697779 -0
+-0.9167935705546715 0.04983873218994112 -0
+-0.6371828702258262 0.626167613471719 -0
+-0.2123211003076382 0.2654583243434369 -0
+-0.01853008769995912 0.7586734513912511 -0
+-0.4189521622008525 0.1439885312599582 -0
+-0.0577000118758518 0.3232577141982843 -0
+-0.05257303226227383 0.3101619890991322 -0
+-0.9097407714142757 0.02169724781438727 -0
+-0.8767422365239066 0.02169724781438727 -0
+-0.6281443624724896 0.07368832889484472 -0
+-0.6173012261603944 0.05994836990618146 -0
+-0.05361911025314854 0.3882360070660713 -0
+-0.03875192583778424 0.3872243839536529 -0
+-0.6954301291066256 0.05900716868191918 -0
+-0.6704710416010679 0.05303767935292228 -0
+-0.1042167932914199 0.4803663382557449 -0
+-0.7002594332059071 0.5232089470271145 -0
+-0.3539772374158929 0.9266364104796653 -0
+-0.352881449551256 0.9529924590613047 -0
+-0.3225243592945481 0.934812804288308 -0
+-0.0417929656160072 0.7492968410971282 -0
+-0.1283583583996483 0.3429638021431289 -0
+-0.7056750320248226 0.3569399456226008 -0
+-0.3852201307093367 0.01114895489845426 -0
+-0.3690106468880413 0.01114895489845426 -0
+-0.2249523234620963 0.5722554411081521 -0
+-0.2311842593297524 0.5927210651360972 -0
+-0.9788218181339312 0.6964285714277697 -0
+-0.6728954611998872 0.8509082527663031 -0
+-0.01324065600998574 0.4738645172020347 -0
+-0.1735959574850722 0.8437869614202103 -0
+-0.1609619580003049 0.2022225666685919 -0
+-0.1511090765695045 0.2095299616103667 -0
+-0.1211376139772507 0.3192026999494923 -0
+-0.1146873952678388 0.3332960490340356 -0
+-0.4750286999883372 0.6424442852953347 -0
+-0.4600003294590745 0.6186442533753512 -0
+-0.5311844904042987 0.3323327895821013 -0
+-0.5486627102470503 0.3483087996191286 -0
+-0.05076758676123416 0.4108045749927608 -0
+-0.06379820840763137 0.4022533480994181 -0
+-0.2835068607421112 0.08016798908296423 -0
+-0.4654886643234725 0.04163123008603938 -0
+-0.8499514550632046 0.4528638767985607 -0
+-0.8215699992290884 0.4601068686399161 -0
+-0.4431808839288023 0.9301016282273834 -0
+-0.2436825231980796 0.2293910144249425 -0
+-0.2333506962406125 0.2172791548132481 -0
+-0.9764392215754298 0.1277439652640185 -0
+-0.9764392215754298 0.09202967954979985 -0
+-0.6964551517016604 0.6802985281060456 -0
+-0.690144822934063 0.7113290668295035 -0
+-0.1677910722877131 0.4087465455694722 -0
+-0.02701725415877707 0.3906015205127858 -0
+-0.8563569619013298 0.2154071547840583 -0
+-0.4749614221314796 0.9769407424662536 -0
+-0.1799388026020093 0.3013616420626316 -0
+-0.6517150307449117 0.01742400943038709 -0
+-0.2475465351083568 0.6340655612933209 -0
+-0.2367439127773297 0.615665846123182 -0
+-0.1144661353952456 0.3918621843613755 -0
+-0.09839665477454199 0.3848852162123232 -0
+-0.1559202238514334 0.2559750640618152 -0
+-0.1556030387667507 0.2700823046677072 -0
+-0.805047018999213 0.3670552026058743 -0
+-0.7970336103277796 0.3367291936911572 -0
+-0.2646871193318988 0.4002077622625483 -0
+-0.1438035696638537 0.9664550605738521 -0
+-0.1676064968450805 0.9436103759876804 -0
+-0.1666600700389652 0.9771553154138281 -0
+-0.1047186241736322 0.297748661055187 -0
+-0.3171649590423687 0.1285114850800693 -0
+-0.5977729056570712 0.7751711065230033 -0
+-0.6000294270752375 0.7445511039304152 -0
+-0.580794976902985 0.8275742955533437 -0
+-0.2461379929585437 0.4086021444848731 -0
+-0.9482905689104677 0.08445687821113902 -0
+-0.7085669943079833 0.07433918487293691 -0
+-0.6868291784491611 0.2132366302933133 -0
+-0.4008934735228645 0.009165569631645986 -0
+-0.3930762788346789 0.02031452453010025 -0
+-0.3392857142871285 0.9805844264349736 -0
+-0.6290158397208756 0.9751127264724925 -0
+-0.03811462113634409 0.4030213091143237 -0
+-0.6672373493111977 0.3503008078892913 -0
+-0.2951275103193691 0.1242690875135452 -0
+-0.08544678024181476 0.4802096813190758 -0
+-0.2541894781356211 0.4510808071817948 -0
+-0.2225877160924181 0.2435382454404592 -0
+-0.2235267296031948 0.2537917822653022 -0
+-0.470270300619084 0.9178272034042145 -0
+-0.4568284494864107 0.8894950250684716 -0
+-0.5633269128552563 0.3311742339199942 -0
+-0.4046171761378349 0.1378890758272751 -0
+-0.4369095254777531 0.2621224620196186 -0
+-0.4273675227956235 0.2773284902200921 -0
+-0.3491727402959628 0.8963657534478994 -0
+-0.7217908232699753 0.1189795611768229 -0
+-0.7201773361716377 0.09236070491766288 -0
+-0.3522222961434222 0.4933936524100489 -0
+-0.2194917597413871 0.1702121916836559 -0
+-0.209277243750324 0.1801735396215163 -0
+-0.2435480409291141 0.4692213394033775 -0
+-0.2320334091557481 0.3998510959928136 -0
+-0.7148396414050264 0.1420634031166183 -0
+-0.2678671557701839 0.03222309810910939 -0
+-0.01800739535366375 0.9130978289450683 -0
+-0.9032775476119346 0.487507644068791 -0
+-0.2208112147035181 0.2318603804217746 -0
+-0.233726608159304 0.240968816764408 -0
+-0.3061801769137513 0.1229711276348449 -0
+-0.2981358906577107 0.1122162794246921 -0
+-0.6919212549249789 0.746483449612249 -0
+-0.6968396255840914 0.1885138190892335 -0
+-0.6413388545183749 0.9454089438018002 -0
+-0.007628718540562554 0.2815498933297503 -0
+-0.5350749787791196 0.01360591034993838 -0
+-0.5140839857797377 0.01360591034993838 -0
+-0.6327797254878111 0.09467176773984386 -0
+-0.1869497624631546 0.5705861527635719 -0
+-0.2068129841542111 0.5677823561344194 -0
+-0.4716531249421511 0.5270048744740102 -0
+-0.4770122609511794 0.9416070601093384 -0
+-0.1587654612778351 0.2194421101433449 -0
+-0.7023554031283871 0.1666659307278478 -0
+-0.1698368511042045 0.7327716627883981 -0
+-0.1838779131554659 0.7196649387726589 -0
+-0.2753594180941539 0.5415665591742213 -0
+-0.07236279101202224 0.9202959684278071 -0
+-0.07820262412365893 0.9508334083315552 -0
+-0.2917275274688155 0.9266771210094006 -0
+-0.2906317396041785 0.9530331695910401 -0
+-0.02979549520563807 0.4649430467583467 -0
+-0.295359489265983 0.8965793831023933 -0
+-0.9788218181339312 0.6607142857133897 -0
+-0.9462431756394136 0.6514199145591629 -0
+-0.978370497623354 0.4111153233092188 -0
+-0.978370497623354 0.3754010375950373 -0
+-0.08644343970948828 0.9781905573951198 -0
+-0.1221577254239229 0.9781905573951198 -0
+-0.6827757533583545 0.1699069444680824 -0
+-0.134497278379739 0.7064461242986262 -0
+-0.04596941072618808 0.2666406498856206 -0
+-0.04290033018204742 0.2538340098356843 -0
+-0.3035714285726938 0.9805844264349736 -0
+-0.4393278536976464 0.627986762713224 -0
+-0.8323936332854481 0.2386150506510637 -0
+-0.07472709792379713 0.2675956733072954 -0
+-0.7000261753234543 0.768677140229209 -0
+-0.353032997403369 0.8219161373161895 -0
+-0.3513872350246776 0.8438060291296957 -0
+-0.786539493048761 0.3185427523383419 -0
+-0.7700031936623183 0.2990065319467859 -0
+-0.3016167522511908 0.06971624816457785 -0
+-0.1359423313458169 0.75849776093312 -0
+-0.1142459547148097 0.7755141256669703 -0
+-0.2234205140911706 0.126976702938213 -0
+-0.2929637778889962 0.6336487636485395 -0
+-0.1546688972205922 0.7434659848325914 -0
+-0.978445011316954 0.9078090825866777 -0
+-0.2957970101916128 0.5430320341596396 -0
+-0.2035424585037023 0.2062692283833948 -0
+-0.1905917584424119 0.2079865254696418 -0
+-0.9502712086566514 0.3708765381419093 -0
+-0.3056094473955001 0.03615729240538672 -0
+-0.1250886237350522 0.4343053252067402 -0
+-0.03076618239035519 0.2556339406292966 -0
+-0.1257918155820099 0.8075335165220064 -0
+-0.4332170415918476 0.08984543084696929 -0
+-0.03617814595013694 0.27265119488142 -0
+-0.1812197315113017 0.2138841385489715 -0
+-0.3700462604614623 0.8049571408955151 -0
+-0.5247459372401582 0.5577036220410575 -0
+-0.1023663599118428 0.5474991240570964 -0
+-0.7324597858384491 0.2622736740463259 -0
+-0.1727089747488956 0.2060502364410745 -0
+-0.1400433373616661 0.3945607629624004 -0
+-0.1404319641084385 0.4253851746504981 -0
+-0.4474853859674998 0.866798236046616 -0
+-0.4605898041685692 0.2624855145202827 -0
+-0.07420257527135962 0.4706848696288382 -0
+-0.08098796944174641 0.4549598104313601 -0
+-0.798579913245905 0.4667021787738493 -0
+-0.4784512043761432 0.3445220386272919 -0
+-0.4952680160302368 0.3339576366949217 -0
+-0.4928256402679103 0.3158878802802695 -0
+-0.5129914754425531 0.3237361102561327 -0
+-0.7494748875800814 0.2827163009481878 -0
+-0.3118407353174776 0.09018559262947547 -0
+-0.3062160962033247 0.0801646240367557 -0
+-0.3231747713715435 0.8835557625847142 -0
+-0.377385203949097 0.8566160199928808 -0
+-0.3487273645083212 0.8714647603259452 -0
+-0.3285394634786781 0.5268759853157596 -0
+-0.3348476858401621 0.5422982650474217 -0
+-0.314963366462936 0.5409969327153202 -0
+-0.5316712724688701 0.5791706321329441 -0
+-0.1123679792470423 0.6309942743965483 -0
+-0.7240792822487312 0.8649498993158805 -0
+-0.3415228281622719 0.5125039605601328 -0
+-0.1251294920889854 0.4016163620349641 -0
+-0.1393258396415959 0.4100601414825207 -0
+-0.1459888198779126 0.7221496634691947 -0
+-0.1718363510788934 0.2190264226322663 -0
+-0.7020411724606823 0.844583488095107 -0
+-0.1507971351197164 0.2386244043684537 -0
+-0.1672762180402412 0.2272760122512419 -0
+-0.1608141066536624 0.2360352768021726 -0
+-0.2977822942316117 0.3205573475949356 -0
+-0.5981440863374277 0.3267923853032632 -0
+-0.6166111965546994 0.3371621330987808 -0
+-0.2953255517780222 0.080235245421294 -0
+-0.1574059135341959 0.2469679814083059 -0
+-0.5927685609007627 0.7992249832936068 -0
+-0.8641394768124269 0.4735348333971653 -0
+-0.1553458093811192 0.4183295755779344 -0
+-0.04548086548226891 0.9209421316864465 -0
+-0.793645619400001 0.7206749453315685 -0
+-0.02676512851878339 0.2750904313387949 -0
+-0.0276150623883507 0.2649109360359638 -0
+-0.494383819707668 0.2979759184951807 -0
+-0.7664560219425871 0.2370209952801298 -0
+-0.5258160452257894 0.2929597624867397 -0
+-0.5440090601875349 0.3015564418127082 -0
+-0.5287421146419722 0.314263033167449 -0
+-0.01672974101906113 0.2777078312465865 -0
+-0.6858625554508488 0.3413007655341811 -0
+-0.3021052325530967 0.5584543138913017 -0
+-0.2824434358727139 0.3134399726505288 -0
+-0.8778269719532543 0.4912429927360499 -0
+-0.7607358236717681 0.2580113017995644 -0
+-0.9498320282566931 0.9136759292864073 -0
+-0.3922690392607699 0.1431825452082127 -0
+-0.5085355027954671 0.2891754183631118 -0
+-0.2881062046942451 0.0906163649551421 -0
+-0.2935040598967423 0.1020989302984321 -0
+-0.3045567264911245 0.1008009704197318 -0
+-0.2324444888560379 0.1288660319341476 -0
+-0.5621248681676443 0.3094163436905136 -0
+-0.360103823808256 0.3918214986933127 -0
+-0.5785166514191827 0.3177308651170903 -0
+-0.5969420416498157 0.3050344950737826 -0
+-0.7180672141725015 0.7498675658478277 -0
+-0.1659371953853795 0.2533859364955342 -0
+-0.5744423706799676 0.7822693417328453 -0
+-0.2131820245308423 0.225367562098024 -0
+-0.2243209165977282 0.2227981334219729 -0
+-0.2078914440642862 0.2156852068398631 -0
+$EndNodes
+$Elements
+15 2093 1 2093
+0 2 15 1
+1 1 
+0 3 15 1
+2 2 
+0 4 15 1
+3 3 
+0 5 15 1
+4 4 
+0 13 15 1
+5 6 
+0 17 15 1
+6 7 
+0 21 15 1
+7 8 
+1 1 8 17
+8 1 9 25 
+9 9 10 26 
+10 10 11 27 
+11 11 12 28 
+12 12 13 29 
+13 13 14 30 
+14 14 15 31 
+15 15 16 32 
+16 16 17 33 
+17 17 18 34 
+18 18 19 35 
+19 19 20 36 
+20 20 21 37 
+21 21 22 38 
+22 22 23 39 
+23 23 24 40 
+24 24 2 41 
+1 2 8 14
+25 2 42 55 
+26 42 43 56 
+27 43 44 57 
+28 44 45 58 
+29 45 46 59 
+30 46 47 60 
+31 47 48 61 
+32 48 49 62 
+33 49 50 63 
+34 50 51 64 
+35 51 52 65 
+36 52 53 66 
+37 53 54 67 
+38 54 3 68 
+1 3 8 14
+39 3 69 82 
+40 69 70 83 
+41 70 71 84 
+42 71 72 85 
+43 72 73 86 
+44 73 74 87 
+45 74 75 88 
+46 75 76 89 
+47 76 77 90 
+48 77 78 91 
+49 78 79 92 
+50 79 80 93 
+51 80 81 94 
+52 81 4 95 
+1 9 8 17
+53 6 191 207 
+54 191 192 208 
+55 192 193 209 
+56 193 194 210 
+57 194 195 211 
+58 195 196 212 
+59 196 197 213 
+60 197 198 214 
+61 198 199 215 
+62 199 200 216 
+63 200 201 217 
+64 201 202 218 
+65 202 203 219 
+66 203 204 220 
+67 204 205 221 
+68 205 206 222 
+69 206 7 223 
+1 10 8 14
+70 7 224 237 
+71 224 225 238 
+72 225 226 239 
+73 226 227 240 
+74 227 228 241 
+75 228 229 242 
+76 229 230 243 
+77 230 231 244 
+78 231 232 245 
+79 232 233 246 
+80 233 234 247 
+81 234 235 248 
+82 235 236 249 
+83 236 8 250 
+1 11 8 14
+84 8 251 264 
+85 251 252 265 
+86 252 253 266 
+87 253 254 267 
+88 254 255 268 
+89 255 256 269 
+90 256 257 270 
+91 257 258 271 
+92 258 259 272 
+93 259 260 273 
+94 260 261 274 
+95 261 262 275 
+96 262 263 276 
+97 263 4 277 
+2 1 9 998
+98 394 321 441 739 740 741 
+99 301 382 538 742 743 744 
+100 535 54 599 745 746 747 
+101 318 402 438 748 749 750 
+102 311 401 423 751 752 753 
+103 17 18 414 34 754 755 
+104 111 570 608 756 757 758 
+105 434 292 545 759 760 761 
+106 545 292 573 760 762 763 
+107 392 318 425 764 765 766 
+108 287 432 660 767 768 769 
+109 49 447 544 770 771 772 
+110 302 416 554 773 774 775 
+111 332 385 508 776 777 778 
+112 286 410 598 779 780 781 
+113 410 449 598 782 783 780 
+114 323 443 444 784 785 786 
+115 53 54 535 67 745 787 
+116 14 552 563 788 789 790 
+117 353 526 527 791 792 793 
+118 660 432 715 768 794 795 
+119 17 414 445 755 796 797 
+120 398 102 553 798 799 800 
+121 417 75 489 801 802 803 
+122 410 305 449 804 805 782 
+123 443 327 444 806 807 785 
+124 404 286 598 808 781 809 
+125 48 49 544 62 772 810 
+126 504 374 506 811 812 813 
+127 415 307 435 814 815 816 
+128 415 346 520 817 818 819 
+129 418 340 536 820 821 822 
+130 318 392 587 764 823 824 
+131 415 520 605 819 825 826 
+132 328 408 495 827 828 829 
+133 408 328 458 827 830 831 
+134 402 318 587 748 824 832 
+135 342 504 506 833 813 834 
+136 427 522 625 835 836 837 
+137 110 111 608 127 758 838 
+138 522 364 625 839 840 836 
+139 321 394 498 739 841 842 
+140 552 381 563 843 844 789 
+141 405 336 699 845 846 847 
+142 312 397 455 848 849 850 
+143 382 301 549 742 851 852 
+144 464 141 555 853 854 855 
+145 399 51 559 856 857 858 
+146 317 406 459 859 860 861 
+147 336 519 699 862 863 846 
+148 405 20 492 864 865 866 
+149 52 535 559 867 868 869 
+150 387 328 493 870 871 872 
+151 416 362 554 873 874 774 
+152 400 308 589 875 876 877 
+153 337 406 502 878 879 880 
+154 408 281 495 881 882 828 
+155 414 314 445 883 884 796 
+156 440 315 471 885 886 887 
+157 463 396 675 888 889 890 
+158 462 404 598 891 809 892 
+159 428 329 497 893 894 895 
+160 451 327 499 896 897 898 
+161 361 428 497 899 895 900 
+162 52 53 535 66 787 867 
+163 406 337 459 878 901 860 
+164 467 98 652 902 903 904 
+165 465 322 480 905 906 907 
+166 142 141 464 157 853 908 
+167 566 389 595 909 910 911 
+168 645 419 687 912 913 914 
+169 310 408 458 915 831 916 
+170 609 331 618 917 918 919 
+171 419 284 478 920 921 922 
+172 363 493 495 923 924 925 
+173 402 314 658 926 927 928 
+174 396 463 612 888 929 930 
+175 75 417 580 801 931 932 
+176 406 317 450 859 933 934 
+177 397 312 641 848 935 936 
+178 4 96 525 112 937 938 
+179 385 332 616 776 939 940 
+180 572 355 573 941 942 943 
+181 286 404 474 808 944 945 
+182 390 285 491 946 947 948 
+183 409 330 530 949 950 951 
+184 355 484 573 952 953 942 
+185 461 11 640 954 955 956 
+186 411 109 608 957 958 959 
+187 329 428 542 893 960 961 
+188 518 347 535 962 963 964 
+189 336 405 582 845 965 966 
+190 438 287 694 967 968 969 
+191 307 415 683 814 970 971 
+192 392 425 712 766 972 973 
+193 386 518 535 974 964 975 
+194 287 619 694 976 977 968 
+195 328 387 505 870 978 979 
+196 448 350 514 980 981 982 
+197 133 132 428 148 983 984 
+198 493 328 495 871 829 924 
+199 305 410 541 804 985 986 
+200 289 463 675 987 890 988 
+201 418 536 576 822 989 990 
+202 414 18 519 754 991 992 
+203 447 316 544 993 994 771 
+204 308 422 589 995 996 876 
+205 314 414 646 883 997 998 
+206 75 76 489 89 999 802 
+207 287 438 658 967 1000 1001 
+208 70 71 442 84 1002 1003 
+209 284 419 645 920 912 1004 
+210 439 378 681 1005 1006 1007 
+211 10 11 461 27 954 1008 
+212 354 451 499 1009 898 1010 
+213 282 566 595 1011 911 1012 
+214 279 409 655 1013 1014 1015 
+215 51 399 557 856 1016 1017 
+216 16 17 445 33 797 1018 
+217 311 409 530 1019 951 1020 
+218 305 396 612 1021 930 1022 
+219 330 409 515 949 1023 1024 
+220 432 287 658 767 1001 1025 
+221 409 529 655 1026 1027 1014 
+222 410 286 651 779 1028 1029 
+223 455 296 622 1030 1031 1032 
+224 317 459 613 861 1033 1034 
+225 456 302 554 1035 775 1036 
+226 508 385 640 777 1037 1038 
+227 516 364 522 1039 839 1040 
+228 97 98 467 114 902 1041 
+229 412 321 498 1042 842 1043 
+230 382 467 652 1044 904 1045 
+231 102 398 574 798 1046 1047 
+232 466 349 627 1048 1049 1050 
+233 333 507 622 1051 1052 1053 
+234 291 457 501 1054 1055 1056 
+235 544 316 690 994 1057 1058 
+236 424 333 481 1059 1060 1061 
+237 102 103 553 119 1062 799 
+238 351 419 630 1063 1064 1065 
+239 106 471 637 1066 1067 1068 
+240 438 402 658 749 928 1000 
+241 479 373 581 1069 1070 1071 
+242 288 403 592 1072 1073 1074 
+243 22 23 439 39 1075 1076 
+244 460 347 518 1077 962 1078 
+245 81 4 525 95 938 1079 
+246 451 354 602 1009 1080 1081 
+247 444 327 451 807 896 1082 
+248 109 411 532 957 1083 1084 
+249 329 426 497 1085 1086 894 
+250 285 390 507 946 1087 1088 
+251 70 442 698 1003 1089 1090 
+252 448 304 462 1091 1092 1093 
+253 353 473 526 1094 1095 791 
+254 20 405 699 864 847 1096 
+255 321 412 461 1042 1097 1098 
+256 585 317 613 1099 1034 1100 
+257 350 465 480 1101 907 1102 
+258 376 609 618 1103 919 1104 
+259 396 305 567 1021 1105 1106 
+260 104 105 637 121 1107 1108 
+261 105 106 637 122 1068 1107 
+262 378 638 681 1109 1110 1006 
+263 422 308 718 995 1111 1112 
+264 430 283 509 1113 1114 1115 
+265 387 451 602 1116 1081 1117 
+266 109 110 608 126 838 958 
+267 319 442 688 1118 1119 1120 
+268 472 339 481 1121 1122 1123 
+269 78 418 606 1124 1125 1126 
+270 280 424 481 1127 1061 1128 
+271 390 455 622 1129 1032 1130 
+272 613 490 701 1131 1132 1133 
+273 526 283 527 1134 1135 792 
+274 320 474 719 1136 1137 1138 
+275 325 456 517 1139 1140 1141 
+276 470 341 482 1142 1143 1144 
+277 472 333 622 1145 1053 1146 
+278 74 75 580 88 932 1147 
+279 493 363 540 923 1148 1149 
+280 329 542 732 961 1150 1151 
+281 294 490 613 1152 1131 1153 
+282 533 466 627 1154 1050 1155 
+283 314 402 667 926 1156 1157 
+284 423 401 586 752 1158 1159 
+285 340 470 482 1160 1144 1161 
+286 449 324 598 1162 1163 783 
+287 454 366 564 1164 1165 1166 
+288 385 461 640 1167 956 1037 
+289 474 404 719 944 1168 1137 
+290 409 311 529 1019 1169 1026 
+291 324 448 462 1170 1093 1171 
+292 420 285 507 1172 1088 1173 
+293 427 289 522 1174 1175 835 
+294 316 447 547 993 1176 1177 
+295 303 479 581 1178 1071 1179 
+296 462 304 672 1092 1180 1181 
+297 288 493 540 1182 1149 1183 
+298 416 302 513 773 1184 1185 
+299 516 104 637 1186 1108 1187 
+300 371 456 554 1188 1036 1189 
+301 338 430 509 1190 1115 1191 
+302 413 348 610 1192 1193 1194 
+303 365 464 629 1195 1196 1197 
+304 336 414 519 1198 992 862 
+305 333 420 507 1199 1173 1051 
+306 586 401 628 1158 1200 1201 
+307 281 408 550 881 1202 1203 
+308 421 327 717 1204 1205 1206 
+309 319 460 518 1207 1078 1208 
+310 333 472 481 1145 1123 1060 
+311 324 462 598 1171 892 1163 
+312 400 660 715 1209 795 1210 
+313 401 311 530 751 1020 1211 
+314 308 400 582 875 1212 1213 
+315 343 516 522 1214 1040 1215 
+316 413 358 703 1216 1217 1218 
+317 561 706 721 1219 1220 1221 
+318 434 313 483 1222 1223 1224 
+319 442 386 698 1225 1226 1089 
+320 289 427 534 1174 1227 1228 
+321 447 359 547 1229 1230 1176 
+322 363 407 540 1231 1232 1148 
+323 441 321 469 740 1233 1234 
+324 349 452 627 1235 1236 1049 
+325 403 288 540 1072 1183 1237 
+326 531 389 566 1238 909 1239 
+327 394 441 732 741 1240 1241 
+328 325 421 677 1242 1243 1244 
+329 429 283 526 1245 1134 1246 
+330 335 429 526 1247 1246 1248 
+331 502 406 664 879 1249 1250 
+332 520 278 605 1251 1252 825 
+333 357 425 647 1253 1254 1255 
+334 442 496 688 1256 1257 1119 
+335 471 315 625 886 1258 1259 
+336 463 289 465 987 1260 1261 
+337 281 437 560 1262 1263 1264 
+338 431 335 533 1265 1266 1267 
+339 368 464 555 1268 855 1269 
+340 457 352 501 1270 1271 1055 
+341 345 422 595 1272 1273 1274 
+342 340 418 546 820 1275 1276 
+343 301 596 611 1277 1278 1279 
+344 408 310 528 915 1280 1281 
+345 582 405 614 965 1282 1283 
+346 20 21 492 37 1284 865 
+347 425 318 513 765 1285 1286 
+348 490 294 628 1152 1287 1288 
+349 51 52 559 65 869 857 
+350 366 586 628 1289 1201 1290 
+351 325 434 483 1291 1224 1292 
+352 422 345 589 1272 1293 996 
+353 421 325 517 1242 1141 1294 
+354 706 383 721 1295 1296 1220 
+355 348 413 539 1192 1297 1298 
+356 327 443 717 806 1299 1205 
+357 426 329 558 1085 1300 1301 
+358 419 351 568 1063 1302 1303 
+359 342 417 648 1304 1305 1306 
+360 79 470 546 1307 1308 1309 
+361 79 80 470 93 1310 1307 
+362 419 478 630 922 1311 1064 
+363 414 336 646 1198 1312 997 
+364 448 514 657 982 1313 1314 
+365 463 324 612 1315 1316 929 
+366 5 143 570 159 1317 1318 
+367 567 343 675 1319 1320 1321 
+368 436 330 515 1322 1024 1323 
+369 435 389 531 1324 1238 1325 
+370 368 450 634 1326 1327 1328 
+371 538 382 695 743 1329 1330 
+372 285 556 586 1331 1332 1333 
+373 389 435 697 1324 1334 1335 
+374 291 441 469 1336 1234 1337 
+375 359 557 716 1338 1339 1340 
+376 418 78 546 1124 1341 1275 
+377 299 431 533 1342 1267 1343 
+378 111 5 570 128 1318 756 
+379 564 366 628 1165 1290 1344 
+380 334 433 537 1345 1346 1347 
+381 365 629 666 1197 1348 1349 
+382 407 363 642 1231 1350 1351 
+383 485 358 623 1352 1353 1354 
+384 350 463 465 1355 1261 1101 
+385 444 451 685 1082 1356 1357 
+386 435 295 604 1358 1359 1360 
+387 442 71 496 1002 1361 1256 
+388 311 423 722 753 1362 1363 
+389 429 335 673 1247 1364 1365 
+390 288 444 685 1366 1357 1367 
+391 453 374 504 1368 811 1369 
+392 308 582 614 1213 1283 1370 
+393 388 645 687 1371 914 1372 
+394 439 356 571 1373 1374 1375 
+395 437 358 560 1376 1377 1263 
+396 449 305 612 805 1022 1378 
+397 285 420 556 1172 1379 1331 
+398 335 431 673 1265 1380 1364 
+399 386 535 599 975 747 1381 
+400 349 531 566 1382 1239 1383 
+401 370 613 701 1384 1133 1385 
+402 404 462 672 891 1181 1386 
+403 283 430 527 1113 1387 1135 
+404 295 466 473 1388 1389 1390 
+405 73 74 506 87 1391 1392 
+406 376 618 638 1104 1393 1394 
+407 536 395 653 1395 1396 1397 
+408 607 485 623 1398 1354 1399 
+409 293 536 653 1400 1397 1401 
+410 333 424 603 1059 1402 1403 
+411 420 333 603 1199 1403 1404 
+412 417 342 580 1304 1405 931 
+413 322 515 671 1406 1407 1408 
+414 465 289 534 1260 1228 1409 
+415 310 433 528 1410 1411 1280 
+416 457 332 486 1412 1413 1414 
+417 393 454 736 1415 1416 1417 
+418 466 335 473 1418 1419 1389 
+419 434 325 677 1291 1244 1420 
+420 433 310 543 1410 1421 1422 
+421 22 439 571 1076 1375 1423 
+422 330 436 569 1322 1424 1425 
+423 487 369 565 1426 1427 1428 
+424 556 423 586 1429 1159 1332 
+425 482 341 549 1143 1430 1431 
+426 409 279 671 1013 1432 1433 
+427 313 434 545 1222 761 1434 
+428 401 490 628 1435 1288 1200 
+429 433 290 537 1436 1437 1346 
+430 420 313 725 1438 1439 1440 
+431 331 452 584 1441 1442 1443 
+432 539 413 703 1297 1218 1444 
+433 439 23 669 1075 1445 1446 
+434 358 413 560 1216 1447 1377 
+435 619 416 694 1448 1449 977 
+436 452 524 627 1450 1451 1236 
+437 469 385 616 1452 940 1453 
+438 422 282 595 1454 1012 1273 
+439 491 285 586 947 1333 1455 
+440 295 435 531 1358 1325 1456 
+441 480 322 671 906 1408 1457 
+442 336 432 646 1458 1459 1312 
+443 458 328 505 830 979 1460 
+444 322 436 515 1461 1323 1406 
+445 425 357 590 1253 1462 1463 
+446 428 132 542 983 1464 960 
+447 366 491 586 1465 1455 1289 
+448 488 376 638 1466 1394 1467 
+449 433 334 528 1345 1468 1411 
+450 386 442 518 1225 1469 974 
+451 454 337 736 1470 1471 1416 
+452 480 279 514 1472 1473 1474 
+453 437 281 550 1262 1203 1475 
+454 470 340 546 1160 1276 1308 
+455 442 319 518 1118 1208 1469 
+456 377 503 679 1476 1477 1478 
+457 444 288 592 1366 1074 1479 
+458 596 395 611 1480 1481 1278 
+459 331 479 618 1482 1483 918 
+460 300 487 565 1484 1428 1485 
+461 351 440 588 1486 1487 1488 
+462 499 278 520 1489 1251 1490 
+463 458 384 692 1491 1492 1493 
+464 316 429 673 1494 1365 1495 
+465 450 317 634 933 1496 1327 
+466 481 339 510 1122 1497 1498 
+467 513 318 694 1285 1499 1500 
+468 283 429 631 1245 1501 1502 
+469 346 415 604 817 1503 1504 
+470 384 527 692 1505 1506 1492 
+471 389 521 595 1507 1508 910 
+472 77 78 606 91 1126 1509 
+473 557 399 716 1016 1510 1339 
+474 475 363 495 1511 925 1512 
+475 14 15 552 31 1513 788 
+476 341 467 549 1514 1515 1430 
+477 475 281 560 1516 1264 1517 
+478 440 351 630 1486 1065 1518 
+479 345 512 660 1519 1520 1521 
+480 431 316 673 1522 1495 1380 
+481 44 45 523 58 1523 1524 
+482 466 295 531 1388 1456 1525 
+483 99 100 476 116 1526 1527 
+484 426 339 735 1528 1529 1530 
+485 302 456 494 1035 1531 1532 
+486 290 453 504 1533 1369 1534 
+487 456 325 494 1139 1535 1531 
+488 353 527 575 793 1536 1537 
+489 108 109 532 125 1084 1538 
+490 506 74 580 1391 1147 1539 
+491 454 393 737 1415 1540 1541 
+492 44 523 676 1524 1542 1543 
+493 497 426 735 1086 1530 1544 
+494 567 305 663 1105 1545 1546 
+495 350 480 514 1102 1474 981 
+496 537 290 680 1437 1547 1548 
+497 478 284 678 921 1549 1550 
+498 479 331 584 1482 1443 1551 
+499 367 445 667 1552 1553 1554 
+500 517 456 659 1140 1555 1556 
+501 310 458 692 916 1493 1557 
+502 362 416 619 873 1448 1558 
+503 457 291 616 1054 1559 1560 
+504 425 513 647 1286 1561 1254 
+505 570 365 608 1562 1563 757 
+506 322 465 534 905 1409 1564 
+507 424 280 590 1127 1565 1566 
+508 325 483 494 1292 1567 1535 
+509 589 345 660 1293 1521 1568 
+510 435 307 697 815 1569 1334 
+511 527 430 692 1387 1570 1506 
+512 379 468 654 1571 1572 1573 
+513 527 384 575 1505 1574 1536 
+514 373 479 584 1069 1551 1575 
+515 399 559 579 858 1576 1577 
+516 133 428 620 984 1578 1579 
+517 318 438 694 750 969 1499 
+518 542 394 732 1580 1241 1150 
+519 596 377 679 1581 1478 1582 
+520 313 420 603 1438 1404 1583 
+521 446 334 537 1584 1347 1585 
+522 486 381 649 1586 1587 1588 
+523 296 497 735 1589 1544 1590 
+524 475 560 731 1517 1591 1592 
+525 424 313 603 1593 1583 1402 
+526 443 323 686 784 1594 1595 
+527 347 460 579 1077 1596 1597 
+528 334 446 600 1584 1598 1599 
+529 378 439 669 1005 1446 1600 
+530 291 469 616 1337 1453 1559 
+531 430 338 543 1190 1601 1602 
+532 431 299 670 1342 1603 1604 
+533 450 140 730 1605 1606 1607 
+534 286 474 503 945 1608 1609 
+535 290 504 680 1534 1610 1547 
+536 536 293 576 1400 1611 989 
+537 24 2 594 41 1612 1613 
+538 559 347 579 1614 1597 1576 
+539 396 567 675 1106 1321 889 
+540 140 450 555 1605 1615 1616 
+541 295 578 604 1617 1618 1359 
+542 553 343 567 1619 1319 1620 
+543 339 426 639 1528 1621 1622 
+544 344 423 556 1623 1429 1624 
+545 349 466 531 1048 1525 1382 
+546 490 401 530 1435 1211 1625 
+547 282 422 665 1454 1626 1627 
+548 3 69 599 82 1628 1629 
+549 54 3 599 68 1629 746 
+550 455 397 726 849 1630 1631 
+551 459 337 564 901 1632 1633 
+552 327 421 662 1204 1634 1635 
+553 380 534 691 1636 1637 1638 
+554 541 326 702 1639 1640 1641 
+555 398 567 663 1642 1546 1643 
+556 483 357 494 1644 1645 1567 
+557 46 47 500 60 1646 1647 
+558 311 484 529 1648 1649 1169 
+559 524 331 733 1650 1651 1652 
+560 331 609 733 917 1653 1651 
+561 437 334 600 1654 1599 1655 
+562 450 368 555 1326 1269 1615 
+563 429 316 727 1494 1656 1657 
+564 441 291 558 1336 1658 1659 
+565 356 439 681 1373 1007 1660 
+566 132 131 542 147 1661 1464 
+567 71 72 496 85 1662 1361 
+568 474 320 610 1136 1663 1664 
+569 445 367 597 1552 1665 1666 
+570 482 301 611 1667 1279 1668 
+571 280 481 510 1128 1498 1669 
+572 281 475 495 1516 1512 882 
+573 339 501 510 1670 1671 1497 
+574 354 499 520 1010 1490 1672 
+575 415 435 604 816 1360 1503 
+576 334 437 550 1654 1475 1673 
+577 423 344 722 1623 1674 1362 
+578 292 572 573 1675 943 762 
+579 532 411 568 1083 1676 1677 
+580 290 433 561 1436 1678 1679 
+581 468 323 654 1680 1681 1572 
+582 16 445 597 1018 1666 1682 
+583 432 336 715 1458 1683 794 
+584 576 360 606 1684 1685 1686 
+585 453 290 721 1533 1687 1688 
+586 292 434 677 759 1420 1689 
+587 473 335 526 1419 1248 1095 
+588 369 487 509 1426 1690 1691 
+589 418 576 606 990 1686 1125 
+590 445 314 667 884 1157 1553 
+591 316 431 690 1522 1692 1057 
+592 326 541 632 1639 1693 1694 
+593 446 342 648 1695 1306 1696 
+594 296 455 661 1030 1697 1698 
+595 370 569 645 1699 1700 1701 
+596 313 424 626 1593 1702 1703 
+597 298 486 649 1704 1588 1705 
+598 534 427 691 1227 1706 1637 
+599 315 440 630 885 1518 1707 
+600 535 347 559 963 1614 868 
+601 489 360 607 1708 1709 1710 
+602 416 513 694 1185 1500 1449 
+603 323 444 592 786 1479 1711 
+604 2 42 594 55 1712 1612 
+605 282 452 566 1713 1714 1011 
+606 350 448 643 980 1715 1716 
+607 476 100 621 1526 1717 1718 
+608 138 137 502 153 1719 1720 
+609 516 343 700 1214 1721 1722 
+610 452 331 524 1441 1650 1450 
+611 398 553 567 800 1620 1642 
+612 301 482 549 1667 1431 851 
+613 354 520 548 1672 1723 1724 
+614 346 477 548 1725 1726 1727 
+615 387 493 685 872 1728 1729 
+616 501 352 510 1271 1730 1671 
+617 436 322 728 1461 1731 1732 
+618 391 541 702 1733 1641 1734 
+619 474 348 503 1735 1736 1608 
+620 12 13 508 29 1737 1738 
+621 134 133 620 149 1579 1739 
+622 452 282 584 1713 1740 1442 
+623 652 476 695 1741 1742 1743 
+624 507 390 622 1087 1130 1052 
+625 324 449 612 1162 1378 1316 
+626 373 584 665 1575 1744 1745 
+627 523 376 676 1746 1747 1542 
+628 446 306 600 1748 1749 1598 
+629 419 568 687 1303 1750 913 
+630 428 361 620 899 1751 1578 
+631 487 338 509 1752 1191 1690 
+632 505 387 602 978 1117 1753 
+633 358 437 623 1376 1754 1353 
+634 359 447 615 1229 1755 1756 
+635 18 19 519 35 1757 991 
+636 50 51 557 64 1017 1758 
+637 467 382 549 1044 852 1515 
+638 492 356 614 1759 1760 1761 
+639 484 355 529 952 1762 1649 
+640 520 346 548 818 1727 1723 
+641 452 349 566 1235 1383 1714 
+642 337 454 564 1470 1166 1632 
+643 335 466 533 1418 1154 1266 
+644 468 379 711 1571 1763 1764 
+645 278 499 662 1489 1765 1766 
+646 517 278 662 1767 1766 1768 
+647 339 472 735 1121 1769 1529 
+648 568 309 687 1770 1771 1750 
+649 406 450 730 934 1607 1772 
+650 538 377 596 1773 1581 1774 
+651 486 298 709 1704 1775 1776 
+652 136 135 511 151 1777 1778 
+653 500 375 601 1779 1780 1781 
+654 477 297 548 1782 1783 1726 
+655 460 383 738 1784 1785 1786 
+656 294 459 564 1787 1633 1788 
+657 343 553 700 1619 1789 1721 
+658 493 288 685 1182 1367 1728 
+659 344 545 573 1790 763 1791 
+660 313 545 725 1434 1792 1439 
+661 351 532 568 1793 1677 1302 
+662 13 14 563 30 790 1794 
+663 300 460 738 1795 1786 1796 
+664 297 505 602 1797 1753 1798 
+665 306 446 648 1748 1696 1799 
+666 78 79 546 92 1309 1341 
+667 142 464 617 908 1800 1801 
+668 448 324 643 1170 1802 1715 
+669 99 476 652 1527 1741 1803 
+670 356 551 614 1804 1805 1760 
+671 467 341 633 1514 1806 1807 
+672 384 458 636 1491 1808 1809 
+673 461 412 684 1097 1810 1811 
+674 460 300 579 1795 1812 1596 
+675 453 319 688 1813 1120 1814 
+676 425 590 712 1463 1815 972 
+677 374 453 688 1368 1814 1816 
+678 562 307 591 1817 1818 1819 
+679 343 522 675 1215 1820 1320 
+680 502 137 624 1719 1821 1822 
+681 298 593 709 1823 1824 1775 
+682 590 280 712 1565 1825 1815 
+683 552 367 649 1826 1827 1828 
+684 342 446 680 1695 1829 1830 
+685 447 49 615 770 1831 1755 
+686 10 461 684 1008 1811 1832 
+687 332 457 616 1412 1560 939 
+688 532 351 588 1793 1488 1833 
+689 381 552 649 843 1828 1587 
+690 138 502 664 1720 1250 1834 
+691 12 508 640 1738 1038 1835 
+692 19 20 699 36 1096 1836 
+693 284 569 678 1837 1838 1549 
+694 319 453 668 1813 1839 1840 
+695 383 460 668 1784 1841 1842 
+696 461 385 720 1167 1843 1844 
+697 369 547 565 1845 1846 1427 
+698 330 490 530 1847 1625 950 
+699 301 538 596 744 1774 1277 
+700 572 443 686 1848 1595 1849 
+701 376 523 609 1746 1850 1103 
+702 312 455 729 850 1851 1852 
+703 140 139 730 155 1853 1606 
+704 542 131 705 1661 1854 1855 
+705 362 562 591 1856 1819 1857 
+706 477 346 578 1725 1858 1859 
+707 500 47 708 1646 1860 1861 
+708 577 134 620 1862 1739 1863 
+709 341 470 635 1142 1864 1865 
+710 293 485 576 1866 1867 1611 
+711 136 511 624 1778 1868 1869 
+712 521 307 562 1870 1817 1871 
+713 298 583 587 1872 1873 1874 
+714 638 303 681 1875 1876 1110 
+715 440 471 723 887 1877 1878 
+716 315 478 691 1879 1880 1881 
+717 460 319 668 1207 1840 1841 
+718 380 478 678 1882 1550 1883 
+719 304 448 657 1091 1314 1884 
+720 364 471 625 1885 1259 840 
+721 280 510 650 1669 1886 1887 
+722 370 585 613 1888 1100 1384 
+723 541 410 632 985 1889 1693 
+724 568 411 666 1676 1890 1891 
+725 489 607 714 1710 1892 1893 
+726 464 365 617 1195 1894 1800 
+727 471 106 723 1066 1895 1877 
+728 297 477 575 1782 1896 1897 
+729 484 344 573 1898 1791 953 
+730 514 379 657 1899 1900 1313 
+731 363 475 642 1511 1901 1350 
+732 547 359 565 1230 1902 1846 
+733 309 568 666 1770 1891 1903 
+734 601 375 670 1780 1904 1905 
+735 451 387 685 1116 1729 1356 
+736 330 569 701 1425 1906 1907 
+737 478 380 691 1882 1638 1880 
+738 456 371 659 1188 1908 1555 
+739 355 468 655 1909 1910 1911 
+740 141 140 555 156 1616 854 
+741 475 320 642 1912 1913 1901 
+742 572 292 717 1675 1914 1915 
+743 488 378 707 1916 1917 1918 
+744 468 355 686 1909 1919 1920 
+745 463 350 643 1355 1716 1921 
+746 344 484 722 1898 1922 1674 
+747 569 436 678 1424 1923 1838 
+748 1 9 656 25 1924 1925 
+749 569 284 645 1837 1004 1700 
+750 511 393 624 1926 1927 1868 
+751 129 1 656 144 1925 1928 
+752 131 130 705 146 1929 1854 
+753 374 496 644 1930 1931 1932 
+754 458 505 636 1460 1933 1808 
+755 485 360 576 1934 1684 1867 
+756 477 353 575 1935 1537 1896 
+757 295 473 696 1390 1936 1937 
+758 433 543 561 1422 1938 1678 
+759 143 142 617 158 1801 1939 
+760 360 489 704 1708 1940 1941 
+761 101 102 574 118 1047 1942 
+762 130 498 705 1943 1944 1929 
+763 574 391 621 1945 1946 1947 
+764 341 525 633 1948 1949 1806 
+765 543 310 692 1421 1557 1950 
+766 455 390 729 1129 1951 1851 
+767 21 22 571 38 1423 1952 
+768 322 534 728 1564 1953 1731 
+769 469 321 720 1233 1954 1955 
+770 96 97 633 113 1956 1957 
+771 391 574 663 1945 1958 1959 
+772 332 508 710 778 1960 1961 
+773 476 621 702 1718 1962 1963 
+774 583 402 587 1964 832 1873 
+775 408 528 550 1281 1965 1202 
+776 574 398 663 1046 1643 1958 
+777 500 372 674 1966 1967 1968 
+778 492 21 571 1284 1952 1969 
+779 501 339 639 1670 1622 1970 
+780 560 413 731 1447 1971 1591 
+781 382 652 695 1045 1743 1329 
+782 97 467 633 1041 1807 1956 
+783 107 108 588 124 1972 1973 
+784 362 512 562 1974 1975 1856 
+785 294 564 628 1788 1344 1287 
+786 496 72 644 1662 1976 1931 
+787 565 359 716 1902 1340 1977 
+788 430 543 692 1602 1950 1570 
+789 15 16 597 32 1682 1978 
+790 279 480 671 1472 1457 1432 
+791 348 474 610 1735 1664 1193 
+792 618 303 638 1979 1875 1393 
+793 135 134 734 150 1980 1981 
+794 443 572 717 1848 1915 1299 
+795 558 291 639 1658 1982 1983 
+796 353 477 696 1935 1984 1985 
+797 403 540 693 1237 1986 1987 
+798 381 486 710 1586 1988 1989 
+799 464 368 629 1268 1990 1196 
+800 324 463 643 1315 1921 1802 
+801 364 516 637 1039 1187 1991 
+802 528 334 550 1468 1673 1965 
+803 459 294 613 1787 1153 1033 
+804 306 607 623 1992 1399 1993 
+805 375 500 708 1779 1861 1994 
+806 366 454 713 1164 1995 1996 
+807 80 81 635 94 1997 1998 
+808 561 338 706 1999 2000 1219 
+809 280 650 712 1887 2001 1825 
+810 508 13 563 1737 1794 2002 
+811 484 311 722 1648 1363 1922 
+812 340 482 611 1161 1668 2003 
+813 291 501 639 1056 1970 1982 
+814 405 492 614 866 1761 1282 
+815 356 492 571 1759 1969 1374 
+816 47 48 708 61 2004 1860 
+817 622 296 735 1031 1590 2005 
+818 478 315 630 1879 1707 1311 
+819 101 574 621 1942 1947 2006 
+820 345 521 562 2007 1871 2008 
+821 352 457 709 1270 2009 2010 
+822 361 497 661 900 2011 2012 
+823 486 332 710 1413 1961 1988 
+824 485 293 703 1866 2013 2014 
+825 543 338 561 1601 1999 1938 
+826 483 313 626 1223 1703 2015 
+827 488 43 676 2016 2017 2018 
+828 558 329 732 1300 1151 2019 
+829 378 488 638 1916 1467 1109 
+830 43 44 676 57 1543 2017 
+831 585 370 645 1888 1701 2020 
+832 342 506 580 834 1539 1405 
+833 369 509 631 1691 2021 2022 
+834 316 547 727 1177 2023 1656 
+835 358 485 703 1352 2014 1217 
+836 357 483 626 1644 2015 2024 
+837 479 303 618 1178 1979 1483 
+838 512 345 562 1519 2008 1975 
+839 385 469 720 1452 1955 1843 
+840 321 461 720 1098 1844 1954 
+841 290 561 721 1679 1221 1687 
+842 473 353 696 1094 1985 1936 
+843 525 341 635 1948 1865 2025 
+844 326 476 702 2026 1963 1640 
+845 286 503 651 1609 2027 1028 
+846 107 588 723 1973 2028 2029 
+847 46 500 674 1647 1968 2030 
+848 49 50 615 63 2031 1831 
+849 100 101 621 117 2006 1717 
+850 441 558 732 1659 2019 1240 
+851 508 563 710 2002 2032 1960 
+852 320 475 731 1912 1592 2033 
+853 317 585 634 1099 2034 1496 
+854 402 583 667 1964 2035 1156 
+855 470 80 635 1310 1998 1864 
+856 323 468 686 1680 1920 1594 
+857 494 357 647 1645 1255 2036 
+858 491 312 729 2037 1852 2038 
+859 375 544 690 2039 1058 2040 
+860 499 327 662 897 1635 1765 
+861 540 407 693 1232 2041 1986 
+862 534 380 728 1636 2042 1953 
+863 279 655 711 1015 2043 2044 
+864 372 500 601 1966 1781 2045 
+865 326 538 695 2046 1330 2047 
+866 360 485 607 1934 1398 1709 
+867 11 12 640 28 1835 955 
+868 278 517 659 1767 1556 2048 
+869 502 624 736 1822 2049 2050 
+870 98 99 652 115 1803 903 
+871 472 622 735 1146 2005 1769 
+872 302 494 647 1532 2036 2051 
+873 521 345 595 2007 1274 1508 
+874 424 590 626 1566 2052 1702 
+875 538 326 632 2046 1694 2053 
+876 570 143 617 1317 1939 2054 
+877 23 24 669 40 2055 1445 
+878 81 525 635 1079 2025 1997 
+879 588 440 723 1487 1878 2028 
+880 655 468 711 1910 1764 2043 
+881 509 283 631 1114 1502 2021 
+882 417 489 714 803 1893 2056 
+883 312 491 713 2037 2057 2058 
+884 585 388 634 2059 2060 2034 
+885 108 532 588 1538 1833 1972 
+886 338 487 706 1752 2061 2000 
+887 503 377 651 1476 2062 2027 
+888 557 359 615 1338 1756 2063 
+889 525 96 633 937 1957 1949 
+890 457 486 709 1414 1776 2009 
+891 476 326 695 2026 2047 1742 
+892 9 10 684 26 1832 2064 
+893 103 104 700 120 2065 2066 
+894 305 541 663 986 2067 1545 
+895 106 107 723 123 2029 1895 
+896 287 512 619 2068 2069 976 
+897 137 136 624 152 1869 1821 
+898 376 488 676 1466 2018 1747 
+899 590 357 626 1462 2024 2052 
+900 471 364 637 1885 1991 1067 
+901 354 548 602 1724 2070 1080 
+902 48 544 708 810 2071 2004 
+903 134 577 734 1862 2072 1980 
+904 377 538 632 1773 2053 2073 
+905 373 665 718 1745 2074 2075 
+906 554 362 591 874 1857 2076 
+907 512 362 619 1974 1558 2069 
+908 378 594 707 2077 2078 1917 
+909 497 296 661 1589 1698 2011 
+910 372 523 674 2079 2080 1967 
+911 552 15 597 1513 1978 2081 
+912 523 372 609 2079 2082 1850 
+913 72 73 644 86 2083 1976 
+914 506 374 644 812 1932 2084 
+915 76 77 704 90 2085 2086 
+916 42 43 707 56 2087 2088 
+917 390 491 729 948 2038 1951 
+918 665 422 718 1626 1112 2074 
+919 541 391 663 1733 1959 2067 
+920 632 410 651 1889 1029 2089 
+921 491 366 713 1465 1996 2057 
+922 551 308 614 2090 1370 1805 
+923 498 130 682 1943 2091 2092 
+924 45 46 674 59 2030 2093 
+925 477 578 696 1859 2094 1984 
+926 395 536 611 1395 2095 1481 
+927 394 542 705 1580 1855 2096 
+928 487 300 738 1484 1796 2097 
+929 299 524 733 2098 1652 2099 
+930 496 374 688 1930 1816 1257 
+931 539 293 653 2100 1401 2101 
+932 629 309 666 2102 1903 1348 
+933 43 488 707 2016 1918 2087 
+934 73 506 644 1392 2084 2083 
+935 551 356 581 1804 2103 2104 
+936 400 589 660 877 1568 1209 
+937 139 138 664 154 1834 2105 
+938 489 76 704 999 2086 1940 
+939 307 521 697 1870 2106 1569 
+940 373 551 581 2107 2104 1070 
+941 69 70 698 83 1090 2108 
+942 371 554 591 1189 2076 2109 
+943 393 511 641 1926 2110 2111 
+944 606 360 704 1685 1941 2112 
+945 608 365 666 1563 1349 2113 
+946 536 340 611 821 2003 2095 
+947 298 587 593 1874 2114 1823 
+948 130 129 682 145 2115 2091 
+949 581 356 681 2103 1660 2116 
+950 625 315 691 1258 1881 2117 
+951 412 498 682 1043 2092 2118 
+952 511 397 641 2119 936 2110 
+953 512 287 660 2068 769 1520 
+954 490 330 701 1847 1907 1132 
+955 524 299 627 2098 2120 1451 
+956 523 45 674 1523 2093 2080 
+957 505 297 636 1797 2121 1933 
+958 314 646 658 998 2122 927 
+959 548 297 602 1783 1798 2070 
+960 503 348 679 1736 2123 1477 
+961 511 135 734 1777 1981 2124 
+962 510 352 650 1730 2125 1886 
+963 578 346 604 1858 1504 1618 
+964 587 392 593 823 2126 2114 
+965 578 295 696 1617 1937 2094 
+966 513 302 647 1184 2051 1561 
+967 377 632 651 2073 2089 2062 
+968 367 552 597 1826 2081 1665 
+969 421 517 662 1294 1768 1634 
+970 431 670 690 1604 2127 1692 
+971 514 279 711 1473 2044 2128 
+972 504 342 680 833 1830 1610 
+973 355 572 686 941 1849 1919 
+974 299 533 627 1343 1155 2120 
+975 367 583 649 2129 2130 1827 
+976 498 394 705 841 2096 1944 
+977 104 516 700 1186 1722 2065 
+978 437 600 623 1655 2131 1754 
+979 521 389 697 1507 1335 2106 
+980 293 539 703 2100 1444 2013 
+981 592 403 654 1073 2132 2133 
+982 654 403 689 2132 2134 2135 
+983 50 557 615 1758 2063 2031 
+984 411 608 666 959 2113 1890 
+985 529 355 655 1762 1911 1027 
+986 515 409 671 1023 1433 1407 
+987 427 625 691 837 2117 1706 
+988 522 289 675 1175 988 1820 
+989 670 375 690 1904 2040 2127 
+990 348 539 653 1298 2101 2136 
+991 646 432 658 1459 1025 2122 
+992 687 309 724 1771 2137 2138 
+993 609 372 733 2082 2139 1653 
+994 601 299 733 2140 2099 2141 
+995 605 371 683 2142 2143 2144 
+996 297 575 636 1897 2145 2121 
+997 379 514 711 1899 2128 1763 
+998 569 370 701 1699 1385 1906 
+999 584 282 665 1740 1627 1744 
+1000 365 570 617 1562 2054 1894 
+1001 519 19 699 1757 1836 863 
+1002 336 582 715 966 2146 1683 
+1003 399 579 716 1577 2147 1510 
+1004 371 605 659 2142 2148 1908 
+1005 352 593 650 2149 2150 2125 
+1006 551 373 718 2107 2075 2151 
+1007 397 511 734 2119 2124 2152 
+1008 579 300 716 1812 2153 2147 
+1009 446 537 680 1585 1548 1829 
+1010 361 577 620 2154 1863 1751 
+1011 593 352 709 2149 2010 1824 
+1012 397 577 726 2155 2156 1630 
+1013 545 344 725 1790 2157 1792 
+1014 582 400 715 1212 1210 2146 
+1015 544 375 708 2039 1994 2071 
+1016 407 642 719 1351 2158 2159 
+1017 309 629 724 2102 2160 2137 
+1018 426 558 639 1301 1983 1621 
+1019 577 361 726 2154 2161 2156 
+1020 308 551 718 2090 2151 1111 
+1021 575 384 636 1574 1809 2145 
+1022 553 103 700 1062 2066 1789 
+1023 415 605 683 826 2144 970 
+1024 583 298 649 1872 1705 2130 
+1025 337 502 736 880 2050 1471 
+1026 547 369 727 1845 2162 2023 
+1027 388 585 645 2059 2020 1371 
+1028 600 306 623 1749 1993 2131 
+1029 607 306 714 1992 2163 1892 
+1030 593 392 650 2126 2164 2150 
+1031 594 378 669 2077 1600 2165 
+1032 383 668 721 1842 2166 1296 
+1033 323 592 654 1711 2133 1681 
+1034 656 412 682 2167 2118 2168 
+1035 129 656 682 1928 2168 2115 
+1036 668 453 721 1839 1688 2166 
+1037 379 654 689 1573 2135 2169 
+1038 24 594 669 1613 2165 2055 
+1039 583 367 667 2129 1554 2035 
+1040 395 596 679 1480 1582 2170 
+1041 650 392 712 2164 973 2001 
+1042 303 581 681 1179 2116 1876 
+1043 621 391 702 1946 1734 1962 
+1044 299 601 670 2140 1905 1603 
+1045 642 320 719 1913 1138 2158 
+1046 605 278 659 1252 2048 2148 
+1047 304 689 693 2171 2172 2173 
+1048 656 9 684 1924 2064 2174 
+1049 610 320 731 1663 2033 2175 
+1050 300 565 716 1485 1977 2153 
+1051 371 591 683 2109 2176 2143 
+1052 591 307 683 1818 971 2176 
+1053 77 606 704 1509 2112 2085 
+1054 556 420 725 1379 1440 2177 
+1055 344 556 725 1624 2177 2157 
+1056 624 393 736 1927 1417 2049 
+1057 306 648 714 1799 2178 2163 
+1058 412 656 684 2167 2174 1810 
+1059 348 653 679 2136 2179 2123 
+1060 386 599 698 1381 2180 1226 
+1061 563 381 710 844 1989 2032 
+1062 678 436 728 1923 1732 2181 
+1063 599 69 698 1628 2108 2180 
+1064 577 397 734 2155 2152 2072 
+1065 304 657 689 1884 2182 2171 
+1066 413 610 731 1194 2175 1971 
+1067 368 634 724 1328 2183 2184 
+1068 629 368 724 1990 2184 2160 
+1069 380 678 728 1883 2181 2042 
+1070 648 417 714 1305 2056 2178 
+1071 689 403 693 2134 1987 2172 
+1072 388 687 724 1372 2138 2185 
+1073 664 406 730 1249 1772 2186 
+1074 672 304 693 1180 2173 2187 
+1075 594 42 707 1712 2088 2078 
+1076 292 677 717 1689 2188 1914 
+1077 657 379 689 1900 2169 2182 
+1078 372 601 733 2045 2141 2139 
+1079 653 395 679 1396 2170 2179 
+1080 672 407 719 2189 2159 2190 
+1081 407 672 693 2189 2187 2041 
+1082 677 421 717 1243 1206 2188 
+1083 706 487 738 2061 2097 2191 
+1084 661 455 726 1697 1631 2192 
+1085 631 429 727 1501 1657 2193 
+1086 312 713 737 2058 2194 2195 
+1087 361 661 726 2012 2192 2161 
+1088 369 631 727 2022 2193 2162 
+1089 634 388 724 2060 2185 2183 
+1090 393 641 737 2111 2196 1540 
+1091 713 454 737 1995 1541 2194 
+1092 139 664 730 2105 2186 1853 
+1093 404 672 719 1386 2190 1168 
+1094 641 312 737 935 2195 2196 
+1095 383 706 738 1295 2191 1785 
+2 6 9 998
+1096 2240 2313 2360 2658 2659 2660 
+1097 2301 2220 2457 2661 2662 2663 
+1098 251 2454 2518 2664 2665 2666 
+1099 2321 2237 2357 2667 2668 2669 
+1100 2320 2230 2342 2670 2671 2672 
+1101 102 103 2333 119 2673 2674 
+1102 2489 191 2527 2675 2676 2677 
+1103 2211 2353 2464 2678 2679 2680 
+1104 2211 2464 2492 2680 2681 2682 
+1105 2237 2311 2344 2683 2684 2685 
+1106 2351 2206 2579 2686 2687 2688 
+1107 2366 256 2463 2689 2690 2691 
+1108 2335 2221 2473 2692 2693 2694 
+1109 2304 2251 2427 2695 2696 2697 
+1110 2329 2205 2517 2698 2699 2700 
+1111 2368 2329 2517 2701 2700 2702 
+1112 2362 2242 2363 2703 2704 2705 
+1113 251 252 2454 265 2706 2664 
+1114 2471 106 2482 2707 2708 2709 
+1115 2445 2272 2446 2710 2711 2712 
+1116 2351 2579 2634 2688 2713 2714 
+1117 2333 103 2364 2673 2715 2716 
+1118 200 2317 2472 2717 2718 2719 
+1119 230 2336 2408 2720 2721 2722 
+1120 2224 2329 2368 2723 2701 2724 
+1121 2246 2362 2363 2725 2705 2726 
+1122 2205 2323 2517 2727 2728 2699 
+1123 256 257 2463 270 2729 2690 
+1124 2293 2423 2425 2730 2731 2732 
+1125 2226 2334 2354 2733 2734 2735 
+1126 2265 2334 2439 2736 2737 2738 
+1127 2259 2337 2455 2739 2740 2741 
+1128 2311 2237 2506 2683 2742 2743 
+1129 2439 2334 2524 2737 2744 2745 
+1130 2327 2247 2414 2746 2747 2748 
+1131 2247 2327 2377 2746 2749 2750 
+1132 2237 2321 2506 2667 2751 2742 
+1133 2423 2261 2425 2752 2753 2731 
+1134 2441 2346 2544 2754 2755 2756 
+1135 191 192 2527 208 2757 2676 
+1136 2283 2441 2544 2758 2756 2759 
+1137 2313 2240 2417 2658 2760 2761 
+1138 2300 2471 2482 2762 2709 2763 
+1139 2255 2324 2618 2764 2765 2766 
+1140 2316 2231 2374 2767 2768 2769 
+1141 2220 2301 2468 2661 2770 2771 
+1142 172 2383 2474 2772 2773 2774 
+1143 254 2318 2478 2775 2776 2777 
+1144 2325 2236 2378 2778 2779 2780 
+1145 2438 2255 2618 2781 2766 2782 
+1146 100 2324 2411 2783 2784 2785 
+1147 2454 253 2478 2786 2787 2788 
+1148 2247 2306 2412 2789 2790 2791 
+1149 2281 2335 2473 2792 2694 2793 
+1150 2227 2319 2508 2794 2795 2796 
+1151 2325 2256 2421 2797 2798 2799 
+1152 2200 2327 2414 2800 2748 2801 
+1153 2233 2333 2364 2802 2716 2803 
+1154 2234 2359 2390 2804 2805 2806 
+1155 2315 2382 2594 2807 2808 2809 
+1156 2323 2381 2517 2810 2811 2728 
+1157 2248 2347 2416 2812 2813 2814 
+1158 2246 2370 2418 2815 2816 2817 
+1159 2347 2280 2416 2818 2819 2813 
+1160 252 253 2454 266 2786 2706 
+1161 2256 2325 2378 2797 2780 2820 
+1162 204 2386 2571 2821 2822 2823 
+1163 2241 2384 2399 2824 2825 2826 
+1164 172 173 2383 188 2827 2772 
+1165 2308 2485 2514 2828 2829 2830 
+1166 2338 2564 2606 2831 2832 2833 
+1167 2327 2229 2377 2834 2835 2749 
+1168 2250 2528 2537 2836 2837 2838 
+1169 2203 2338 2397 2839 2840 2841 
+1170 2412 2282 2414 2842 2843 2844 
+1171 2233 2321 2577 2845 2846 2847 
+1172 2382 2315 2531 2807 2848 2849 
+1173 2336 230 2499 2720 2850 2851 
+1174 2236 2325 2369 2778 2852 2853 
+1175 2231 2316 2560 2767 2854 2855 
+1176 206 7 2444 223 2856 2857 
+1177 2251 2304 2535 2695 2858 2859 
+1178 2274 2491 2492 2860 2861 2862 
+1179 2323 2205 2393 2727 2863 2864 
+1180 2204 2309 2410 2865 2866 2867 
+1181 2249 2328 2449 2868 2869 2870 
+1182 2403 2274 2492 2871 2862 2872 
+1183 109 2380 2559 2873 2874 2875 
+1184 193 2330 2527 2876 2877 2878 
+1185 2347 2248 2461 2812 2879 2880 
+1186 2266 2437 2454 2881 2882 2883 
+1187 2324 2255 2501 2764 2884 2885 
+1188 2206 2357 2613 2886 2887 2888 
+1189 2334 2226 2602 2733 2889 2890 
+1190 2344 2311 2631 2684 2891 2892 
+1191 2437 2305 2454 2893 2894 2882 
+1192 2538 2206 2613 2895 2888 2896 
+1193 2306 2247 2424 2789 2897 2898 
+1194 2269 2367 2433 2899 2900 2901 
+1195 163 164 2347 179 2902 2903 
+1196 2247 2412 2414 2791 2844 2747 
+1197 2329 2224 2460 2723 2904 2905 
+1198 2382 2208 2594 2906 2907 2808 
+1199 2455 2337 2495 2740 2908 2909 
+1200 102 2333 2438 2674 2910 2911 
+1201 2235 2366 2463 2912 2691 2913 
+1202 2341 2227 2508 2914 2796 2915 
+1203 2333 2233 2565 2802 2916 2917 
+1204 229 230 2408 243 2722 2918 
+1205 2357 2206 2577 2886 2919 2920 
+1206 234 235 2361 248 2921 2922 
+1207 2338 2203 2564 2839 2923 2831 
+1208 2297 2358 2600 2924 2925 2926 
+1209 109 110 2380 126 2927 2873 
+1210 2370 2273 2418 2928 2929 2816 
+1211 2485 2201 2514 2930 2931 2829 
+1212 2328 2198 2574 2932 2933 2934 
+1213 2318 254 2476 2775 2935 2936 
+1214 103 104 2364 120 2937 2715 
+1215 2328 2230 2449 2938 2939 2869 
+1216 2315 2224 2531 2940 2941 2848 
+1217 2328 2249 2434 2868 2942 2943 
+1218 2206 2351 2577 2686 2944 2919 
+1219 2448 2328 2574 2945 2934 2946 
+1220 2205 2329 2570 2698 2947 2948 
+1221 2215 2374 2541 2949 2950 2951 
+1222 2378 2236 2532 2779 2952 2953 
+1223 2221 2375 2473 2954 2955 2693 
+1224 2304 2427 2559 2697 2956 2957 
+1225 2283 2435 2441 2958 2959 2758 
+1226 204 205 2386 221 2960 2821 
+1227 2240 2331 2417 2961 2962 2760 
+1228 2386 2301 2571 2963 2964 2822 
+1229 2317 200 2493 2717 2965 2966 
+1230 2268 2385 2546 2967 2968 2969 
+1231 2426 2252 2541 2970 2971 2972 
+1232 2376 2210 2420 2973 2974 2975 
+1233 2235 2463 2609 2913 2976 2977 
+1234 2252 2343 2400 2978 2979 2980 
+1235 199 200 2472 216 2719 2981 
+1236 2338 2270 2549 2982 2983 2984 
+1237 2390 196 2556 2985 2986 2987 
+1238 2321 2357 2577 2669 2920 2846 
+1239 2292 2398 2500 2988 2989 2990 
+1240 2322 2207 2511 2991 2992 2993 
+1241 97 98 2358 114 2994 2995 
+1242 2266 2379 2437 2996 2997 2881 
+1243 7 224 2444 237 2998 2856 
+1244 2273 2370 2521 2928 2999 3000 
+1245 2246 2363 2370 2726 3001 2815 
+1246 2330 193 2451 2876 3002 3003 
+1247 2345 2248 2416 3004 2814 3005 
+1248 2309 2204 2426 2865 3006 3007 
+1249 2361 235 2617 2921 3008 3009 
+1250 2223 2367 2381 3010 3011 3012 
+1251 2392 2272 2445 3013 2710 3014 
+1252 2324 100 2618 2783 3015 2765 
+1253 2331 2240 2380 2961 3016 3017 
+1254 2236 2504 2532 3018 3019 2952 
+1255 2384 2269 2399 3020 3021 2825 
+1256 2528 2295 2537 3022 3023 2837 
+1257 2224 2315 2486 2940 3024 3025 
+1258 197 198 2556 214 3026 3027 
+1259 196 197 2556 213 3027 2986 
+1260 2557 2297 2600 3028 2926 3029 
+1261 2227 2341 2637 2914 3030 3031 
+1262 2202 2349 2428 3032 3033 3034 
+1263 2370 2306 2521 3035 3036 2999 
+1264 192 193 2527 209 2878 2757 
+1265 2361 2238 2607 3037 3038 3039 
+1266 2258 2391 2400 3040 3041 3042 
+1267 2337 227 2525 3043 3044 3045 
+1268 2343 2199 2400 3046 3047 2979 
+1269 2374 2309 2541 3048 3049 2950 
+1270 2409 2532 2620 3050 3051 3052 
+1271 2202 2445 2446 3053 2712 3054 
+1272 2393 2239 2638 3055 3056 3057 
+1273 2375 2244 2436 3058 3059 3060 
+1274 2260 2389 2401 3061 3062 3063 
+1275 2252 2391 2541 3064 3065 2971 
+1276 230 231 2499 244 3066 2850 
+1277 2282 2412 2459 2842 3067 3068 
+1278 2461 2248 2651 2879 3069 3070 
+1279 2409 2213 2532 3071 3072 3050 
+1280 2385 2452 2546 3073 3074 2968 
+1281 2321 2233 2586 2845 3075 3076 
+1282 2320 2342 2505 2672 3077 3078 
+1283 2389 2259 2401 3079 3080 3062 
+1284 2243 2368 2517 3081 2702 3082 
+1285 2285 2373 2483 3083 3084 3085 
+1286 2380 2304 2559 3086 2957 2874 
+1287 2323 2393 2638 2864 3057 3087 
+1288 2230 2328 2448 2938 2945 3088 
+1289 2367 2243 2381 3089 3090 3011 
+1290 2204 2339 2426 3091 3092 3006 
+1291 2208 2346 2441 3093 2754 3094 
+1292 2366 2235 2466 2912 3095 3096 
+1293 2398 2222 2500 3097 3098 2989 
+1294 2223 2381 2591 3012 3099 3100 
+1295 2412 2207 2459 3101 3102 3067 
+1296 2221 2335 2432 2692 3103 3104 
+1297 198 2435 2556 3105 3106 3026 
+1298 2375 2290 2473 3107 3108 2955 
+1299 2349 2257 2428 3109 3110 3033 
+1300 2267 2332 2529 3111 3112 3113 
+1301 2383 2284 2548 3114 3115 3116 
+1302 2333 2255 2438 3117 2781 2910 
+1303 2339 2252 2426 3118 2970 3092 
+1304 2320 2505 2547 3078 3119 3120 
+1305 2327 2200 2469 2800 3121 3122 
+1306 2246 2340 2636 3123 3124 3125 
+1307 2379 2238 2437 3126 3127 2997 
+1308 2391 2252 2400 3064 2980 3041 
+1309 2381 2243 2517 3090 3082 2811 
+1310 2579 2319 2634 3128 3129 2713 
+1311 2230 2320 2449 2670 3130 2939 
+1312 2319 2227 2501 2794 3131 3132 
+1313 2435 2262 2441 3133 3134 2959 
+1314 2277 2332 2622 3135 3136 3137 
+1315 2625 2480 2640 3138 3139 3140 
+1316 2232 2353 2402 3141 3142 3143 
+1317 2305 2361 2617 3144 3009 3145 
+1318 2346 2208 2453 3093 3146 3147 
+1319 2278 2366 2466 3148 3096 3149 
+1320 2326 2282 2459 3150 3068 3151 
+1321 2240 2360 2388 2660 3152 3153 
+1322 2371 2268 2546 3154 2969 3155 
+1323 2207 2322 2459 2991 3156 3102 
+1324 2308 2450 2485 3157 3158 2828 
+1325 2360 2313 2651 2659 3159 3160 
+1326 2340 2244 2596 3161 3162 3163 
+1327 2202 2348 2445 3164 3165 3053 
+1328 2348 2254 2445 3166 3167 3165 
+1329 2325 2421 2583 2799 3168 3169 
+1330 2197 2439 2524 3170 2745 3171 
+1331 2344 2276 2566 3172 3173 3174 
+1332 2415 2361 2607 3175 3039 3176 
+1333 2234 2390 2544 2806 3177 3178 
+1334 2208 2382 2384 2906 3179 3180 
+1335 2356 2200 2479 3181 3182 3183 
+1336 2254 2350 2452 3184 3185 3186 
+1337 2383 2287 2474 3187 3188 2773 
+1338 2271 2376 2420 3189 2975 3190 
+1339 2341 2264 2514 3191 3192 3193 
+1340 2337 2259 2465 2739 3194 3195 
+1341 2515 2220 2530 3196 3197 3198 
+1342 2229 2327 2447 2834 3199 3200 
+1343 2324 2501 2533 2885 3201 3202 
+1344 99 100 2411 116 2785 3203 
+1345 2237 2344 2432 2685 3204 3205 
+1346 2213 2409 2547 3071 3206 3207 
+1347 253 254 2478 267 2777 2787 
+1348 2505 2285 2547 3208 3209 3119 
+1349 2353 2244 2402 3210 3211 3142 
+1350 2264 2341 2508 3191 2915 3212 
+1351 2244 2340 2436 3161 3213 3059 
+1352 2302 2625 2640 3214 3140 3215 
+1353 2332 2267 2458 3111 3216 3217 
+1354 2362 2246 2636 2725 3125 3218 
+1355 2248 2345 2477 3004 3219 3220 
+1356 2270 2338 2487 2982 3221 3222 
+1357 2336 2261 2567 3223 3224 3225 
+1358 2389 226 2465 3226 3227 3228 
+1359 225 226 2389 239 3226 3229 
+1360 2397 2338 2549 2840 2984 3230 
+1361 2255 2333 2565 3117 2917 3231 
+1362 2433 2367 2576 2900 3232 3233 
+1363 2243 2382 2531 3234 2849 3235 
+1364 174 6 2489 190 3236 3237 
+1365 2262 2486 2594 3238 3239 3240 
+1366 2249 2355 2434 3241 3242 2942 
+1367 2308 2354 2450 3243 3244 3157 
+1368 2369 2287 2553 3245 3246 3247 
+1369 2301 2457 2614 2663 3248 3249 
+1370 2475 2204 2505 3250 3251 3252 
+1371 2354 2308 2616 3243 3253 3254 
+1372 2360 2210 2388 3255 3256 3152 
+1373 2476 2278 2635 3257 3258 3259 
+1374 227 2337 2465 3043 3195 3260 
+1375 2350 2218 2452 3261 3262 3185 
+1376 6 191 2489 207 2675 3236 
+1377 2285 2483 2547 3085 3263 3209 
+1378 2352 2253 2456 3264 3265 3266 
+1379 2548 2284 2585 3115 3267 3268 
+1380 2282 2326 2561 3150 3269 3270 
+1381 2277 2404 2542 3271 3272 3273 
+1382 2382 2269 2384 3274 3020 3179 
+1383 2370 2363 2604 3001 3275 3276 
+1384 2214 2354 2523 3277 3278 3279 
+1385 234 2361 2415 2922 3175 3280 
+1386 2342 2230 2641 2671 3281 3282 
+1387 2254 2348 2592 3166 3283 3284 
+1388 2363 2207 2604 3285 3286 3275 
+1389 2293 2372 2423 3287 3288 2730 
+1390 2501 2227 2533 3131 3289 3201 
+1391 2564 2307 2606 3290 3291 2832 
+1392 2275 2358 2490 3292 3293 3294 
+1393 2277 2356 2479 3295 3183 3296 
+1394 2224 2368 2531 2724 3297 2941 
+1395 2339 2204 2475 3091 3250 3298 
+1396 2350 2254 2592 3184 3284 3299 
+1397 2454 2305 2518 2894 3300 2665 
+1398 2450 2268 2485 3301 3302 3158 
+1399 2532 2289 2620 3303 3304 3051 
+1400 2381 2323 2591 2810 3305 3099 
+1401 2349 2202 2446 3032 3054 3306 
+1402 2385 2214 2392 3307 3308 3309 
+1403 231 232 2425 245 3310 3311 
+1404 2537 2295 2557 3023 3312 3313 
+1405 2314 2455 2572 3314 3315 3316 
+1406 2404 2526 2542 3317 3318 3272 
+1407 2455 2212 2572 3319 3320 3315 
+1408 2343 2252 2522 2978 3321 3322 
+1409 2252 2339 2522 3118 3323 3321 
+1410 2261 2336 2499 3223 2851 3324 
+1411 2434 2241 2590 3325 3326 3327 
+1412 2208 2384 2453 3180 3328 3146 
+1413 2352 2229 2447 3329 3200 3330 
+1414 2251 2376 2405 3331 3332 3333 
+1415 2373 2312 2655 3334 3335 3336 
+1416 2254 2385 2392 3337 3309 3338 
+1417 2244 2353 2596 3210 3339 3162 
+1418 2229 2352 2462 3329 3340 3341 
+1419 2358 98 2490 2994 3342 3293 
+1420 2355 2249 2488 3241 3343 3344 
+1421 2288 2406 2484 3345 3346 3347 
+1422 2342 2475 2505 3348 3252 3077 
+1423 2260 2401 2468 3063 3349 3350 
+1424 2198 2328 2590 2932 3351 3352 
+1425 2353 2232 2464 3141 3353 2679 
+1426 2409 2320 2547 3354 3120 3206 
+1427 2209 2352 2456 3355 3266 3356 
+1428 2232 2339 2644 3357 3358 3359 
+1429 2371 2250 2503 3360 3361 3362 
+1430 2332 2458 2622 3217 3363 3136 
+1431 97 2358 2588 2995 3364 3365 
+1432 2332 2277 2479 3135 3296 3366 
+1433 2335 2538 2613 3367 2896 3368 
+1434 2443 2371 2546 3369 3155 3370 
+1435 2304 2388 2535 3371 3372 2858 
+1436 2201 2341 2514 3373 3193 2931 
+1437 2204 2410 2505 2867 3374 3251 
+1438 2354 2214 2450 3277 3375 3244 
+1439 2241 2399 2590 2826 3376 3326 
+1440 2351 2255 2565 3377 3231 3378 
+1441 2247 2377 2424 2750 3379 2897 
+1442 2355 2241 2434 3380 3325 3242 
+1443 2276 2344 2509 3172 3381 3382 
+1444 163 2347 2461 2903 2880 3383 
+1445 2410 2285 2505 3384 3208 3374 
+1446 2295 2407 2557 3385 3386 3312 
+1447 2253 2352 2447 3264 3330 3387 
+1448 2361 2305 2437 3144 2893 3388 
+1449 2256 2373 2655 3389 3336 3390 
+1450 2198 2399 2433 3391 3392 3393 
+1451 2200 2356 2469 3181 3394 3121 
+1452 2259 2389 2465 3079 3228 3194 
+1453 2238 2361 2437 3037 3388 3127 
+1454 2422 2296 2598 3395 3396 3397 
+1455 2207 2363 2511 3285 3398 2992 
+1456 2314 2515 2530 3399 3198 3400 
+1457 2398 2250 2537 3401 2838 3402 
+1458 2406 2219 2484 3403 3404 3346 
+1459 2359 2270 2507 3405 3406 3407 
+1460 2197 2418 2439 3408 3409 3170 
+1461 2303 2377 2611 3410 3411 3412 
+1462 2348 2235 2592 3413 3414 3283 
+1463 2236 2369 2553 2853 3247 3415 
+1464 2258 2400 2429 3042 3416 3417 
+1465 2237 2432 2613 3205 3418 3419 
+1466 2348 2202 2550 3164 3420 3421 
+1467 2334 2265 2523 2736 3422 3423 
+1468 2446 2303 2611 3424 3412 3425 
+1469 2440 2308 2514 3426 2830 3427 
+1470 227 228 2525 241 3428 3044 
+1471 2318 2476 2635 2936 3259 3429 
+1472 2282 2394 2414 3430 3431 2843 
+1473 105 106 2471 122 2707 3432 
+1474 2386 2260 2468 3433 3350 3434 
+1475 2200 2394 2479 3435 3436 3182 
+1476 2270 2359 2549 3405 3437 2983 
+1477 2431 2264 2579 3438 3439 3440 
+1478 2235 2350 2592 3441 3299 3414 
+1479 260 261 2442 274 3442 3443 
+1480 2214 2385 2450 3307 3444 3375 
+1481 202 203 2395 219 3445 3446 
+1482 2258 2345 2654 3447 3448 3449 
+1483 2375 2221 2413 2954 3450 3451 
+1484 2372 2209 2423 3452 3453 3288 
+1485 2244 2375 2413 3058 3451 3454 
+1486 2446 2272 2494 2711 3455 3456 
+1487 193 194 2451 210 3457 3002 
+1488 231 2425 2499 3311 3458 3066 
+1489 2312 2373 2656 3334 3459 3460 
+1490 2442 261 2595 3442 3461 3462 
+1491 2345 2416 2654 3005 3463 3448 
+1492 2224 2486 2582 3025 3464 3465 
+1493 2399 2269 2433 3021 2901 3392 
+1494 2209 2456 2599 3356 3466 3467 
+1495 2203 2397 2597 2841 3468 3469 
+1496 2250 2398 2503 3401 3470 3361 
+1497 2364 2286 2586 3471 3472 3473 
+1498 2375 2436 2578 3060 3474 3475 
+1499 2377 2229 2611 2835 3476 3411 
+1500 2335 2281 2538 2792 3477 3367 
+1501 2210 2376 2535 2973 3478 3479 
+1502 2432 2344 2566 3204 3174 3480 
+1503 2284 2489 2527 3481 2677 3482 
+1504 2384 2241 2453 2824 3483 3328 
+1505 2199 2343 2509 3046 3484 3485 
+1506 2402 2244 2413 3211 3454 3486 
+1507 2264 2508 2579 3212 3487 3439 
+1508 2226 2354 2616 2735 3254 3488 
+1509 2349 2446 2611 3306 3425 3489 
+1510 2387 2298 2573 3490 3491 3492 
+1511 2303 2446 2494 3424 3456 3493 
+1512 2398 2292 2503 2988 3494 3470 
+1513 2478 2318 2498 2776 3495 3496 
+1514 2347 164 2539 2902 3497 3498 
+1515 2357 2237 2613 2668 3419 2887 
+1516 2313 2461 2651 3499 3070 3159 
+1517 2296 2515 2598 3500 3501 3396 
+1518 2339 2232 2522 3357 3502 3323 
+1519 2253 2365 2456 3503 3504 3265 
+1520 2300 2405 2568 3505 3506 3507 
+1521 2416 2215 2654 3508 3509 3463 
+1522 2479 2394 2650 3436 3510 3511 
+1523 2232 2343 2522 3512 3322 3502 
+1524 2242 2362 2605 2703 3513 3514 
+1525 2379 2266 2498 2996 3515 3516 
+1526 2365 2253 2519 3503 3517 3518 
+1527 2358 2297 2588 2924 3519 3364 
+1528 2388 2210 2535 3256 3479 3372 
+1529 2257 2349 2462 3109 3520 3521 
+1530 2218 2350 2589 3261 3522 3523 
+1531 171 2369 2649 3524 3525 3526 
+1532 2393 2205 2422 2863 3527 3528 
+1533 2423 2209 2599 3453 3467 3529 
+1534 2212 2455 2495 3319 2909 3530 
+1535 4 96 2513 112 3531 3532 
+1536 2266 2478 2498 3533 3496 3515 
+1537 2486 2315 2594 3024 2809 3239 
+1538 2369 171 2474 3524 3534 3535 
+1539 2497 2214 2523 3536 3279 3537 
+1540 2262 2472 2486 3538 3539 3238 
+1541 2345 2258 2558 3447 3540 3541 
+1542 2342 2263 2475 3542 3543 3348 
+1543 2385 2268 2450 2967 3301 3444 
+1544 2320 2409 2449 3354 3544 3130 
+1545 2341 2201 2584 3373 3545 3546 
+1546 8 251 2518 264 2666 3547 
+1547 236 8 2518 250 3547 3548 
+1548 2316 2374 2645 2769 3549 3550 
+1549 2256 2378 2483 2820 3551 3552 
+1550 2340 2246 2581 3123 3553 3554 
+1551 2453 2299 2610 3555 3556 3557 
+1552 2245 2460 2621 3558 3559 3560 
+1553 2486 2317 2582 3561 3562 3464 
+1554 2276 2402 2413 3563 3486 3564 
+1555 258 259 2419 272 3565 3566 
+1556 2403 2230 2448 3567 3088 3568 
+1557 2250 2443 2652 3569 3570 3571 
+1558 2528 2250 2652 2836 3571 3572 
+1559 2253 2356 2519 3573 3574 3517 
+1560 2287 2369 2474 3245 3535 3188 
+1561 2235 2348 2646 3413 3575 3576 
+1562 2210 2360 2477 3255 3577 3578 
+1563 2358 2275 2600 3292 3579 2925 
+1564 162 163 2461 178 3383 3580 
+1565 233 234 2415 247 3280 3581 
+1566 2239 2393 2529 3055 3582 3583 
+1567 2286 2364 2516 3471 3584 3585 
+1568 2220 2401 2530 3586 3587 3197 
+1569 2400 2199 2429 3047 3588 3416 
+1570 2394 2200 2414 3435 2801 3431 
+1571 2420 2258 2429 3589 3417 3590 
+1572 2418 2273 2439 2929 3591 3409 
+1573 2354 2334 2523 2734 3423 3278 
+1574 2356 2253 2469 3573 3592 3394 
+1575 2263 2342 2641 3542 3282 3593 
+1576 2491 2211 2492 3594 2682 2861 
+1577 2330 2451 2487 3003 3595 3596 
+1578 2352 2209 2480 3355 3597 3598 
+1579 2242 2387 2573 3599 3492 3600 
+1580 2364 104 2516 2937 3601 3584 
+1581 2255 2351 2634 3377 2714 3602 
+1582 2279 2495 2525 3603 3604 3605 
+1583 2209 2372 2640 3452 3606 3607 
+1584 2353 2211 2596 2678 3608 3339 
+1585 2254 2392 2445 3338 3014 3167 
+1586 2406 2288 2428 3345 3609 3610 
+1587 2495 2337 2525 2908 3045 3604 
+1588 2233 2364 2586 2803 3473 3075 
+1589 2350 2235 2609 3441 2977 3611 
+1590 2460 2245 2551 3558 3612 3613 
+1591 2261 2365 2567 3614 3615 3224 
+1592 2374 2215 2580 2949 3616 3617 
+1593 2488 2289 2564 3618 3619 3620 
+1594 2343 2232 2545 3512 3621 3622 
+1595 2405 2217 2568 3623 3624 3506 
+1596 2346 2453 2610 3147 3557 3625 
+1597 2359 2234 2549 2804 3626 3437 
+1598 2266 2454 2478 2883 2788 3533 
+1599 2279 2408 2526 3627 3628 3629 
+1600 2432 2335 2613 3103 3368 3418 
+1601 2363 2242 2511 2704 3630 3398 
+1602 263 4 2513 277 3532 3631 
+1603 2371 2201 2485 3632 2930 3633 
+1604 2367 2269 2562 2899 3634 3635 
+1605 202 2395 2540 3446 3636 3637 
+1606 168 169 2421 184 3638 3639 
+1607 2262 2435 2619 3133 3640 3641 
+1608 2250 2371 2443 3360 3369 3569 
+1609 2472 2317 2486 2718 3561 3539 
+1610 2401 2220 2468 3586 2771 3349 
+1611 2439 2273 2467 3591 3642 3643 
+1612 2396 2265 2467 3644 3645 3646 
+1613 2412 2306 2604 2790 3647 3648 
+1614 2271 2420 2429 3190 3590 3649 
+1615 2241 2355 2647 3380 3650 3651 
+1616 2460 2310 2621 3652 3653 3559 
+1617 2267 2393 2422 3654 3528 3655 
+1618 107 108 2427 124 3656 3657 
+1619 164 165 2539 180 3658 3497 
+1620 2201 2371 2503 3632 3362 3659 
+1621 2395 2571 2614 3660 3661 3662 
+1622 2309 2426 2541 3007 2972 3049 
+1623 2368 2243 2531 3081 3235 3297 
+1624 2503 2292 2584 3494 3663 3664 
+1625 2295 2442 2595 3665 3462 3666 
+1626 2225 2365 2519 3667 3518 3668 
+1627 2487 2338 2606 3221 2833 3669 
+1628 2280 2347 2539 2818 3498 3670 
+1629 2257 2406 2428 3671 3610 3110 
+1630 2306 2424 2521 2898 3672 3036 
+1631 2356 2277 2542 3295 3273 3673 
+1632 2366 2278 2534 3148 3674 3675 
+1633 101 102 2438 118 2911 3676 
+1634 254 255 2476 268 3677 2935 
+1635 2301 2386 2468 2963 3434 2770 
+1636 2275 2411 2533 3678 3679 3680 
+1637 2274 2403 2448 2871 3568 3681 
+1638 2265 2439 2467 2738 3643 3645 
+1639 2268 2371 2485 3154 3633 3302 
+1640 2373 2256 2483 3389 3552 3084 
+1641 2385 2254 2452 3337 3186 3073 
+1642 2298 2387 2630 3490 3682 3683 
+1643 2418 2197 2581 3408 3684 3685 
+1644 2197 2436 2581 3686 3687 3684 
+1645 2391 2258 2654 3040 3449 3688 
+1646 2228 2487 2606 3689 3669 3690 
+1647 2369 2325 2649 2852 3691 3525 
+1648 2296 2457 2515 3692 3693 3500 
+1649 2217 2405 2628 3623 3694 3695 
+1650 166 167 2430 182 3696 3697 
+1651 2294 2419 2520 3698 3699 3700 
+1652 2216 2396 2467 3701 3646 3702 
+1653 2302 2379 2657 3703 3704 3705 
+1654 2378 2213 2483 3706 3707 3551 
+1655 2472 2262 2619 3538 3641 3708 
+1656 2207 2412 2604 3101 3648 3286 
+1657 2464 2263 2492 3709 3710 2681 
+1658 2464 2232 2644 3353 3359 3711 
+1659 2451 2270 2487 3712 3222 3595 
+1660 106 107 2482 123 3713 2708 
+1661 2379 2219 2657 3714 3715 3704 
+1662 2424 2216 2521 3716 3717 3672 
+1663 2365 2225 2567 3667 3718 3615 
+1664 226 227 2465 240 3260 3227 
+1665 2383 173 2536 2827 3719 3720 
+1666 2243 2367 2562 3089 3635 3721 
+1667 2395 203 2571 3445 3722 3660 
+1668 2470 2275 2533 3723 3680 3724 
+1669 2260 2386 2552 3433 3725 3726 
+1670 2377 2303 2555 3410 3727 3728 
+1671 2331 2380 2603 3017 3729 3730 
+1672 2219 2379 2498 3714 3516 3731 
+1673 2238 2372 2607 3732 3733 3038 
+1674 2509 2344 2631 3381 2892 3734 
+1675 2372 2293 2607 3287 3735 3733 
+1676 2226 2481 2510 3736 3737 3738 
+1677 2441 2262 2594 3134 3240 3739 
+1678 168 2421 2543 3639 3740 3741 
+1679 2512 2217 2628 3742 3695 3743 
+1680 2199 2509 2631 3485 3734 3744 
+1681 2286 2471 2568 3745 3746 3747 
+1682 2365 2261 2599 3614 3748 3749 
+1683 256 2366 2534 2689 3675 3750 
+1684 2380 110 2603 2927 3751 3729 
+1685 2376 2251 2535 3331 2859 3478 
+1686 2270 2451 2507 3712 3752 3406 
+1687 2471 2300 2568 2762 3507 3746 
+1688 2421 169 2583 3638 3753 3168 
+1689 2427 108 2559 3656 3754 2956 
+1690 100 101 2618 117 3755 3015 
+1691 2488 2203 2597 3756 3469 3757 
+1692 2372 2238 2587 3732 3758 3759 
+1693 2379 2302 2587 3703 3760 3761 
+1694 2304 2380 2639 3086 3762 3763 
+1695 2466 2288 2484 3764 3347 3765 
+1696 2409 2249 2449 3766 2870 3544 
+1697 2457 2220 2515 2662 3196 3693 
+1698 2362 2491 2605 3767 3768 3513 
+1699 2442 2295 2528 3665 3022 3769 
+1700 2374 2231 2648 2768 3770 3771 
+1701 170 171 2649 186 3526 3772 
+1702 162 2461 2624 3580 3773 3774 
+1703 2481 2281 2510 3775 3776 3737 
+1704 2265 2396 2497 3644 3777 3778 
+1705 258 2419 2627 3566 3779 3780 
+1706 165 2496 2539 3781 3782 3658 
+1707 2389 2260 2554 3061 3783 3784 
+1708 2404 2212 2495 3785 3530 3786 
+1709 2430 167 2543 3696 3787 3788 
+1710 2226 2440 2481 3789 3790 3736 
+1711 2502 2217 2506 3791 3792 3793 
+1712 2222 2557 2600 3794 3029 3795 
+1713 2390 2359 2642 2805 3796 3797 
+1714 2397 2234 2610 3798 3799 3800 
+1715 2238 2379 2587 3126 3761 3758 
+1716 2397 2299 2597 3801 3802 3468 
+1717 2367 2223 2576 3010 3803 3232 
+1718 2390 2283 2544 3804 2759 3177 
+1719 2429 2199 2569 3588 3805 3806 
+1720 2504 2289 2532 3807 3303 3019 
+1721 2329 2460 2551 2905 3613 3808 
+1722 2330 2487 2585 3596 3809 3810 
+1723 2526 2408 2633 3628 3811 3812 
+1724 2284 2383 2536 3114 3720 3813 
+1725 196 2390 2642 2985 3797 3814 
+1726 2396 2216 2494 3701 3815 3816 
+1727 2263 2403 2492 3817 2872 3710 
+1728 2298 2433 2576 3818 3233 3819 
+1729 2394 2282 2561 3430 3270 3820 
+1730 2278 2466 2484 3149 3765 3821 
+1731 2487 2228 2585 3689 3822 3809 
+1732 2294 2520 2589 3700 3823 3824 
+1733 2306 2370 2604 3035 3276 3647 
+1734 2488 2249 2620 3343 3825 3826 
+1735 2299 2397 2610 3801 3800 3556 
+1736 2290 2375 2578 3107 3475 3827 
+1737 2387 2274 2574 3828 3829 3830 
+1738 171 172 2474 187 2774 3534 
+1739 2239 2394 2561 3831 3820 3832 
+1740 2211 2491 2636 3594 3833 3834 
+1741 2297 2407 2626 3835 3836 3837 
+1742 2274 2387 2605 3828 3838 3839 
+1743 2269 2382 2562 3274 3840 3634 
+1744 2403 2263 2641 3817 3593 3841 
+1745 2355 2488 2597 3344 3757 3842 
+1746 111 5 2575 128 3843 3844 
+1747 2203 2488 2564 3756 3620 2923 
+1748 2312 2430 2543 3845 3788 3846 
+1749 5 160 2575 175 3847 3843 
+1750 161 162 2624 177 3774 3848 
+1751 2415 2293 2563 3849 3850 3851 
+1752 2424 2377 2555 3379 3728 3852 
+1753 2279 2404 2495 3853 3786 3603 
+1754 2272 2396 2494 3854 3816 3455 
+1755 2392 2214 2615 3308 3855 3856 
+1756 2462 2352 2480 3340 3598 3857 
+1757 173 174 2536 189 3858 3719 
+1758 2408 2279 2623 3627 3859 3860 
+1759 200 201 2493 217 3861 2965 
+1760 2417 161 2624 3862 3848 3863 
+1761 2310 2493 2540 3864 3865 3866 
+1762 2444 2260 2552 3867 3726 3868 
+1763 2229 2462 2611 3341 3869 3476 
+1764 2309 2374 2648 3048 3771 3870 
+1765 98 99 2490 115 3871 3342 
+1766 2453 2241 2647 3483 3651 3872 
+1767 2240 2388 2639 3153 3873 3874 
+1768 205 206 2552 222 3875 3876 
+1769 2493 2310 2582 3864 3877 3878 
+1770 2427 2251 2629 2696 3879 3880 
+1771 2540 2395 2621 3636 3881 3882 
+1772 2321 2502 2506 3883 3793 2751 
+1773 2447 2327 2469 3199 3122 3884 
+1774 2317 2493 2582 2966 3878 3562 
+1775 2291 2419 2593 3885 3886 3887 
+1776 99 2411 2490 3203 3888 3871 
+1777 2258 2420 2558 3589 3889 3540 
+1778 2332 2479 2650 3366 3511 3890 
+1779 2571 2301 2614 2964 3249 3661 
+1780 2386 205 2552 2960 3876 3725 
+1781 194 195 2507 211 3891 3892 
+1782 2431 2281 2481 3893 3775 3894 
+1783 2483 2213 2547 3707 3207 3263 
+1784 233 2415 2563 3581 3851 3895 
+1785 2278 2484 2635 3821 3896 3258 
+1786 2462 2349 2611 3520 3489 3869 
+1787 104 105 2516 121 3897 3601 
+1788 2399 2198 2590 3391 3352 3376 
+1789 2393 2267 2529 3654 3113 3582 
+1790 2222 2537 2557 3898 3313 3794 
+1791 165 166 2653 181 3899 3900 
+1792 2491 2362 2636 3767 3218 3833 
+1793 2210 2477 2558 3578 3901 3902 
+1794 2396 2272 2615 3854 3903 3904 
+1795 2459 2322 2612 3156 3905 3906 
+1796 2405 2300 2629 3505 3907 3908 
+1797 2287 2383 2548 3187 3116 3909 
+1798 2382 2243 2562 3234 3721 3840 
+1799 2435 2283 2556 2958 3910 3106 
+1800 2253 2447 2469 3387 3884 3592 
+1801 2213 2378 2532 3706 2953 3072 
+1802 2526 2225 2542 3911 3912 3318 
+1803 2419 2294 2627 3698 3913 3779 
+1804 2373 2285 2632 3083 3914 3915 
+1805 224 225 2554 238 3916 3917 
+1806 2257 2480 2625 3918 3138 3919 
+1807 2569 2199 2631 3805 3744 3920 
+1808 107 2427 2482 3657 3921 3713 
+1809 2230 2403 2641 3567 3841 3281 
+1810 2401 2259 2530 3080 3922 3587 
+1811 2420 2210 2558 2974 3902 3889 
+1812 2411 2324 2533 2784 3202 3679 
+1813 2411 2275 2490 3678 3294 3888 
+1814 257 258 2627 271 3780 3923 
+1815 2215 2541 2654 2951 3924 3509 
+1816 2234 2397 2549 3798 3230 3626 
+1817 2493 201 2540 3861 3925 3865 
+1818 2440 2264 2481 3926 3927 3790 
+1819 2376 2271 2628 3189 3928 3929 
+1820 2416 2280 2580 2819 3930 3931 
+1821 2251 2405 2629 3333 3908 3879 
+1822 2212 2404 2622 3785 3932 3933 
+1823 2257 2462 2480 3521 3857 3918 
+1824 2232 2402 2545 3143 3934 3621 
+1825 262 2407 2595 3935 3936 3937 
+1826 2248 2477 2651 3220 3938 3069 
+1827 2407 2297 2557 3835 3028 3386 
+1828 261 262 2595 275 3937 3461 
+1829 2289 2504 2564 3807 3939 3619 
+1830 2425 2261 2499 2753 3324 3458 
+1831 2428 2288 2550 3609 3940 3941 
+1832 2466 2235 2646 3095 3576 3942 
+1833 2404 2277 2622 3271 3137 3932 
+1834 2402 2276 2545 3563 3943 3934 
+1835 2222 2398 2537 3097 3402 3898 
+1836 2264 2431 2481 3438 3894 3927 
+1837 2388 2304 2639 3371 3763 3873 
+1838 2380 2240 2639 3016 3874 3762 
+1839 2480 2209 2640 3597 3607 3139 
+1840 2272 2392 2615 3013 3856 3903 
+1841 2260 2444 2554 3867 3944 3783 
+1842 2395 2245 2621 3945 3560 3881 
+1843 2422 2205 2570 3527 2948 3946 
+1844 2507 195 2642 3891 3947 3948 
+1845 2419 259 2593 3565 3949 3886 
+1846 255 256 2534 269 3750 3950 
+1847 201 202 2540 218 3637 3925 
+1848 2477 2360 2651 3577 3160 3938 
+1849 2482 2427 2629 3921 3880 3951 
+1850 2394 2239 2650 3831 3952 3510 
+1851 2504 2236 2553 3018 3415 3953 
+1852 2502 2321 2586 3883 3076 3954 
+1853 225 2389 2554 3229 3784 3916 
+1854 2387 2242 2605 3599 3514 3838 
+1855 2276 2413 2566 3564 3955 3173 
+1856 2231 2410 2648 3956 3957 3770 
+1857 2463 2294 2609 3958 3959 2976 
+1858 2246 2418 2581 2817 3685 3553 
+1859 2326 2459 2612 3151 3906 3960 
+1860 2299 2453 2647 3555 3872 3961 
+1861 2574 2198 2630 2933 3962 3963 
+1862 2419 2291 2520 3885 3964 3699 
+1863 2457 2245 2614 3965 3966 3248 
+1864 2404 2279 2526 3853 3629 3317 
+1865 108 109 2559 125 2875 3754 
+1866 2436 2197 2578 3686 3967 3474 
+1867 2543 2421 2655 3740 3968 3969 
+1868 203 204 2571 220 2823 3722 
+1869 2541 2391 2654 3065 3688 3924 
+1870 2413 2221 2566 3450 3970 3955 
+1871 2264 2440 2514 3926 3427 3192 
+1872 2509 2343 2545 3484 3622 3971 
+1873 2245 2457 2551 3965 3972 3612 
+1874 174 2489 2536 3237 3973 3858 
+1875 96 97 2588 113 3365 3974 
+1876 2444 224 2554 2998 3917 3944 
+1877 2359 2507 2642 3407 3948 3796 
+1878 2387 2574 2630 3830 3963 3682 
+1879 2202 2428 2550 3034 3941 3420 
+1880 2408 2336 2633 2721 3975 3811 
+1881 2410 2231 2632 3956 3976 3977 
+1882 2307 2504 2553 3978 3953 3979 
+1883 2451 194 2507 3457 3892 3752 
+1884 2406 2257 2625 3671 3919 3980 
+1885 2296 2422 2570 3395 3946 3981 
+1886 2278 2476 2534 3257 3982 3674 
+1887 206 2444 2552 2857 3868 3875 
+1888 2405 2376 2628 3332 3929 3694 
+1889 2245 2395 2614 3945 3662 3966 
+1890 110 111 2603 127 3983 3751 
+1891 198 199 2619 215 3984 3985 
+1892 2460 2224 2582 2904 3465 3986 
+1893 195 196 2642 212 3814 3947 
+1894 2431 2206 2538 3987 2895 3988 
+1895 167 168 2543 183 3741 3787 
+1896 2407 2295 2595 3385 3666 3936 
+1897 2276 2509 2545 3382 3971 3943 
+1898 2283 2390 2556 3804 2987 3910 
+1899 2467 2273 2521 3642 3000 3989 
+1900 2463 257 2627 2729 3923 3990 
+1901 2496 165 2653 3781 3900 3991 
+1902 2457 2296 2551 3692 3992 3972 
+1903 2584 2292 2637 3663 3993 3994 
+1904 2281 2473 2510 2793 3995 3776 
+1905 2281 2431 2538 3893 3988 3477 
+1906 2513 2297 2626 3996 3837 3997 
+1907 2215 2416 2580 3508 3931 3616 
+1908 2442 2291 2593 3998 3887 3999 
+1909 105 2471 2516 3432 4000 3897 
+1910 2291 2442 2528 3998 3769 4001 
+1911 232 233 2563 246 3895 4002 
+1912 2293 2425 2563 2732 4003 3850 
+1913 228 229 2623 242 4004 4005 
+1914 262 263 2626 276 4006 4007 
+1915 2410 2309 2648 2866 3870 3957 
+1916 2341 2584 2637 3546 3994 3030 
+1917 2310 2460 2582 3652 3986 3877 
+1918 2329 2551 2570 3808 4008 2947 
+1919 2285 2410 2632 3384 3977 3914 
+1920 2227 2470 2533 4009 3724 3289 
+1921 161 2417 2601 3862 4010 4011 
+1922 259 260 2593 273 4012 3949 
+1923 2497 2396 2615 3777 3904 4013 
+1924 2455 2314 2530 3314 3400 4014 
+1925 2461 2313 2624 3499 4015 3773 
+1926 2219 2406 2657 3403 4016 3715 
+1927 2443 2218 2652 4017 4018 3570 
+1928 2293 2415 2607 3849 3176 3735 
+1929 2212 2458 2572 4019 4020 3320 
+1930 2228 2548 2585 4021 3268 3822 
+1931 2407 262 2626 3935 4007 3836 
+1932 2425 232 2563 3310 4002 4003 
+1933 2275 2470 2500 3723 4022 4023 
+1934 2508 2319 2579 2795 3128 3487 
+1935 169 170 2583 185 4024 3753 
+1936 229 2408 2623 2918 3860 4004 
+1937 2440 2226 2616 3789 3488 4025 
+1938 2470 2292 2500 4026 2990 4022 
+1939 235 236 2617 249 4027 3008 
+1940 2473 2290 2510 3108 4028 3995 
+1941 2430 2312 2560 3845 4029 4030 
+1942 2279 2525 2623 3605 4031 3859 
+1943 2284 2527 2585 3482 4032 3267 
+1944 2259 2455 2530 2741 4014 3922 
+1945 2506 2217 2512 3792 3742 4033 
+1946 160 161 2601 176 4011 4034 
+1947 2275 2500 2600 4023 4035 3579 
+1948 2234 2544 2610 3178 4036 3799 
+1949 2417 2331 2601 2962 4037 4010 
+1950 2316 2430 2560 4038 4030 2854 
+1951 2206 2431 2579 3987 3440 2687 
+1952 2249 2409 2620 3766 3052 3825 
+1953 2218 2443 2546 4017 3370 4039 
+1954 260 2442 2593 3443 3999 4012 
+1955 2216 2424 2555 3716 3852 4040 
+1956 2565 2233 2577 2916 2847 4041 
+1957 2216 2467 2521 3702 3989 3717 
+1958 2267 2422 2598 3655 3397 4042 
+1959 166 2430 2653 3697 4043 3899 
+1960 2271 2429 2569 3649 3806 4044 
+1961 2265 2497 2523 3778 3537 3422 
+1962 2311 2506 2512 2743 4033 4045 
+1963 2214 2497 2615 3536 4013 3855 
+1964 2221 2432 2566 3104 3480 3970 
+1965 2551 2296 2570 3992 3981 4008 
+1966 2471 2286 2516 3745 3585 4000 
+1967 2436 2340 2581 3213 3554 3687 
+1968 2589 2350 2609 3522 3611 4046 
+1969 2198 2433 2630 3393 4047 3962 
+1970 2261 2423 2599 2752 3529 3748 
+1971 2491 2274 2605 2860 3839 3768 
+1972 2452 2218 2546 3262 4039 3074 
+1973 2502 2286 2568 4048 3747 4049 
+1974 2313 2417 2624 2761 3863 4015 
+1975 2435 198 2619 3105 3985 3640 
+1976 2519 2356 2542 3574 3673 4050 
+1977 2308 2440 2616 3426 4025 3253 
+1978 2458 2212 2622 4019 3933 3363 
+1979 2322 2511 2573 2993 4051 4052 
+1980 2322 2573 2608 4052 4053 4054 
+1981 2476 255 2534 3677 3950 3982 
+1982 2527 2330 2585 2877 3810 4032 
+1983 2274 2448 2574 3681 2946 3829 
+1984 2328 2434 2590 2943 3327 3351 
+1985 2544 2346 2610 2755 3625 4036 
+1986 2208 2441 2594 3094 3739 2907 
+1987 2294 2589 2609 3824 4046 3959 
+1988 2458 2267 2572 3216 4055 4020 
+1989 2351 2565 2577 3378 4041 2944 
+1990 2228 2606 2643 3690 4056 4057 
+1991 2291 2528 2652 4001 3572 4058 
+1992 2218 2520 2652 4059 4060 4018 
+1993 2290 2524 2602 4061 4062 4063 
+1994 2494 2216 2555 3815 4040 4064 
+1995 2433 2298 2630 3818 3683 4047 
+1996 2289 2488 2620 3618 3826 3304 
+1997 2201 2503 2584 3659 3664 3545 
+1998 2489 2284 2536 3481 3813 3973 
+1999 101 2438 2618 3676 2782 3755 
+2000 2501 2255 2634 2884 3602 4065 
+2001 2498 2318 2635 3495 3429 4066 
+2002 2524 2290 2578 4061 3827 4067 
+2003 2512 2271 2569 4068 4044 4069 
+2004 2292 2470 2637 4026 4070 3993 
+2005 2430 2316 2653 4038 4071 4043 
+2006 2219 2498 2635 3731 4066 4072 
+2007 2456 2365 2599 3504 3749 3466 
+2008 2496 2280 2539 4073 3670 3782 
+2009 2271 2512 2628 4068 3743 3928 
+2010 2496 2316 2645 4074 3550 4075 
+2011 2263 2464 2644 3709 3711 4076 
+2012 2319 2501 2634 3132 4065 3129 
+2013 2294 2463 2627 3958 3990 3913 
+2014 2561 2326 2638 3269 4077 4078 
+2015 2548 2228 2643 4021 4057 4079 
+2016 2477 2345 2558 3219 3541 3901 
+2017 2280 2496 2645 4073 4075 4080 
+2018 2470 2227 2637 4009 3031 4070 
+2019 2303 2494 2555 3493 4064 3727 
+2020 199 2472 2619 2981 3708 3984 
+2021 2524 2334 2602 2744 2890 4062 
+2022 2217 2502 2568 3791 4049 3624 
+2023 2421 2256 2655 2798 3390 3968 
+2024 2288 2466 2646 3764 3942 4081 
+2025 2504 2307 2564 3978 3290 3939 
+2026 2225 2519 2542 3668 4050 3912 
+2027 2225 2526 2633 3911 3812 4082 
+2028 2311 2512 2569 4045 4069 4083 
+2029 2297 2513 2588 3996 4084 3519 
+2030 2587 2302 2640 3760 3215 4085 
+2031 2511 2242 2573 3630 3600 4051 
+2032 2331 2575 2601 4086 4087 4037 
+2033 2575 160 2601 3847 4034 4087 
+2034 2372 2587 2640 3759 4085 3606 
+2035 2573 2298 2608 3491 4088 4053 
+2036 2513 96 2588 3531 3974 4084 
+2037 2286 2502 2586 4048 3954 3472 
+2038 2515 2314 2598 3399 4089 3501 
+2039 2311 2569 2631 4083 3920 2891 
+2040 2500 2222 2600 3098 3795 4035 
+2041 2310 2540 2621 3866 3882 3653 
+2042 2520 2218 2589 4059 3523 3823 
+2043 2239 2561 2638 3832 4078 3056 
+2044 2197 2524 2578 3171 4067 3967 
+2045 2608 2223 2612 4090 4091 4092 
+2046 111 2575 2603 3844 4093 3983 
+2047 2239 2529 2650 3583 4094 3952 
+2048 2484 2219 2635 3404 4072 3896 
+2049 2510 2290 2602 4028 4063 4095 
+2050 2226 2510 2602 3738 4095 2889 
+2051 2525 228 2623 3428 4005 4031 
+2052 2339 2475 2644 3298 4096 3358 
+2053 2475 2263 2644 3543 4076 4096 
+2054 2312 2543 2655 3846 3969 3335 
+2055 2567 2225 2633 3718 4082 4097 
+2056 2575 2331 2603 4086 3730 4093 
+2057 2572 2267 2598 4055 4042 4098 
+2058 2518 2305 2617 3300 3145 4099 
+2059 2300 2482 2629 2763 3951 3907 
+2060 2355 2597 2647 3842 4100 3650 
+2061 236 2518 2617 3548 4099 4027 
+2062 2316 2496 2653 4074 3991 4071 
+2063 2576 2223 2608 3803 4090 4101 
+2064 2529 2332 2650 3112 3890 4094 
+2065 2553 2287 2643 3246 4102 4103 
+2066 2287 2548 2643 3909 4079 4102 
+2067 2597 2299 2647 3802 3961 4100 
+2068 2336 2567 2633 3225 4097 3975 
+2069 2322 2608 2612 4054 4092 3905 
+2070 2606 2307 2643 3291 4104 4056 
+2071 2325 2583 2649 3169 4105 3691 
+2072 2223 2591 2612 3100 4106 4091 
+2073 263 2513 2626 3631 3997 4006 
+2074 2596 2211 2636 3608 3834 4107 
+2075 2298 2576 2608 3819 4101 4088 
+2076 2520 2291 2652 3964 4058 4060 
+2077 2314 2572 2598 3316 4098 4089 
+2078 2326 2591 2638 4108 4109 4077 
+2079 2591 2326 2612 4108 3960 4106 
+2080 2340 2596 2636 3163 4107 3124 
+2081 2406 2625 2657 3980 4110 4016 
+2082 2374 2580 2645 3617 4111 3549 
+2083 2348 2550 2646 3421 4112 3575 
+2084 2632 2231 2656 3976 4113 4114 
+2085 2580 2280 2645 3930 4080 4111 
+2086 2550 2288 2646 3940 4081 4112 
+2087 2307 2553 2643 3979 4103 4104 
+2088 2560 2312 2656 4029 3460 4115 
+2089 2373 2632 2656 3915 4114 3459 
+2090 2583 170 2649 4024 3772 4105 
+2091 2591 2323 2638 3305 3087 4109 
+2092 2231 2560 2656 2855 4115 4113 
+2093 2625 2302 2657 3214 3705 4110 
+$EndElements
diff --git a/dG3D/benchmarks/twoHole/twoHole.py b/dG3D/benchmarks/twoHole/twoHole.py
index 797429a5ff087bceb007d8653bffbcedf6b157b4..3189f276083a3b4fe1034c05b3a2988fa038bb6b 100644
--- a/dG3D/benchmarks/twoHole/twoHole.py
+++ b/dG3D/benchmarks/twoHole/twoHole.py
@@ -107,6 +107,6 @@ mysolver.archivingNodeDisplacement(57,1,1)
 mysolver.solve()
 
 check = TestCheck()
-check.equal(-6.225769e-05,mysolver.getArchivedForceOnPhysicalGroup("Face", 55, 1),6e-2)
-check.equal(3e-6,mysolver.getArchivedNodalValue(57,1,mysolver.displacement),1e-5)
+check.equal(-1.023782e-04,mysolver.getArchivedForceOnPhysicalGroup("Face", 55, 1),6e-2)
+check.equal(2.999955e-6,mysolver.getArchivedNodalValue(57,1,mysolver.displacement),1e-5)
 
diff --git a/dG3D/benchmarks/uniaxialTFA/A.txt b/dG3D/benchmarks/uniaxialTFA/A.txt
new file mode 100644
index 0000000000000000000000000000000000000000..9802b310a106fe10689d19749865cec859e3b1ab
--- /dev/null
+++ b/dG3D/benchmarks/uniaxialTFA/A.txt
@@ -0,0 +1,2 @@
+0 1.9727057673974369 -0.0162484357135633 0.1870019991955967 0.0178932688321197 -6.044414159994707e-14 -8.436554612490681e-14 -0.007936431278909454 2.0082120368919525 0.19558647898200124 -0.006099076108924708 -9.484707029498944e-14 -4.169591479148109e-14 0.0 0.0 0.9999500025002911 0.0 -6.739542454875186e-14 -7.27822042356113e-14 0.043202812261688754 -0.004986279361864715 0.0074796202905549345 1.9994309529817724 7.503292238554802e-16 -1.3229400443178146e-16 7.30897160742279e-18 -1.1359934017917101e-15 -8.11739364651598e-16 2.48014001614433e-16 1.9792259839162807 0.002630817834486689 -2.547005286525084e-17 4.59873358546161e-15 -5.739265057009424e-16 1.3719553364005379e-15 0.003846510832242378 2.0114889305893997 
+1 0.08606215002791741 0.015372697471871505 -0.1756721753261149 -0.01674511555156935 -1.2464640333744403e-13 -7.744965913491564e-15 0.007387348339383658 0.053121000488474394 -0.18368297985434942 0.005728921824745777 -4.934751362440021e-14 -1.2143664585975078e-13 0.0 0.0 0.9999500025002857 0.0 -1.3394880201120214e-14 -2.467858487220009e-14 -0.040525061495807334 0.004387955509803076 -0.007071443485871398 0.06132906267963224 -7.271192350879798e-16 1.1790781757979513e-16 -2.6592936722196807e-17 -3.789516220940075e-15 1.080126504453681e-15 1.0416229925646905e-15 0.0801206396037575 -0.0028019383194312084 -1.9578919378409907e-18 9.562301442928078e-15 2.6693475130069602e-15 1.0958075955964788e-14 -0.0036267842351465603 0.050111581116433004 
diff --git a/dG3D/benchmarks/uniaxialTFA/CMakeLists.txt b/dG3D/benchmarks/uniaxialTFA/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..3c84a145bd3382ad2609822fd032a05fe7381312
--- /dev/null
+++ b/dG3D/benchmarks/uniaxialTFA/CMakeLists.txt
@@ -0,0 +1,15 @@
+# test file
+
+set(PYFILE cube.py)
+
+set(FILES2DELETE 
+  cube.msh
+  disp.msh
+  force*.csv
+  stress.msh
+  energy.csv
+  IP*.csv
+  Aver*.csv
+)
+
+add_cm3python_test(${PYFILE} "${FILES2DELETE}")
diff --git a/dG3D/benchmarks/uniaxialTFA/Clusternumber_Ele.txt b/dG3D/benchmarks/uniaxialTFA/Clusternumber_Ele.txt
new file mode 100644
index 0000000000000000000000000000000000000000..75bf6b216ae0d135d6a6369b845074dbfc05b4ee
--- /dev/null
+++ b/dG3D/benchmarks/uniaxialTFA/Clusternumber_Ele.txt
@@ -0,0 +1 @@
+27 0
diff --git a/dG3D/benchmarks/uniaxialTFA/D.txt b/dG3D/benchmarks/uniaxialTFA/D.txt
new file mode 100644
index 0000000000000000000000000000000000000000..a4ef22d8ed1bc4b449db86b551a13942879d45f6
--- /dev/null
+++ b/dG3D/benchmarks/uniaxialTFA/D.txt
@@ -0,0 +1,4 @@
+0 0 -0.3175157582171466 -0.029970322294810524 -0.13556700084609255 -0.08363140686297668 0.00011196146178582398 2.6930947048941854e-05 -0.08615762671542507 -0.40536661556560255 -0.19177704261150794 0.05440760353377425 2.701151063175866e-05 0.00017037686379940185 -8.022689755723866e-16 -1.673358023574157e-16 -2.8354286087753852e-15 -8.149324693042293e-17 -1.3245375828400075e-14 -1.1898703486996912e-14 -0.06792825444053739 0.0010938830633198682 -0.026074000202719796 -0.2839249795836334 -5.309841080883912e-06 3.210324228890816e-05 9.153482088400756e-17 -1.000873622885194e-15 -4.4212691016622227e-16 -3.563837781463411e-16 -0.2105996280194721 -0.040414010955330044 -8.125751850045103e-16 3.6624036489467475e-15 -2.7746020606023393e-15 2.3710489406824784e-16 -0.040414011079295126 -0.29858992218238933 
+0 1 0.3177299811781627 0.02995016930426294 0.13559525938428646 0.08364153683416374 -1.0198009629674501e-15 -5.456580983073559e-16 0.08608279589247778 0.4055740337447824 0.1917461643459525 -0.05442477343866383 -6.296735915959802e-16 -1.1297576136786922e-15 -1.2069218315244841e-15 -3.44869113335472e-16 1.2808287825301568e-16 4.197141842889991e-17 -1.26858117559664e-14 -1.2128938982939275e-14 0.06793730137062355 -0.0010834045441412336 0.026073019517383972 0.2839066377140971 -1.246792237633156e-16 1.1730839089876897e-16 -2.865044631897171e-15 6.211809276284632e-16 -2.1576955811955223e-16 -3.9434406547037116e-16 0.21060187209983514 0.04043112575143498 -2.2703973796380957e-16 6.996731784480538e-16 -1.728266242221971e-15 -1.947013764314765e-17 0.04041503334337822 0.29861627922970996 
+1 0 0.2982179565455918 0.028110589052655333 0.12731264803730685 0.07852842808606135 -0.00010511636712645603 -2.5299276756465807e-05 0.08090084932045144 0.38071343119337075 0.1801071329351839 -0.05108424694341397 -2.53553252771374e-05 -0.0001600200899768274 -6.166943443239838e-17 -6.191514079540902e-16 -2.563499883911265e-15 -1.5157494966316348e-16 -2.2881334663753535e-14 -1.2985207626041701e-14 0.06380099775405357 -0.0010244690096142845 0.024490928098806583 0.26662802512941414 4.986008977174566e-06 -3.015765734005961e-05 5.280263025586753e-16 -3.5694075927595196e-16 2.3626787717296227e-15 -1.862755794237394e-16 0.19778487336160905 0.03795541936423227 -2.5459073620156293e-16 -6.751480294479015e-16 5.03785066116091e-15 -4.7442830574369905e-17 0.03797053298042559 0.28044282282446836 
+1 1 -0.29846908290033536 -0.02812312587798192 -0.1273709616170977 -0.07853805385653276 -5.087282137653269e-16 9.098501722330234e-17 -0.08086807995961542 -0.38096760082841846 -0.1801159145090087 0.05109789010019852 -1.173385333938246e-16 -9.08063349903813e-16 -3.299189243816971e-16 -1.7350722838980748e-17 8.073029351081595e-17 0.0 -6.826590775663325e-15 -8.23963868988922e-15 -0.06381182585067559 0.0010110435479782091 -0.024492305186580802 -0.266622957861529 1.2462897692706352e-16 -7.647416117932478e-17 2.882429498213186e-15 -9.457477049704838e-16 -1.5853379221192056e-15 -3.6658983868525497e-16 -0.1978021529938398 -0.037973214165165414 2.2925367320793855e-15 6.821106329733601e-16 -3.1065461728585525e-15 -1.6969868639973504e-16 -0.03797321439468978 -0.2804851674880763 
diff --git a/dG3D/benchmarks/uniaxialTFA/V_init.txt b/dG3D/benchmarks/uniaxialTFA/V_init.txt
new file mode 100644
index 0000000000000000000000000000000000000000..b089e6ec3b412debda6bfae5187387813705df71
--- /dev/null
+++ b/dG3D/benchmarks/uniaxialTFA/V_init.txt
@@ -0,0 +1,2 @@
+0 1.9372310748719933e-07
+1 2.0627689288800027e-07
diff --git a/dG3D/benchmarks/uniaxialTFA/cube.geo b/dG3D/benchmarks/uniaxialTFA/cube.geo
new file mode 100644
index 0000000000000000000000000000000000000000..7cf6b5ffd1ec1d407a67995af7a4b0fe9e83a139
--- /dev/null
+++ b/dG3D/benchmarks/uniaxialTFA/cube.geo
@@ -0,0 +1,94 @@
+// Test case a SCB with a vertical load at its free extremity
+// Size
+
+
+
+x=0.02;
+y=0.02;
+z=0.02;
+
+// Characteristic length
+Lc1=R/2.5;
+
+// definition of points
+Point(1) = { 0.0 , 0.0 , 0.0 , Lc1};
+Point(2) = {  x  , 0.0 , 0.0 , Lc1};
+Point(3) = {  x  ,  y  , 0.0 , Lc1};
+Point(4) = { 0.0 ,  y  , 0.0 , Lc1};
+Point(5) = { 0.0 , 0.0 , z , Lc1};
+Point(6) = {  x  , 0.0 , z , Lc1};
+Point(7) = {  x  ,  y  , z , Lc1};
+Point(8) = { 0.0 ,  y  , z , Lc1};
+
+// Line between points
+Line(1) = {1,2};
+Line(2) = {2,3};
+Line(3) = {3,4};
+Line(4) = {4,1};
+Line(5) = {5,6};
+Line(6) = {6,7};
+Line(7) = {7,8};
+Line(8) = {8,5};
+Line(9) = {1,5};
+Line(10)= {2,6};
+Line(11)= {3,7};
+Line(12)= {4,8};
+
+// Surface definition
+Line Loop(1) = {1,2,3,4};
+Line Loop(2) = {5,6,7,8};
+Line Loop(3) = {1,10,-5,-9};
+Line Loop(4) = {2,11,-6,-10};
+Line Loop(5) = {3,12,-7,-11};
+Line Loop(6) = {4,9,-8,-12};
+
+Plane Surface(1) = {1};
+Plane Surface(2) = {2};
+Plane Surface(3) = {3};
+Plane Surface(4) = {4};
+Plane Surface(5) = {5};
+Plane Surface(6) = {6};
+
+//VOlume
+
+Surface Loop(7) = {1,2,3,4,5,6};
+Volume(1) = {7};
+
+// Physical objects to applied BC and material
+Physical Surface(1234) = {1};
+Physical Surface(5678) = {2};
+Physical Surface(1265) = {3};
+Physical Surface(2376) = {4};
+Physical Surface(3487) = {5};
+Physical Surface(4158) = {6};
+Physical Line(12) = {1};
+Physical Line(23) = {2};
+Physical Line(34) = {3};
+Physical Line(41) = {4};
+Physical Line(56) = {5};
+Physical Line(67) = {6};
+Physical Line(78) = {7};
+Physical Line(85) = {8};
+Physical Line(15) = {9};
+Physical Line(26) = {10};
+Physical Line(37) = {11};
+Physical Line(48) = {12};
+
+Physical Point(1) ={1};
+Physical Point(2) ={2};
+Physical Point(3) ={3};
+Physical Point(4) ={4};
+Physical Point(5) ={5};
+Physical Point(6) ={6};
+Physical Point(7) ={7};
+Physical Point(8) ={8};
+
+Physical Volume(10) ={1};
+
+// define transfinite mesh
+Transfinite Line {1,2,3,4,5,6,7,8} = 2;
+Transfinite Line {9,10,11,12} = 2;
+Transfinite Surface {1,2,3,4,5,6} ;
+Recombine Surface {1,2,3,4,5,6} ;
+Transfinite Volume {1};
+
diff --git a/dG3D/benchmarks/uniaxialTFA/cube.py b/dG3D/benchmarks/uniaxialTFA/cube.py
new file mode 100644
index 0000000000000000000000000000000000000000..1301ca00c7d77b5c9472918b202abecad6d614de
--- /dev/null
+++ b/dG3D/benchmarks/uniaxialTFA/cube.py
@@ -0,0 +1,207 @@
+#coding-Utf-8-*-
+from gmshpy import *
+from dG3Dpy import*
+
+import numpy as np
+
+#script to launch beam problem with a python script
+
+
+# material law
+lawTFA =  3
+
+
+lawlinear1 = 1     # unique number of law
+rhoEP   = 1000.e-9
+youngEP = 2.7e3#2.62e3
+nuEP    = 0.39
+sy0EP  = 15.
+hEP     = 10.
+hexp    = 35.
+harden = ExponentialJ2IsotropicHardening(1, sy0EP, hEP, hexp)
+
+
+lawlinear2 = 2      # unique number of law
+rhoCF   = 1780.e-9#1750.e-9
+youngCF    = 15.e3#40.e3
+youngACF   = 276e3#230.e3
+nuCF       = 0.2#0.2
+sy0EPc = 15.e10
+hardenFake = ExponentialJ2IsotropicHardening(2, sy0EPc, hEP, hexp)
+
+# geometry
+geofile="cube.geo"
+meshfile="cube.msh" # name of mesh file
+dim=3
+
+# solver
+sol = 2  # Gmm=0 (default) Taucs=1 PETsc=2
+soltype = 1 # StaticLinear=0 (default) StaticNonLinear=1
+nstep = 3000   # number of step (used only if soltype=1)
+ftime =1.   # Final time (used only if soltype=1)
+tol=1.e-6   # relative tolerance for NR scheme (used only if soltype=1)
+nstepArch=1 # Number of step between 2 archiving (used only if soltype=1)
+fullDg = 0 # = CG, 1 = DG
+space1 = 0 # function space (Lagrange=0)
+
+
+clusterNb=np.zeros(2)
+clusterNb[0]=0
+clusterNb[1]=1
+
+
+#  compute solution and BC (given directly to the solver
+# creation of law
+law1 = J2SmallStrainDG3DMaterialLaw(lawlinear1,rhoEP,youngEP,nuEP,harden)
+#law2 = J2SmallStrainDG3DMaterialLaw(lawlinear2, rhoCF, youngACF, nuCF, hardenFake)
+law2 = J2SmallStrainDG3DMaterialLaw(lawlinear2, rhoCF, youngACF, nuCF, hardenFake)
+
+law3 = TFADG3DMaterialLaw(lawTFA, rhoEP, "V_init.txt")
+law3.readTFAConcentrationTensors("A.txt")
+law3.readTFAInteractionTensors("D.txt")
+
+law3.addTFAMaterialLaw(int(clusterNb[0]),lawlinear1)
+law3.addTFAMaterialLaw(int(clusterNb[1]),lawlinear2)
+
+
+# creation of ElasticField
+nfield = 10 # number of the field (physical number of surface)
+
+#myfield = dG3DDomain(1000,nfield,space1,lawTFA,fullDg,3,2)
+myfield = dG3DDomain(1000,nfield,space1,lawTFA,fullDg)
+myfield.stabilityParameters(30.)
+#myfield.matrixByPerturbation(1,1,1,1e-8)
+
+# creation of Solver
+mysolver = nonLinearMechSolver(1000)
+mysolver.createModel(geofile,meshfile,3,2)
+#mysolver.loadModel(meshfile)
+mysolver.addDomain(myfield)
+mysolver.addMaterialLaw(law1)
+mysolver.addMaterialLaw(law2)
+mysolver.addMaterialLaw(law3)
+
+mysolver.Scheme(soltype)
+mysolver.Solver(sol)
+mysolver.snlData(nstep,ftime,tol)
+mysolver.stepBetweenArchiving(nstepArch)
+
+
+# BC
+
+#shearing
+#mysolver.displacementBC("Face",1234,0,0.)
+#mysolver.displacementBC("Face",1234,1,0.)
+#mysolver.displacementBC("Face",1234,2,0.)
+#mysolver.displacementBC("Face",5678,1,0.00)
+#mysolver.displacementBC("Face",5678,0,0.00001)
+#mysolver.forceBC("Face",2376,2,100000000)
+#mysolver.forceBC("Face",4158,2,-100000000)
+#mysolver.forceBC("Face",5678,0,100000000)
+
+#tension along z
+'''mysolver.displacementBC("Face",1234,2,0.)
+d1=0.000005
+cyclicFunction1=cycleFunctionTime(0.,0.,ftime/4., d1/2., ftime/2., 0., 3.*ftime/4., d1/2., ftime, d1)
+mysolver.displacementBC("Face",5678,2,cyclicFunction1)
+mysolver.displacementBC("Face",2376,0,0.)
+mysolver.displacementBC("Face",1265,1,0.)'''
+
+
+##tension along x
+mysolver.displacementBC("Face",4158,0,0.)
+d1=0.002
+cyclicFunction1=cycleFunctionTime(0.,0.,ftime/4., d1/2., ftime/2., 0., 3.*ftime/4., d1/2., ftime, d1)
+mysolver.displacementBC("Face",2376,0,cyclicFunction1)
+mysolver.displacementBC("Face",1234,2,0.)
+mysolver.displacementBC("Face",1265,1,0.)
+
+mysolver.archivingAverageValue(IPField.SIG_XX)
+mysolver.archivingAverageValue(IPField.SIG_YY)
+mysolver.archivingAverageValue(IPField.SIG_ZZ)
+mysolver.archivingAverageValue(IPField.SIG_XY)
+mysolver.archivingAverageValue(IPField.SIG_YZ)
+mysolver.archivingAverageValue(IPField.SIG_XZ)
+mysolver.archivingAverageValue(IPField.STRAIN_XX)
+mysolver.archivingAverageValue(IPField.STRAIN_YY)
+mysolver.archivingAverageValue(IPField.STRAIN_ZZ)
+mysolver.archivingAverageValue(IPField.STRAIN_XY)
+mysolver.archivingAverageValue(IPField.STRAIN_YZ)
+mysolver.archivingAverageValue(IPField.STRAIN_XZ)
+
+#microBC = nonLinearPeriodicBC(1000,3)
+
+
+#method = 5	   # Periodic mesh = 0, Langrange interpolation = 1, Cubic spline interpolation =2,  FE linear= 3, FE Quad = 4
+#degree = 3	    # Order used for polynomial interpolation 
+#addvertex = 1   # Polynomial interpolation by mesh vertex = 0, Polynomial interpolation by virtual vertex 
+#microBC.setPeriodicBCOptions(method, degree, bool(addvertex)) 
+
+#microBC.setOrder(1)
+
+#microBC.setBCPhysical(1234,1265,4158,5678,2376,3487)
+        
+# Deformation gradient
+#mysolver.setMicroProblemIndentification(0, 0);
+#stress averaging flag and averaging method 0- VOLUME, 1- SURFACE
+#mysolver.stressAveragingFlag(bool(1)) # set stress averaging ON- 0 , OFF-1
+#mysolver.setStressAveragingMethod(0) # 0 -volume 1- surface
+#tangent averaging flag
+#mysolver.tangentAveragingFlag(bool(1)) # set tangent averaging ON -0, OFF -1
+#mysolver.setTangentAveragingMethod(2,1e-6) # 0- perturbation 1- condensation
+# BC
+#microBC.setDeformationGradient(1.,0.,0., 0.,1.,0., 0.,0.,1.01)
+#mysolver.addMicroBC(microBC)
+#mysolver.setExtractElasticTangentOperator(True)
+
+
+
+
+
+mysolver.internalPointBuildView("svm",IPField.SVM, 1, 1)
+mysolver.internalPointBuildView("sig_xx",IPField.SIG_XX, 1, 1)
+mysolver.internalPointBuildView("sig_yy",IPField.SIG_YY, 1, 1)
+mysolver.internalPointBuildView("sig_zz",IPField.SIG_ZZ, 1, 1)
+mysolver.internalPointBuildView("sig_xy",IPField.SIG_XY, 1, 1)
+mysolver.internalPointBuildView("sig_yz",IPField.SIG_YZ, 1, 1)
+mysolver.internalPointBuildView("sig_xz",IPField.SIG_XZ, 1, 1)
+
+mysolver.internalPointBuildView("Green-Lagrange_xx",IPField.STRAIN_XX, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_yy",IPField.STRAIN_YY, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_zz",IPField.STRAIN_ZZ, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_xy",IPField.STRAIN_XY, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_yz",IPField.STRAIN_YZ, 1, 1);
+mysolver.internalPointBuildView("Green-Lagrange_xz",IPField.STRAIN_XZ, 1, 1);
+mysolver.internalPointBuildView("epl",IPField.PLASTICSTRAIN, 1, 1)
+
+mysolver.archivingForceOnPhysicalGroup("Face", 1234, 0)
+mysolver.archivingForceOnPhysicalGroup("Face", 5678, 0)
+
+
+mysolver.archivingIPDataOnPhysical(IPField.STRAIN_XX,nfield,3)
+mysolver.archivingIPDataOnPhysical(IPField.STRAIN_YY,nfield,3)
+mysolver.archivingIPDataOnPhysical(IPField.STRAIN_ZZ,nfield,3)
+mysolver.archivingIPDataOnPhysical(IPField.STRAIN_XZ,nfield,3)
+mysolver.archivingIPDataOnPhysical(IPField.STRAIN_YZ,nfield,3)
+mysolver.archivingIPDataOnPhysical(IPField.STRAIN_XY,nfield,3)
+
+mysolver.archivingIPDataOnPhysical(IPField.SIG_XX,nfield,3)
+mysolver.archivingIPDataOnPhysical(IPField.SIG_YY,nfield,3)
+mysolver.archivingIPDataOnPhysical(IPField.SIG_ZZ,nfield,3)
+mysolver.archivingIPDataOnPhysical(IPField.SIG_XZ,nfield,3)
+mysolver.archivingIPDataOnPhysical(IPField.SIG_YZ,nfield,3)
+mysolver.archivingIPDataOnPhysical(IPField.SIG_XY,nfield,3)
+
+mysolver.solve()
+
+check = TestCheck()
+check.equal(9.606556e+02,mysolver.getArchivedForceOnPhysicalGroup("Face", 5678, 0),1.e-6)
+
+import csv
+data = csv.reader(open('Average_SIG_XX.csv'), delimiter=';')
+pzz = list(data)
+check.equal(1.029904e-01,float(pzz[-1][1]),1e-6)
+
+
+
+
diff --git a/dG3D/benchmarks/uniaxialTFA/getMeanValues_ofHomogenized.py b/dG3D/benchmarks/uniaxialTFA/getMeanValues_ofHomogenized.py
new file mode 100644
index 0000000000000000000000000000000000000000..062d652448463c01617a76cbb7fd22c9c32df975
--- /dev/null
+++ b/dG3D/benchmarks/uniaxialTFA/getMeanValues_ofHomogenized.py
@@ -0,0 +1,114 @@
+#coding-Utf-9-*-
+
+import numpy as np
+import pandas as pd
+import math
+
+
+#get mean values (stress, strain) of the full geometry for comparison with values of the homogenized (by TFA) body
+
+
+def getMean_weighted(number_values, value_array, weights):
+	mean = 0.
+	weight_total = 0.
+  	for i in range(0,number_values):
+	   mean += value_array[i] * weights[i]
+	   weight_total += weights[i]
+
+	mean = mean/weight_total
+	
+	return mean
+
+
+
+
+#######################################################################################################################################################
+
+Domain = 10
+
+eps_xx_GP = (pd.read_csv('IPDdata_STRAIN_XX_OnPhysical_' + str(Domain) + '.csv', sep=';', index_col=False, header=None)).to_numpy()
+eps_yy_GP = (pd.read_csv('IPDdata_STRAIN_YY_OnPhysical_' + str(Domain) + '.csv', sep=';', index_col=False, header=None)).to_numpy()
+eps_zz_GP = (pd.read_csv('IPDdata_STRAIN_ZZ_OnPhysical_' + str(Domain) + '.csv', sep=';', index_col=False, header=None)).to_numpy()
+eps_xy_GP = (pd.read_csv('IPDdata_STRAIN_XY_OnPhysical_' + str(Domain) + '.csv', sep=';', index_col=False, header=None)).to_numpy()
+eps_xz_GP = (pd.read_csv('IPDdata_STRAIN_XZ_OnPhysical_' + str(Domain) + '.csv', sep=';', index_col=False, header=None)).to_numpy()
+eps_yz_GP = (pd.read_csv('IPDdata_STRAIN_YZ_OnPhysical_' + str(Domain) + '.csv', sep=';', index_col=False, header=None)).to_numpy()
+sig_xx_GP = (pd.read_csv('IPDdata_SIG_XX_OnPhysical_' + str(Domain) + '.csv', sep=';', index_col=False, header=None)).to_numpy()
+sig_yy_GP = (pd.read_csv('IPDdata_SIG_YY_OnPhysical_' + str(Domain) + '.csv', sep=';', index_col=False, header=None)).to_numpy()
+sig_zz_GP = (pd.read_csv('IPDdata_SIG_ZZ_OnPhysical_' + str(Domain) + '.csv', sep=';', index_col=False, header=None)).to_numpy()
+sig_xy_GP = (pd.read_csv('IPDdata_SIG_XY_OnPhysical_' + str(Domain) + '.csv', sep=';', index_col=False, header=None)).to_numpy()
+sig_xz_GP = (pd.read_csv('IPDdata_SIG_XZ_OnPhysical_' + str(Domain) + '.csv', sep=';', index_col=False, header=None)).to_numpy()
+sig_yz_GP = (pd.read_csv('IPDdata_SIG_YZ_OnPhysical_' + str(Domain) + '.csv', sep=';', index_col=False, header=None)).to_numpy()
+
+nt = len(eps_xx_GP[:,0])
+#print(nt)
+
+df_GP = (pd.read_csv('coordinate_STRAIN_XX_OnPhysical_'+str(Domain)+'.csv', sep=';', index_col=False, header=None)).to_numpy()
+numGP = len(df_GP[:,0])
+#print(numGP)
+weightGP = np.zeros(numGP)
+volfracGP = np.zeros(numGP)
+weightGP[:] = df_GP[:,5]
+V = np.sum(weightGP)
+volfracGP[:] = weightGP[:]/V
+
+
+eps_xx_mean = np.zeros(nt)
+eps_yy_mean = np.zeros(nt)
+eps_zz_mean = np.zeros(nt)
+eps_xy_mean = np.zeros(nt)
+eps_xz_mean = np.zeros(nt)
+eps_yz_mean = np.zeros(nt)
+sig_xx_mean = np.zeros(nt)
+sig_yy_mean = np.zeros(nt)
+sig_zz_mean = np.zeros(nt)
+sig_xy_mean = np.zeros(nt)
+sig_xz_mean = np.zeros(nt)
+sig_yz_mean = np.zeros(nt)
+
+
+for i in range(0,nt):
+	for k in range(0,numGP):
+		eps_xx_mean[i] += eps_xx_GP[i,k]*volfracGP[k]
+		eps_yy_mean[i] += eps_yy_GP[i,k]*volfracGP[k]
+		eps_zz_mean[i] += eps_zz_GP[i,k]*volfracGP[k]
+		eps_xy_mean[i] += eps_xy_GP[i,k]*volfracGP[k]
+		eps_xz_mean[i] += eps_xz_GP[i,k]*volfracGP[k]
+		eps_yz_mean[i] += eps_yz_GP[i,k]*volfracGP[k]
+		sig_xx_mean[i] += sig_xx_GP[i,k]*volfracGP[k]
+		sig_yy_mean[i] += sig_yy_GP[i,k]*volfracGP[k]
+		sig_zz_mean[i] += sig_zz_GP[i,k]*volfracGP[k]
+		sig_xy_mean[i] += sig_xy_GP[i,k]*volfracGP[k]
+		sig_xz_mean[i] += sig_xz_GP[i,k]*volfracGP[k]
+		sig_yz_mean[i] += sig_yz_GP[i,k]*volfracGP[k]
+
+
+ 
+
+with open('strain_mean.csv', 'w') as f:
+	for i in range (0, nt):
+		f.write("%s " % eps_xx_mean[i])
+		f.write("%s " % eps_yy_mean[i])
+		f.write("%s " % eps_zz_mean[i])
+		f.write("%s " % eps_xy_mean[i])
+		f.write("%s " % eps_xz_mean[i])
+		f.write("%s " % eps_yz_mean[i])
+		f.write("\n")
+
+
+
+with open('stress_mean.csv', 'w') as f:
+	for i in range (0, nt):
+		f.write("%s " % sig_xx_mean[i])
+		f.write("%s " % sig_yy_mean[i])
+		f.write("%s " % sig_zz_mean[i])
+		f.write("%s " % sig_xy_mean[i])
+		f.write("%s " % sig_xz_mean[i])
+		f.write("%s " % sig_yz_mean[i])
+		f.write("\n")
+
+
+					
+
+
+
+
diff --git a/dG3D/benchmarks/virtualUniaxialTestMixedBC/run.py b/dG3D/benchmarks/virtualUniaxialTestMixedBC/run.py
index 5ac19d4c40e791b62b014002cea197e1ed731d48..8cb8b1ce02567ac0626619942366abd1def90d72 100644
--- a/dG3D/benchmarks/virtualUniaxialTestMixedBC/run.py
+++ b/dG3D/benchmarks/virtualUniaxialTestMixedBC/run.py
@@ -213,7 +213,7 @@ mysolver.internalPointBuildView("DAMAGE0",IPField.DAMAGE_0, 1, 1)
 mysolver.internalPointBuildView("DAMAGE1",IPField.DAMAGE_1, 1, 1) 
 mysolver.internalPointBuildView("FAILURE_ONSET",IPField.FAILURE_ONSET, 1, 1)
 mysolver.internalPointBuildView("FAILURE_PLASTICSTRAIN",IPField.FAILURE_PLASTICSTRAIN, 1, 1)  
-mysolver.internalPointBuildView("ACTIVE_DAMAGING_ZONE",IPField.ACTIVE_DAMAGING_ZONE, 1, 1)  
+mysolver.internalPointBuildView("ACTIVE_DISSIPATION",IPField.ACTIVE_DISSIPATION, 1, 1)  
 mysolver.internalPointBuildView("PRESSION",IPField.PRESSION, 1, 1)  
 
 mysolver.internalPointBuildView("LOCAL_0",IPField.LOCAL_0, 1, 1)  
diff --git a/dG3D/src/CMakeLists.txt b/dG3D/src/CMakeLists.txt
index efed7811da2cdfffdae81f6b93042ca9508a5f47..5cfba735f2c581a5d548737f1d2eb36f0cb62b95 100644
--- a/dG3D/src/CMakeLists.txt
+++ b/dG3D/src/CMakeLists.txt
@@ -43,6 +43,7 @@ set(SRC
   axisymmetricDG3DPathFollowingTerms.cpp
   dG3D1DTerms.cpp
   dG3D1DDomain.cpp
+  computeWithMaterialLaw.cpp
 )
 
 file(GLOB HDR RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.h) 
diff --git a/dG3D/src/FractureCohesiveDG3DIPVariable.h b/dG3D/src/FractureCohesiveDG3DIPVariable.h
index ebb2dbc66c737d8ffc8933fbf9b677bd8550eda5..3c54f0ea8c23644c851b110f6d5266046c23d556 100644
--- a/dG3D/src/FractureCohesiveDG3DIPVariable.h
+++ b/dG3D/src/FractureCohesiveDG3DIPVariable.h
@@ -28,11 +28,26 @@ class FractureCohesive3DIPVariable : public IPVariable2ForFracture<dG3DIPVariabl
   virtual const double fractureStrengthFactor() const{return _facSigmac;}
   virtual void setFractureStrengthFactor(const double fsf){_facSigmac = fsf;}
 
+  #if defined(HAVE_MPI)
   // but you can communicate values by filling these functions for your IPVariable
-  virtual int numberValuesToCommunicateMPI()const{return 1;}
-  virtual void fillValuesToCommunicateMPI(double *arrayMPI)const{arrayMPI[0]=_facSigmac;}
-  virtual void getValuesFromMPI(const double *arrayMPI){_facSigmac=arrayMPI[0];}
-
+  virtual int numberValuesToCommunicateMPI()const
+  {
+    int nb=1; //the facSigmac
+    nb+= _ipvbulk->numberValuesToCommunicateMPI();
+    return nb;
+  }
+  virtual void fillValuesToCommunicateMPI(double *arrayMPI)const
+  {
+    arrayMPI[0]=_facSigmac;
+    if(_ipvbulk->numberValuesToCommunicateMPI()>0)
+      _ipvbulk->fillValuesToCommunicateMPI(&(arrayMPI[1]));
+  }
+  virtual void getValuesFromMPI(const double *arrayMPI){
+    _facSigmac=arrayMPI[0];
+    if(_ipvbulk->numberValuesToCommunicateMPI()>0)
+      _ipvbulk->getValuesFromMPI(&(arrayMPI[1]));
+  }
+  #endif // HAVE_MPI
 
   virtual IPVariable* getInternalData() {return _ipvbulk->getInternalData();};
   virtual const IPVariable* getInternalData()  const {return _ipvbulk->getInternalData();};
@@ -144,20 +159,20 @@ class FractureCohesive3DIPVariable : public IPVariable2ForFracture<dG3DIPVariabl
   virtual std::vector<STensor33>   &getRefTodFluxdF() {return _ipvbulk->getRefTodFluxdF();};
   virtual const std::vector<std::vector<const STensor3*> > &getConstRefToLinearK() const {return _ipvbulk->getConstRefToLinearK();};
   virtual void setConstRefToLinearK(const STensor3 &eT, int i, int j)  {_ipvbulk->setConstRefToLinearK(eT, i, j);};
-  virtual const std::vector<std::vector<std::vector<STensor3> > >  &getConstRefTodLinearKdField() const {return _ipvbulk->getConstRefTodLinearKdField();}; 
-  virtual std::vector<std::vector<std::vector<STensor3> > >  &getRefTodLinearKdField() {return _ipvbulk->getRefTodLinearKdField();}; 
-  virtual const std::vector<std::vector<STensor43>>  &getConstRefTodLinearKdF() const {return _ipvbulk->getConstRefTodLinearKdF();}; 
-  virtual std::vector<std::vector<STensor43>>  &getRefTodLinearKdF() {return _ipvbulk->getRefTodLinearKdF();}; 
+  virtual const std::vector<std::vector<std::vector<STensor3> > >  &getConstRefTodLinearKdField() const {return _ipvbulk->getConstRefTodLinearKdField();};
+  virtual std::vector<std::vector<std::vector<STensor3> > >  &getRefTodLinearKdField() {return _ipvbulk->getRefTodLinearKdField();};
+  virtual const std::vector<std::vector<STensor43>>  &getConstRefTodLinearKdF() const {return _ipvbulk->getConstRefTodLinearKdF();};
+  virtual std::vector<std::vector<STensor43>>  &getRefTodLinearKdF() {return _ipvbulk->getRefTodLinearKdF();};
 /*  virtual const std::vector<std::vector<const STensor3*> > &getConstRefToEnergyK() const {return _ipvbulk->getConstRefToEnergyK();};
   virtual void setConstRefToEnergyK(const STensor3 &eT, int i, int j)  {_ipvbulk->setConstRefToEnergyK(eT, i, j);};
-  virtual const std::vector<std::vector<std::vector<STensor3> > >  &getConstRefTodEnergyKdField() const {return _ipvbulk->getConstRefTodEnergyKdField();}; 
-  virtual std::vector<std::vector<std::vector<STensor3> > >  &getRefTodEnergyKdField() {return _ipvbulk->getRefTodEnergyKdField();}; 
-  virtual const std::vector<std::vector<STensor43>>  &getConstRefTodEnergyKdF() const {return _ipvbulk->getConstRefTodEnergyKdF();}; 
+  virtual const std::vector<std::vector<std::vector<STensor3> > >  &getConstRefTodEnergyKdField() const {return _ipvbulk->getConstRefTodEnergyKdField();};
+  virtual std::vector<std::vector<std::vector<STensor3> > >  &getRefTodEnergyKdField() {return _ipvbulk->getRefTodEnergyKdField();};
+  virtual const std::vector<std::vector<STensor43>>  &getConstRefTodEnergyKdF() const {return _ipvbulk->getConstRefTodEnergyKdF();};
   virtual std::vector<std::vector<STensor43>>  &getRefTodEnergyKdF() {return _ipvbulk->getRefTodEnergyKdF();}; */
-  virtual const std::vector<std::vector<std::vector<STensor3> > >  &getConstRefTodFluxdGradFielddField() const {return _ipvbulk->getConstRefTodFluxdGradFielddField();}; 
-  virtual std::vector<std::vector<std::vector<STensor3> > >  &getRefTodFluxdGradFielddField() {return _ipvbulk->getRefTodFluxdGradFielddField();}; 
-  virtual const std::vector<std::vector<STensor43>>  &getConstRefTodFluxdGradFielddF() const {return _ipvbulk->getConstRefTodFluxdGradFielddF();}; 
-  virtual std::vector<std::vector<STensor43>>  &getRefTodFluxdGradFielddF() {return _ipvbulk->getRefTodFluxdGradFielddF();}; 
+  virtual const std::vector<std::vector<std::vector<STensor3> > >  &getConstRefTodFluxdGradFielddField() const {return _ipvbulk->getConstRefTodFluxdGradFielddField();};
+  virtual std::vector<std::vector<std::vector<STensor3> > >  &getRefTodFluxdGradFielddField() {return _ipvbulk->getRefTodFluxdGradFielddField();};
+  virtual const std::vector<std::vector<STensor43>>  &getConstRefTodFluxdGradFielddF() const {return _ipvbulk->getConstRefTodFluxdGradFielddF();};
+  virtual std::vector<std::vector<STensor43>>  &getRefTodFluxdGradFielddF() {return _ipvbulk->getRefTodFluxdGradFielddF();};
   virtual const fullVector<double>  &getConstRefToFieldSource() const {return _ipvbulk->getConstRefToFieldSource();};
   virtual fullVector<double>  &getRefToFieldSource() {return _ipvbulk->getRefToFieldSource();};
   virtual const fullMatrix<double>  &getConstRefTodFieldSourcedField() const {return _ipvbulk->getConstRefTodFieldSourcedField();};
@@ -186,19 +201,19 @@ class FractureCohesive3DIPVariable : public IPVariable2ForFracture<dG3DIPVariabl
   virtual fullMatrix<double>  &getRefTodOneOverFieldJumpdFieldp() {return _ipvbulk->getRefTodOneOverFieldJumpdFieldp();};
   virtual const std::vector<SVector3>  &getConstRefToInterfaceFlux() const {return _ipvbulk->getConstRefToInterfaceFlux();};
   virtual std::vector<SVector3>  &getRefToInterfaceFlux() {return _ipvbulk->getRefToInterfaceFlux();};
- 
+
   //Energy Conjugated Field (fT & fv)
-  virtual double getConstRefToEnergyConjugatedField(const int idex) const {return _ipvbulk->getConstRefToEnergyConjugatedField(idex);};  
-  virtual double  &getRefToEnergyConjugatedField(const int idex) {return _ipvbulk->getRefToEnergyConjugatedField(idex);};  
-  virtual const std::vector<SVector3>  &getConstRefToGradEnergyConjugatedField() const {return _ipvbulk->getConstRefToGradEnergyConjugatedField();}; 
-  virtual std::vector<SVector3>  &getRefToGradEnergyConjugatedField() {return _ipvbulk->getRefToGradEnergyConjugatedField();}; 
+  virtual double getConstRefToEnergyConjugatedField(const int idex) const {return _ipvbulk->getConstRefToEnergyConjugatedField(idex);};
+  virtual double  &getRefToEnergyConjugatedField(const int idex) {return _ipvbulk->getRefToEnergyConjugatedField(idex);};
+  virtual const std::vector<SVector3>  &getConstRefToGradEnergyConjugatedField() const {return _ipvbulk->getConstRefToGradEnergyConjugatedField();};
+  virtual std::vector<SVector3>  &getRefToGradEnergyConjugatedField() {return _ipvbulk->getRefToGradEnergyConjugatedField();};
   virtual const  std::vector<std::vector<double>>  &getConstRefTodFielddEnergyConjugatedField() const {return _ipvbulk->getConstRefTodFielddEnergyConjugatedField();};
   virtual std::vector<std::vector<double>>  &getRefTodFielddEnergyConjugatedField() {return _ipvbulk->getRefTodFielddEnergyConjugatedField();};
-  virtual const std::vector<std::vector<SVector3>>  &getConstRefTodGradFielddEnergyConjugatedField() const {return _ipvbulk->getConstRefTodGradFielddEnergyConjugatedField();}; 
+  virtual const std::vector<std::vector<SVector3>>  &getConstRefTodGradFielddEnergyConjugatedField() const {return _ipvbulk->getConstRefTodGradFielddEnergyConjugatedField();};
   virtual std::vector<std::vector<SVector3>>  &getRefTodGradFielddEnergyConjugatedField() {return _ipvbulk->getRefTodGradFielddEnergyConjugatedField();};
-  virtual const std::vector<std::vector<STensor3>>  &getConstRefTodGradFielddGradEnergyConjugatedField() const {return _ipvbulk->getConstRefTodGradFielddGradEnergyConjugatedField();}; 
-  virtual std::vector<std::vector<STensor3>>  &getRefTodGradFielddGradEnergyConjugatedField() {return _ipvbulk->getRefTodGradFielddGradEnergyConjugatedField();}; 
-  virtual const fullVector<double>  &getConstRefToEnergyConjugatedFieldJump() const {return _ipvbulk->getConstRefToEnergyConjugatedFieldJump();};  
+  virtual const std::vector<std::vector<STensor3>>  &getConstRefTodGradFielddGradEnergyConjugatedField() const {return _ipvbulk->getConstRefTodGradFielddGradEnergyConjugatedField();};
+  virtual std::vector<std::vector<STensor3>>  &getRefTodGradFielddGradEnergyConjugatedField() {return _ipvbulk->getRefTodGradFielddGradEnergyConjugatedField();};
+  virtual const fullVector<double>  &getConstRefToEnergyConjugatedFieldJump() const {return _ipvbulk->getConstRefToEnergyConjugatedFieldJump();};
   virtual fullVector<double>  &getRefToEnergyConjugatedFieldJump() {return _ipvbulk->getRefToEnergyConjugatedFieldJump();};
   virtual const  std::vector<std::vector<double>>  &getConstRefTodEnergyConjugatedFieldJumpdFieldm() const {return _ipvbulk->getConstRefTodEnergyConjugatedFieldJumpdFieldm();};
   virtual std::vector<std::vector<double>>  &getRefTodEnergyConjugatedFieldJumpdFieldm() {return _ipvbulk->getRefTodEnergyConjugatedFieldJumpdFieldm();};
diff --git a/dG3D/src/FractureCohesiveDG3DMaterialLaw.cpp b/dG3D/src/FractureCohesiveDG3DMaterialLaw.cpp
index b62e71610a1604caffa9d7cdc3f80075aa164008..e57fd5e48c85b07157a7bd2c5b0900a196bfb534 100644
--- a/dG3D/src/FractureCohesiveDG3DMaterialLaw.cpp
+++ b/dG3D/src/FractureCohesiveDG3DMaterialLaw.cpp
@@ -149,7 +149,7 @@ void FractureByCohesive3DLaw::checkInternalState(IPVariable* ipv, const IPVariab
   }
 };
 
-void FractureByCohesive3DLaw::stress(IPVariable*ipv, const IPVariable*ipvp, const bool stiff, const bool checkfrac)
+void FractureByCohesive3DLaw::stress(IPVariable*ipv, const IPVariable*ipvp, const bool stiff, const bool checkfrac, const bool dTangent)
 {
 	dG3DIPVariableBase* dgipv = static_cast<dG3DIPVariableBase*>(ipv);
 	const dG3DIPVariableBase* dgipvprev = static_cast<const dG3DIPVariableBase*>(ipvp);
@@ -354,7 +354,7 @@ void MultiscaleFractureByCohesive3DLaw::initialBroken(IPStateBase *ips) const
 	}
 }
 
-void MultiscaleFractureByCohesive3DLaw::stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff, const bool checkfrac){
+void MultiscaleFractureByCohesive3DLaw::stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff, const bool checkfrac, const bool dTangent){
 
   FractureByCohesive3DLaw::stress(ipv,ipvprev,stiff,checkfrac);
 };
diff --git a/dG3D/src/FractureCohesiveDG3DMaterialLaw.h b/dG3D/src/FractureCohesiveDG3DMaterialLaw.h
index 2ad77236d3da16d7d11119bb387ccb8ee9fe507d..ec26a73e96d262c7b76f3f7f7ffc294b3c9cc3ee 100644
--- a/dG3D/src/FractureCohesiveDG3DMaterialLaw.h
+++ b/dG3D/src/FractureCohesiveDG3DMaterialLaw.h
@@ -40,7 +40,7 @@ class FractureByCohesive3DLaw : public dG3DMaterialLaw, public  fractureBy2Laws<
     }
   }
   virtual void checkInternalState(IPVariable* ipv, const IPVariable* ipvprev) const;
-  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true);
+  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent =false);
   virtual bool fullBroken(const IPVariable *ipv) const
   {
     const Cohesive3DIPVariableBase *ipvc = (dynamic_cast<const FractureCohesive3DIPVariable*>(ipv))->getIPvFrac();
@@ -125,7 +125,7 @@ class MultiscaleFractureByCohesive3DLaw : public FractureByCohesive3DLaw,
 		#endif //HAVE_MPI
 		virtual materialLaw* clone() const {return new MultiscaleFractureByCohesive3DLaw(*this);};
 
-		virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true);
+		virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent =false);
     #endif // SWIG
 };
 
diff --git a/dG3D/src/NonLocalDamageHyperelasticDG3DMaterialLaw.cpp b/dG3D/src/NonLocalDamageHyperelasticDG3DMaterialLaw.cpp
index 035a541937e1b4a8f5cb713469f5ab4cb378fd2c..c59b2d16f4ca9c87eba68c4ac1357aa664fc01ac 100644
--- a/dG3D/src/NonLocalDamageHyperelasticDG3DMaterialLaw.cpp
+++ b/dG3D/src/NonLocalDamageHyperelasticDG3DMaterialLaw.cpp
@@ -172,7 +172,7 @@ void NonLocalDamagePowerYieldHyperDG3DMaterialLaw::checkInternalState(IPVariable
   _nldPowerYieldHyperlaw->checkInternalState(ipvcur->getInternalData(),ipvprev->getInternalData());
 };
 
-void NonLocalDamagePowerYieldHyperDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac)
+void NonLocalDamagePowerYieldHyperDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac, const bool dTangent)
 {
   /* get ipvariable */
   nonLocalDamageHyperelasticDG3DIPVariable* ipvcur; //= static_cast < nonLocalDamageDG3DIPVariable *> (ipv);
@@ -381,7 +381,7 @@ void LocalDamagePowerYieldHyperDG3DMaterialLawWithFailure::checkInternalState(IP
   _localPowerYieldHyperlaw->checkInternalState(ipvcur->getInternalData(),ipvprev->getInternalData());
 };
 
-void LocalDamagePowerYieldHyperDG3DMaterialLawWithFailure::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac)
+void LocalDamagePowerYieldHyperDG3DMaterialLawWithFailure::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac, const bool dTangent)
 {
   /* get ipvariable */
   localDamageHyperelasticDG3DIPVariableWithFailure* ipvcur = NULL;
@@ -604,7 +604,7 @@ void NonLocalDamagePowerYieldHyperDG3DMaterialLawWithFailure::checkInternalState
   _nldPowerYieldHyperlaw->checkInternalState(ipvcur->getInternalData(),ipvprev->getInternalData());
 };
 
-void NonLocalDamagePowerYieldHyperDG3DMaterialLawWithFailure::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac)
+void NonLocalDamagePowerYieldHyperDG3DMaterialLawWithFailure::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac, const bool dTangent)
 {
   /* get ipvariable */
   nonLocalDamageHyperelasticDG3DIPVariableWithFailure* ipvcur = NULL;
diff --git a/dG3D/src/NonLocalDamageHyperelasticDG3DMaterialLaw.h b/dG3D/src/NonLocalDamageHyperelasticDG3DMaterialLaw.h
index 4421c99cc698c55fff1738d4e58f14b9461f3599..4ab7001e666cedccabcb2facb77e22cc9801e487 100644
--- a/dG3D/src/NonLocalDamageHyperelasticDG3DMaterialLaw.h
+++ b/dG3D/src/NonLocalDamageHyperelasticDG3DMaterialLaw.h
@@ -58,7 +58,7 @@ class NonLocalDamagePowerYieldHyperDG3DMaterialLaw : public dG3DMaterialLaw
   virtual void initLaws(const std::map<int,materialLaw*> &maplaw){}
   virtual double soundSpeed() const;
   virtual void checkInternalState(IPVariable* ipv, const IPVariable* ipvp) const;
-  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true);
+  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent =false);
 	virtual void initialIPVariable(IPVariable* ipv) const;
 
   virtual void setSolver(const nonLinearMechSolver* sv){
@@ -116,7 +116,7 @@ class LocalDamagePowerYieldHyperDG3DMaterialLawWithFailure: public dG3DMaterialL
   virtual void initLaws(const std::map<int,materialLaw*> &maplaw){}
   virtual double soundSpeed() const;
   virtual void checkInternalState(IPVariable* ipv, const IPVariable* ipvp) const;
-  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true);
+  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent =false);
 	virtual void initialIPVariable(IPVariable* ipv) const;
   virtual void setSolver(const nonLinearMechSolver* sv){
 		dG3DMaterialLaw::setSolver(sv);
@@ -177,7 +177,7 @@ class NonLocalDamagePowerYieldHyperDG3DMaterialLawWithFailure: public dG3DMateri
   virtual void initLaws(const std::map<int,materialLaw*> &maplaw){}
   virtual double soundSpeed() const;
   virtual void checkInternalState(IPVariable* ipv, const IPVariable* ipvp) const;
-  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true);
+  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent =false);
 	virtual void initialIPVariable(IPVariable* ipv) const;
   virtual void setSolver(const nonLinearMechSolver* sv){
 		dG3DMaterialLaw::setSolver(sv);
diff --git a/dG3D/src/computeWithMaterialLaw.cpp b/dG3D/src/computeWithMaterialLaw.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..3c12edda5bd5124a8a8c461683e4f6a74f5ea85a
--- /dev/null
+++ b/dG3D/src/computeWithMaterialLaw.cpp
@@ -0,0 +1,305 @@
+//
+// C++ Interface: loading with material law
+//
+//
+//
+// Author:  <Van Dung NGUYEN>, (C) 2019
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+
+#include "computeWithMaterialLaw.h"
+#include "nonLinearMechSolver.h"
+#include "STensorOperations.h"
+
+computeMaterialLaw::computeMaterialLaw(dG3DMaterialLaw& mlaw): _materialLaw(&mlaw),
+_ipvcur(NULL),_ipvprev(NULL)
+{
+  _solver = new nonLinearMechSolver(1000);
+  _materialLaw->setSolver(_solver);
+
+  _materialLaw->createIPVariable(_ipvcur,NULL,0,NULL,0);
+  _materialLaw->createIPVariable(_ipvprev,NULL,0,NULL,0);
+};
+
+computeMaterialLaw::~computeMaterialLaw()
+{
+  delete _ipvcur;
+  delete _ipvprev;
+  delete _solver;
+};
+
+void computeMaterialLaw::resetState(dG3DMaterialLaw& mlaw)
+{
+  delete _ipvcur; _ipvcur = NULL;
+  delete _ipvprev; _ipvprev = NULL;
+  _materialLaw = &mlaw;
+  _materialLaw->setSolver(_solver);
+  _materialLaw->createIPVariable(_ipvcur,NULL,0,NULL,0);
+  _materialLaw->createIPVariable(_ipvprev,NULL,0,NULL,0);
+}
+
+void computeMaterialLaw::nextStep()
+{
+  _ipvprev->operator=(*_ipvcur);
+}
+
+void computeMaterialLaw::setDeformationGradient(int i, int j, double val)
+{
+    // store current for next step
+  dG3DIPVariable* dgip = dynamic_cast<dG3DIPVariable*>(_ipvcur);
+  if (!dgip)
+  {
+    Msg::Error("dG3DIPVariable must be created from material law computeMaterialLaw::setDeformationGradient");
+    Msg::Exit(0);
+  }
+  STensor3& F = dgip->getRefToDeformationGradient();
+  F(i,j) = val;
+}
+
+void computeMaterialLaw::setTime(double t, double dt)
+{
+  _materialLaw->setTime(t,dt);
+}
+void computeMaterialLaw::computeStressState(bool stiff)
+{
+  _materialLaw->stress(_ipvcur,_ipvprev,stiff,false);
+};
+
+void computeMaterialLaw::computeStressState_uniaxialStress(bool stiff)
+{
+  _materialLaw->stress3DTo1D(_ipvcur,_ipvprev,stiff,false);
+};
+
+double computeMaterialLaw::getTime() const
+{
+  return _materialLaw->getTime();
+}
+double computeMaterialLaw::getTimeStep() const
+{
+  return _materialLaw->getTimeStep();
+}
+
+std::string computeMaterialLaw::getString(int comp, StateType state, ValType vtype) const
+{
+  std::string str = "";
+  if (vtype == Val)
+  {
+    str = IPField::ToString(comp);
+    if (state == Previous)
+    {
+      str += "_prev";
+    }
+  } 
+  else if (vtype == Increment)
+  {
+    str = "Increment_"+IPField::ToString(comp);
+  }
+  else if (vtype == Rate)
+  {
+    str = "Rate_"+IPField::ToString(comp);
+  }
+  else
+  {
+    Msg::Error("val type %d is not defined",vtype);
+    Msg::Exit(0);
+  }
+  return str;
+}
+
+double computeMaterialLaw::getValue(int comp, StateType state, ValType vtype) const
+{
+  if (vtype == Val)
+  {
+    if (state == Previous)
+    {
+      return _ipvprev->get(comp);
+    }
+    else if (state == Current)
+    {
+      return _ipvcur->get(comp);
+    }
+    else
+    {
+      Msg::Error("state %d is not defined",state);
+      Msg::Exit(0);
+    }
+  }
+  else if (vtype == Increment)
+  {
+    if (comp == IPField::F_XX or comp == IPField::F_XY or comp == IPField::F_XZ or
+        comp == IPField::F_YX or comp == IPField::F_YY or comp == IPField::F_YZ or
+        comp == IPField::F_ZX or comp == IPField::F_ZY or comp == IPField::F_ZZ)
+    {
+      
+      static STensor3 F, Fprev, invFprev, DF, logDF;
+      F(0,0) = _ipvcur->get(IPField::F_XX);
+      F(0,1) = _ipvcur->get(IPField::F_XY);
+      F(0,2) = _ipvcur->get(IPField::F_XZ);
+      F(1,0) = _ipvcur->get(IPField::F_YX);
+      F(1,1) = _ipvcur->get(IPField::F_YY);
+      F(1,2) = _ipvcur->get(IPField::F_YZ);
+      F(2,0) = _ipvcur->get(IPField::F_ZX);
+      F(2,1) = _ipvcur->get(IPField::F_ZY);
+      F(2,2) = _ipvcur->get(IPField::F_ZZ);
+      
+      Fprev(0,0) = _ipvprev->get(IPField::F_XX);
+      Fprev(0,1) = _ipvprev->get(IPField::F_XY);
+      Fprev(0,2) = _ipvprev->get(IPField::F_XZ);
+      Fprev(1,0) = _ipvprev->get(IPField::F_YX);
+      Fprev(1,1) = _ipvprev->get(IPField::F_YY);
+      Fprev(1,2) = _ipvprev->get(IPField::F_YZ);
+      Fprev(2,0) = _ipvprev->get(IPField::F_ZX);
+      Fprev(2,1) = _ipvprev->get(IPField::F_ZY);
+      Fprev(2,2) = _ipvprev->get(IPField::F_ZZ);
+      
+      STensorOperation::inverseSTensor3(Fprev,invFprev);
+      STensorOperation::multSTensor3(F,invFprev,DF);
+      STensorOperation::logSTensor3(DF,-1,logDF);
+      if (comp == IPField::F_XX) return logDF(0,0);
+      else if (comp == IPField::F_XY) return logDF(0,1);
+      else if (comp == IPField::F_XZ) return logDF(0,2);
+      else if (comp == IPField::F_YX) return logDF(1,0);
+      else if (comp == IPField::F_YY) return logDF(1,1);
+      else if (comp == IPField::F_YZ) return logDF(1,2);
+      else if (comp == IPField::F_ZX) return logDF(2,0);
+      else if (comp == IPField::F_ZY) return logDF(2,1);
+      else if (comp == IPField::F_ZZ) return logDF(2,2);
+    }
+    else if (comp == IPField::FP_XX or comp == IPField::FP_XY or comp == IPField::FP_XZ or
+        comp == IPField::FP_YX or comp == IPField::FP_YY or comp == IPField::FP_YZ or
+        comp == IPField::FP_ZX or comp == IPField::FP_ZY or comp == IPField::FP_ZZ)
+    {
+      static STensor3 Fp, FPprev, invFPprev, DF, logDF;
+      Fp(0,0) = _ipvcur->get(IPField::FP_XX);
+      Fp(0,1) = _ipvcur->get(IPField::FP_XY);
+      Fp(0,2) = _ipvcur->get(IPField::FP_XZ);
+      Fp(1,0) = _ipvcur->get(IPField::FP_YX);
+      Fp(1,1) = _ipvcur->get(IPField::FP_YY);
+      Fp(1,2) = _ipvcur->get(IPField::FP_YZ);
+      Fp(2,0) = _ipvcur->get(IPField::FP_ZX);
+      Fp(2,1) = _ipvcur->get(IPField::FP_ZY);
+      Fp(2,2) = _ipvcur->get(IPField::FP_ZZ);
+      
+      FPprev(0,0) = _ipvprev->get(IPField::FP_XX);
+      FPprev(0,1) = _ipvprev->get(IPField::FP_XY);
+      FPprev(0,2) = _ipvprev->get(IPField::FP_XZ);
+      FPprev(1,0) = _ipvprev->get(IPField::FP_YX);
+      FPprev(1,1) = _ipvprev->get(IPField::FP_YY);
+      FPprev(1,2) = _ipvprev->get(IPField::FP_YZ);
+      FPprev(2,0) = _ipvprev->get(IPField::FP_ZX);
+      FPprev(2,1) = _ipvprev->get(IPField::FP_ZY);
+      FPprev(2,2) = _ipvprev->get(IPField::FP_ZZ);
+      
+      STensorOperation::inverseSTensor3(FPprev,invFPprev);
+      STensorOperation::multSTensor3(Fp,invFPprev,DF);
+      STensorOperation::logSTensor3(DF,-1,logDF);
+      if (comp == IPField::FP_XX) return logDF(0,0);
+      else if (comp == IPField::FP_XY) return logDF(0,1);
+      else if (comp == IPField::FP_XZ) return logDF(0,2);
+      else if (comp == IPField::FP_YX) return logDF(1,0);
+      else if (comp == IPField::FP_YY) return logDF(1,1);
+      else if (comp == IPField::FP_YZ) return logDF(1,2);
+      else if (comp == IPField::FP_ZX) return logDF(2,0);
+      else if (comp == IPField::FP_ZY) return logDF(2,1);
+      else if (comp == IPField::FP_ZZ) return logDF(2,2);
+    }
+    else
+    {
+      return _ipvcur->get(comp) - _ipvprev->get(comp);
+    }
+    
+  } 
+  else if (vtype == Rate)
+  {
+    double timeStep = _materialLaw->getTimeStep();
+    if (comp == IPField::F_XX or comp == IPField::F_XY or comp == IPField::F_XZ or
+        comp == IPField::F_YX or comp == IPField::F_YY or comp == IPField::F_YZ or
+        comp == IPField::F_ZX or comp == IPField::F_ZY or comp == IPField::F_ZZ)
+    {
+      
+      static STensor3 F, Fprev, invFprev, DF, logDF;
+      F(0,0) = _ipvcur->get(IPField::F_XX);
+      F(0,1) = _ipvcur->get(IPField::F_XY);
+      F(0,2) = _ipvcur->get(IPField::F_XZ);
+      F(1,0) = _ipvcur->get(IPField::F_YX);
+      F(1,1) = _ipvcur->get(IPField::F_YY);
+      F(1,2) = _ipvcur->get(IPField::F_YZ);
+      F(2,0) = _ipvcur->get(IPField::F_ZX);
+      F(2,1) = _ipvcur->get(IPField::F_ZY);
+      F(2,2) = _ipvcur->get(IPField::F_ZZ);
+      
+      Fprev(0,0) = _ipvprev->get(IPField::F_XX);
+      Fprev(0,1) = _ipvprev->get(IPField::F_XY);
+      Fprev(0,2) = _ipvprev->get(IPField::F_XZ);
+      Fprev(1,0) = _ipvprev->get(IPField::F_YX);
+      Fprev(1,1) = _ipvprev->get(IPField::F_YY);
+      Fprev(1,2) = _ipvprev->get(IPField::F_YZ);
+      Fprev(2,0) = _ipvprev->get(IPField::F_ZX);
+      Fprev(2,1) = _ipvprev->get(IPField::F_ZY);
+      Fprev(2,2) = _ipvprev->get(IPField::F_ZZ);
+      
+      STensorOperation::inverseSTensor3(Fprev,invFprev);
+      STensorOperation::multSTensor3(F,invFprev,DF);
+      STensorOperation::logSTensor3(DF,-1,logDF);
+      if (comp == IPField::F_XX) return logDF(0,0)/timeStep;
+      else if (comp == IPField::F_XY) return logDF(0,1)/timeStep;
+      else if (comp == IPField::F_XZ) return logDF(0,2)/timeStep;
+      else if (comp == IPField::F_YX) return logDF(1,0)/timeStep;
+      else if (comp == IPField::F_YY) return logDF(1,1)/timeStep;
+      else if (comp == IPField::F_YZ) return logDF(1,2)/timeStep;
+      else if (comp == IPField::F_ZX) return logDF(2,0)/timeStep;
+      else if (comp == IPField::F_ZY) return logDF(2,1)/timeStep;
+      else if (comp == IPField::F_ZZ) return logDF(2,2)/timeStep;
+    }
+    else if (comp == IPField::FP_XX or comp == IPField::FP_XY or comp == IPField::FP_XZ or
+        comp == IPField::FP_YX or comp == IPField::FP_YY or comp == IPField::FP_YZ or
+        comp == IPField::FP_ZX or comp == IPField::FP_ZY or comp == IPField::FP_ZZ)
+    {
+      static STensor3 Fp, FPprev, invFPprev, DF, logDF;
+      Fp(0,0) = _ipvcur->get(IPField::FP_XX);
+      Fp(0,1) = _ipvcur->get(IPField::FP_XY);
+      Fp(0,2) = _ipvcur->get(IPField::FP_XZ);
+      Fp(1,0) = _ipvcur->get(IPField::FP_YX);
+      Fp(1,1) = _ipvcur->get(IPField::FP_YY);
+      Fp(1,2) = _ipvcur->get(IPField::FP_YZ);
+      Fp(2,0) = _ipvcur->get(IPField::FP_ZX);
+      Fp(2,1) = _ipvcur->get(IPField::FP_ZY);
+      Fp(2,2) = _ipvcur->get(IPField::FP_ZZ);
+      
+      FPprev(0,0) = _ipvprev->get(IPField::FP_XX);
+      FPprev(0,1) = _ipvprev->get(IPField::FP_XY);
+      FPprev(0,2) = _ipvprev->get(IPField::FP_XZ);
+      FPprev(1,0) = _ipvprev->get(IPField::FP_YX);
+      FPprev(1,1) = _ipvprev->get(IPField::FP_YY);
+      FPprev(1,2) = _ipvprev->get(IPField::FP_YZ);
+      FPprev(2,0) = _ipvprev->get(IPField::FP_ZX);
+      FPprev(2,1) = _ipvprev->get(IPField::FP_ZY);
+      FPprev(2,2) = _ipvprev->get(IPField::FP_ZZ);
+      
+      STensorOperation::inverseSTensor3(FPprev,invFPprev);
+      STensorOperation::multSTensor3(Fp,invFPprev,DF);
+      STensorOperation::logSTensor3(DF,-1,logDF);
+      if (comp == IPField::FP_XX) return logDF(0,0)/timeStep;
+      else if (comp == IPField::FP_XY) return logDF(0,1)/timeStep;
+      else if (comp == IPField::FP_XZ) return logDF(0,2)/timeStep;
+      else if (comp == IPField::FP_YX) return logDF(1,0)/timeStep;
+      else if (comp == IPField::FP_YY) return logDF(1,1)/timeStep;
+      else if (comp == IPField::FP_YZ) return logDF(1,2)/timeStep;
+      else if (comp == IPField::FP_ZX) return logDF(2,0)/timeStep;
+      else if (comp == IPField::FP_ZY) return logDF(2,1)/timeStep;
+      else if (comp == IPField::FP_ZZ) return logDF(2,2)/timeStep;
+    }
+    else
+    {
+      return (_ipvcur->get(comp) - _ipvprev->get(comp))/timeStep;
+    }
+  }
+  else
+  {
+    Msg::Error("val type %d is not defined",vtype);
+    Msg::Exit(0);
+  }
+}
+
diff --git a/dG3D/src/computeWithMaterialLaw.h b/dG3D/src/computeWithMaterialLaw.h
new file mode 100644
index 0000000000000000000000000000000000000000..7bdf8e440f6a22495782adfc310b854201249202
--- /dev/null
+++ b/dG3D/src/computeWithMaterialLaw.h
@@ -0,0 +1,45 @@
+//
+// C++ Interface: loading with material law
+//
+//
+//
+// Author:  <Van Dung NGUYEN>, (C) 2019
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+
+#ifndef COMPUTEWITHMATERIALLAW_H_
+#define COMPUTEWITHMATERIALLAW_H_
+
+#include "dG3DMaterialLaw.h"
+class computeMaterialLaw
+{ 
+  public:
+    enum StateType{Previous=0,Current=1};
+    enum ValType{Val=0,Rate=1,Increment=2};
+    
+  protected:
+    #ifndef SWIG
+    dG3DMaterialLaw* _materialLaw;
+    IPVariable* _ipvcur;
+    IPVariable* _ipvprev;
+    nonLinearMechSolver* _solver;
+    #endif //SWIG
+  public:
+    computeMaterialLaw(dG3DMaterialLaw& mlaw);
+    virtual ~computeMaterialLaw();
+    void resetState(dG3DMaterialLaw& mlaw);
+    void setDeformationGradient(int i, int, double val);
+    void setTime(double t, double dt);
+    void nextStep();
+    void computeStressState(bool stiff=false);
+    void computeStressState_uniaxialStress(bool stiff = false);
+    std::string getString(int comp, StateType state, ValType vtype) const;
+    double getValue(int comp, StateType state, ValType vtype) const;
+    double getTime() const;
+    double getTimeStep() const;
+};
+
+
+#endif // COMPUTEWITHMATERIALLAW_H_
diff --git a/dG3D/src/dG3D1DDomain.cpp b/dG3D/src/dG3D1DDomain.cpp
index 913b7a4d8d5419625b0ef047c429afaac2f759c7..8477e598d9294a236387a3aec90af4fe86a10188 100644
--- a/dG3D/src/dG3D1DDomain.cpp
+++ b/dG3D/src/dG3D1DDomain.cpp
@@ -32,6 +32,12 @@ dG3D1DDomain::~dG3D1DDomain(){
   }
 }
 
+void dG3D1DDomain::setCrossSection(const double val)
+{
+  if (_crossSectionDistribution) delete _crossSectionDistribution;
+  _crossSectionDistribution = new constantScalarFunction(val);
+}
+
 void dG3D1DDomain::setCrossSectionDistribution(const scalarFunction* fct){
   if (_crossSectionDistribution) delete _crossSectionDistribution;
   _crossSectionDistribution = fct->clone();
diff --git a/dG3D/src/dG3D1DDomain.h b/dG3D/src/dG3D1DDomain.h
index 6e850bc67585a4e76ddba0c46b46201749f93cf3..73080ffc87764a5df34292a3c265098c70289e62 100644
--- a/dG3D/src/dG3D1DDomain.h
+++ b/dG3D/src/dG3D1DDomain.h
@@ -26,6 +26,7 @@ class dG3D1DDomain : public dG3DDomain{
   public:
     dG3D1DDomain(const int tag, const int phys, const int sp_, const int lnum, const int fdg, int numNL=0);
     void setCrossSectionDistribution(const scalarFunction* fct);
+    void setCrossSection(const double val);
     void setState(const int s);
     void setStressTriaxiality(const double T);
     #ifndef SWIG
diff --git a/dG3D/src/dG3DCohesiveBandMaterialLaw.cpp b/dG3D/src/dG3DCohesiveBandMaterialLaw.cpp
index 65124aacab9a02cfa078298a7deffdf2d5439369..fdb55f6334348429f55f2e53fd41f6ec5f6410e5 100644
--- a/dG3D/src/dG3DCohesiveBandMaterialLaw.cpp
+++ b/dG3D/src/dG3DCohesiveBandMaterialLaw.cpp
@@ -394,7 +394,7 @@ void CohesiveBand3DLaw::transferInterfaceDataToBulk(IPVariable* ipv, const IPVar
 
 
 
-void CohesiveBand3DLaw::stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff, const bool checkfrac)
+void CohesiveBand3DLaw::stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff, const bool checkfrac, const bool dTangent)
 {
 // Compute stress tensor and interface force after crack insertion
   // Get fracture ipv
@@ -1158,7 +1158,7 @@ void PorosityCohesiveBand3DLaw::checkInternalState(IPVariable* ipv, const IPVari
 };
 
 
-void PorosityCohesiveBand3DLaw::stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff, const bool checkfrac)
+void PorosityCohesiveBand3DLaw::stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff, const bool checkfrac, const bool dTangent)
 {
   // get ipvfrac
   FractureCohesive3DIPVariable *fipv = static_cast < FractureCohesive3DIPVariable *> (ipv);
diff --git a/dG3D/src/dG3DCohesiveBandMaterialLaw.h b/dG3D/src/dG3DCohesiveBandMaterialLaw.h
index a91da0ee6c6126b1467af53ed7761f097151ba6c..d6d6818195e447b6ec7472f948355dca45ec10a1 100644
--- a/dG3D/src/dG3DCohesiveBandMaterialLaw.h
+++ b/dG3D/src/dG3DCohesiveBandMaterialLaw.h
@@ -45,7 +45,7 @@ class CohesiveBand3DLaw :public Cohesive3DLaw{
     virtual double getFractureStrengthFactorMax() const{return _fscmax;}
 
     // Proper functions
-    virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true);
+    virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent =false);
     virtual void checkCohesiveInsertion(IPStateBase* ipsm, IPStateBase* ipsp, const bool forcedInsert = false) const;
     virtual void transferInterfaceDataToBulk(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff) const;
 
@@ -110,7 +110,7 @@ class PorosityCohesiveBand3DLaw : public Cohesive3DLaw{
     // General access functions
     virtual double getKp() const {return _Kp;};
     // Proper functions
-    virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true);
+    virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent =false);
     virtual void checkCohesiveInsertion(IPStateBase* ipsm, IPStateBase* ipsp, const bool forcedInsert = false) const;
     virtual void transferInterfaceDataToBulk(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff) const;
 
diff --git a/dG3D/src/dG3DCohesiveMaterialLaw.cpp b/dG3D/src/dG3DCohesiveMaterialLaw.cpp
index d9496bcaf55f56411a7e47b4dd4096ef0c68d05e..d46afa16b4b6ad8f4d27df7e87a8baa116f1e2a2 100644
--- a/dG3D/src/dG3DCohesiveMaterialLaw.cpp
+++ b/dG3D/src/dG3DCohesiveMaterialLaw.cpp
@@ -50,7 +50,7 @@ BaseCohesive3DLaw::~BaseCohesive3DLaw(){
   }
 };
 
-void BaseCohesive3DLaw::stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff, const bool checkfrac)
+void BaseCohesive3DLaw::stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff, const bool checkfrac, const bool dTangent)
 {
   FractureCohesive3DIPVariable *fipv = dynamic_cast < FractureCohesive3DIPVariable *> (ipv);
   const FractureCohesive3DIPVariable *fipvprev = dynamic_cast < const FractureCohesive3DIPVariable *> (ipvprev);
@@ -638,7 +638,7 @@ void NonLocalDamageLinearCohesive3DLaw::createIPVariable(IPVariable* &ipv,const
 }
 
 
-void NonLocalDamageLinearCohesive3DLaw::stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff, const bool checkfrac)
+void NonLocalDamageLinearCohesive3DLaw::stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff, const bool checkfrac, const bool dTangent)
 {
   LinearCohesive3DLaw::stress(ipv,ipvprev,stiff,checkfrac);
 }
@@ -1099,7 +1099,7 @@ void DelaminationLinearCohesive3DLaw::createIPVariable(IPVariable* &ipv,const ME
   ipv = new DelaminationLinearCohesive3DIPVariable();
 }
 
-void DelaminationLinearCohesive3DLaw::stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff, const bool checkfrac){
+void DelaminationLinearCohesive3DLaw::stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff, const bool checkfrac, const bool dTangent){
   LinearCohesive3DLaw::stress(ipv,ipvprev,stiff,checkfrac);
 };
 
@@ -1406,7 +1406,7 @@ void BulkFollwedCohesive3DLaw::transferInterfaceDataToBulk(IPVariable* ipv, cons
   }
 };
 
-void BulkFollwedCohesive3DLaw::stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff, const bool checkfrac){
+void BulkFollwedCohesive3DLaw::stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff, const bool checkfrac, const bool dTangent){
   FractureCohesive3DIPVariable *fipv = static_cast < FractureCohesive3DIPVariable *> (ipv);
   const FractureCohesive3DIPVariable *fipvprev = static_cast < const FractureCohesive3DIPVariable *> (ipvprev);
 
diff --git a/dG3D/src/dG3DCohesiveMaterialLaw.h b/dG3D/src/dG3DCohesiveMaterialLaw.h
index 6028af5a14309b47bb404baedf8491aa5a05496d..92f55f0bbe6d60aaf7d639cb3892e9ae420e4daa 100644
--- a/dG3D/src/dG3DCohesiveMaterialLaw.h
+++ b/dG3D/src/dG3DCohesiveMaterialLaw.h
@@ -48,7 +48,7 @@ class Cohesive3DLaw : public materialLaw{
   {
     return ipv->isDeleted();
   }
-  virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true)=0;
+  virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent =false)=0;
   // check cohesive insert , if forcedInsert = true, the cohesive element is inserted at any condition
   virtual void checkCohesiveInsertion(IPStateBase* ipsm, IPStateBase* ipsp, const bool forcedInsert=false) const = 0;
   // set function allows to prescribe the deformation gradient at bulk ipv equal to mean F
@@ -65,7 +65,9 @@ class Cohesive3DLaw : public materialLaw{
                             IPVariable *q1,              // updated array of internal variable (in ipvcur on output),
 			    STensor43 &Tangent,         // constitutive tangents (output)
 			    const bool stiff,
-                            STensor43* elasticTangent = NULL
+                            STensor43* elasticTangent = NULL,
+                            const bool dTangent =false,
+                            STensor63* dCalgdeps =NULL
 			    ) const
       {
         Msg::Error("Cohesive3DLaw constitutive not defined");
@@ -99,7 +101,7 @@ class BaseCohesive3DLaw : public Cohesive3DLaw
   virtual double getFractureStrengthFactorMin() const{return _fscmin;}
   virtual double getFractureStrengthFactorMax() const{return _fscmax;}
 
-  virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true);
+  virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent =false);
   //virtual void checkCohesiveInsertion(IPStateBase* ipsm, IPStateBase* ipsp, const bool forcedInsert=false) const;
   virtual void transferInterfaceDataToBulk(IPVariable* ipv, const IPVariable* ipvprev,  const bool stiff) const {}
   //virtual materialLaw* clone() const{return new BaseCohesive3DLaw(*this);}
@@ -265,7 +267,7 @@ class NonLocalDamageLinearCohesive3DLaw : public LinearCohesive3DLaw
   virtual void createIPState(IPStateBase* &ips,const bool* state_=NULL,const MElement *ele=NULL, const int nbFF_=0, const IntPt *GP=NULL, const int gpt = 0) const;
   virtual void createIPVariable(IPVariable* &ipv,const MElement *ele, const int nbFF_, const IntPt *GP, const int gpt) const;
 
-  virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true);
+  virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent =false);
   virtual void checkCohesiveInsertion(IPStateBase* ipsm, IPStateBase* ipsp, const bool forcedInsert=false) const;
 
 	virtual materialLaw* clone() const{ return new NonLocalDamageLinearCohesive3DLaw(*this);};
@@ -327,7 +329,7 @@ class DelaminationLinearCohesive3DLaw : public LinearCohesive3DLaw
     virtual void initLaws(const std::map<int,materialLaw*> &maplaw){} // nothing to do for this law
     virtual void createIPState(IPStateBase* &ips,const bool* state_=NULL,const MElement *ele=NULL, const int nbFF_=0, const IntPt *GP=NULL, const int gpt = 0) const;
     virtual void createIPVariable(IPVariable* &ipv,const MElement *ele, const int nbFF_, const IntPt *GP, const int gpt) const;
-    virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true);
+    virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent =false);
     virtual void checkCohesiveInsertion(IPStateBase* ipsm, IPStateBase* ipsp, const bool forcedInsert=false) const;
 		virtual materialLaw* clone() const{ return new DelaminationLinearCohesive3DLaw(*this);};
 		virtual void checkInternalState(IPVariable* ipv, const IPVariable* ipvprev) const{}; // do nothing
@@ -351,7 +353,7 @@ class GeneralBulkFollwedCohesive3DLaw : public Cohesive3DLaw{
     virtual double getCharacteristicLength() const {return _L;};
     virtual double getKp() const {return _Kp;};
 
-    virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true) = 0;
+    virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent =false) = 0;
     virtual void checkCohesiveInsertion(IPStateBase* ipsm, IPStateBase* ipsp, const bool forcedInsert= false) const = 0;
     virtual void transferInterfaceDataToBulk(IPVariable* ipv, const IPVariable* ipvprev,  const bool stiff) const = 0;
 		virtual materialLaw* clone() const = 0;
@@ -371,7 +373,7 @@ class BulkFollwedCohesive3DLaw : public GeneralBulkFollwedCohesive3DLaw{
     virtual ~BulkFollwedCohesive3DLaw(){};
     virtual void createIPState(IPStateBase* &ips,const bool* state_=NULL,const MElement *ele=NULL, const int nbFF_=0, const IntPt *GP=NULL, const int gpt = 0) const;
     virtual void createIPVariable(IPVariable* &ipv,const MElement *ele, const int nbFF_, const IntPt *GP, const int gpt) const;
-    virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true);
+    virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent =false);
     virtual void checkCohesiveInsertion(IPStateBase* ipsm, IPStateBase* ipsp, const bool forcedInsert= false) const;
     virtual void transferInterfaceDataToBulk(IPVariable* ipv, const IPVariable* ipvprev,  const bool stiff) const;
     virtual materialLaw* clone() const{return new BulkFollwedCohesive3DLaw(*this);};
diff --git a/dG3D/src/dG3DEnhancedStrainMaterialLaw.cpp b/dG3D/src/dG3DEnhancedStrainMaterialLaw.cpp
index d025d1799385dc61b905e37aaaf0449f59e2590f..49fc4de9250fccc6cbf4c27323ee35ef040b8aad 100644
--- a/dG3D/src/dG3DEnhancedStrainMaterialLaw.cpp
+++ b/dG3D/src/dG3DEnhancedStrainMaterialLaw.cpp
@@ -75,7 +75,7 @@ void enhancedStrainDG3DLinearElasticMaterialLaw::createIPVariable(IPVariable* &i
 }
 
 
-void enhancedStrainDG3DLinearElasticMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac)
+void enhancedStrainDG3DLinearElasticMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac, const bool dTangent)
 {
   /* get ipvariable */
   dG3DEnhancedStrainIPVariable* ipvcur = static_cast<dG3DEnhancedStrainIPVariable*>(ipv);;
@@ -199,7 +199,7 @@ void enhancedStraindG3DMultiscaleMaterialLaw::checkInternalState(IPVariable* ipv
 	mipv->brokenSolver(solver->solverIsBroken());
 };
 
-void enhancedStraindG3DMultiscaleMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff, const bool checkfrac){
+void enhancedStraindG3DMultiscaleMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff, const bool checkfrac, const bool dTangent){
 
 	dG3DEnhancedStrainIPVariable* eipv = static_cast<dG3DEnhancedStrainIPVariable*>(ipv);
 	const dG3DEnhancedStrainIPVariable* eipvprev = static_cast<const dG3DEnhancedStrainIPVariable*>(ipvprev);
@@ -224,7 +224,7 @@ void enhancedStraindG3DMultiscaleMaterialLaw::stress(IPVariable* ipv, const IPVa
 		// set tangent averaging flag
 		solver->tangentAveragingFlag(stiff);
 		// solve micro problem
-		double time = solver->microSolve();
+		bool success = solver->microSolve();
 		// get homogenized properties form solved micro problem
 		eipv->getRefToFirstPiolaKirchhoffStress() = solver->getHomogenizationState(IPStateBase::current)->getHomogenizedStress();
 		mipv->getRefToDefoEnergy() = solver->getHomogenizationState(IPStateBase::current)->getDeformationEnergy();
@@ -274,7 +274,7 @@ void enhancedStraindG3DMultiscaleMaterialLaw::stress(IPVariable* ipv, const IPVa
 		// set tangent averaging flag
 		solver->tangentAveragingFlag(stiff);
 		// solve micro problem
-		double time = solver->microSolve();
+		bool success = solver->microSolve();
 		// get homogenized properties form solved micro problem
 		eipv->getRefToFirstPiolaKirchhoffStress() = solver->getHomogenizationState(IPStateBase::current)->getHomogenizedStress();
 		mipv->getRefToDefoEnergy() = solver->getHomogenizationState(IPStateBase::current)->getDeformationEnergy();
diff --git a/dG3D/src/dG3DEnhancedStrainMaterialLaw.h b/dG3D/src/dG3DEnhancedStrainMaterialLaw.h
index 2508da6cc1d03c92d47403466582c16b458d1129..814efb0d4a5a88cd607e0c8755c61e7d8134de2b 100644
--- a/dG3D/src/dG3DEnhancedStrainMaterialLaw.h
+++ b/dG3D/src/dG3DEnhancedStrainMaterialLaw.h
@@ -30,7 +30,7 @@ class enhancedStrainDG3DLinearElasticMaterialLaw : public dG3DLinearElasticMater
   // To allow initialization of bulk ip in case of fracture
 		virtual void createIPVariable(IPVariable* &ipv, const MElement *ele, const int nbFF_, const IntPt *GP, const int gpt) const;
 
-		virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true);
+		virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent =false);
 
 		virtual materialLaw* clone() const {return new enhancedStrainDG3DLinearElasticMaterialLaw(*this);};
 		#endif //SWIG
@@ -72,7 +72,7 @@ class enhancedStraindG3DMultiscaleMaterialLaw : public dG3DMaterialLaw, public n
     // The bool is necessery for computation of matrix by perturbation in this case the check of fracture
     // has not to be performed.
     virtual void checkInternalState(IPVariable* ipv, const IPVariable* ipvp) const;
-    virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true);
+    virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent =false);
     virtual void setElasticStiffness(IPVariable* ipv) const;
     virtual bool isNumeric() const{return true;}
 		virtual void initialIPVariable(IPVariable* ipv, bool stiff);
diff --git a/dG3D/src/dG3DIPVariable.cpp b/dG3D/src/dG3DIPVariable.cpp
index 441a29ebe54187f735571f58de051e68eb7e73fa..5c5470f59521810737fd7618597ead47e86c1f77 100644
--- a/dG3D/src/dG3DIPVariable.cpp
+++ b/dG3D/src/dG3DIPVariable.cpp
@@ -420,6 +420,10 @@ double dG3DIPVariable::get(const int comp) const
   const STensor3& F = this->getConstRefToDeformationGradient();
   const STensor3& P = this->getConstRefToFirstPiolaKirchhoffStress();
 
+  static STensor3 invF, secondPK;
+  STensorOperation::inverseSTensor3(F,invF);
+  STensorOperation::multSTensor3(invF,P,secondPK);
+
   if(comp == IPField::SIG_XX)
     return cauchy(0,0);
   else if(comp == IPField::SIG_YY)
@@ -432,10 +436,27 @@ double dG3DIPVariable::get(const int comp) const
     return cauchy(1,2);
   else if(comp == IPField::SIG_XZ)
     return cauchy(0,2);
+  else if(comp == IPField::K_XX)
+    return cauchy(0,0)*getJ();
+  else if(comp == IPField::K_YY)
+    return cauchy(1,1)*getJ();
+  else if(comp == IPField::K_ZZ)
+    return cauchy(2,2)*getJ();
+  else if(comp == IPField::K_XY)
+    return cauchy(0,1)*getJ();
+  else if(comp == IPField::K_YZ)
+    return cauchy(1,2)*getJ();
+  else if(comp == IPField::K_XZ)
+    return cauchy(0,2)*getJ();
   else if(comp == IPField::SVM) // von Mises
   {
     return vonMises();
   }
+  else if (comp == IPField::KVM)
+  {
+    return vonMises()*getJ();
+  }
+
   else if(comp == IPField::STRAIN_XX)
     return getConstRefToDeformationGradient()(0,0)-1.;
   else if(comp == IPField::STRAIN_YY)
@@ -502,6 +523,30 @@ double dG3DIPVariable::get(const int comp) const
 	else if (comp == IPField::P_ZZ){
     return P(2,2);
 	}
+	else if (comp == IPField::S_XX)
+  {
+    return secondPK(0,0);
+  }
+  else if (comp == IPField::S_XY)
+  {
+    return secondPK(0,1);
+  }
+  else if (comp == IPField::S_XZ)
+  {
+    return secondPK(0,2);
+  }
+  else if (comp == IPField::S_YY)
+  {
+    return secondPK(1,1);
+  }
+  else if (comp == IPField::S_YZ)
+  {
+    return secondPK(1,2);
+  }
+  else if (comp == IPField::S_ZZ)
+  {
+    return secondPK(2,2);
+  }
 	else if (comp == IPField::JACOBIAN){
     return getJ();
 	}
@@ -573,7 +618,7 @@ double dG3DIPVariable::get(const int comp) const
 	else if (comp == IPField::DAMAGE_IS_BLOCKED){
 		return dissipationIsBlocked();
 	}
-  else if (comp == IPField::ACTIVE_DAMAGING_ZONE){
+  else if (comp == IPField::ACTIVE_DISSIPATION){
     return this->dissipationIsActive();
   }
 	else if (comp == IPField::DEFO_ENERGY){
@@ -602,34 +647,22 @@ double dG3DIPVariable::get(const int comp) const
     return sqrt(2.*devE.dotprod()/3.);
   }
   else if (comp == IPField::GL_XX){
-    static STensor3 FTF;
-    STensorOperation::multSTensor3FirstTranspose(F,F,FTF);
-    return 0.5*(FTF(0,0)-1.);
+    return 0.5*(F(0,0)*F(0,0)+F(1,0)*F(1,0)+F(2,0)*F(2,0) - 1.);
   }
   else if (comp == IPField::GL_XY){
-    static STensor3 FTF;
-    STensorOperation::multSTensor3FirstTranspose(F,F,FTF);
-    return 0.5*FTF(0,1);
+    return 0.5*(F(0,0)*F(0,1)+F(1,0)*F(1,1)+F(2,0)*F(2,1));
   }
   else if (comp == IPField::GL_XZ){
-    static STensor3 FTF;
-    STensorOperation::multSTensor3FirstTranspose(F,F,FTF);
-    return 0.5*FTF(0,2);
+    return 0.5*(F(0,0)*F(0,2)+F(1,0)*F(1,2)+F(2,0)*F(2,2));
   }
   else if (comp == IPField::GL_YY){
-    static STensor3 FTF;
-    STensorOperation::multSTensor3FirstTranspose(F,F,FTF);
-    return 0.5*(FTF(1,1)-1.);
+    return 0.5*(F(0,1)*F(0,1)+F(1,1)*F(1,1)+F(2,1)*F(2,1) - 1.);
   }
   else if (comp == IPField::GL_YZ){
-    static STensor3 FTF;
-    STensorOperation::multSTensor3FirstTranspose(F,F,FTF);
-    return 0.5*FTF(1,2);
+    return 0.5*(F(0,1)*F(0,2)+F(1,1)*F(1,2)+F(2,1)*F(2,2));
   }
   else if (comp == IPField::GL_ZZ){
-    static STensor3 FTF;
-    STensorOperation::multSTensor3FirstTranspose(F,F,FTF);
-    return 0.5*(FTF(2,2)-1.);
+    return 0.5*(F(0,2)*F(0,2)+F(1,2)*F(1,2)+F(2,2)*F(2,2) - 1.);
   }
   else if (comp == IPField::LOCAL_0){
     if (getNumberNonLocalVariable()>0){
@@ -748,8 +781,83 @@ void dG3DIPVariable::restart()
   if(_constitutiveExtraDofDiffusionData!=NULL)
     _constitutiveExtraDofDiffusionData->restart();
   return;
+};
+
+ANNBasedDG3DIPVariable::ANNBasedDG3DIPVariable(const int n, const bool oninter): dG3DIPVariable(oninter),_internalVars(n)
+{
+
+};
+ANNBasedDG3DIPVariable::ANNBasedDG3DIPVariable(const ANNBasedDG3DIPVariable &source):dG3DIPVariable(source),_internalVars(source._internalVars){};
+ANNBasedDG3DIPVariable& ANNBasedDG3DIPVariable::operator =(const IPVariable& src)
+{
+  dG3DIPVariable::operator=(src);
+  const ANNBasedDG3DIPVariable* psrc = dynamic_cast<const ANNBasedDG3DIPVariable*>(&src);
+  if (psrc!=NULL)
+  {
+    _internalVars = psrc->_internalVars;
+  }
+  return *this;
 }
+ANNBasedDG3DIPVariable::~ANNBasedDG3DIPVariable(){};
+
+void ANNBasedDG3DIPVariable::restart()
+{
+  dG3DIPVariable::restart();
+  restartManager::restart(_internalVars.getDataPtr(),_internalVars.size());
+};
 
+double ANNBasedDG3DIPVariable::get(const int comp) const
+{
+  if (comp == IPField::USER1)
+  {
+    if (_internalVars.size() > 1) return _internalVars(0);
+    else return 0.;
+  }
+  else if (comp == IPField::USER2)
+  {
+    if (_internalVars.size() > 2) return _internalVars(1);
+    else return 0.;
+  }
+  else if (comp == IPField::USER3)
+  {
+    if (_internalVars.size() > 3) return _internalVars(2);
+    else return 0.;
+  }
+  else if (comp == IPField::USER4)
+  {
+    if (_internalVars.size() > 4) return _internalVars(3);
+    else return 0.;
+  }
+  else if (comp == IPField::USER5)
+  {
+    if (_internalVars.size() > 5) return _internalVars(4);
+    else return 0.;
+  }
+  else if (comp == IPField::USER6)
+  {
+    if (_internalVars.size() > 6) return _internalVars(5);
+    else return 0.;
+  }
+  else if (comp == IPField::USER7)
+  {
+    if (_internalVars.size() > 7) return _internalVars(6);
+    else return 0.;
+  }
+  else if (comp == IPField::USER8)
+  {
+    if (_internalVars.size() > 8) return _internalVars(7);
+    else return 0.;
+  }
+  else if (comp == IPField::USER9)
+  {
+    if (_internalVars.size() > 9) return _internalVars(8);
+    else return 0.;
+  }
+  else
+  {
+    return dG3DIPVariable::get(comp);
+  }
+}
 J2SmallStrainDG3DIPVariable::J2SmallStrainDG3DIPVariable(const mlawJ2VMSmallStrain&_j2law, const bool oninter) : dG3DIPVariable(oninter)
 {
   _j2ipv = new   IPJ2linear(_j2law.getJ2IsotropicHardening());
@@ -791,6 +899,16 @@ double J2SmallStrainDG3DIPVariable::get(const int comp) const
   {
     return _j2ipv->_j2lepspbarre;
   }
+  else if (comp == IPField::ISO_YIELD or
+           comp == IPField::ISO_YIELD_TENSILE or
+           comp == IPField::ISO_YIELD_COMPRESSION)
+  {
+    return _j2ipv->getConstRefToIPJ2IsotropicHardening().getR();
+  }
+  else if (comp == IPField::ISO_YIELD_SHEAR)
+  {
+    return (_j2ipv->getConstRefToIPJ2IsotropicHardening().getR())/sqrt(3.);
+  }
   else
   {
     return dG3DIPVariable::get(comp);
@@ -888,6 +1006,16 @@ double J2LinearDG3DIPVariable::get(const int comp) const
   {
     return _j2ipv->_j2lepsp(2,2);
   }
+  else if (comp == IPField::ISO_YIELD or
+           comp == IPField::ISO_YIELD_TENSILE or
+           comp == IPField::ISO_YIELD_COMPRESSION)
+  {
+    return _j2ipv->getConstRefToIPJ2IsotropicHardening().getR();
+  }
+  else if (comp == IPField::ISO_YIELD_SHEAR)
+  {
+    return (_j2ipv->getConstRefToIPJ2IsotropicHardening().getR())/sqrt(3.);
+  }
   else
   {
     return dG3DIPVariable::get(comp);
@@ -953,7 +1081,6 @@ HyperViscoElastoPlasticdG3DIPVariable::HyperViscoElastoPlasticdG3DIPVariable(con
       dG3DIPVariable(oninter){
   _ipViscoElastoPlastic = new IPHyperViscoElastoPlastic(viscoEPLaw.getConstRefToCompressionHardening(),
                                             viscoEPLaw.getConstRefToTractionHardening(),
-                                            viscoEPLaw.getConstRefToShearHardening(),
                                             viscoEPLaw.getConstRefToKinematicHardening(),
                                             viscoEPLaw.getViscoElasticNumberOfElement());
 };
@@ -987,10 +1114,58 @@ double HyperViscoElastoPlasticdG3DIPVariable::get(const int comp) const
   if(comp == IPField::PLASTICSTRAIN)
   {
     return _ipViscoElastoPlastic->getConstRefToEqPlasticStrain();
+  }
+   else if(comp == IPField::FP_XX)
+  {
+    return _ipViscoElastoPlastic->getConstRefToFp()(0,0);
+  }
+  else if(comp == IPField::FP_XY)
+  {
+    return _ipViscoElastoPlastic->getConstRefToFp()(0,1);
+  }
+  else if(comp == IPField::FP_XZ)
+  {
+    return _ipViscoElastoPlastic->getConstRefToFp()(0,2);
+  }
+  else if(comp == IPField::FP_YX)
+  {
+    return _ipViscoElastoPlastic->getConstRefToFp()(1,0);
+  }
+  else if(comp == IPField::FP_YY)
+  {
+    return _ipViscoElastoPlastic->getConstRefToFp()(1,1);
+  }
+  else if(comp == IPField::FP_YZ)
+  {
+    return _ipViscoElastoPlastic->getConstRefToFp()(1,2);
+  }
+  else if(comp == IPField::FP_ZX)
+  {
+    return _ipViscoElastoPlastic->getConstRefToFp()(2,0);
+  }
+  else if(comp == IPField::FP_ZY)
+  {
+    return _ipViscoElastoPlastic->getConstRefToFp()(2,1);
+  }
+  else if(comp == IPField::FP_ZZ)
+  {
+    return _ipViscoElastoPlastic->getConstRefToFp()(2,2);
   }
   else if (comp == IPField::PLASTIC_POISSON_RATIO){
     return _ipViscoElastoPlastic->getConstRefToPlasticPoissonRatio();
   }
+  else if (comp == IPField::ISO_YIELD_COMPRESSION)
+  {
+    return _ipViscoElastoPlastic->getConstRefToIPCompressionHardening().getR();
+  }
+  else if (comp == IPField::ISO_YIELD_TENSILE)
+  {
+    return _ipViscoElastoPlastic->getConstRefToIPTractionHardening().getR();
+  }
+  else if (comp == IPField::KIN_YIELD)
+  {
+    return _ipViscoElastoPlastic->getConstRefToKinematicHardening().getR();
+  }
   else
   {
     return dG3DIPVariable::get(comp);
@@ -1628,6 +1803,68 @@ void ClusterDG3DIPVariable::restart()
   return;
 }
 
+//
+
+TFADG3DIPVariable::TFADG3DIPVariable(IPTFA* ipc, const bool oninter) : dG3DIPVariable(oninter)
+{
+  _tfaipv=ipc;
+}
+
+TFADG3DIPVariable::TFADG3DIPVariable(const TFADG3DIPVariable &source) : dG3DIPVariable(source)
+{
+  _tfaipv = NULL;
+  if (source.getIPTFA() != NULL){
+    _tfaipv = new IPTFA(*(source.getIPTFA()));
+  }
+}
+
+TFADG3DIPVariable& TFADG3DIPVariable::operator=(const IPVariable &source)
+{
+  dG3DIPVariable::operator=(source);
+  const TFADG3DIPVariable* src = dynamic_cast<const TFADG3DIPVariable*>(&source);
+  if(src != NULL)
+    _tfaipv->operator=(*(dynamic_cast<const IPVariable*>( src->_tfaipv )));
+  return *this;
+}
+double TFADG3DIPVariable::get(const int comp) const
+{
+  if(comp == IPField::PLASTICSTRAIN)
+  {
+    //return _tfaipv->_plasticstrain_eq;
+    return 0.;
+  }
+  else
+  {
+    return dG3DIPVariable::get(comp);
+  }
+}
+std::vector<double> TFADG3DIPVariable::getv(const int comp) const
+{
+  if(comp == IPField::PLASTICSTRAIN)
+  {
+    return _tfaipv->_plasticstrain_eq;
+  }
+  //else
+  //{
+    //return dG3DIPVariable::getv(comp);
+  //}
+}
+double TFADG3DIPVariable::defoEnergy() const
+{
+  return getIPTFA()->defoEnergy();
+}
+double  TFADG3DIPVariable::plasticEnergy() const
+{
+  return getIPTFA()->plasticEnergy();
+}
+
+void TFADG3DIPVariable::restart()
+{
+  dG3DIPVariable::restart();
+  _tfaipv->restart();
+  return;
+}
+
 
 /*
 ExtraDofDiffusionDG3DIPVariableBase::ExtraDofDiffusionDG3DIPVariableBase( const bool oninter) : dG3DIPVariable(oninter),
@@ -2182,6 +2419,72 @@ void crystalPlasticityDG3DIPVariable::restart()
 
 //
 
+//
+gursonUMATDG3DIPVariable::gursonUMATDG3DIPVariable(int _nsdv, double size, const bool oninter) : dG3DIPVariable(oninter,0)
+{
+  _ipv = new IPGursonUMAT(_nsdv,size);
+}
+
+gursonUMATDG3DIPVariable::gursonUMATDG3DIPVariable(const gursonUMATDG3DIPVariable &source) :
+                                                                   dG3DIPVariable(source)
+{
+  _ipv = NULL;
+  if (source.getIPGursonUMAT() != NULL){
+    _ipv = new IPGursonUMAT((int)source.getIPGursonUMAT()->getNsdv(),(double)source.getIPGursonUMAT()->elementSize());
+    _ipv->operator= (*dynamic_cast<const IPVariable*>(source.getIPGursonUMAT()));
+  }
+
+}
+
+gursonUMATDG3DIPVariable& gursonUMATDG3DIPVariable::operator=(const IPVariable &source)
+{
+  dG3DIPVariable::operator=(source);
+  const gursonUMATDG3DIPVariable* src = dynamic_cast<const gursonUMATDG3DIPVariable*>(&source);
+  if(src != NULL)
+  {
+    if (src->getIPGursonUMAT() != NULL){
+      if (_ipv != NULL){
+        _ipv->operator=(*dynamic_cast<const IPVariable*>(src->getIPGursonUMAT()));
+      }
+      else{
+        _ipv = dynamic_cast<IPGursonUMAT*>(src->getIPGursonUMAT()->clone());
+      }
+    }
+    else{
+      if (_ipv != NULL){
+        delete _ipv;
+        _ipv = NULL;
+      }
+    }
+  }
+  return *this;
+}
+double gursonUMATDG3DIPVariable::get(const int i) const
+{
+  double val = dG3DIPVariable::get(i);
+  if (val == 0)
+    val = getIPGursonUMAT()->get(i);
+  return val;
+}
+double gursonUMATDG3DIPVariable::defoEnergy() const
+{
+  return getIPGursonUMAT()->defoEnergy();
+}
+double gursonUMATDG3DIPVariable::plasticEnergy() const
+{
+  return getIPGursonUMAT()->plasticEnergy();
+}
+
+
+void gursonUMATDG3DIPVariable::restart()
+{
+  dG3DIPVariable::restart();
+  if (_ipv != NULL)
+    restartManager::restart(_ipv);
+  return;
+}
+
+//
 ElecTherMechDG3DIPVariableBase::ElecTherMechDG3DIPVariableBase( const bool oninter) : dG3DIPVariable(oninter,0,2,true,true)
 
 {
diff --git a/dG3D/src/dG3DIPVariable.h b/dG3D/src/dG3DIPVariable.h
index f0b37b756aca2b455623aa3189c210a4f47d50e9..e61ab1a52a83f353281ecf44232893cd306a53f3 100644
--- a/dG3D/src/dG3DIPVariable.h
+++ b/dG3D/src/dG3DIPVariable.h
@@ -24,12 +24,14 @@
 #include "ipAnisotropic.h"
 #include "ipAnisotropicStoch.h"
 #include "ipCluster.h"
+#include "ipTFA.h"
 #include "ipFiniteStrain.h"
 #include "ipJ2ThermoMechanics.h"
 #include "ipLinearThermoMechanics.h"
 #include "ipSMP.h"
 #include "ipEOS.h"
 #include "ipCrystalPlasticity.h"
+#include "ipGursonUMAT.h"
 #include "ipViscoelastic.h"
 #include "ipAnIsotropicElecTherMech.h"
 #include "ipLinearElecTherMech.h"
@@ -1245,6 +1247,27 @@ protected:
   virtual void restart();
 };
 
+class ANNBasedDG3DIPVariable :public dG3DIPVariable
+{
+  protected:
+    fullVector<double> _internalVars;
+
+  public:
+    ANNBasedDG3DIPVariable(const int n, const bool oninter=false);
+    ANNBasedDG3DIPVariable(const ANNBasedDG3DIPVariable &source);
+    virtual ANNBasedDG3DIPVariable& operator =(const IPVariable& src);
+    virtual ~ANNBasedDG3DIPVariable();
+
+    virtual const fullVector<double>& getConstRefToInternalVariables() const {return _internalVars;};
+    virtual fullVector<double>& getRefToInternalVariables() {return _internalVars;};
+
+    virtual IPVariable* getInternalData() {return NULL;};
+    virtual const IPVariable* getInternalData()  const {return NULL;};
+    virtual IPVariable* clone() const {return new ANNBasedDG3DIPVariable(*this);};
+    virtual double get(const int comp) const;
+    virtual void restart();
+};
+
 class LinearElasticDG3DIPVariable :public dG3DIPVariable{
   protected:
 
@@ -1825,6 +1848,40 @@ class ClusterDG3DIPVariable : public dG3DIPVariable // or store data in a differ
   virtual IPVariable* clone() const {return new ClusterDG3DIPVariable(*this);};
   virtual void restart();
 };
+
+
+class TFADG3DIPVariable : public dG3DIPVariable // or store data in a different way
+{
+ protected:
+  IPTFA *_tfaipv;
+ public:
+  TFADG3DIPVariable(IPTFA* ipc, const bool oninter=false);
+  TFADG3DIPVariable(const TFADG3DIPVariable &source);
+  virtual TFADG3DIPVariable& operator=(const IPVariable &source);
+
+  virtual void setLocation(const IPVariable::LOCATION loc) {
+    dG3DIPVariable::setLocation(loc);
+    _tfaipv->setLocation(loc);
+  };
+  virtual ~TFADG3DIPVariable()
+  {
+    if (_tfaipv) delete _tfaipv;
+    _tfaipv = NULL;
+  }
+  virtual IPVariable* getInternalData() {return _tfaipv;};
+  virtual const IPVariable* getInternalData()  const {return _tfaipv;};
+
+ /* specific function */
+  IPTFA* getIPTFA(){return _tfaipv;}
+  const IPTFA* getIPTFA() const{return _tfaipv;}
+  virtual double get(const int i) const;
+  virtual std::vector<double> getv(const int i) const;
+  virtual double defoEnergy() const;
+  virtual double plasticEnergy() const;
+  virtual double damageEnergy() const {return _tfaipv->damageEnergy();};
+  virtual IPVariable* clone() const {return new TFADG3DIPVariable(*this);};
+  virtual void restart();
+};
 /*
 class ExtraDofDiffusionDG3DIPVariableBase : public dG3DIPVariable
 {
@@ -2259,13 +2316,58 @@ class crystalPlasticityDG3DIPVariable : public dG3DIPVariable
   virtual void restart();
 };
 
+class gursonUMATDG3DIPVariable : public dG3DIPVariable
+{
+
+ protected:
+  IPGursonUMAT *_ipv;
+
+ public:
+  gursonUMATDG3DIPVariable(int _nsdv, double size, const bool oninter=false);
+  gursonUMATDG3DIPVariable(const gursonUMATDG3DIPVariable &source);
+  virtual gursonUMATDG3DIPVariable& operator=(const IPVariable &source);
+
+ /* specific function */
+  IPGursonUMAT* getIPGursonUMAT(){return _ipv;}
+  const IPGursonUMAT* getIPGursonUMAT() const{return _ipv;}
+  virtual ~gursonUMATDG3DIPVariable()
+  {
+    if (_ipv) delete _ipv;
+    _ipv = NULL;
+  }
+
+  virtual void setLocation(const IPVariable::LOCATION loc) {
+    dG3DIPVariable::setLocation(loc);
+    if (_ipv)
+      _ipv->setLocation(loc);
+  };
+
+  virtual IPVariable* getInternalData() {return _ipv;};
+  virtual const IPVariable* getInternalData()  const {return _ipv;};
+
+  virtual bool dissipationIsActive() const {return _ipv->dissipationIsActive();};
+
+  virtual void blockDissipation(const bool fl){if (_ipv) _ipv->blockDissipation(fl);};
+  virtual bool dissipationIsBlocked() const {
+    if (_ipv) return _ipv->dissipationIsBlocked();
+    else return false;
+  }
+
+  virtual double get(const int i) const;
+  virtual double defoEnergy() const;
+  virtual double plasticEnergy() const;
+
+  virtual IPVariable* clone() const {return new gursonUMATDG3DIPVariable(*this);};
+  virtual void restart();
+};
+
 
 class ElecTherMechDG3DIPVariableBase : public dG3DIPVariable
 {
 
  protected:
 
- // double                       Temperature;
+ // double                      Temperature;
  //SVector3                     gradT;
  //SVector3                     fluxT;
  //STensor3                     dPdT;
diff --git a/dG3D/src/dG3DMaterialLaw.cpp b/dG3D/src/dG3DMaterialLaw.cpp
index 43571f11a295bb40f407b0c7767ce114e90b73be..468651373bf9fda4a68ecccd7bd1bb4c0f585a41 100644
--- a/dG3D/src/dG3DMaterialLaw.cpp
+++ b/dG3D/src/dG3DMaterialLaw.cpp
@@ -138,7 +138,7 @@ void dG3DLinearElasticMaterialLaw::createIPVariable(IPVariable* &ipv,const MElem
 }
 
 
-void dG3DLinearElasticMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac)
+void dG3DLinearElasticMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac, const bool dTangent)
 {
   /* get ipvariable */
   dG3DIPVariableBase* ipvcur = static_cast<dG3DIPVariableBase*>(ipv);;
@@ -164,6 +164,364 @@ double dG3DLinearElasticMaterialLaw::soundSpeed() const
   return sqrt(E*factornu/_rho);
 };
 
+
+ANNBasedDG3DMaterialLaw::ANNBasedDG3DMaterialLaw(const int num, const double rho, const int numInternalVars, const MIMOFunction& fct):
+  dG3DMaterialLaw(num,rho,false),_numberOfInternalVariables(numInternalVars)
+{
+  _mimoFct = fct.clone();
+};
+ANNBasedDG3DMaterialLaw::ANNBasedDG3DMaterialLaw(const ANNBasedDG3DMaterialLaw& src):
+      dG3DMaterialLaw(src), _numberOfInternalVariables(src._numberOfInternalVariables)
+{
+  _mimoFct = NULL;
+  if (src._mimoFct!=NULL)
+  {
+    _mimoFct = src._mimoFct->clone();
+  }
+}
+ANNBasedDG3DMaterialLaw::~ANNBasedDG3DMaterialLaw()
+{
+  if (_mimoFct!=NULL)
+  {
+    delete _mimoFct;
+    _mimoFct = NULL;
+  }
+}
+
+void ANNBasedDG3DMaterialLaw::initLaws(const std::map<int,materialLaw*> &maplaw){
+	if (!_initialized){
+    fullVector<double> E, q0,q1,S;
+    fullMatrix<double> DSDE;
+    E.resize(6);
+    if (_numberOfInternalVariables>0)
+    {
+      q0.resize(_numberOfInternalVariables);
+      q1.resize(_numberOfInternalVariables);
+    }
+
+    S.resize(6);
+    DSDE.resize(6,6);
+    if (!_mimoFct)
+    {
+      Msg::Error("embeded function does not exist in ANNBasedDG3DMaterialLaw ");
+      Msg::Exit(0);
+    }
+     _mimoFct->predict(E,q0,q1,S,true,&DSDE);
+
+    elasticStiffness(0,0,0,0) = DSDE(0,0);
+    elasticStiffness(0,0,1,1) = DSDE(0,1);
+    elasticStiffness(0,0,2,2) = DSDE(0,2);
+    elasticStiffness(0,0,0,1) = 0.5*DSDE(0,3);
+    elasticStiffness(0,0,1,0) = 0.5*DSDE(0,3);
+    elasticStiffness(0,0,0,2) = 0.5*DSDE(0,4);
+    elasticStiffness(0,0,2,0) = 0.5*DSDE(0,4);
+    elasticStiffness(0,0,1,2) = 0.5*DSDE(0,5);
+    elasticStiffness(0,0,2,1) = 0.5*DSDE(0,5);
+
+    elasticStiffness(1,1,0,0) = DSDE(1,0);
+    elasticStiffness(1,1,1,1) = DSDE(1,1);
+    elasticStiffness(1,1,2,2) = DSDE(1,2);
+    elasticStiffness(1,1,0,1) = 0.5*DSDE(1,3);
+    elasticStiffness(1,1,1,0) = 0.5*DSDE(1,3);
+    elasticStiffness(1,1,0,2) = 0.5*DSDE(1,4);
+    elasticStiffness(1,1,2,0) = 0.5*DSDE(1,4);
+    elasticStiffness(1,1,1,2) = 0.5*DSDE(1,5);
+    elasticStiffness(1,1,2,1) = 0.5*DSDE(1,5);
+
+    elasticStiffness(2,2,0,0) = DSDE(2,0);
+    elasticStiffness(2,2,1,1) = DSDE(2,1);
+    elasticStiffness(2,2,2,2) = DSDE(2,2);
+    elasticStiffness(2,2,0,1) = 0.5*DSDE(2,3);
+    elasticStiffness(2,2,1,0) = 0.5*DSDE(2,3);
+    elasticStiffness(2,2,0,2) = 0.5*DSDE(2,4);
+    elasticStiffness(2,2,2,0) = 0.5*DSDE(2,4);
+    elasticStiffness(2,2,1,2) = 0.5*DSDE(2,5);
+    elasticStiffness(2,2,2,1) = 0.5*DSDE(2,5);
+
+    elasticStiffness(0,1,0,0) = DSDE(3,0);
+    elasticStiffness(0,1,1,1) = DSDE(3,1);
+    elasticStiffness(0,1,2,2) = DSDE(3,2);
+    elasticStiffness(0,1,0,1) = 0.5*DSDE(3,3);
+    elasticStiffness(0,1,1,0) = 0.5*DSDE(3,3);
+    elasticStiffness(0,1,0,2) = 0.5*DSDE(3,4);
+    elasticStiffness(0,1,2,0) = 0.5*DSDE(3,4);
+    elasticStiffness(0,1,1,2) = 0.5*DSDE(3,5);
+    elasticStiffness(0,1,2,1) = 0.5*DSDE(3,5);
+
+    elasticStiffness(1,0,0,0) = DSDE(3,0);
+    elasticStiffness(1,0,1,1) = DSDE(3,1);
+    elasticStiffness(1,0,2,2) = DSDE(3,2);
+    elasticStiffness(1,0,0,1) = 0.5*DSDE(3,3);
+    elasticStiffness(1,0,1,0) = 0.5*DSDE(3,3);
+    elasticStiffness(1,0,0,2) = 0.5*DSDE(3,4);
+    elasticStiffness(1,0,2,0) = 0.5*DSDE(3,4);
+    elasticStiffness(1,0,1,2) = 0.5*DSDE(3,5);
+    elasticStiffness(1,0,2,1) = 0.5*DSDE(3,5);
+
+    elasticStiffness(0,2,0,0) = DSDE(4,0);
+    elasticStiffness(0,2,1,1) = DSDE(4,1);
+    elasticStiffness(0,2,2,2) = DSDE(4,2);
+    elasticStiffness(0,2,0,1) = 0.5*DSDE(4,3);
+    elasticStiffness(0,2,1,0) = 0.5*DSDE(4,3);
+    elasticStiffness(0,2,0,2) = 0.5*DSDE(4,4);
+    elasticStiffness(0,2,2,0) = 0.5*DSDE(4,4);
+    elasticStiffness(0,2,1,2) = 0.5*DSDE(4,5);
+    elasticStiffness(0,2,2,1) = 0.5*DSDE(4,5);
+
+    elasticStiffness(2,0,0,0) = DSDE(4,0);
+    elasticStiffness(2,0,1,1) = DSDE(4,1);
+    elasticStiffness(2,0,2,2) = DSDE(4,2);
+    elasticStiffness(2,0,0,1) = 0.5*DSDE(4,3);
+    elasticStiffness(2,0,1,0) = 0.5*DSDE(4,3);
+    elasticStiffness(2,0,0,2) = 0.5*DSDE(4,4);
+    elasticStiffness(2,0,2,0) = 0.5*DSDE(4,4);
+    elasticStiffness(2,0,1,2) = 0.5*DSDE(4,5);
+    elasticStiffness(2,0,2,1) = 0.5*DSDE(4,5);
+
+    elasticStiffness(1,2,0,0) = DSDE(5,0);
+    elasticStiffness(1,2,1,1) = DSDE(5,1);
+    elasticStiffness(1,2,2,2) = DSDE(5,2);
+    elasticStiffness(1,2,0,1) = 0.5*DSDE(5,3);
+    elasticStiffness(1,2,1,0) = 0.5*DSDE(5,3);
+    elasticStiffness(1,2,0,2) = 0.5*DSDE(5,4);
+    elasticStiffness(1,2,2,0) = 0.5*DSDE(5,4);
+    elasticStiffness(1,2,1,2) = 0.5*DSDE(5,5);
+    elasticStiffness(1,2,2,1) = 0.5*DSDE(5,5);
+
+    elasticStiffness(2,1,0,0) = DSDE(5,0);
+    elasticStiffness(2,1,1,1) = DSDE(5,1);
+    elasticStiffness(2,1,2,2) = DSDE(5,2);
+    elasticStiffness(2,1,0,1) = 0.5*DSDE(5,3);
+    elasticStiffness(2,1,1,0) = 0.5*DSDE(5,3);
+    elasticStiffness(2,1,0,2) = 0.5*DSDE(5,4);
+    elasticStiffness(2,1,2,0) = 0.5*DSDE(5,4);
+    elasticStiffness(2,1,1,2) = 0.5*DSDE(5,5);
+    elasticStiffness(2,1,2,1) = 0.5*DSDE(5,5);
+		_initialized = true;
+	};
+};
+
+
+void ANNBasedDG3DMaterialLaw::createIPState(IPStateBase* &ips,const bool* state_,const MElement *ele, const int nbFF_, const IntPt *GP, const int gpt) const
+{
+  // check interface element
+  bool inter=true;
+  const MInterfaceElement *iele = dynamic_cast<const MInterfaceElement*>(ele);
+  if(iele==NULL) inter=false;
+  IPVariable* ipvi = new  ANNBasedDG3DIPVariable(_numberOfInternalVariables,inter);
+  IPVariable* ipv1 = new  ANNBasedDG3DIPVariable(_numberOfInternalVariables,inter);
+  IPVariable* ipv2 = new  ANNBasedDG3DIPVariable(_numberOfInternalVariables,inter);
+  if(ips != NULL) delete ips;
+  ips = new IP3State(state_,ipvi,ipv1,ipv2);
+}
+
+void ANNBasedDG3DMaterialLaw::createIPVariable(IPVariable* &ipv,const MElement *ele, const int nbFF_, const IntPt *GP, const int gpt) const
+{
+  if(ipv !=NULL) delete ipv;
+  bool inter=true;
+  const MInterfaceElement *iele = dynamic_cast<const MInterfaceElement*>(ele);
+  if(iele == NULL){
+    inter=false;
+  }
+  ipv = new  ANNBasedDG3DIPVariable(_numberOfInternalVariables,inter);
+}
+
+
+void ANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac, const bool dTangent)
+{
+  /* get ipvariable */
+  ANNBasedDG3DIPVariable* ipvcur = static_cast<ANNBasedDG3DIPVariable*>(ipv);;
+  const ANNBasedDG3DIPVariable* ipvprev = static_cast<const ANNBasedDG3DIPVariable*>(ipvp);;
+
+  static fullVector<double> E1,S,other,q1;
+  static fullMatrix<double> DSDE;
+  // get input
+  getInputData(ipvcur,ipvprev,E1,other);
+  // evaluate
+  _mimoFct->predict(E1,other,q1,S,stiff,&DSDE);
+  // update data
+  setIPvDataFromOutputData(ipvcur,ipvprev,q1,S,stiff,&DSDE);
+  ipvcur->setRefToDGElasticTangentModuli(this->elasticStiffness);
+};
+
+double ANNBasedDG3DMaterialLaw::soundSpeed() const
+{
+  Msg::Error("ANNBasedDG3DMaterialLaw::soundSpeed is not defined !!!");
+  return 0.;
+};
+
+void ANNBasedDG3DMaterialLaw::getInputData(const ANNBasedDG3DIPVariable* ipv,
+                              const ANNBasedDG3DIPVariable* ipvprev,
+                              fullVector<double>& E,
+                              fullVector<double>& other) const
+{
+  const STensor3& F = ipv->getConstRefToDeformationGradient();
+  const fullVector<double>& qPrev = ipvprev->getConstRefToInternalVariables();
+
+  // input E00, E11, E22, E01, E02, E12
+  if (E.size() != 6)
+  {
+    E.resize(6);
+  }
+  //
+  static STensor3 FTF;
+  STensorOperation::multSTensor3FirstTranspose(F,F,FTF);
+  // Green-Lagrange strain
+  E(0) = 0.5*(FTF(0,0)-1.);
+  E(1) = 0.5*(FTF(1,1)-1.);
+  E(2) = 0.5*(FTF(2,2)-1.);
+  E(3) = 0.5*FTF(0,1);
+  E(4) = 0.5*FTF(0,2);
+  E(5) = 0.5*FTF(1,2);
+  // get other input data
+  //other = qPrev;
+};
+void ANNBasedDG3DMaterialLaw::setIPvDataFromOutputData(ANNBasedDG3DIPVariable* ipv,
+                                          const ANNBasedDG3DIPVariable* ipvprev,
+                                          const fullVector<double>& q,
+                                          const fullVector<double>& S,
+                                          bool stiff,
+                                          const fullMatrix<double>* DSDE) const
+{
+  // output is S00, S11, S22, S01, S02, S12, DSDC
+  static STensor3 secondPK;
+  secondPK(0,0) = S(0);
+  secondPK(1,1) = S(1);
+  secondPK(2,2) = S(2);
+  secondPK(0,1) = S(3);
+  secondPK(1,0) = S(3);
+  secondPK(0,2) = S(4);
+  secondPK(2,0) = S(4);
+  secondPK(1,2) = S(5);
+  secondPK(2,1) = S(5);
+  // update internal data
+  ipv->getRefToInternalVariables() = q;
+  //
+  const STensor3& F = ipv->getConstRefToDeformationGradient();
+  STensor3& P = ipv->getRefToFirstPiolaKirchhoffStress();
+  STensorOperation::multSTensor3(F,secondPK,P);
+
+  if (stiff)
+  {
+    static STensor43 DsecondPKDEGL;
+    DsecondPKDEGL(0,0,0,0) = (*DSDE)(0,0);
+    DsecondPKDEGL(0,0,1,1) = (*DSDE)(0,1);
+    DsecondPKDEGL(0,0,2,2) = (*DSDE)(0,2);
+    DsecondPKDEGL(0,0,0,1) = 0.5*(*DSDE)(0,3);
+    DsecondPKDEGL(0,0,1,0) = 0.5*(*DSDE)(0,3);
+    DsecondPKDEGL(0,0,0,2) = 0.5*(*DSDE)(0,4);
+    DsecondPKDEGL(0,0,2,0) = 0.5*(*DSDE)(0,4);
+    DsecondPKDEGL(0,0,1,2) = 0.5*(*DSDE)(0,5);
+    DsecondPKDEGL(0,0,2,1) = 0.5*(*DSDE)(0,5);
+
+    DsecondPKDEGL(1,1,0,0) = (*DSDE)(1,0);
+    DsecondPKDEGL(1,1,1,1) = (*DSDE)(1,1);
+    DsecondPKDEGL(1,1,2,2) = (*DSDE)(1,2);
+    DsecondPKDEGL(1,1,0,1) = 0.5*(*DSDE)(1,3);
+    DsecondPKDEGL(1,1,1,0) = 0.5*(*DSDE)(1,3);
+    DsecondPKDEGL(1,1,0,2) = 0.5*(*DSDE)(1,4);
+    DsecondPKDEGL(1,1,2,0) = 0.5*(*DSDE)(1,4);
+    DsecondPKDEGL(1,1,1,2) = 0.5*(*DSDE)(1,5);
+    DsecondPKDEGL(1,1,2,1) = 0.5*(*DSDE)(1,5);
+
+    DsecondPKDEGL(2,2,0,0) = (*DSDE)(2,0);
+    DsecondPKDEGL(2,2,1,1) = (*DSDE)(2,1);
+    DsecondPKDEGL(2,2,2,2) = (*DSDE)(2,2);
+    DsecondPKDEGL(2,2,0,1) = 0.5*(*DSDE)(2,3);
+    DsecondPKDEGL(2,2,1,0) = 0.5*(*DSDE)(2,3);
+    DsecondPKDEGL(2,2,0,2) = 0.5*(*DSDE)(2,4);
+    DsecondPKDEGL(2,2,2,0) = 0.5*(*DSDE)(2,4);
+    DsecondPKDEGL(2,2,1,2) = 0.5*(*DSDE)(2,5);
+    DsecondPKDEGL(2,2,2,1) = 0.5*(*DSDE)(2,5);
+
+    DsecondPKDEGL(0,1,0,0) = (*DSDE)(3,0);
+    DsecondPKDEGL(0,1,1,1) = (*DSDE)(3,1);
+    DsecondPKDEGL(0,1,2,2) = (*DSDE)(3,2);
+    DsecondPKDEGL(0,1,0,1) = 0.5*(*DSDE)(3,3);
+    DsecondPKDEGL(0,1,1,0) = 0.5*(*DSDE)(3,3);
+    DsecondPKDEGL(0,1,0,2) = 0.5*(*DSDE)(3,4);
+    DsecondPKDEGL(0,1,2,0) = 0.5*(*DSDE)(3,4);
+    DsecondPKDEGL(0,1,1,2) = 0.5*(*DSDE)(3,5);
+    DsecondPKDEGL(0,1,2,1) = 0.5*(*DSDE)(3,5);
+
+    DsecondPKDEGL(1,0,0,0) = (*DSDE)(3,0);
+    DsecondPKDEGL(1,0,1,1) = (*DSDE)(3,1);
+    DsecondPKDEGL(1,0,2,2) = (*DSDE)(3,2);
+    DsecondPKDEGL(1,0,0,1) = 0.5*(*DSDE)(3,3);
+    DsecondPKDEGL(1,0,1,0) = 0.5*(*DSDE)(3,3);
+    DsecondPKDEGL(1,0,0,2) = 0.5*(*DSDE)(3,4);
+    DsecondPKDEGL(1,0,2,0) = 0.5*(*DSDE)(3,4);
+    DsecondPKDEGL(1,0,1,2) = 0.5*(*DSDE)(3,5);
+    DsecondPKDEGL(1,0,2,1) = 0.5*(*DSDE)(3,5);
+
+    DsecondPKDEGL(0,2,0,0) = (*DSDE)(4,0);
+    DsecondPKDEGL(0,2,1,1) = (*DSDE)(4,1);
+    DsecondPKDEGL(0,2,2,2) = (*DSDE)(4,2);
+    DsecondPKDEGL(0,2,0,1) = 0.5*(*DSDE)(4,3);
+    DsecondPKDEGL(0,2,1,0) = 0.5*(*DSDE)(4,3);
+    DsecondPKDEGL(0,2,0,2) = 0.5*(*DSDE)(4,4);
+    DsecondPKDEGL(0,2,2,0) = 0.5*(*DSDE)(4,4);
+    DsecondPKDEGL(0,2,1,2) = 0.5*(*DSDE)(4,5);
+    DsecondPKDEGL(0,2,2,1) = 0.5*(*DSDE)(4,5);
+
+    DsecondPKDEGL(2,0,0,0) = (*DSDE)(4,0);
+    DsecondPKDEGL(2,0,1,1) = (*DSDE)(4,1);
+    DsecondPKDEGL(2,0,2,2) = (*DSDE)(4,2);
+    DsecondPKDEGL(2,0,0,1) = 0.5*(*DSDE)(4,3);
+    DsecondPKDEGL(2,0,1,0) = 0.5*(*DSDE)(4,3);
+    DsecondPKDEGL(2,0,0,2) = 0.5*(*DSDE)(4,4);
+    DsecondPKDEGL(2,0,2,0) = 0.5*(*DSDE)(4,4);
+    DsecondPKDEGL(2,0,1,2) = 0.5*(*DSDE)(4,5);
+    DsecondPKDEGL(2,0,2,1) = 0.5*(*DSDE)(4,5);
+
+    DsecondPKDEGL(1,2,0,0) = (*DSDE)(5,0);
+    DsecondPKDEGL(1,2,1,1) = (*DSDE)(5,1);
+    DsecondPKDEGL(1,2,2,2) = (*DSDE)(5,2);
+    DsecondPKDEGL(1,2,0,1) = 0.5*(*DSDE)(5,3);
+    DsecondPKDEGL(1,2,1,0) = 0.5*(*DSDE)(5,3);
+    DsecondPKDEGL(1,2,0,2) = 0.5*(*DSDE)(5,4);
+    DsecondPKDEGL(1,2,2,0) = 0.5*(*DSDE)(5,4);
+    DsecondPKDEGL(1,2,1,2) = 0.5*(*DSDE)(5,5);
+    DsecondPKDEGL(1,2,2,1) = 0.5*(*DSDE)(5,5);
+
+    DsecondPKDEGL(2,1,0,0) = (*DSDE)(5,0);
+    DsecondPKDEGL(2,1,1,1) = (*DSDE)(5,1);
+    DsecondPKDEGL(2,1,2,2) = (*DSDE)(5,2);
+    DsecondPKDEGL(2,1,0,1) = 0.5*(*DSDE)(5,3);
+    DsecondPKDEGL(2,1,1,0) = 0.5*(*DSDE)(5,3);
+    DsecondPKDEGL(2,1,0,2) = 0.5*(*DSDE)(5,4);
+    DsecondPKDEGL(2,1,2,0) = 0.5*(*DSDE)(5,4);
+    DsecondPKDEGL(2,1,1,2) = 0.5*(*DSDE)(5,5);
+    DsecondPKDEGL(2,1,2,1) = 0.5*(*DSDE)(5,5);
+
+    STensor43& L = ipv->getRefToTangentModuli();
+    STensorOperation::zero(L);
+    for (int i=0; i<3; i++)
+    {
+      for (int j=0; j<3; j++)
+      {
+        for (int k=0; k<3; k++)
+        {
+          L(i,j,i,k) += secondPK(k,j);
+          for (int l=0; l<3; l++)
+          {
+            //
+            for (int a=0; a<3; a++)
+            {
+              for (int b=0; b<3; b++)
+              {
+                L(i,j,k,l) += F(i,a)*DsecondPKDEGL(a,j,l,b)*F(k,b);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+
+
+}
+
 J2SmallStrainDG3DMaterialLaw::J2SmallStrainDG3DMaterialLaw(const int num,const double rho,
                                    double E,const double nu,const double sy0,const double h,
                                    const double tol,const bool tangentByPert, const double pert) : dG3DMaterialLaw(num,rho,true),
@@ -230,7 +588,7 @@ void J2SmallStrainDG3DMaterialLaw::checkInternalState(IPVariable* ipv, const IPV
 };
 
 
-void J2SmallStrainDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac)
+void J2SmallStrainDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac, const bool dTangent)
 {
   /* get ipvariable */
   J2SmallStrainDG3DIPVariable* ipvcur;
@@ -256,9 +614,11 @@ void J2SmallStrainDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipv
   /* data for J2 law */
   IPJ2linear* q1 = ipvcur->getIPJ2linear();
   const IPJ2linear* q0 = ipvprev->getIPJ2linear();
+  STensor43& elasticL = ipvcur->getRefToElasticTangentModuli();
+  //static STensor63 dCalgdeps;
 
   /* compute stress */
-  _j2law.constitutive(F0,F1,ipvcur->getRefToFirstPiolaKirchhoffStress(),q0,q1,ipvcur->getRefToTangentModuli(),stiff);
+  _j2law.constitutive(F0,F1,ipvcur->getRefToFirstPiolaKirchhoffStress(),q0,q1,ipvcur->getRefToTangentModuli(),stiff,&elasticL,dTangent,NULL);
 
   ipvcur->setRefToDGElasticTangentModuli(this->elasticStiffness);
 }
@@ -337,7 +697,7 @@ void J2LinearDG3DMaterialLaw::checkInternalState(IPVariable* ipv, const IPVariab
 
 };
 
-void J2LinearDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac)
+void J2LinearDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac, const bool dTangent)
 {
   /* get ipvariable */
   J2LinearDG3DIPVariable* ipvcur;
@@ -365,9 +725,10 @@ void J2LinearDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, co
   const IPJ2linear* q0 = ipvprev->getIPJ2linear();
 
   STensor43& elasticL = ipvcur->getRefToElasticTangentModuli();
+  //static STensor63 dCalgdeps;
 
   /* compute stress */
-  _j2law.constitutive(F0,F1,ipvcur->getRefToFirstPiolaKirchhoffStress(),q0,q1,ipvcur->getRefToTangentModuli(),stiff,&elasticL);
+  _j2law.constitutive(F0,F1,ipvcur->getRefToFirstPiolaKirchhoffStress(),q0,q1,ipvcur->getRefToTangentModuli(),stiff,&elasticL,dTangent,NULL);
 
   ipvcur->setRefToDGElasticTangentModuli(this->elasticStiffness);
 }
@@ -446,7 +807,7 @@ void HyperViscoElasticDG3DMaterialLaw::checkInternalState(IPVariable* ipv, const
   _viscoLaw.checkInternalState(ipvcur->getInternalData(), ipvprev->getInternalData());
 };
 
-void HyperViscoElasticDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac)
+void HyperViscoElasticDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac, const bool dTangent)
 {
   /* get ipvariable */
   HyperViscoElasticdG3DIPVariable* ipvcur;
@@ -472,9 +833,11 @@ void HyperViscoElasticDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable*
   /* data for J2 law */
   IPHyperViscoElastic* q1 = ipvcur->getIPHyperViscoElastic();
   const IPHyperViscoElastic* q0 = ipvprev->getIPHyperViscoElastic();
+  //static STensor63 dCalgdeps;
+  //STensor43& elasticL = ipvcur->getRefToElasticTangentModuli();
 
   /* compute stress */
-  _viscoLaw.constitutive(F0,F1,ipvcur->getRefToFirstPiolaKirchhoffStress(),q0,q1,ipvcur->getRefToTangentModuli(),stiff);
+  _viscoLaw.constitutive(F0,F1,ipvcur->getRefToFirstPiolaKirchhoffStress(),q0,q1,ipvcur->getRefToTangentModuli(),stiff,NULL,dTangent,NULL);
 
   ipvcur->setRefToDGElasticTangentModuli(this->elasticStiffness);
 }
@@ -578,7 +941,7 @@ void HyperViscoElastoPlasticPowerYieldDG3DMaterialLaw::checkInternalState(IPVari
   _viscoLaw.checkInternalState(ipvcur->getInternalData(),ipvprev->getInternalData());
 };
 
-void HyperViscoElastoPlasticPowerYieldDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac)
+void HyperViscoElastoPlasticPowerYieldDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac, const bool dTangent)
 {
   /* get ipvariable */
   HyperViscoElastoPlasticdG3DIPVariable* ipvcur;
@@ -604,9 +967,11 @@ void HyperViscoElastoPlasticPowerYieldDG3DMaterialLaw::stress(IPVariable* ipv, c
   /* data for J2 law */
   IPHyperViscoElastoPlastic* q1 = ipvcur->getIPHyperViscoElastoPlastic();
   const IPHyperViscoElastoPlastic* q0 = ipvprev->getIPHyperViscoElastoPlastic();
+  //static STensor63 dCalgdeps;
+  STensor43& elasticL = ipvcur->getRefToElasticTangentModuli();
 
   /* compute stress */
-  _viscoLaw.constitutive(F0,F1,ipvcur->getRefToFirstPiolaKirchhoffStress(),q0,q1,ipvcur->getRefToTangentModuli(),stiff);
+  _viscoLaw.constitutive(F0,F1,ipvcur->getRefToFirstPiolaKirchhoffStress(),q0,q1,ipvcur->getRefToTangentModuli(),stiff,&elasticL,dTangent,NULL);
 
   ipvcur->setRefToDGElasticTangentModuli(this->elasticStiffness);
 }
@@ -696,7 +1061,7 @@ void ViscoelasticDG3DMaterialLaw::checkInternalState(IPVariable* ipv, const IPVa
   _Vislaw.checkInternalState(ipvcur->getInternalData(),ipvprev->getInternalData());
 };
 
-void ViscoelasticDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac)
+void ViscoelasticDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac, const bool dTangent)
 {
   // get ipvariable
   ViscoelasticDG3DIPVariable* ipvcur;
@@ -710,9 +1075,11 @@ void ViscoelasticDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp
 
   IPViscoelastic* IPVis = ipvcur->getIPViscoelastic();
   const IPViscoelastic* IPVisprev = ipvprev->getIPViscoelastic();
+  //static STensor63 dCalgdeps;
+  STensor43& elasticL = ipvcur->getRefToElasticTangentModuli();
 
   // compute stress
-  _Vislaw.constitutive(F0,F1,ipvcur->getRefToFirstPiolaKirchhoffStress(),IPVisprev,IPVis,ipvcur->getRefToTangentModuli(),stiff);
+  _Vislaw.constitutive(F0,F1,ipvcur->getRefToFirstPiolaKirchhoffStress(),IPVisprev,IPVis,ipvcur->getRefToTangentModuli(),stiff,&elasticL,dTangent,NULL);
   ipvcur->setRefToDGElasticTangentModuli(this->elasticStiffness);
 
 }
@@ -837,7 +1204,7 @@ void EOSDG3DMaterialLaw::checkInternalState(IPVariable* ipv, const IPVariable* i
 };
 
 
-void EOSDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac)
+void EOSDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac, const bool dTangent)
 {
 
     dG3DMaterialLaw *DG3Dit = dynamic_cast<dG3DMaterialLaw*>(maplaw.begin()->second);
@@ -863,9 +1230,11 @@ void EOSDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const b
         J2LinearDG3DMaterialLaw *DG3DJ2linearit = dynamic_cast<J2LinearDG3DMaterialLaw*>(DG3Dit);
         IPJ2linear *J2linearipv = dynamic_cast<IPJ2linear*>(IPeosCUR->_IPV);
         const IPJ2linear *J2linearipvp = dynamic_cast<const IPJ2linear*>(IPeosPREV->_IPV);
+        //static STensor63 dCalgdeps;
+        //STensor43& elasticL = ipvcur->getRefToElasticTangentModuli();
 
         /* compute stress */
-        DG3DJ2linearit->_j2law.constitutive(F0,Fn,DG3DEOSipv->getRefToFirstPiolaKirchhoffStress(),J2linearipvp,J2linearipv, DG3DEOSipv->getRefToTangentModuli(),stiff);
+        DG3DJ2linearit->_j2law.constitutive(F0,Fn,DG3DEOSipv->getRefToFirstPiolaKirchhoffStress(),J2linearipvp,J2linearipv, DG3DEOSipv->getRefToTangentModuli(),stiff,NULL,dTangent,NULL);
 
         TotalelasticStiffness = DG3DJ2linearit->elasticStiffness;
 
@@ -876,8 +1245,10 @@ void EOSDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const b
         ViscoelasticDG3DMaterialLaw *DG3Dvisit = dynamic_cast<ViscoelasticDG3DMaterialLaw*>(DG3Dit);
         IPViscoelastic *Visipv = dynamic_cast<IPViscoelastic*>(IPeosCUR->_IPV);
         const IPViscoelastic *Visipvp = dynamic_cast<const IPViscoelastic*>(IPeosPREV->_IPV);
+        //static STensor63 dCalgdeps;
+        //STensor43& elasticL = ipvcur->getRefToElasticTangentModuli();
 
-        DG3Dvisit->_Vislaw.constitutive(F0,Fn,DG3DEOSipv->getRefToFirstPiolaKirchhoffStress(),Visipvp,Visipv,DG3DEOSipv->getRefToTangentModuli(),stiff);
+        DG3Dvisit->_Vislaw.constitutive(F0,Fn,DG3DEOSipv->getRefToFirstPiolaKirchhoffStress(),Visipvp,Visipv,DG3DEOSipv->getRefToTangentModuli(),stiff,NULL,dTangent,NULL);
         TotalelasticStiffness = DG3Dvisit->elasticStiffness;
 
         // Careful, make sure the volumetric properties of your deviatoric law are the same as in your EOS law, as the elastic stiffness is only calcualted through the deviatoric law
@@ -959,7 +1330,7 @@ void VUMATinterfaceDG3DMaterialLaw::checkInternalState(IPVariable* ipv, const IP
   _vumatlaw.checkInternalState(ipvcur->getInternalData(),ipvprev->getInternalData());
 };
 
-void VUMATinterfaceDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac)
+void VUMATinterfaceDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac, const bool dTangent)
 {
   /* get ipvariable */
   VUMATinterfaceDG3DIPVariable* ipvcur;
@@ -985,10 +1356,12 @@ void VUMATinterfaceDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ip
   /* data for VUMAT law */
   IPVUMATinterface* q1 = ipvcur->getIPVUMATinterface();
   const IPVUMATinterface* q0 = ipvprev->getIPVUMATinterface();
+  //static STensor63 dCalgdeps;
+  //STensor43& elasticL = ipvcur->getRefToElasticTangentModuli();
 
   /* compute stress */
   ipvcur->getRefToFirstPiolaKirchhoffStress()=( const_cast<VUMATinterfaceDG3DIPVariable*>(ipvprev) )->getRefToFirstPiolaKirchhoffStress();
-  _vumatlaw.constitutive(F0,F1,ipvcur->getRefToFirstPiolaKirchhoffStress(),q0,q1,ipvcur->getRefToTangentModuli(),stiff);
+  _vumatlaw.constitutive(F0,F1,ipvcur->getRefToFirstPiolaKirchhoffStress(),q0,q1,ipvcur->getRefToTangentModuli(),stiff,NULL,dTangent,NULL);
 
   ipvcur->setRefToDGElasticTangentModuli(this->elasticStiffness);
 }
@@ -1059,7 +1432,7 @@ void LocalDamageHyperelasticDG3DMaterialLaw::checkInternalState(IPVariable* ipv,
   _nlLaw->checkInternalState(ipvcur->getInternalData(),ipvprev->getInternalData());
 };
 
-void LocalDamageHyperelasticDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac)
+void LocalDamageHyperelasticDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac, const bool dTangent)
 {
     /* get ipvariable */
     localDamageIsotropicElasticityDG3DIPVariable* ipvcur;
@@ -1085,9 +1458,11 @@ void LocalDamageHyperelasticDG3DMaterialLaw::stress(IPVariable* ipv, const IPVar
     /* data for non local isotropic elastic law */
     IPLocalDamageIsotropicElasticity* q1 = ipvcur->getIPLocalDamageIsotropicElasticity();
     const IPLocalDamageIsotropicElasticity* q0 = ipvprev->getIPLocalDamageIsotropicElasticity();
+    //static STensor63 dCalgdeps;
+    STensor43& elasticL = ipvcur->getRefToElasticTangentModuli();
 
     /* compute stress */
-    _nlLaw->constitutive(F0,F1,ipvcur->getRefToFirstPiolaKirchhoffStress(),q0,q1,ipvcur->getRefToTangentModuli(),stiff);
+    _nlLaw->constitutive(F0,F1,ipvcur->getRefToFirstPiolaKirchhoffStress(),q0,q1,ipvcur->getRefToTangentModuli(),stiff,&elasticL,dTangent,NULL);
 
     ipvcur->setRefToDGElasticTangentModuli(this->elasticStiffness);   // Is it correct ????
 }
@@ -1183,7 +1558,7 @@ void LocalDamageJ2HyperDG3DMaterialLaw::checkInternalState(IPVariable* ipv, cons
   _nldJ2Hyperlaw->checkInternalState(ipvcur->getInternalData(),ipvprev->getInternalData());
 };
 
-void LocalDamageJ2HyperDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac)
+void LocalDamageJ2HyperDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac, const bool dTangent)
 {
   /* get ipvariable */
   localDamageJ2HyperDG3DIPVariable* ipvcur;
@@ -1210,9 +1585,11 @@ void LocalDamageJ2HyperDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable
   /* data for J2 law */
   IPLocalDamageJ2Hyper* q1 = ipvcur->getIPLocalDamageJ2Hyper();
   const IPLocalDamageJ2Hyper* q0 = ipvprev->getIPLocalDamageJ2Hyper();
+  //static STensor63 dCalgdeps;
+  STensor43& elasticL = ipvcur->getRefToElasticTangentModuli();
 
   /* compute stress */
-  _nldJ2Hyperlaw->constitutive(F0,F1,ipvcur->getRefToFirstPiolaKirchhoffStress(),q0,q1,ipvcur->getRefToTangentModuli(),stiff);
+  _nldJ2Hyperlaw->constitutive(F0,F1,ipvcur->getRefToFirstPiolaKirchhoffStress(),q0,q1,ipvcur->getRefToTangentModuli(),stiff,&elasticL,dTangent,NULL);
 
   ipvcur->setRefToDGElasticTangentModuli(this->elasticStiffness);
 
@@ -1282,7 +1659,7 @@ void TransverseIsotropicDG3DMaterialLaw::checkInternalState(IPVariable* ipv, con
   _tilaw.checkInternalState(ipvcur->getInternalData(),ipvprev->getInternalData());
 };
 
-void TransverseIsotropicDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac)
+void TransverseIsotropicDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac, const bool dTangent)
 {
   /* get ipvariable */
   TransverseIsotropicDG3DIPVariable* ipvcur;
@@ -1309,9 +1686,10 @@ void TransverseIsotropicDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariabl
   IPTransverseIsotropic* q1 = ipvcur->getIPTransverseIsotropic();
   const IPTransverseIsotropic* q0 = ipvprev->getIPTransverseIsotropic();
   STensor43& elasticL = ipvcur->getRefToElasticTangentModuli();
+  //static STensor63 dCalgdeps;
 
   /* compute stress */
-  _tilaw.constitutive(F0,F1,ipvcur->getRefToFirstPiolaKirchhoffStress(),q0,q1,ipvcur->getRefToTangentModuli(),stiff,&elasticL);
+  _tilaw.constitutive(F0,F1,ipvcur->getRefToFirstPiolaKirchhoffStress(),q0,q1,ipvcur->getRefToTangentModuli(),stiff,&elasticL,dTangent,NULL);
 
   ipvcur->setRefToDGElasticTangentModuli(this->elasticStiffness);
 
@@ -1400,7 +1778,7 @@ void TransverseIsoCurvatureDG3DMaterialLaw::checkInternalState(IPVariable* ipv,
 };
 
 
-void TransverseIsoCurvatureDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac)
+void TransverseIsoCurvatureDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac, const bool dTangent)
 {
   /* get ipvariable */
   TransverseIsoCurvatureDG3DIPVariable* ipvcur;
@@ -1426,9 +1804,11 @@ void TransverseIsoCurvatureDG3DMaterialLaw::stress(IPVariable* ipv, const IPVari
   /* data for J2 law */
   IPTransverseIsoCurvature* q1 = ipvcur->getIPTransverseIsoCurvature();
   const IPTransverseIsoCurvature* q0 = ipvprev->getIPTransverseIsoCurvature();
+  //static STensor63 dCalgdeps;
+  STensor43& elasticL = ipvcur->getRefToElasticTangentModuli();
 
   /* compute stress */
-  _tilaw.constitutive(F0,F1,ipvcur->getRefToFirstPiolaKirchhoffStress(),q0,q1,ipvcur->getRefToTangentModuli(),stiff);
+  _tilaw.constitutive(F0,F1,ipvcur->getRefToFirstPiolaKirchhoffStress(),q0,q1,ipvcur->getRefToTangentModuli(),stiff,&elasticL,dTangent,NULL);
 
   ipvcur->setRefToDGElasticTangentModuli(this->elasticStiffness);
 
@@ -1639,7 +2019,7 @@ void TransverseIsoYarnBDG3DMaterialLaw::checkInternalState(IPVariable* ipv, cons
   _tilaw.checkInternalState(ipvcur->getInternalData(),ipvprev->getInternalData());
 };
 
-void TransverseIsoYarnBDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac)
+void TransverseIsoYarnBDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac, const bool dTangent)
 {
   //get ipvariable
   TransverseIsoYarnBDG3DIPVariable* ipvcur;
@@ -1667,11 +2047,13 @@ void TransverseIsoYarnBDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable
   //data for J2 law
   IPTransverseIsoYarnB* q1 = ipvcur->getIPTransverseIsoYarnB();
   const IPTransverseIsoYarnB* q0 = ipvprev->getIPTransverseIsoYarnB();
+  //static STensor63 dCalgdeps;
+  STensor43& elasticL = ipvcur->getRefToElasticTangentModuli();
 
 
   // compute stress
   _tilaw.constitutive(F0, F1,ipvcur->getRefToFirstPiolaKirchhoffStress(),q0,q1,
-                      ipvcur->getRefToTangentModuli(), stiff);
+                      ipvcur->getRefToTangentModuli(), stiff,&elasticL,dTangent,NULL);
 
   ipvcur->setRefToDGElasticTangentModuli(this->elasticStiffness);
 }
@@ -1764,7 +2146,7 @@ void AnisotropicDG3DMaterialLaw::checkInternalState(IPVariable* ipv, const IPVar
 };
 
 
-void AnisotropicDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac)
+void AnisotropicDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac, const bool dTangent)
 {
   /* get ipvariable */
   AnisotropicDG3DIPVariable* ipvcur;
@@ -1790,9 +2172,11 @@ void AnisotropicDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp,
   /* data for J2 law */
   IPAnisotropic* q1 = ipvcur->getIPAnisotropic();
   const IPAnisotropic* q0 = ipvprev->getIPAnisotropic();
+  //static STensor63 dCalgdeps;
+  STensor43& elasticL = ipvcur->getRefToElasticTangentModuli();
 
   /* compute stress */
-  _tilaw.constitutive(F0,F1,ipvcur->getRefToFirstPiolaKirchhoffStress(),q0,q1,ipvcur->getRefToTangentModuli(),stiff);
+  _tilaw.constitutive(F0,F1,ipvcur->getRefToFirstPiolaKirchhoffStress(),q0,q1,ipvcur->getRefToTangentModuli(),stiff,&elasticL,dTangent,NULL);
 
   ipvcur->setRefToDGElasticTangentModuli(this->elasticStiffness);
 
@@ -1880,7 +2264,7 @@ void AnisotropicStochDG3DMaterialLaw::checkInternalState(IPVariable* ipv, const
 };
 
 
-void AnisotropicStochDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac)
+void AnisotropicStochDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac, const bool dTangent)
 {
   /* get ipvariable */
   AnisotropicStochDG3DIPVariable* ipvcur;
@@ -1906,9 +2290,11 @@ void AnisotropicStochDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable*
   /* data for J2 law */
   IPAnisotropicStoch* q1 = ipvcur->getIPAnisotropicStoch();
   const IPAnisotropicStoch* q0 = ipvprev->getIPAnisotropicStoch();
+  //static STensor63 dCalgdeps;
+  STensor43& elasticL = ipvcur->getRefToElasticTangentModuli();
 
   /* compute stress */
-  _tilaw.constitutive(F0,F1,ipvcur->getRefToFirstPiolaKirchhoffStress(),q0,q1,ipvcur->getRefToTangentModuli(),stiff);
+  _tilaw.constitutive(F0,F1,ipvcur->getRefToFirstPiolaKirchhoffStress(),q0,q1,ipvcur->getRefToTangentModuli(),stiff,&elasticL,dTangent,NULL);
 
   ipvcur->setRefToDGElasticTangentModuli(this->elasticStiffness);
 
@@ -1988,7 +2374,7 @@ void ClusterDG3DMaterialLaw::checkInternalState(IPVariable* ipv, const IPVariabl
 };
 
 
-void ClusterDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac)
+void ClusterDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac, const bool dTangent)
 {
   /* get ipvariable */
   ClusterDG3DIPVariable* ipvcur;
@@ -2014,9 +2400,11 @@ void ClusterDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, con
   /* data for J2 law */
   IPCluster* q1 = ipvcur->getIPCluster();
   const IPCluster* q0 = ipvprev->getIPCluster();
+  //static STensor63 dCalgdeps;
+  STensor43& elasticL = ipvcur->getRefToElasticTangentModuli();
 
   /* compute stress */
-  _clusterlaw.constitutive(F0,F1,ipvcur->getRefToFirstPiolaKirchhoffStress(),q0,q1,ipvcur->getRefToTangentModuli(),stiff);
+  _clusterlaw.constitutive(F0,F1,ipvcur->getRefToFirstPiolaKirchhoffStress(),q0,q1,ipvcur->getRefToTangentModuli(),stiff,&elasticL,dTangent,NULL);
 
   ipvcur->setRefToDGElasticTangentModuli(this->elasticStiffness);
 
@@ -2035,8 +2423,134 @@ void ClusterDG3DMaterialLaw::addClusterEigenStrain(int clusterNb, double F11,dou
   F(2,2)=F33;
   _clusterlaw.addClusterEigenStrain(clusterNb,F);
 }
+
+
 //
+TFADG3DMaterialLaw::TFADG3DMaterialLaw(const int num, double rho, const char *clusterVolume):
+                                  dG3DMaterialLaw(num,rho,true), _TFAlaw(num, rho, clusterVolume)
+{
+  double nu = _TFAlaw.poissonRatio();
+  double mu = _TFAlaw.shearModulus();
+  double E = 2.*mu*(1.+nu);
 
+  fillElasticStiffness(E, nu, elasticStiffness);
+}
+
+TFADG3DMaterialLaw::TFADG3DMaterialLaw(const TFADG3DMaterialLaw &source) :
+								     dG3DMaterialLaw(source), _TFAlaw(source._TFAlaw){}
+
+void TFADG3DMaterialLaw::createIPState(IPStateBase* &ips,const bool* state_,const MElement *ele, const int nbFF_, const IntPt *GP, const int gpt) const
+{
+  // check interface element
+  bool inter=true;
+  const MInterfaceElement *iele = dynamic_cast<const MInterfaceElement*>(ele);
+  if(iele==NULL) inter=false;
+
+  IPTFA* ipvicluster;
+  _TFAlaw.createIPVariable(ipvicluster,ele,nbFF_, GP, gpt); 
+  IPTFA* ipv1cluster;
+  _TFAlaw.createIPVariable(ipv1cluster,ele,nbFF_, GP, gpt); 
+  IPTFA* ipv2cluster;
+  _TFAlaw.createIPVariable(ipv2cluster,ele,nbFF_, GP, gpt); 
+
+  IPVariable* ipvi = new  TFADG3DIPVariable(ipvicluster,inter);
+  IPVariable* ipv1 = new  TFADG3DIPVariable(ipv1cluster,inter);
+  IPVariable* ipv2 = new  TFADG3DIPVariable(ipv2cluster,inter);
+
+  if(ips != NULL) delete ips;
+  ips = new IP3State(state_,ipvi,ipv1,ipv2);
+}
+
+void TFADG3DMaterialLaw::createIPVariable(IPVariable* &ipv,const MElement *ele, const int nbFF_, const IntPt *GP, const int gpt) const
+{
+  if(ipv !=NULL) delete ipv;
+  bool inter=true;
+  const MInterfaceElement *iele = dynamic_cast<const MInterfaceElement*>(ele);
+  if(iele == NULL){ inter=false; }
+
+  IPTFA* ipvicluster;
+  _TFAlaw.createIPVariable(ipvicluster,ele,nbFF_, GP, gpt); 
+  ipv = new  TFADG3DIPVariable(ipvicluster,inter);
+
+}
+
+
+void TFADG3DMaterialLaw::checkInternalState(IPVariable* ipv, const IPVariable* ipvp) const{
+  /* get ipvariable */
+  //ClusterDG3DIPVariable* ipvcur;
+  //const ClusterDG3DIPVariable* ipvprev;
+  TFADG3DIPVariable* ipvcur;
+  const TFADG3DIPVariable* ipvprev;
+  FractureCohesive3DIPVariable* ipvtmp = dynamic_cast<FractureCohesive3DIPVariable*>(ipv);
+  if(ipvtmp !=NULL)
+  {
+
+    ipvcur = static_cast<TFADG3DIPVariable*>(ipvtmp->getIPvBulk());
+    const FractureCohesive3DIPVariable *ipvtmp2 = static_cast<const FractureCohesive3DIPVariable*>(ipvp);
+    ipvprev = static_cast<const TFADG3DIPVariable*>(ipvtmp2->getIPvBulk());
+   }
+  else
+  {
+    ipvcur = static_cast<TFADG3DIPVariable*>(ipv);
+    ipvprev = static_cast<const TFADG3DIPVariable*>(ipvp);
+  }
+
+  _TFAlaw.checkInternalState(ipvcur->getInternalData(),ipvprev->getInternalData());
+
+};
+
+
+void TFADG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac, const bool dTangent)
+{
+  /* get ipvariable */
+  TFADG3DIPVariable* ipvcur;
+  const TFADG3DIPVariable* ipvprev;
+  FractureCohesive3DIPVariable* ipvtmp = dynamic_cast<FractureCohesive3DIPVariable*>(ipv);
+  if(ipvtmp !=NULL)
+  {
+
+    ipvcur = static_cast<TFADG3DIPVariable*>(ipvtmp->getIPvBulk());
+    const FractureCohesive3DIPVariable *ipvtmp2 = static_cast<const FractureCohesive3DIPVariable*>(ipvp);
+    ipvprev = static_cast<const TFADG3DIPVariable*>(ipvtmp2->getIPvBulk());
+   }
+  else
+  {
+    ipvcur = static_cast<TFADG3DIPVariable*>(ipv);
+    ipvprev = static_cast<const TFADG3DIPVariable*>(ipvp);
+  }
+
+  /* strain xyz */
+  const STensor3& F1 = ipvcur->getConstRefToDeformationGradient();
+  const STensor3& F0 = ipvprev->getConstRefToDeformationGradient();
+
+  /* data for J2 law */
+  IPTFA* q1 = ipvcur->getIPTFA();
+  const IPTFA* q0 = ipvprev->getIPTFA();
+  //static STensor63 dCalgdeps;
+  STensor43& elasticL = ipvcur->getRefToElasticTangentModuli();
+
+  /* compute stress */
+  _TFAlaw.constitutive(F0,F1,ipvcur->getRefToFirstPiolaKirchhoffStress(),q0,q1,ipvcur->getRefToTangentModuli(),stiff,&elasticL,dTangent,NULL);
+
+  ipvcur->setRefToDGElasticTangentModuli(this->elasticStiffness);
+
+}
+
+
+
+void TFADG3DMaterialLaw::readTFAConcentrationTensors(const char *concentrationTensors)
+{
+  _TFAlaw.readTFAConcentrationTensors(concentrationTensors);
+}
+
+void TFADG3DMaterialLaw::readTFAInteractionTensors(const char *interactionTensors)
+{
+  _TFAlaw.readTFAInteractionTensors(interactionTensors);
+}
+
+
+
+//
 
 LinearThermoMechanicsDG3DMaterialLaw::LinearThermoMechanicsDG3DMaterialLaw(const int num,const double rho,const double Ex, const double Ey, const double Ez, const double Vxy,
 									   const double Vxz,const double Vyz, const double MUxy, const double MUxz, const double MUyz,const double alpha,
@@ -2126,7 +2640,7 @@ void LinearThermoMechanicsDG3DMaterialLaw::checkInternalState(IPVariable* ipv, c
   _lawLinearTM->checkInternalState(ipvcur->getInternalData(),ipvprev->getInternalData());
 };
 
-void LinearThermoMechanicsDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac)
+void LinearThermoMechanicsDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac, const bool dTangent)
 {
   /* get ipvariable */
   LinearThermoMechanicsDG3DIPVariable* ipvcur;
@@ -2298,7 +2812,7 @@ void J2ThermoMechanicsDG3DMaterialLaw::checkInternalState(IPVariable* ipv, const
   _j2law.checkInternalState(ipvcur->getInternalData(),ipvprev->getInternalData());
 };
 
-void J2ThermoMechanicsDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac)
+void J2ThermoMechanicsDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac, const bool dTangent)
 {
   /* get ipvariable */
   J2ThermoMechanicsDG3DIPVariable* ipvcur;
@@ -2441,7 +2955,7 @@ void FullJ2ThermoMechanicsDG3DMaterialLaw::checkInternalState(IPVariable* ipv, c
   _j2FullThermo.checkInternalState(ipvcur->getInternalData(),ipvprev->getInternalData());
 };
 
-void FullJ2ThermoMechanicsDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac)
+void FullJ2ThermoMechanicsDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac, const bool dTangent)
 {
   J2FullThermoMechanicsDG3DIPVariable* ipvcur = static_cast<J2FullThermoMechanicsDG3DIPVariable*>(ipv);
   const J2FullThermoMechanicsDG3DIPVariable* ipvprev = static_cast<const J2FullThermoMechanicsDG3DIPVariable*>(ipvp);
@@ -2572,7 +3086,7 @@ void mlawAnIsotropicTherMechDG3DMaterialLaw::checkInternalState(IPVariable* ipv,
   _lawAnTM->checkInternalState(ipvcur->getInternalData(),ipvprev->getInternalData());
 };
 
-void mlawAnIsotropicTherMechDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac)
+void mlawAnIsotropicTherMechDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac, const bool dTangent)
 {
 
   AnIsotropicTherMechDG3DIPVariable* ipvcur;
@@ -2723,7 +3237,7 @@ void SMPDG3DMaterialLaw::checkInternalState(IPVariable* ipv, const IPVariable* i
   _lawTMSMP->checkInternalState(ipvcur->getInternalData(),ipvprev->getInternalData());
 };
 
-void SMPDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac)
+void SMPDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac, const bool dTangent)
 {
   /* get ipvariable */
   SMPDG3DIPVariable* ipvcur;
@@ -2946,7 +3460,7 @@ void PhenomenologicalSMPDG3DMaterialLaw::checkInternalState(IPVariable* ipv, con
   _lawTMSMP->checkInternalState(ipvcur->getInternalData(),ipvprev->getInternalData());
 };
 
-void PhenomenologicalSMPDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac)
+void PhenomenologicalSMPDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac, const bool dTangent)
 {
   /* get ipvariable */
   PhenomenologicalSMPDG3DIPVariable* ipvcur;        //= static_cast < nonLocalDamageDG3DIPVariable *> (ipv);
@@ -3001,8 +3515,7 @@ void PhenomenologicalSMPDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariabl
 }
 //===========/end/PhenomenologicalSMPDG3DMaterialLaw===================================================================================
 
-
-
+//
 crystalPlasticityDG3DMaterialLaw::crystalPlasticityDG3DMaterialLaw(const int num, const double rho, const double temperature, const char *propName) :
                                                               dG3DMaterialLaw(num,rho,true)
 {
@@ -3101,7 +3614,7 @@ void crystalPlasticityDG3DMaterialLaw::checkInternalState(IPVariable* ipv, const
 
 };
 
-void crystalPlasticityDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac)
+void crystalPlasticityDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac, const bool dTangent)
 {
   /* get ipvariable */
   crystalPlasticityDG3DIPVariable* ipvcur; //= static_cast < nonLocalDamageDG3DIPVariable *> (ipv);
@@ -3128,10 +3641,12 @@ void crystalPlasticityDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable*
   /* data for J2 law */
   IPCrystalPlasticity* q1 = ipvcur->getIPCrystalPlasticity();
   const IPCrystalPlasticity* q0 = ipvprev->getIPCrystalPlasticity();
+  //static STensor63 dCalgdeps;
+  //STensor43& elasticL = ipvcur->getRefToElasticTangentModuli();
 
   /* compute stress */
   _cplaw->constitutive(F0,F1,ipvcur->getRefToFirstPiolaKirchhoffStress(),q0,q1,ipvcur->getRefToTangentModuli(),
-                        stiff);
+                        stiff,NULL,dTangent,NULL);
 
   ipvcur->setRefToDGElasticTangentModuli(this->elasticStiffness);
 
@@ -3145,8 +3660,154 @@ void crystalPlasticityDG3DMaterialLaw::setSolver(const nonLinearMechSolver* sv){
 		_cplaw->setSolver(sv);
 	}
 };
+//
+
+//
+gursonUMATDG3DMaterialLaw::gursonUMATDG3DMaterialLaw(const int num, const double temperature, const char *propName) :
+                               dG3DMaterialLaw(num,0.,true)
+{
+  _glaw = new mlawGursonUMAT(num,temperature,propName);
+  double nu = _glaw->poissonRatio();
+  double mu = _glaw->shearModulus();
+  double E = 2.*mu*(1.+nu);
+  _rho = _glaw->getDensity();
+  fillElasticStiffness(E, nu, elasticStiffness);
+
+
+}
+
+gursonUMATDG3DMaterialLaw::~gursonUMATDG3DMaterialLaw()
+{
+  if (_glaw !=NULL) delete _glaw;
+  _glaw = NULL;
+};
+
+
+gursonUMATDG3DMaterialLaw::gursonUMATDG3DMaterialLaw(const gursonUMATDG3DMaterialLaw &source) :
+                                                             dG3DMaterialLaw(source)
+{
+	_glaw = NULL;
+	if (source._glaw != NULL){
+		_glaw = dynamic_cast<mlawGursonUMAT*>(source._glaw->clone());
+	}
+
+}
+
+void gursonUMATDG3DMaterialLaw::setTime(const double t,const double dtime){
+  dG3DMaterialLaw::setTime(t,dtime);
+  _glaw->setTime(t,dtime);
+  return;
+}
+
+materialLaw::matname gursonUMATDG3DMaterialLaw::getType() const {return _glaw->getType();}
+
+bool gursonUMATDG3DMaterialLaw::withEnergyDissipation() const {return _glaw->withEnergyDissipation();};
+
+void gursonUMATDG3DMaterialLaw::createIPState(IPStateBase* &ips,const bool* state_,const MElement *ele, const int nbFF_, const IntPt *GP, const int gpt) const
+{
+  // check interface element
+  bool inter=true;
+  const MInterfaceElement *iele = dynamic_cast<const MInterfaceElement*>(ele);
+  if(iele==NULL) inter=false;
+
+  int nsdv = _glaw->getNsdv();
+  double size = 2.*(( const_cast<MElement*>(ele) )->getInnerRadius());
+
+  IPVariable* ipvi = new  gursonUMATDG3DIPVariable(nsdv,size,inter);
+  IPVariable* ipv1 = new  gursonUMATDG3DIPVariable(nsdv,size,inter);
+  IPVariable* ipv2 = new  gursonUMATDG3DIPVariable(nsdv,size,inter);
+
+  if(ips != NULL) delete ips;
+  ips = new IP3State(state_,ipvi,ipv1,ipv2);
+  _glaw->createIPState((static_cast <gursonUMATDG3DIPVariable*> (ipvi))->getIPGursonUMAT(),
+                         (static_cast <gursonUMATDG3DIPVariable*> (ipv1))->getIPGursonUMAT(),
+             			 (static_cast <gursonUMATDG3DIPVariable*> (ipv2))->getIPGursonUMAT());
+
+}
+
+void gursonUMATDG3DMaterialLaw::createIPVariable(IPVariable* &ipv,const MElement *ele, const int nbFF_, const IntPt *GP, const int gpt) const
+{
+  if(ipv !=NULL) delete ipv;
+  bool inter=true;
+  const MInterfaceElement *iele = dynamic_cast<const MInterfaceElement*>(ele);
+  if(iele == NULL) inter=false;
+  double size = 2.*(( const_cast<MElement*>(ele) )->getInnerRadius());
+
+  ipv = new  gursonUMATDG3DIPVariable(_glaw->getNsdv(),size,inter);
+
+  IPGursonUMAT * ipvnl = static_cast <gursonUMATDG3DIPVariable*>(ipv)->getIPGursonUMAT();
+  _glaw->createIPVariable(ipvnl,ele,nbFF_,GP,gpt);
+}
+
+
+double gursonUMATDG3DMaterialLaw::soundSpeed() const{return _glaw->soundSpeed();}
+
+void gursonUMATDG3DMaterialLaw::checkInternalState(IPVariable* ipv, const IPVariable* ipvp) const{
+  /* get ipvariable */
+  gursonUMATDG3DIPVariable* ipvcur; //= static_cast < nonLocalDamageDG3DIPVariable *> (ipv);
+  const gursonUMATDG3DIPVariable* ipvprev; //= static_cast <const  nonLocalDamageDG3DIPVariable *> (ipvp);
+
+  FractureCohesive3DIPVariable* ipvtmp = dynamic_cast<FractureCohesive3DIPVariable*>(ipv);
+  if(ipvtmp !=NULL)
+  {
+
+    ipvcur = static_cast<gursonUMATDG3DIPVariable*>(ipvtmp->getIPvBulk());
+    const FractureCohesive3DIPVariable *ipvtmp2 = static_cast<const FractureCohesive3DIPVariable*>(ipvp);
+    ipvprev = static_cast<const gursonUMATDG3DIPVariable*>(ipvtmp2->getIPvBulk());
+   }
+  else
+  {
+    ipvcur = static_cast<gursonUMATDG3DIPVariable*>(ipv);
+    ipvprev = static_cast<const gursonUMATDG3DIPVariable*>(ipvp);
+  }
+  _glaw->checkInternalState(ipvcur->getInternalData(),ipvprev->getInternalData());
+
+};
+
+void gursonUMATDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac, const bool dTangent)
+{
+  /* get ipvariable */
+  gursonUMATDG3DIPVariable* ipvcur; //= static_cast < nonLocalDamageDG3DIPVariable *> (ipv);
+  const gursonUMATDG3DIPVariable* ipvprev; //= static_cast <const  nonLocalDamageDG3DIPVariable *> (ipvp);
+
+  FractureCohesive3DIPVariable* ipvtmp = dynamic_cast<FractureCohesive3DIPVariable*>(ipv);
+  if(ipvtmp !=NULL)
+  {
 
+    ipvcur = static_cast<gursonUMATDG3DIPVariable*>(ipvtmp->getIPvBulk());
+    const FractureCohesive3DIPVariable *ipvtmp2 = static_cast<const FractureCohesive3DIPVariable*>(ipvp);
+    ipvprev = static_cast<const gursonUMATDG3DIPVariable*>(ipvtmp2->getIPvBulk());
+   }
+  else
+  {
+    ipvcur = static_cast<gursonUMATDG3DIPVariable*>(ipv);
+    ipvprev = static_cast<const gursonUMATDG3DIPVariable*>(ipvp);
+  }
 
+  /* strain xyz */
+  const STensor3& F1 = ipvcur->getConstRefToDeformationGradient();
+  const STensor3& F0 = ipvprev->getConstRefToDeformationGradient();
+
+  /* data for J2 law */
+  IPGursonUMAT* q1 = ipvcur->getIPGursonUMAT();
+  const IPGursonUMAT* q0 = ipvprev->getIPGursonUMAT();
+
+  /* compute stress */
+  _glaw->constitutive(F0,F1,ipvcur->getRefToFirstPiolaKirchhoffStress(),q0,q1,ipvcur->getRefToTangentModuli(),
+                        stiff, NULL,dTangent,NULL);
+
+  ipvcur->setRefToDGElasticTangentModuli(this->elasticStiffness);
+
+}
+
+double gursonUMATDG3DMaterialLaw::scaleFactor() const{return _glaw->scaleFactor();};
+
+void gursonUMATDG3DMaterialLaw::setSolver(const nonLinearMechSolver* sv){
+	dG3DMaterialLaw::setSolver(sv);
+	if (_glaw != NULL){
+		_glaw->setSolver(sv);
+	}
+};
 
 //
 LinearElecTherMechDG3DMaterialLaw::LinearElecTherMechDG3DMaterialLaw(const int num,const double rho,const double Ex, const double Ey, const double Ez, const double Vxy,
@@ -3225,7 +3886,7 @@ void LinearElecTherMechDG3DMaterialLaw::checkInternalState(IPVariable* ipv, cons
   _lawLinearETM->checkInternalState(ipvcur->getInternalData(),ipvprev->getInternalData());
 };
 
-void LinearElecTherMechDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac)
+void LinearElecTherMechDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac, const bool dTangent)
 {
   /* get ipvariable */
   LinearElecTherMechDG3DIPVariable* ipvcur;
@@ -3398,7 +4059,7 @@ void mlawAnIsotropicElecTherMechDG3DMaterialLaw::checkInternalState(IPVariable*
   _lawETM->checkInternalState(ipvcur->getInternalData(),ipvprev->getInternalData());
 };
 
-void mlawAnIsotropicElecTherMechDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac)
+void mlawAnIsotropicElecTherMechDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac, const bool dTangent)
 {
 
   AnIsotropicElecTherMechDG3DIPVariable* ipvcur;
@@ -3587,7 +4248,7 @@ void mlawElecSMPDG3DMaterialLaw::checkInternalState(IPVariable* ipv, const IPVar
   _lawETMSMP->checkInternalState(ipvcur->getInternalData(),ipvprev->getInternalData());
 };
 
-void mlawElecSMPDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac)
+void mlawElecSMPDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac, const bool dTangent)
 {
 
   ElecSMPDG3DIPVariable* ipvcur;
diff --git a/dG3D/src/dG3DMaterialLaw.h b/dG3D/src/dG3DMaterialLaw.h
index 5369a43a10ed084cd4475604abb13090ad48ea13..4029bc63c6a3a9c1878d92a2370524ae8a0a8825 100644
--- a/dG3D/src/dG3DMaterialLaw.h
+++ b/dG3D/src/dG3DMaterialLaw.h
@@ -26,6 +26,7 @@
 #include "mlawPhenomenologicalSMP.h"
 #include "mlawEOS.h"
 #include "mlawCrystalPlasticity.h"
+#include "mlawGursonUMAT.h"
 #include "mlawViscoelastic.h"
 #include "mlawLinearElecTherMech.h"
 #include "mlawAnIsotropicElecTherMech.h"
@@ -39,6 +40,8 @@
 #include "mlawJ2FullyCoupledThermoMechanics.h"
 #include "mlawHyperelasticDamage.h"
 #include "mlawClusterMaterialLaws.h"
+#include "mlawTFAMaterialLaws.h"
+#include "MIMOFunction.h"
 #endif
 
 class dG3DMaterialLaw : public materialLaw{
@@ -81,7 +84,7 @@ public:
   // If law enable fracture the bool checkfrac allow to detect fracture. This bool is unused otherwise
   // The bool is necessery for computation of matrix by perturbation in this case the check of fracture
   // has not to be performed.
-  virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true)=0;
+  virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent=false)=0;
 
   // 3D to 1D
   virtual void stress3DTo1D(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true);
@@ -107,7 +110,9 @@ virtual void constitutive(const STensor3& F0,         // initial deformation gra
                             IPVariable *q1,              // updated array of internal variable (in ipvcur on output),
 			    STensor43 &Tangent,         // constitutive tangents (output)
 			    const bool stiff,
-                            STensor43* elasticTangent = NULL
+                            STensor43* elasticTangent = NULL,
+                            const bool dTangent =false,
+                            STensor63* dCalgdeps = NULL
 			    ) const
       {
         Msg::Error("dG3DMaterialLaw constitutive not defined");
@@ -145,7 +150,7 @@ class dG3DLinearElasticMaterialLaw : public dG3DMaterialLaw{
   // To allow initialization of bulk ip in case of fracture
 		virtual void createIPVariable(IPVariable* &ipv, const MElement *ele, const int nbFF_, const IntPt *GP, const int gpt) const;
 		virtual void initLaws(const std::map<int,materialLaw*> &maplaw);
-		virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true);
+		virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent=false);
 		virtual double scaleFactor() const;
 		virtual double soundSpeed() const;
 		virtual materialLaw* clone() const {return new dG3DLinearElasticMaterialLaw(*this);};
@@ -156,6 +161,44 @@ class dG3DLinearElasticMaterialLaw : public dG3DMaterialLaw{
 #endif //SWIG
 };
 
+class ANNBasedDG3DMaterialLaw : public dG3DMaterialLaw{
+	protected:
+	#ifndef SWIG
+    MIMOFunction* _mimoFct;
+    int _numberOfInternalVariables;
+	#endif
+
+	public:
+		ANNBasedDG3DMaterialLaw(const int num, const double rho, const int numInternalVars, const MIMOFunction& fct);
+		#ifndef SWIG
+		ANNBasedDG3DMaterialLaw(const ANNBasedDG3DMaterialLaw& src);
+		virtual ~ANNBasedDG3DMaterialLaw();
+		virtual materialLaw::matname getType() const {return materialLaw::ANN;}
+		virtual void createIPState(IPStateBase* &ips,const bool* state_=NULL,const MElement *ele=NULL, const int nbFF_=0, const IntPt *GP=NULL, const int gpt = 0) const;
+  // To allow initialization of bulk ip in case of fracture
+		virtual void createIPVariable(IPVariable* &ipv, const MElement *ele, const int nbFF_, const IntPt *GP, const int gpt) const;
+		virtual void initLaws(const std::map<int,materialLaw*> &maplaw);
+		virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent=false);
+		virtual double scaleFactor() const {return 1.;};
+		virtual double soundSpeed() const;
+		virtual materialLaw* clone() const {return new ANNBasedDG3DMaterialLaw(*this);};
+		virtual void checkInternalState(IPVariable* ipv, const IPVariable* ipvprev) const{}; // do nothing
+    virtual bool withEnergyDissipation() const {return false;};
+
+    virtual void getInputData(const ANNBasedDG3DIPVariable* ipv,
+                              const ANNBasedDG3DIPVariable* ipvprev,
+                              fullVector<double>& E,
+                              fullVector<double>& other) const;
+    virtual void setIPvDataFromOutputData(ANNBasedDG3DIPVariable* ipv,
+                                          const ANNBasedDG3DIPVariable* ipvprev,
+                                          const fullVector<double>& q,
+                                          const fullVector<double>& S,
+                                          bool stiff,
+                                          const fullMatrix<double>* DSDE) const;
+    #endif //SWIG
+};
+
+
 class J2SmallStrainDG3DMaterialLaw : public dG3DMaterialLaw
 {
  protected:
@@ -170,6 +213,9 @@ class J2SmallStrainDG3DMaterialLaw : public dG3DMaterialLaw
   J2SmallStrainDG3DMaterialLaw(const int num,const double rho,
                    double E,const double nu,const J2IsotropicHardening &_j2IH,const double tol=1.e-6,
                    const bool tangentByPart= false, const double pert=1e-8);
+  virtual const materialLaw *getConstNonLinearSolverMaterialLaw() const      {
+      return &_j2law;
+      } // =0;
  #ifndef SWIG
   J2SmallStrainDG3DMaterialLaw(const J2SmallStrainDG3DMaterialLaw &source);
   virtual ~J2SmallStrainDG3DMaterialLaw()
@@ -186,7 +232,7 @@ class J2SmallStrainDG3DMaterialLaw : public dG3DMaterialLaw
   virtual void createIPVariable(IPVariable* &ipv,const MElement *ele, const int nbFF_, const IntPt *GP, const int gpt) const;
   virtual void initLaws(const std::map<int,materialLaw*> &maplaw){}
   virtual double soundSpeed() const{return _j2law.soundSpeed();} // or change value ??
-  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true);
+  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent=false);
   virtual const double bulkModulus() const {return _j2law.bulkModulus();}
 	virtual double scaleFactor() const{return _j2law.scaleFactor();};
 	virtual materialLaw* clone() const{return new J2SmallStrainDG3DMaterialLaw(*this);};
@@ -242,7 +288,7 @@ class J2LinearDG3DMaterialLaw : public dG3DMaterialLaw
   virtual void createIPVariable(IPVariable* &ipv,const MElement *ele, const int nbFF_, const IntPt *GP, const int gpt) const;
   virtual void initLaws(const std::map<int,materialLaw*> &maplaw){}
   virtual double soundSpeed() const{return _j2law.soundSpeed();} // or change value ??
-  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true);
+  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent=false);
   virtual const double bulkModulus() const {return _j2law.bulkModulus();}
 	virtual double scaleFactor() const{return _j2law.scaleFactor();}
 	virtual materialLaw* clone() const{return new J2LinearDG3DMaterialLaw(*this);};
@@ -286,7 +332,7 @@ class HyperViscoElasticDG3DMaterialLaw : public dG3DMaterialLaw{
     virtual void createIPVariable(IPVariable* &ipv,const MElement *ele, const int nbFF_, const IntPt *GP, const int gpt) const;
     virtual void initLaws(const std::map<int,materialLaw*> &maplaw){}
     virtual double soundSpeed() const{return _viscoLaw.soundSpeed();} // or change value ??
-    virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true);
+    virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent=false);
     virtual const double bulkModulus() const {return _viscoLaw.bulkModulus();}
     virtual double scaleFactor() const{return _viscoLaw.scaleFactor();}
     virtual materialLaw* clone() const{return new HyperViscoElasticDG3DMaterialLaw(*this);};
@@ -337,7 +383,7 @@ class HyperViscoElastoPlasticPowerYieldDG3DMaterialLaw  : public dG3DMaterialLaw
     virtual void createIPVariable(IPVariable* &ipv,const MElement *ele, const int nbFF_, const IntPt *GP, const int gpt) const;
     virtual void initLaws(const std::map<int,materialLaw*> &maplaw){}
     virtual double soundSpeed() const{return _viscoLaw.soundSpeed();} // or change value ??
-    virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true);
+    virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent=false);
     virtual const double bulkModulus() const {return _viscoLaw.bulkModulus();}
     virtual double scaleFactor() const{return _viscoLaw.scaleFactor();}
     virtual materialLaw* clone() const{return new HyperViscoElastoPlasticPowerYieldDG3DMaterialLaw(*this);};
@@ -381,7 +427,7 @@ class ViscoelasticDG3DMaterialLaw : public dG3DMaterialLaw
   virtual void createIPVariable(IPVariable* &ipv,const MElement *ele, const int nbFF_, const IntPt *GP, const int gpt) const;
   virtual void initLaws(const std::map<int,materialLaw*> &maplaw){}
   virtual double soundSpeed() const{return _Vislaw.soundSpeed();}
-  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true);
+  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent=false);
   virtual const double bulkModulus() const {return _Vislaw.bulkModulus();}
   virtual std::vector<double> read_file(const char* file_name, int file_size); //read from files
 	virtual materialLaw* clone() const{return new ViscoelasticDG3DMaterialLaw(*this);};
@@ -438,7 +484,7 @@ class EOSDG3DMaterialLaw : public dG3DMaterialLaw
   virtual void createIPVariable(IPVariable* &ipv,const MElement *ele, const int nbFF_, const IntPt *GP, const int gpt) const;
   virtual void initLaws(const std::map<int,materialLaw*> &maplaw){}
   virtual double soundSpeed() const {return _EOSlaw.soundSpeed();}
-  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true);
+  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent=false);
 	virtual materialLaw* clone() const{return new EOSDG3DMaterialLaw(*this);};
 	virtual void checkInternalState(IPVariable* ipv, const IPVariable* ipvprev) const;
   virtual bool withEnergyDissipation() const {return _EOSlaw.withEnergyDissipation();};
@@ -476,7 +522,7 @@ class VUMATinterfaceDG3DMaterialLaw : public dG3DMaterialLaw
   virtual void createIPVariable(IPVariable* &ipv,const MElement *ele, const int nbFF_, const IntPt *GP, const int gpt) const;
   virtual void initLaws(const std::map<int,materialLaw*> &maplaw){}
   virtual double soundSpeed() const{return _vumatlaw.soundSpeed();}
-  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true);
+  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent=false);
 	virtual materialLaw* clone() const{return new VUMATinterfaceDG3DMaterialLaw(*this);};
 	virtual void checkInternalState(IPVariable* ipv, const IPVariable* ipvprev) const;
   virtual bool withEnergyDissipation() const {return _vumatlaw.withEnergyDissipation();};
@@ -517,7 +563,7 @@ class TransverseIsotropicDG3DMaterialLaw : public dG3DMaterialLaw
   virtual void createIPVariable(IPVariable* &ipv,const MElement *ele, const int nbFF_, const IntPt *GP, const int gpt) const;
   virtual void initLaws(const std::map<int,materialLaw*> &maplaw){}
   virtual double soundSpeed() const{return _tilaw.soundSpeed();} // or change value ??
-  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true);
+  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent=false);
 	virtual double scaleFactor() const{return _tilaw.scaleFactor();};
 	virtual materialLaw* clone() const{return new TransverseIsotropicDG3DMaterialLaw(*this);};
 	virtual void checkInternalState(IPVariable* ipv, const IPVariable* ipvprev) const;
@@ -560,7 +606,7 @@ class TransverseIsoCurvatureDG3DMaterialLaw : public dG3DMaterialLaw
   virtual void createIPVariable(IPVariable* &ipv,const MElement *ele, const int nbFF_, const IntPt *GP, const int gpt) const;
   virtual void initLaws(const std::map<int,materialLaw*> &maplaw){}
   virtual double soundSpeed() const{return _tilaw.soundSpeed();} // or change value ??
-  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true);
+  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent=false);
 	virtual double scaleFactor() const{return _tilaw.scaleFactor();};
 	virtual materialLaw* clone() const{return new TransverseIsoCurvatureDG3DMaterialLaw(*this);};
 	virtual void checkInternalState(IPVariable* ipv, const IPVariable* ipvprev) const;
@@ -670,7 +716,7 @@ class TransverseIsoYarnBDG3DMaterialLaw : public dG3DMaterialLaw
   virtual void initLaws(const std::map<int,materialLaw*> &maplaw){}
 
   virtual double soundSpeed() const{return _tilaw.soundSpeed();}
-  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true);
+  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent=false);
   virtual materialLaw* clone() const {return new TransverseIsoYarnBDG3DMaterialLaw(*this);};
   virtual void checkInternalState(IPVariable* ipv, const IPVariable* ipvprev) const;
   virtual bool withEnergyDissipation() const {return _tilaw.withEnergyDissipation();};
@@ -714,7 +760,7 @@ class AnisotropicDG3DMaterialLaw : public dG3DMaterialLaw
   virtual void createIPVariable(IPVariable* &ipv,const MElement *ele, const int nbFF_, const IntPt *GP, const int gpt) const;
   virtual void initLaws(const std::map<int,materialLaw*> &maplaw){}
   virtual double soundSpeed() const{return _tilaw.soundSpeed();} // or change value ??
-  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true);
+  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent=false);
 	virtual double scaleFactor() const{return _tilaw.scaleFactor();}
 	virtual materialLaw* clone() const{return new AnisotropicDG3DMaterialLaw(*this);};
 	virtual void checkInternalState(IPVariable* ipv, const IPVariable* ipvprev) const;
@@ -749,7 +795,7 @@ class AnisotropicStochDG3DMaterialLaw : public dG3DMaterialLaw
   virtual void createIPVariable(IPVariable* &ipv,const MElement *ele, const int nbFF_, const IntPt *GP, const int gpt) const;
   virtual void initLaws(const std::map<int,materialLaw*> &maplaw){}
   virtual double soundSpeed() const{return _tilaw.soundSpeed();} // or change value ??
-  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true);
+  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent=false);
 	virtual double scaleFactor() const{return _tilaw.scaleFactor();}
 	virtual materialLaw* clone() const{return new AnisotropicStochDG3DMaterialLaw(*this);};
 	virtual void checkInternalState(IPVariable* ipv, const IPVariable* ipvprev) const;
@@ -790,7 +836,7 @@ class ClusterDG3DMaterialLaw : public dG3DMaterialLaw
     _clusterlaw.initLaws(maplaw);
   }
   virtual double soundSpeed() const{return _clusterlaw.soundSpeed();} // or change value ??
-  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true);
+  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent=false);
   virtual double scaleFactor() const{return _clusterlaw.scaleFactor();}
   virtual materialLaw* clone() const{return new ClusterDG3DMaterialLaw(*this);};
   virtual void checkInternalState(IPVariable* ipv, const IPVariable* ipvprev) const;
@@ -802,6 +848,53 @@ class ClusterDG3DMaterialLaw : public dG3DMaterialLaw
  #endif // SWIG
 };
 
+class TFADG3DMaterialLaw : public dG3DMaterialLaw
+{
+ protected:
+  mlawTFAMaterialLaws _TFAlaw;
+
+ public:
+  TFADG3DMaterialLaw(const int num, double rho, const char *clusterVolume);
+  void addTFAMaterialLaw(int clusterNb, int materialLawNb)
+  {
+    _TFAlaw.addTFAMaterialLaw(clusterNb, materialLawNb);
+  }
+  void readTFAConcentrationTensors(const char *concentrationTensors);
+  //{
+   // _TFAlaw.readTFAConcentrationTensors(concentrationTensors);
+  //}
+  void readTFAInteractionTensors(const char *interactionTensors);
+  //{
+    //_TFAlaw.readTFAInteractionTensors(interactionTensors);
+  //}
+ #ifndef SWIG
+  TFADG3DMaterialLaw(const TFADG3DMaterialLaw &source);
+  virtual ~TFADG3DMaterialLaw(){}
+  // set the time of _tilaw
+   virtual void setTime(const double t,const double dtime){
+    dG3DMaterialLaw::setTime(t,dtime);
+    _TFAlaw.setTime(t,dtime);
+  }
+  virtual materialLaw::matname getType() const {return _TFAlaw.getType();}
+  virtual void createIPState(IPStateBase* &ips,const bool* state_=NULL,const MElement *ele=NULL, const int nbFF_=0, const IntPt *GP=NULL, const int gpt = 0) const;
+  virtual void createIPVariable(IPVariable* &ipv,const MElement *ele, const int nbFF_, const IntPt *GP, const int gpt) const;
+  virtual void initLaws(const std::map<int,materialLaw*> &maplaw)
+  {
+    _TFAlaw.initLaws(maplaw);
+  }
+  virtual double soundSpeed() const{return _TFAlaw.soundSpeed();} // or change value ??
+  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent=false);
+  virtual double scaleFactor() const{return _TFAlaw.scaleFactor();}
+  virtual materialLaw* clone() const{return new TFADG3DMaterialLaw(*this);};
+  virtual void checkInternalState(IPVariable* ipv, const IPVariable* ipvprev) const;
+  virtual bool withEnergyDissipation() const {return _TFAlaw.withEnergyDissipation();};
+  virtual void setSolver(const nonLinearMechSolver* sv){
+		dG3DMaterialLaw::setSolver(sv);
+		_TFAlaw.setSolver(sv);
+  };
+ #endif // SWIG
+};
+
 class LocalDamageHyperelasticDG3DMaterialLaw: public dG3DMaterialLaw{
 protected:
 	#ifndef SWIG
@@ -822,7 +915,7 @@ protected:
     virtual void createIPVariable(IPVariable* &ipv,const MElement *ele, const int nbFF_, const IntPt *GP, const int gpt) const;
     virtual void initLaws(const std::map<int,materialLaw*> &maplaw) {}
     virtual double soundSpeed() const {return _nlLaw->soundSpeed();};
-    virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true);
+    virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent=false);
 		virtual double scaleFactor() const {return _nlLaw->scaleFactor();}
 		virtual materialLaw* clone() const{return new LocalDamageHyperelasticDG3DMaterialLaw(*this);};
 		virtual void checkInternalState(IPVariable* ipv, const IPVariable* ipvprev) const;
@@ -868,7 +961,7 @@ class LocalDamageJ2HyperDG3DMaterialLaw : public dG3DMaterialLaw
   virtual void createIPVariable(IPVariable* &ipv,const MElement *ele, const int nbFF_, const IntPt *GP, const int gpt) const;
   virtual void initLaws(const std::map<int,materialLaw*> &maplaw){}
   virtual double soundSpeed() const;
-  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true);
+  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent=false);
 	virtual double scaleFactor() const{return _nldJ2Hyperlaw->scaleFactor();}
 	virtual materialLaw* clone() const{ return new LocalDamageJ2HyperDG3DMaterialLaw(*this);};
 	virtual void checkInternalState(IPVariable* ipv, const IPVariable* ipvprev) const;
@@ -913,7 +1006,7 @@ class LinearThermoMechanicsDG3DMaterialLaw : public dG3DMaterialLaw // public ma
   virtual void createIPVariable(IPVariable* &ipv,const MElement *ele, const int nbFF_, const IntPt *GP, const int gpt) const;
   virtual void initLaws(const std::map<int,materialLaw*> &maplaw){}
   virtual double soundSpeed() const{return _lawLinearTM->soundSpeed();} // or change value ??
-  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true);
+  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent=false);
 	virtual double scaleFactor() const {return _lawLinearTM->shearModulus();};
   virtual int getNumberOfExtraDofsDiffusion() const {return 1;}
   virtual double getExtraDofStoredEnergyPerUnitField(double T) const;
@@ -959,7 +1052,7 @@ class J2ThermoMechanicsDG3DMaterialLaw : public dG3DMaterialLaw
   virtual void createIPVariable(IPVariable* &ipv,const MElement *ele, const int nbFF_, const IntPt *GP, const int gpt) const;
   virtual void initLaws(const std::map<int,materialLaw*> &maplaw){}
   virtual double soundSpeed() const{return _j2law.soundSpeed();} // or change value ??
-  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true);
+  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent=false);
   virtual const double bulkModulus() const {return _j2law.bulkModulus();}
 	virtual double scaleFactor() const{return _j2law.shearModulus();};
   virtual int getNumberOfExtraDofsDiffusion() const {return 1;}
@@ -1013,7 +1106,7 @@ class FullJ2ThermoMechanicsDG3DMaterialLaw : public dG3DMaterialLaw{
     virtual void createIPVariable(IPVariable* &ipv,const MElement *ele, const int nbFF_, const IntPt *GP, const int gpt) const;
     virtual void initLaws(const std::map<int,materialLaw*> &maplaw){}
     virtual double soundSpeed() const{return _j2FullThermo.soundSpeed();}
-    virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true,const bool checkfrac=true);
+    virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true,const bool checkfrac=true, const bool dTangent=false);
     virtual double scaleFactor() const;
     virtual int getNumberOfExtraDofsDiffusion() const {return 1;}
     virtual double getInitialExtraDofStoredEnergyPerUnitField() const;
@@ -1068,7 +1161,7 @@ class mlawAnIsotropicTherMechDG3DMaterialLaw :public dG3DMaterialLaw
   virtual void createIPVariable(IPVariable* &ipv,const MElement *ele, const int nbFF_, const IntPt *GP, const int gpt) const;
   virtual void initLaws(const std::map<int,materialLaw*> &maplaw){}
   virtual double soundSpeed() const{return _lawAnTM->soundSpeed();} // or change value ??
-  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true);
+  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent=false);
   virtual int getNumberOfExtraDofsDiffusion() const {return 2;}
   double getExtraDofStoredEnergyPerUnitField(double T) const
   {
@@ -1123,7 +1216,7 @@ class SMPDG3DMaterialLaw :public dG3DMaterialLaw // ,public mlawSMP
   virtual void initLaws(const std::map<int,materialLaw*> &maplaw){}
   virtual double soundSpeed() const{return _lawTMSMP->soundSpeed();} // or change value ??
   virtual void checkInternalState(IPVariable* ipv, const IPVariable* ipvprev) const;
-  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true);
+  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent=false);
   virtual int getNumberOfExtraDofsDiffusion() const {return 1;}
   double getExtraDofStoredEnergyPerUnitField(double T) const;
 	virtual materialLaw* clone() const{ return new SMPDG3DMaterialLaw(*this);};
@@ -1226,7 +1319,7 @@ public:
     virtual void initLaws               (const std::map<int, materialLaw*> &maplaw)  {}
     virtual double soundSpeed           ()const     {return _lawTMSMP->soundSpeed();} // or change value ??
     virtual void checkInternalState     (IPVariable *ipv, const IPVariable *ipvprev) const;
-    virtual void stress                 (IPVariable *ipv, const IPVariable *ipvprev, const bool stiff=true, const bool checkfrac=true);
+    virtual void stress                 (IPVariable *ipv, const IPVariable *ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent=false);
     virtual int getNumberOfExtraDofsDiffusion   ()const   {return 1;}
             double getExtraDofStoredEnergyPerUnitField  (double T)const;
     virtual materialLaw* clone          ()const     { return new PhenomenologicalSMPDG3DMaterialLaw(*this);};
@@ -1236,6 +1329,7 @@ public:
         dG3DMaterialLaw::setSolver(sv);
         if (_lawTMSMP!=NULL) _lawTMSMP->setSolver(sv);
     }
+  }
 #endif
 };
 //===========/end/PhenomenologicalSMPDG3DMaterialLaw===================================================================================
@@ -1266,7 +1360,7 @@ class crystalPlasticityDG3DMaterialLaw : public dG3DMaterialLaw{
     virtual void initLaws(const std::map<int,materialLaw*> &maplaw){}
     virtual double soundSpeed() const;// or change value ??
     virtual void checkInternalState(IPVariable* ipv, const IPVariable* ipvp) const;
-    virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true);
+    virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent=false);
     virtual double scaleFactor() const;
     virtual materialLaw* clone() const{return new crystalPlasticityDG3DMaterialLaw(*this);};
     virtual bool withEnergyDissipation() const;
@@ -1274,6 +1368,34 @@ class crystalPlasticityDG3DMaterialLaw : public dG3DMaterialLaw{
     #endif
 };
 
+class gursonUMATDG3DMaterialLaw : public dG3DMaterialLaw{
+  protected:
+    #ifndef SWIG
+    mlawGursonUMAT *_glaw; 
+    #endif //SWIG
+
+  public:
+    gursonUMATDG3DMaterialLaw(const int num, const double temperature, const char *propName);
+    #ifndef SWIG
+    gursonUMATDG3DMaterialLaw(const gursonUMATDG3DMaterialLaw &source);
+    virtual ~gursonUMATDG3DMaterialLaw();
+
+    // set the time of _cplaw
+    virtual void setTime(const double t,const double dtime);
+    virtual materialLaw::matname getType() const;
+    virtual void createIPState(IPStateBase* &ips,const bool* state_=NULL,const MElement *ele=NULL, const int nbFF_=0, const IntPt *GP=NULL, const int gpt = 0) const;
+    virtual void createIPVariable(IPVariable* &ipv,const MElement *ele, const int nbFF_, const IntPt *GP, const int gpt) const;
+    virtual void initLaws(const std::map<int,materialLaw*> &maplaw){}
+    virtual double soundSpeed() const;// or change value ??
+    virtual void checkInternalState(IPVariable* ipv, const IPVariable* ipvp) const;
+    virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent=false);
+    virtual double scaleFactor() const;
+    virtual materialLaw* clone() const{return new gursonUMATDG3DMaterialLaw(*this);};
+    virtual bool withEnergyDissipation() const;
+    virtual void setSolver(const nonLinearMechSolver* sv);
+    #endif
+};
+
 
 class LinearElecTherMechDG3DMaterialLaw : public dG3DMaterialLaw // public materialLaw
 {
@@ -1307,7 +1429,7 @@ class LinearElecTherMechDG3DMaterialLaw : public dG3DMaterialLaw // public mater
   virtual void initLaws(const std::map<int,materialLaw*> &maplaw){}
   virtual double soundSpeed() const{return _lawLinearETM->soundSpeed();} // or change value ??
   virtual void checkInternalState(IPVariable* ipv, const IPVariable* ipvprev) const;
-  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true);
+  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent=false);
   virtual int getNumberOfExtraDofsDiffusion() const {return 2;}
   double getExtraDofStoredEnergyPerUnitField(double T) const
   {
@@ -1363,7 +1485,7 @@ class mlawAnIsotropicElecTherMechDG3DMaterialLaw :public dG3DMaterialLaw
   virtual void initLaws(const std::map<int,materialLaw*> &maplaw){}
   virtual double soundSpeed() const{return _lawETM->soundSpeed();} // or change value ??
   virtual void checkInternalState(IPVariable* ipv, const IPVariable* ipvprev) const;
-  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true);
+  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent=false);
   virtual int getNumberOfExtraDofsDiffusion() const {return 2;}
   double getExtraDofStoredEnergyPerUnitField(double T) const
   {
@@ -1424,7 +1546,7 @@ class mlawElecSMPDG3DMaterialLaw :public dG3DMaterialLaw
   virtual void initLaws(const std::map<int,materialLaw*> &maplaw){}
   virtual double soundSpeed() const{return _lawETMSMP->soundSpeed();} // or change value ??
   virtual void checkInternalState(IPVariable* ipv, const IPVariable* ipvprev) const;
-  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true);
+  virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent=false);
   virtual int getNumberOfExtraDofsDiffusion() const {return 2;}
   double getExtraDofStoredEnergyPerUnitField(double T) const
   {
diff --git a/dG3D/src/dG3DMultiscaleCohesiveMaterialLaw.cpp b/dG3D/src/dG3DMultiscaleCohesiveMaterialLaw.cpp
index 8bbf7a8c9f25db26acfcd7ddbf8449fcd142cab0..0b88ce69573d607efb6b9b13c8da11507bf9a019 100644
--- a/dG3D/src/dG3DMultiscaleCohesiveMaterialLaw.cpp
+++ b/dG3D/src/dG3DMultiscaleCohesiveMaterialLaw.cpp
@@ -197,7 +197,7 @@ void dG3DMultiscaleCohesiveLaw::transferInterfaceDataToBulk(IPVariable* ipv, con
   }
 };
 
-void dG3DMultiscaleCohesiveLaw::stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff, const bool checkfrac){
+void dG3DMultiscaleCohesiveLaw::stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff, const bool checkfrac, const bool dTangent){
   FractureCohesive3DIPVariable *fipv = static_cast < FractureCohesive3DIPVariable *> (ipv);
   const FractureCohesive3DIPVariable *fipvprev = static_cast < const FractureCohesive3DIPVariable *> (ipvprev);
 
@@ -332,7 +332,7 @@ void TwoFieldMultiscaleCohesive3DLaw::transferInterfaceDataToBulk(IPVariable* ip
 };
 
 
-void TwoFieldMultiscaleCohesive3DLaw::stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff, const bool checkfrac){
+void TwoFieldMultiscaleCohesive3DLaw::stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff, const bool checkfrac, const bool dTangent){
   FractureCohesive3DIPVariable *fipv = static_cast < FractureCohesive3DIPVariable *> (ipv);
   const FractureCohesive3DIPVariable *fipvprev = static_cast < const FractureCohesive3DIPVariable *> (ipvprev);
 
@@ -598,7 +598,7 @@ void MultiscaleAdhesive3DLaw::transferInterfaceDataToBulk(IPVariable* ipv, const
 };
 
 
-void MultiscaleAdhesive3DLaw::stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff, const bool checkfrac){
+void MultiscaleAdhesive3DLaw::stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff, const bool checkfrac, const bool dTangent){
   FractureCohesive3DIPVariable *fipv = static_cast < FractureCohesive3DIPVariable *> (ipv);
   const FractureCohesive3DIPVariable *fipvprev = static_cast < const FractureCohesive3DIPVariable *> (ipvprev);
 
diff --git a/dG3D/src/dG3DMultiscaleCohesiveMaterialLaw.h b/dG3D/src/dG3DMultiscaleCohesiveMaterialLaw.h
index 7581874f30f55730a475073df70070fb3738d2eb..6d69bbb5daf998cd20cf3c0b35bccf11a350c3be 100644
--- a/dG3D/src/dG3DMultiscaleCohesiveMaterialLaw.h
+++ b/dG3D/src/dG3DMultiscaleCohesiveMaterialLaw.h
@@ -26,7 +26,7 @@ class GeneralMultiscaleBulkFollwedCohesive3DLaw : public GeneralBulkFollwedCohes
     virtual void createIPState(IPStateBase* &ips,const bool* state_=NULL,const MElement *ele=NULL, const int nbFF_=0, const IntPt *GP=NULL, const int gpt = 0) const = 0;
     virtual void createIPVariable(IPVariable* &ipv,const MElement *ele, const int nbFF_, const IntPt *GP, const int gpt) const = 0;
 
-    virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true) = 0;
+    virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent=false) = 0;
     virtual void checkCohesiveInsertion(IPStateBase* ipsm, IPStateBase* ipsp, const bool forcedInsert= false) const = 0;
     virtual void transferInterfaceDataToBulk(IPVariable* ipv, const IPVariable* ipvprev,  const bool stiff) const = 0;
 
@@ -59,7 +59,7 @@ class dG3DMultiscaleCohesiveLaw : public GeneralMultiscaleBulkFollwedCohesive3DL
 		virtual void createIPState(IPStateBase* &ips,const bool* state_=NULL,const MElement *ele=NULL, const int nbFF_=0, const IntPt *GP=NULL, const int gpt = 0) const;
     virtual void createIPVariable(IPVariable* &ipv,const MElement *ele, const int nbFF_, const IntPt *GP, const int gpt) const;
 
-    virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true);
+    virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent =false);
     virtual void checkCohesiveInsertion(IPStateBase* ipsm, IPStateBase* ipsp, const bool forcedInsert= false) const;
     virtual void transferInterfaceDataToBulk(IPVariable* ipv, const IPVariable* ipvprev,  const bool stiff) const;
 		virtual materialLaw* clone() const {return new dG3DMultiscaleCohesiveLaw(*this);};
@@ -81,7 +81,7 @@ class TwoFieldMultiscaleCohesive3DLaw : public GeneralMultiscaleBulkFollwedCohes
 		virtual void createIPState(IPStateBase* &ips,const bool* state_=NULL,const MElement *ele=NULL, const int nbFF_=0, const IntPt *GP=NULL, const int gpt = 0) const;
     virtual void createIPVariable(IPVariable* &ipv,const MElement *ele, const int nbFF_, const IntPt *GP, const int gpt) const;
 
-    virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true);
+    virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent =false);
     virtual void checkCohesiveInsertion(IPStateBase* ipsm, IPStateBase* ipsp, const bool forcedInsert= false) const;
     virtual void transferInterfaceDataToBulk(IPVariable* ipv, const IPVariable* ipvprev,  const bool stiff) const;
 		virtual materialLaw* clone() const {return new TwoFieldMultiscaleCohesive3DLaw(*this);};
@@ -100,7 +100,7 @@ class MultiscaleAdhesive3DLaw : public GeneralMultiscaleBulkFollwedCohesive3DLaw
 		virtual void createIPState(IPStateBase* &ips,const bool* state_=NULL,const MElement *ele=NULL, const int nbFF_=0, const IntPt *GP=NULL, const int gpt = 0) const;
     virtual void createIPVariable(IPVariable* &ipv,const MElement *ele, const int nbFF_, const IntPt *GP, const int gpt) const;
 
-    virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true);
+    virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent =false);
     virtual void checkCohesiveInsertion(IPStateBase* ipsm, IPStateBase* ipsp, const bool forcedInsert= false) const;
     virtual void transferInterfaceDataToBulk(IPVariable* ipv, const IPVariable* ipvprev,  const bool stiff) const;
 		virtual materialLaw* clone() const {return new MultiscaleAdhesive3DLaw(*this);};
diff --git a/dG3D/src/dG3DMultiscaleMaterialLaw.cpp b/dG3D/src/dG3DMultiscaleMaterialLaw.cpp
index 52c5f0821fecc5ea3f12f615e4b45a6a7f953dfc..b8e398dbdba1c144f59077d7c59e0996546f85d6 100644
--- a/dG3D/src/dG3DMultiscaleMaterialLaw.cpp
+++ b/dG3D/src/dG3DMultiscaleMaterialLaw.cpp
@@ -87,7 +87,7 @@ void dG3DElasticMultiscaleMaterialLaw::createIPVariable(IPVariable* &ipv,const M
 }
 
 
-void dG3DElasticMultiscaleMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac)
+void dG3DElasticMultiscaleMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac, const bool dTangent)
 {
   /* get ipvariable */
   dG3DIPVariableBase* ipvcur = static_cast<dG3DIPVariableBase*>(ipv);;
@@ -205,7 +205,7 @@ void dG3DMultiscaleMaterialLaw::checkInternalState(IPVariable* ipv, const IPVari
 
 };
 
-void dG3DMultiscaleMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff, const bool checkfrac){
+void dG3DMultiscaleMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff, const bool checkfrac, const bool dTangent){
 	dG3DMultiscaleIPVariable* mipv = NULL;
 	const dG3DMultiscaleIPVariable* mipvprev = NULL;
 
@@ -229,21 +229,31 @@ void dG3DMultiscaleMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvpre
 	  // set tangent averaging flag
   solver->tangentAveragingFlag(stiff);
   // solve micro problem
-  double time = solver->microSolve();
-
-  // get homogenized properties form solved micro problem
-	mipv->getRefToFirstPiolaKirchhoffStress() = solver->getHomogenizationState(IPStateBase::current)->getHomogenizedStress();
-
-	mipv->getRefToDefoEnergy() = solver->getHomogenizationState(IPStateBase::current)->getDeformationEnergy();
-	mipv->getRefToPlasticEnergy() = solver->getHomogenizationState(IPStateBase::current)->getPlasticEnergy();
-	mipv->getRefToIrreversibleEnergy() = solver->getHomogenizationState(IPStateBase::current)->getIrreversibleEnergy();
-  mipv->getRefToLostEllipticityCriterion() = solver->getHomogenizationState(IPStateBase::current)->getLostOfSolutionUniquenessCriterion();
-
-	if (stiff){
-    mipv->getRefToTangentModuli() = solver->getHomogenizationState(IPStateBase::current)->getHomogenizedTangentOperator_F_F();
-		mipv->getRefToDIrreversibleEnergyDDeformationGradient() = solver->getHomogenizationState(IPStateBase::current)->getHomogenizedTangentOperator_IrreversibleEnergy_F();
-  };
-  mipv->setRefToDGElasticTangentModuli(elasticStiffness);
+  bool success = solver->microSolve();
+  if (success)
+  {
+    // get homogenized properties form solved micro problem
+    mipv->getRefToFirstPiolaKirchhoffStress() = solver->getHomogenizationState(IPStateBase::current)->getHomogenizedStress();
+
+    mipv->getRefToDefoEnergy() = solver->getHomogenizationState(IPStateBase::current)->getDeformationEnergy();
+    mipv->getRefToPlasticEnergy() = solver->getHomogenizationState(IPStateBase::current)->getPlasticEnergy();
+    mipv->getRefToIrreversibleEnergy() = solver->getHomogenizationState(IPStateBase::current)->getIrreversibleEnergy();
+    mipv->getRefToLostEllipticityCriterion() = solver->getHomogenizationState(IPStateBase::current)->getLostOfSolutionUniquenessCriterion();
+
+    if (stiff){
+      mipv->getRefToTangentModuli() = solver->getHomogenizationState(IPStateBase::current)->getHomogenizedTangentOperator_F_F();
+      mipv->getRefToDIrreversibleEnergyDDeformationGradient() = solver->getHomogenizationState(IPStateBase::current)->getHomogenizedTangentOperator_IrreversibleEnergy_F();
+    };
+    mipv->setRefToDGElasticTangentModuli(elasticStiffness);
+    
+  }
+  else
+  {
+    // to force solver make other NR step with a smaller time step
+    mipv->getRefToFirstPiolaKirchhoffStress()(0,0) = sqrt(-1.);
+    mipv->getRefToFirstPiolaKirchhoffStress()(1,1) = sqrt(-1.);
+    mipv->getRefToFirstPiolaKirchhoffStress()(2,2) = sqrt(-1.);
+  }
 };
 
 void dG3DMultiscaleMaterialLaw::setElasticStiffness(IPVariable* ipv) const{
@@ -337,7 +347,7 @@ void MultiscaleThermoMechanicsDG3DMaterialLaw::checkInternalState(IPVariable* ip
   // do nothing
 };
 
-void MultiscaleThermoMechanicsDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff, const bool checkfrac){
+void MultiscaleThermoMechanicsDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff, const bool checkfrac, const bool dTangent){
  MultiscaleThermoMechanicsDG3DIPVariable* mipv = dynamic_cast<MultiscaleThermoMechanicsDG3DIPVariable*>(ipv);
   const MultiscaleThermoMechanicsDG3DIPVariable* mipvprev = dynamic_cast<const MultiscaleThermoMechanicsDG3DIPVariable*>(ipvprev);
 
@@ -353,44 +363,52 @@ void MultiscaleThermoMechanicsDG3DMaterialLaw::stress(IPVariable* ipv, const IPV
   solver->getMicroBC()->setConstitutiveExtraDofDiffusionValue(0,T);
   solver->tangentAveragingFlag(stiff);
   // solve microscopic problem
-  double time =solver->microSolve();
-
-	const homogenizedData* homoData = solver->getHomogenizationState(IPStateBase::current);
-
-  // get stress
-  mipv->getRefToFirstPiolaKirchhoffStress() = homoData->getHomogenizedStress();
-  mipv->getRefToFlux()[0] = homoData->getHomogenizedConstitutiveExtraDofFlux(0);
-  mipv->getRefToMechanicalSource()(0) = homoData->getHomogenizedConstitutiveExtraDofMechanicalSource(0);
-  mipv->getRefToExtraDofFieldCapacityPerUnitField()(0) = homoData->getHomogenizedConstitutiveExtraDofFieldCapacityPerUnitField(0);
-
-  double&w = mipv->getRefToFieldSource()(0);
-  // thermal source is compute from previous step to avoid derivatives
-  double Cpprev = mipvprev->getConstRefToExtraDofFieldCapacityPerUnitField()(0);
-  w = -Cpprev*(T-T0)/this->getTimeStep();
-
-  if (stiff){
-    // stress
-    mipv->getRefToTangentModuli() = homoData->getHomogenizedTangentOperator_F_F();
-    mipv->getRefTodPdGradField()[0] = homoData->getHomogenizedTangentOperator_F_gradT(0);
-    mipv->getRefTodPdField()[0] = homoData->getHomogenizedTangentOperator_F_T(0);;
-
-
-    // flux
-    mipv->getRefTodFluxdGradField()[0][0] = homoData->getHomogenizedTangentOperator_gradT_gradT(0,0);
-    mipv->getRefTodFluxdField()[0][0] =  homoData->getHomogenizedTangentOperator_gradT_T(0,0);
-    mipv->getRefTodFluxdF()[0] = homoData->getHomogenizedTangentOperator_gradT_F(0);
-
-
-    double &dwdT = mipv->getRefTodFieldSourcedField()(0,0);
-    SVector3& dwdgradT = mipv->getRefTodFieldSourcedGradField()[0][0];
-    STensor3 &dwdF = mipv->getRefTodFieldSourcedF()[0];
-    dwdT = -Cpprev/this->getTimeStep();
-    STensorOperation::zero(dwdgradT);
-    STensorOperation::zero(dwdF);
-
-    mipv->getRefTodMechanicalSourcedField()(0,0) = homoData->getHomogenizedTangentOperator_ConstitutiveExtraDofMechanicalSource_T(0,0);
-    mipv->getRefTodMechanicalSourcedGradField()[0][0] = homoData->getHomogenizedTangentOperator_ConstitutiveExtraDofMechanicalSource_gradT(0,0);
-    mipv->getRefTodMechanicalSourcedF()[0] = homoData->getHomogenizedTangentOperator_ConstitutiveExtraDofMechanicalSource_F(0);
+  bool success = solver->microSolve();
+  if (success)
+  {
+    const homogenizedData* homoData = solver->getHomogenizationState(IPStateBase::current);
+    // get stress
+    mipv->getRefToFirstPiolaKirchhoffStress() = homoData->getHomogenizedStress();
+    mipv->getRefToFlux()[0] = homoData->getHomogenizedConstitutiveExtraDofFlux(0);
+    mipv->getRefToMechanicalSource()(0) = homoData->getHomogenizedConstitutiveExtraDofMechanicalSource(0);
+    mipv->getRefToExtraDofFieldCapacityPerUnitField()(0) = homoData->getHomogenizedConstitutiveExtraDofFieldCapacityPerUnitField(0);
+
+    double&w = mipv->getRefToFieldSource()(0);
+    // thermal source is compute from previous step to avoid derivatives
+    double Cpprev = mipvprev->getConstRefToExtraDofFieldCapacityPerUnitField()(0);
+    w = -Cpprev*(T-T0)/this->getTimeStep();
+
+    if (stiff){
+      // stress
+      mipv->getRefToTangentModuli() = homoData->getHomogenizedTangentOperator_F_F();
+      mipv->getRefTodPdGradField()[0] = homoData->getHomogenizedTangentOperator_F_gradT(0);
+      mipv->getRefTodPdField()[0] = homoData->getHomogenizedTangentOperator_F_T(0);;
+
+
+      // flux
+      mipv->getRefTodFluxdGradField()[0][0] = homoData->getHomogenizedTangentOperator_gradT_gradT(0,0);
+      mipv->getRefTodFluxdField()[0][0] =  homoData->getHomogenizedTangentOperator_gradT_T(0,0);
+      mipv->getRefTodFluxdF()[0] = homoData->getHomogenizedTangentOperator_gradT_F(0);
+
+
+      double &dwdT = mipv->getRefTodFieldSourcedField()(0,0);
+      SVector3& dwdgradT = mipv->getRefTodFieldSourcedGradField()[0][0];
+      STensor3 &dwdF = mipv->getRefTodFieldSourcedF()[0];
+      dwdT = -Cpprev/this->getTimeStep();
+      STensorOperation::zero(dwdgradT);
+      STensorOperation::zero(dwdF);
+
+      mipv->getRefTodMechanicalSourcedField()(0,0) = homoData->getHomogenizedTangentOperator_ConstitutiveExtraDofMechanicalSource_T(0,0);
+      mipv->getRefTodMechanicalSourcedGradField()[0][0] = homoData->getHomogenizedTangentOperator_ConstitutiveExtraDofMechanicalSource_gradT(0,0);
+      mipv->getRefTodMechanicalSourcedF()[0] = homoData->getHomogenizedTangentOperator_ConstitutiveExtraDofMechanicalSource_F(0);
+    }
+  }
+  else
+  {
+    // to force solver make other NR step with a smaller time step  
+    mipv->getRefToFirstPiolaKirchhoffStress()(0,0) = sqrt(-1);
+    mipv->getRefToFirstPiolaKirchhoffStress()(1,1) = sqrt(-1);
+    mipv->getRefToFirstPiolaKirchhoffStress()(2,2) = sqrt(-1);
   }
 };
 
diff --git a/dG3D/src/dG3DMultiscaleMaterialLaw.h b/dG3D/src/dG3DMultiscaleMaterialLaw.h
index 704eb9eab3789c9a1d9095b063bebcb543890382..fe7bfb029478fa57b8a66c87e46f047c7d29fb64 100644
--- a/dG3D/src/dG3DMultiscaleMaterialLaw.h
+++ b/dG3D/src/dG3DMultiscaleMaterialLaw.h
@@ -54,7 +54,7 @@ protected:
 		virtual void createIPVariable(IPVariable* &ipv, const MElement *ele, const int nbFF_, const IntPt *GP, const int gpt) const;
 		virtual void initLaws(const std::map<int,materialLaw*> &maplaw);
 		virtual void checkInternalState(IPVariable* ipv, const IPVariable* ipvprev) const{};
-		virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true);
+		virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent =false);
 		virtual double scaleFactor() const;
 		virtual double soundSpeed() const;
 		virtual bool isNumeric() const{return false;} // not true numeric material
@@ -95,7 +95,7 @@ class dG3DMultiscaleMaterialLaw : public dG3DMultiscaleMaterialLawBase{
     // The bool is necessery for computation of matrix by perturbation in this case the check of fracture
     // has not to be performed.
     virtual void checkInternalState(IPVariable* ipv, const IPVariable* ipvprev) const;
-    virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true);
+    virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent =false);
     virtual void setElasticStiffness(IPVariable* ipv) const;
     virtual bool isNumeric() const{return true;}
 		virtual void initialIPVariable(IPVariable* ipv, bool stiff);
@@ -143,7 +143,7 @@ class MultiscaleThermoMechanicsDG3DMaterialLaw : public dG3DMaterialLaw, public
     // The bool is necessery for computation of matrix by perturbation in this case the check of fracture
     // has not to be performed.
     virtual void checkInternalState(IPVariable* ipv, const IPVariable* ipvprev) const;
-    virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true);
+    virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent =false);
     virtual void setElasticStiffness(IPVariable* ipv) const;
     virtual bool isNumeric() const{return true;}
 		virtual void initialIPVariable(IPVariable* ipv, bool stiff);
diff --git a/dG3D/src/dG3Dpy.i b/dG3D/src/dG3Dpy.i
index 986723b65553ceb0d6f638fc7fe27b773ec0cb40..bbd7faaa91b43eb575f0a75c0f468fc6cdef7b65 100644
--- a/dG3D/src/dG3Dpy.i
+++ b/dG3D/src/dG3Dpy.i
@@ -27,6 +27,7 @@
   #include "dG3DEnhancedStrainMaterialLaw.h"
   #include "axisymmetricDG3DDomain.h"
   #include "dG3D1DDomain.h"
+  #include "computeWithMaterialLaw.h"
 %}
 %nodefaultctor dG3DMaterialLaw;
 %nodefaultctor NonLocalPorousDuctileDamageDG3DMaterialLaw;
@@ -57,4 +58,5 @@
 %include "dG3DEnhancedStrainMaterialLaw.h"
 %include "axisymmetricDG3DDomain.h"
 %include "dG3D1DDomain.h"
+%include "computeWithMaterialLaw.h"
 
diff --git a/dG3D/src/hoDGMaterialLaw.cpp b/dG3D/src/hoDGMaterialLaw.cpp
index 838dfde1537d05c349187c9ce97ee89f7930ab68..13a0ca39e8d0e0487f54cc530abef0e78d0b8775 100644
--- a/dG3D/src/hoDGMaterialLaw.cpp
+++ b/dG3D/src/hoDGMaterialLaw.cpp
@@ -210,7 +210,7 @@ void hoDGElasticMaterialLaw::initLaws(const std::map<int,materialLaw*> &maplaw){
   }
 };
 
-void hoDGElasticMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff, const bool checkfrac){
+void hoDGElasticMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff, const bool checkfrac, const bool dTangent){
 
   hoDGIPVariable* hoipv = static_cast<hoDGIPVariable*>(ipv);
   const hoDGIPVariable* hoipvprev = static_cast<const hoDGIPVariable*>(ipvprev);
@@ -303,7 +303,7 @@ void fullHODGElasticMaterialLaw::initLaws(const std::map<int,materialLaw*> &mapl
 
 };
 
-void fullHODGElasticMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff, const bool checkfrac){
+void fullHODGElasticMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff, const bool checkfrac, const bool dTangent){
 
   hoDGIPVariable* hoipv = static_cast<hoDGIPVariable*>(ipv);
   const hoDGIPVariable* hoipvprev = static_cast<const hoDGIPVariable*>(ipvprev);
@@ -420,7 +420,7 @@ void hoDGMultiscaleMaterialLaw::createIPVariable(IPVariable* &ipv,const MElement
   ipv = new hoDGMultiscaleIPVariable(oninter);
 };
 
-void hoDGMultiscaleMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff, const bool checkfrac){
+void hoDGMultiscaleMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff, const bool checkfrac, const bool dTangent){
   hoDGMultiscaleIPVariable* mipv = static_cast<hoDGMultiscaleIPVariable*>(ipv);
   const hoDGMultiscaleIPVariable* mipvprev = static_cast<const hoDGMultiscaleIPVariable*>(ipvprev);
   nonLinearMechSolver* solver = mipv->getMicroSolver();
@@ -434,27 +434,30 @@ void hoDGMultiscaleMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvpre
   // set tangent averaging flag
   solver->tangentAveragingFlag(stiff);
   // solve micro problem
-  double time = solver->microSolve();
-  // get homogenized properties form solved micro problem
-	mipv->getRefToFirstPiolaKirchhoffStress() = solver->getHomogenizationState(IPStateBase::current)->getHomogenizedStress();
-  if (stiff){
-    mipv->getRefToTangentModuli()= solver->getHomogenizationState(IPStateBase::current)->getHomogenizedTangentOperator_F_F();
-	}
-
-  mipv->setRefToDGElasticTangentModuli(elasticStiffness);
-
-  if (solver->getMicroBC()->getOrder() ==2){
-		mipv->getRefToSecondOrderStress() = solver->getHomogenizationState(IPStateBase::current)->getHomogenizedSecondOrderStress();
- 
+  bool sucess = solver->microSolve();
+  if (sucess)
+  {
+    // get homogenized properties form solved micro problem
+    mipv->getRefToFirstPiolaKirchhoffStress() = solver->getHomogenizationState(IPStateBase::current)->getHomogenizedStress();
     if (stiff){
-			mipv->getRefToCrossTangentFirstSecond() = solver->getHomogenizationState(IPStateBase::current)->getHomogenizedTangentOperator_F_G();
-			mipv->getRefToCrossTangentSecondFirst() = solver->getHomogenizationState(IPStateBase::current)->getHomogenizedTangentOperator_G_F();
-			mipv->getRefToSecondOrderTangent() = solver->getHomogenizationState(IPStateBase::current)->getHomogenizedTangentOperator_G_G();
+      mipv->getRefToTangentModuli()= solver->getHomogenizationState(IPStateBase::current)->getHomogenizedTangentOperator_F_F();
     }
 
-    mipv->setRefToCrossFirstSecondDGElasticTangentModuli(elasticFirstSecondTangent);
-    mipv->setRefToCrossSecondFirstDGElasticTangentModuli(elasticSecondFirstTangent);
-    mipv->setRefToSecondOrderDGElasticTangentModuli(elasticSecondOrderTangent);
+    mipv->setRefToDGElasticTangentModuli(elasticStiffness);
+
+    if (solver->getMicroBC()->getOrder() ==2){
+      mipv->getRefToSecondOrderStress() = solver->getHomogenizationState(IPStateBase::current)->getHomogenizedSecondOrderStress();
+   
+      if (stiff){
+        mipv->getRefToCrossTangentFirstSecond() = solver->getHomogenizationState(IPStateBase::current)->getHomogenizedTangentOperator_F_G();
+        mipv->getRefToCrossTangentSecondFirst() = solver->getHomogenizationState(IPStateBase::current)->getHomogenizedTangentOperator_G_F();
+        mipv->getRefToSecondOrderTangent() = solver->getHomogenizationState(IPStateBase::current)->getHomogenizedTangentOperator_G_G();
+      }
+
+      mipv->setRefToCrossFirstSecondDGElasticTangentModuli(elasticFirstSecondTangent);
+      mipv->setRefToCrossSecondFirstDGElasticTangentModuli(elasticSecondFirstTangent);
+      mipv->setRefToSecondOrderDGElasticTangentModuli(elasticSecondOrderTangent);
+    }
   }
 };
 
diff --git a/dG3D/src/hoDGMaterialLaw.h b/dG3D/src/hoDGMaterialLaw.h
index 249eab771d9c98757c9d727d4a7313ab673e6ff5..2ba55ae86cd6b27760dc03f62f0295f837fbe016 100644
--- a/dG3D/src/hoDGMaterialLaw.h
+++ b/dG3D/src/hoDGMaterialLaw.h
@@ -47,7 +47,7 @@ class hoDGElasticMaterialLaw : public dG3DMaterialLaw{
     virtual void initLaws(const std::map<int,materialLaw*> &maplaw);
     virtual double soundSpeed() const;
     virtual bool isHighOrder() const;
-    virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true);
+    virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent =false);
     virtual void setElasticStiffness(IPVariable* ipv) const;
 
     virtual void fillElasticStiffness(elasticLawBase* firstlaw, STensor43 &tangent) const;
@@ -80,7 +80,7 @@ class fullHODGElasticMaterialLaw : public hoDGElasticMaterialLaw{
     virtual matname getType() const{return materialLaw::secondOrderElastic;};
     virtual void initLaws(const std::map<int,materialLaw*> &maplaw);
 
-    virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true);
+    virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent =false);
 
     virtual void fillElasticStiffness(elasticLawBase* fs, STensor53& firstsecond, STensor53& secondfirst);
 		virtual materialLaw* clone() const {return new fullHODGElasticMaterialLaw(*this);}
@@ -124,7 +124,7 @@ class hoDGMultiscaleMaterialLaw : public dG3DMaterialLaw,
     // If law enable fracture the bool checkfrac allow to detect fracture. This bool is unused otherwise
     // The bool is necessery for computation of matrix by perturbation in this case the check of fracture
     // has not to be performed.
-    virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true);
+    virtual void stress(IPVariable* ipv, const IPVariable* ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent =false);
     virtual bool isHighOrder() const ;
     void fillElasticStiffness(double & rho, STensor43& LF, STensor53& LG, STensor53& JF, STensor63& JG);
     virtual void setElasticStiffness(IPVariable* ipv) const;
diff --git a/dG3D/src/nonLocalDamageDG3DIPVariable.cpp b/dG3D/src/nonLocalDamageDG3DIPVariable.cpp
index 6f3893ef6c6e7782956e6c35744cdb4cb3b27fa9..de17999e254eea8a1fd87570b2f730192c702ef9 100644
--- a/dG3D/src/nonLocalDamageDG3DIPVariable.cpp
+++ b/dG3D/src/nonLocalDamageDG3DIPVariable.cpp
@@ -314,7 +314,7 @@ double nonLocalDamageIsotropicElasticityDG3DIPVariable::get(const int i) const
     {
         return getIPNonLocalDamageIsotropicElasticity()->getNonLocalEffectiveStrains();
     }
-		else if (i == IPField::ACTIVE_DAMAGING_ZONE){
+		else if (i == IPField::ACTIVE_DISSIPATION){
 			if (getIPNonLocalDamageIsotropicElasticity()->dissipationIsActive()) return 1.;
 			else return 0.;
 		}
@@ -438,7 +438,7 @@ double nonLocalDamageJ2HyperDG3DIPVariable::get(const int i) const
   {
     return getIPNonLocalDamageJ2Hyper()->getDamage();
   }
-	else if (i == IPField::ACTIVE_DAMAGING_ZONE){
+	else if (i == IPField::ACTIVE_DISSIPATION){
 		if (getIPNonLocalDamageJ2Hyper()->dissipationIsActive()) return 1.;
 		else return 0.;
 	}
@@ -692,7 +692,7 @@ double nonLocalPorosityDG3DIPVariable::get(const int i) const
   else if (i == IPField::MECHANICAL_SOURCE && getNumConstitutiveExtraDofDiffusionVariable()==1){
     return getConstRefToMechanicalSource()(0);
   }
-  else if (i == IPField::ACTIVE_DAMAGING_ZONE){
+  else if (i == IPField::ACTIVE_DISSIPATION){
     if (getIPNonLocalPorosity()->dissipationIsActive()){
       return 1.;
     }
diff --git a/dG3D/src/nonLocalDamageDG3DIPVariable.h b/dG3D/src/nonLocalDamageDG3DIPVariable.h
index 078986ed168cbf0ea3554065b097797386cdffef..cad209f29893c4228efe833dfb88eb4593ecd48e 100644
--- a/dG3D/src/nonLocalDamageDG3DIPVariable.h
+++ b/dG3D/src/nonLocalDamageDG3DIPVariable.h
@@ -739,6 +739,12 @@ class nonLocalDamageDG3DIPVariable : public dG3DIPVariable
  /* specific function */
   IPNonLocalDamage* getIPNonLocalDamage(){return _nldipv;}
   const IPNonLocalDamage* getIPNonLocalDamage() const{return _nldipv;}
+  #if defined(HAVE_MPI)
+  virtual int numberValuesToCommunicateMPI()const{return _nldipv->numberValuesToCommunicateMPI();}
+  virtual void fillValuesToCommunicateMPI(double *arrayMPI)const{_nldipv->fillValuesToCommunicateMPI(arrayMPI);};
+  virtual void getValuesFromMPI(const double *arrayMPI){_nldipv->getValuesFromMPI(arrayMPI);};
+  #endif // HAVE_MPI
+
   virtual ~nonLocalDamageDG3DIPVariable()
   {
     if (_nldipv) delete _nldipv;
@@ -913,6 +919,11 @@ class nonLocalDamageJ2HyperDG3DIPVariable : public dG3DIPVariable
     if (_nldJ2Hyperipv) delete _nldJ2Hyperipv;
     _nldJ2Hyperipv = NULL;
   }
+  #if defined(HAVE_MPI)
+  virtual int numberValuesToCommunicateMPI()const{return _nldJ2Hyperipv->numberValuesToCommunicateMPI();}
+  virtual void fillValuesToCommunicateMPI(double *arrayMPI)const{_nldJ2Hyperipv->fillValuesToCommunicateMPI(arrayMPI);};
+  virtual void getValuesFromMPI(const double *arrayMPI){_nldJ2Hyperipv->getValuesFromMPI(arrayMPI);};
+  #endif // HAVE_MPI
 
   virtual void blockDissipation(const bool fl){
     if (_nldJ2Hyperipv) _nldJ2Hyperipv->blockDissipation(fl);
@@ -995,7 +1006,11 @@ class nonLocalPorosityDG3DIPVariable : public dG3DIPVariable
 
   virtual IPVariable* getInternalData()  {return _nldPorousipv;};
 	virtual const IPVariable* getInternalData()  const {return _nldPorousipv;};
-
+ #if defined(HAVE_MPI)
+  virtual int numberValuesToCommunicateMPI()const{return _nldPorousipv->numberValuesToCommunicateMPI();}
+  virtual void fillValuesToCommunicateMPI(double *arrayMPI)const{_nldPorousipv->fillValuesToCommunicateMPI(arrayMPI);};
+  virtual void getValuesFromMPI(const double *arrayMPI){_nldPorousipv->getValuesFromMPI(arrayMPI);};
+  #endif // HAVE_MPI
  /* specific function */
   IPNonLocalPorosity* getIPNonLocalPorosity(){return _nldPorousipv;}
   const IPNonLocalPorosity* getIPNonLocalPorosity() const {return _nldPorousipv;}
diff --git a/dG3D/src/nonLocalDamageDG3DMaterialLaw.cpp b/dG3D/src/nonLocalDamageDG3DMaterialLaw.cpp
index ef80dd9a954eeb03047b2409cf11787e58fb3610..2c1e5f58375f99f14dede8a58b3e6f0d8c5eaf42 100644
--- a/dG3D/src/nonLocalDamageDG3DMaterialLaw.cpp
+++ b/dG3D/src/nonLocalDamageDG3DMaterialLaw.cpp
@@ -105,7 +105,7 @@ void virtualNonLocalDamageDG3DMaterialLaw::checkInternalState(IPVariable* ipv, c
   _lawBase->checkInternalState(ipvcur->getInternalData(),ipvprev->getInternalData());
 };
 
-void virtualNonLocalDamageDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac)
+void virtualNonLocalDamageDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac, const bool dTangent)
 {
   /* get ipvariable */
   virtualNonLocalDamageDG3DIPVariable* ipvcur;
@@ -229,7 +229,7 @@ void NonLocalDamageDG3DMaterialLaw::checkInternalState(IPVariable* ipv, const IP
 
 };
 
-void NonLocalDamageDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac)
+void NonLocalDamageDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac, const bool dTangent)
 {
   /* get ipvariable */
   nonLocalDamageDG3DIPVariable* ipvcur; //= static_cast < nonLocalDamageDG3DIPVariable *> (ipv);
@@ -428,7 +428,7 @@ void NonLocalDamageHyperelasticDG3DMaterialLaw::checkInternalState(IPVariable* i
 
 };
 
-void NonLocalDamageHyperelasticDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac)
+void NonLocalDamageHyperelasticDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac, const bool dTangent)
 {
     /* get ipvariable */
     nonLocalDamageIsotropicElasticityDG3DIPVariable* ipvcur; //= static_cast < nonLocalDamageDG3DIPVariable *> (ipv);
@@ -569,7 +569,7 @@ void NonLocalDamageIsotropicElasticityDG3DMaterialLaw::checkInternalState(IPVari
     _nldIsotropicElasticitylaw->checkInternalState(ipvcur->getInternalData(),ipvprev->getInternalData());
 };
 
-void NonLocalDamageIsotropicElasticityDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac)
+void NonLocalDamageIsotropicElasticityDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac, const bool dTangent)
 {
     /* get ipvariable */
     nonLocalDamageIsotropicElasticityDG3DIPVariable* ipvcur; //= static_cast < nonLocalDamageDG3DIPVariable *> (ipv);
@@ -699,7 +699,7 @@ void NonLocalDamageJ2SmallStrainDG3DMaterialLaw::checkInternalState(IPVariable*
   _nldJ2smallStrain->checkInternalState(ipvcur->getInternalData(),ipvprev->getInternalData());
 };
 
-void NonLocalDamageJ2SmallStrainDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac)
+void NonLocalDamageJ2SmallStrainDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac, const bool dTangent)
 {
   /* get ipvariable */
   nonLocalDamageJ2HyperDG3DIPVariable* ipvcur; //= static_cast < nonLocalDamageDG3DIPVariable *> (ipv);
@@ -832,7 +832,7 @@ void NonLocalDamageJ2HyperDG3DMaterialLaw::checkInternalState(IPVariable* ipv, c
   }
   _nldJ2Hyperlaw->checkInternalState(ipvcur->getInternalData(),ipvprev->getInternalData());
 };
-void NonLocalDamageJ2HyperDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac)
+void NonLocalDamageJ2HyperDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac, const bool dTangent)
 {
   /* get ipvariable */
   nonLocalDamageJ2HyperDG3DIPVariable* ipvcur; //= static_cast < nonLocalDamageDG3DIPVariable *> (ipv);
@@ -1129,7 +1129,7 @@ void NonLocalPorousDuctileDamageDG3DMaterialLaw::forceCoalescence(IPVariable*ipv
   
 };
 
-void NonLocalPorousDuctileDamageDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac)
+void NonLocalPorousDuctileDamageDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac, const bool dTangent)
 {
   /* get ipvariable */
 
@@ -1845,7 +1845,7 @@ void NonLocalPorousDuctileDamageWithCleavageDG3DMaterialLaw::checkInternalState(
   _nlPorousWithCleavage->checkInternalState(ipvcur->getInternalData(),ipvprev->getInternalData());
 };
 
-void NonLocalPorousDuctileDamageWithCleavageDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac)
+void NonLocalPorousDuctileDamageWithCleavageDG3DMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvp, const bool stiff, const bool checkfrac, const bool dTangent)
 {
   /* get ipvariable */
 
diff --git a/dG3D/src/nonLocalDamageDG3DMaterialLaw.h b/dG3D/src/nonLocalDamageDG3DMaterialLaw.h
index acecc83b313079a459d16cc932937545b1589846..075417d12607d69d6beaa8e7fcf67d913ec8cf00 100644
--- a/dG3D/src/nonLocalDamageDG3DMaterialLaw.h
+++ b/dG3D/src/nonLocalDamageDG3DMaterialLaw.h
@@ -1,4 +1,4 @@
-//
+	//
 //
 // Description: Class of materials for non linear dg
 //
@@ -60,7 +60,7 @@ class virtualNonLocalDamageDG3DMaterialLaw : public dG3DMaterialLaw{
     virtual void initLaws(const std::map<int,materialLaw*> &maplaw){ _lawBase->initLaws(maplaw);};
     virtual double soundSpeed() const{return _lawBase->soundSpeed();};
     virtual void checkInternalState(IPVariable* ipv, const IPVariable* ipvp) const;
-    virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true);
+    virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent =false);
     virtual double scaleFactor() const{return _lawBase->scaleFactor();};
     virtual bool isHighOrder() const { return _lawBase->isHighOrder();};
     virtual bool isNumeric() const {return _lawBase->isNumeric();};
@@ -90,6 +90,10 @@ class NonLocalDamageDG3DMaterialLaw : public dG3DMaterialLaw{
     NonLocalDamageDG3DMaterialLaw(const int num, const double rho,
                                 const char *propName);
     void setNumberOfNonLocalVariables(int nb) {_nldlaw->setNumberOfNonLocalVariables(nb);}
+    void setInitialDmax_Inc(double d) {_nldlaw->setInitialDmax_Inc(d);};
+    void setInitialDmax_Mtx(double d) {_nldlaw->setInitialDmax_Mtx(d);};
+    void setInitialDmax(double d) {_nldlaw->setInitialDmax(d);};
+
     #ifndef SWIG
     NonLocalDamageDG3DMaterialLaw(const NonLocalDamageDG3DMaterialLaw &source);
     virtual ~NonLocalDamageDG3DMaterialLaw();
@@ -102,7 +106,7 @@ class NonLocalDamageDG3DMaterialLaw : public dG3DMaterialLaw{
     virtual void initLaws(const std::map<int,materialLaw*> &maplaw){}
     virtual double soundSpeed() const;// or change value ??
     virtual void checkInternalState(IPVariable* ipv, const IPVariable* ipvp) const;
-    virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true);
+    virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent =false);
     virtual double scaleFactor() const;
     virtual materialLaw* clone() const{return new NonLocalDamageDG3DMaterialLaw(*this);};
     virtual bool withEnergyDissipation() const;
@@ -157,7 +161,7 @@ class NonLocalDamageHyperelasticDG3DMaterialLaw: public dG3DMaterialLaw{
     virtual void initLaws(const std::map<int,materialLaw*> &maplaw) {}
     virtual double soundSpeed() const {return _nlLaw->soundSpeed();};
     virtual void checkInternalState(IPVariable* ipv, const IPVariable* ipvp) const;
-    virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true);
+    virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent =false);
 		virtual double scaleFactor() const {return _nlLaw->scaleFactor();}
 		virtual materialLaw* clone() const{return new NonLocalDamageHyperelasticDG3DMaterialLaw(*this);};
     virtual bool withEnergyDissipation() const {return _nlLaw->withEnergyDissipation();};
@@ -204,7 +208,7 @@ class NonLocalDamageIsotropicElasticityDG3DMaterialLaw : public dG3DMaterialLaw
     virtual void initLaws(const std::map<int,materialLaw*> &maplaw) {}
     virtual double soundSpeed() const;
     virtual void checkInternalState(IPVariable* ipv, const IPVariable* ipvp) const;
-    virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true);
+    virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent =false);
 		virtual double scaleFactor() const {return _nldIsotropicElasticitylaw->scaleFactor();}
 		virtual materialLaw* clone() const{return new NonLocalDamageIsotropicElasticityDG3DMaterialLaw(*this);};
     virtual bool withEnergyDissipation() const {return _nldIsotropicElasticitylaw->withEnergyDissipation();};
@@ -240,7 +244,7 @@ class NonLocalDamageJ2SmallStrainDG3DMaterialLaw : public dG3DMaterialLaw
     virtual void initLaws(const std::map<int,materialLaw*> &maplaw){}
     virtual double soundSpeed() const;
     virtual void checkInternalState(IPVariable* ipv, const IPVariable* ipvp) const;
-    virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true);
+    virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent =false);
     virtual double scaleFactor() const{return _nldJ2smallStrain->scaleFactor();};
     virtual materialLaw* clone() const{ return new NonLocalDamageJ2SmallStrainDG3DMaterialLaw(*this);};
     virtual bool withEnergyDissipation() const {return _nldJ2smallStrain->withEnergyDissipation();};
@@ -278,7 +282,7 @@ class NonLocalDamageJ2HyperDG3DMaterialLaw : public dG3DMaterialLaw
     virtual void initLaws(const std::map<int,materialLaw*> &maplaw){}
     virtual double soundSpeed() const;
     virtual void checkInternalState(IPVariable* ipv, const IPVariable* ipvp) const;
-    virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true);
+    virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent =false);
     virtual double scaleFactor() const{return _nldJ2Hyperlaw->scaleFactor();};
     virtual materialLaw* clone() const{ return new NonLocalDamageJ2HyperDG3DMaterialLaw(*this);};
     virtual bool withEnergyDissipation() const {return _nldJ2Hyperlaw->withEnergyDissipation();};
@@ -331,7 +335,7 @@ class NonLocalPorousDuctileDamageDG3DMaterialLaw : public dG3DMaterialLaw{
         _nldPorous->setSolver(sv);
       }
     }
-    virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true);
+    virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent =false);
     virtual void forceCoalescence(IPVariable*ipv, const IPVariable*ipvprev) const;
     virtual materialLaw* clone() const  = 0;
     #endif // SWIG
@@ -635,7 +639,7 @@ class NonLocalPorousDuctileDamageWithCleavageDG3DMaterialLaw : public dG3DMateri
         _nlPorousWithCleavage->setSolver(sv);
       }
     }
-    virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true);
+    virtual void stress(IPVariable*ipv, const IPVariable*ipvprev, const bool stiff=true, const bool checkfrac=true, const bool dTangent =false);
     virtual materialLaw* clone() const  {return new NonLocalPorousDuctileDamageWithCleavageDG3DMaterialLaw(*this);};
     #endif // SWIG
 };
diff --git a/dG3D/src/nonLocalDamageHyperelasticDG3DIPVariable.cpp b/dG3D/src/nonLocalDamageHyperelasticDG3DIPVariable.cpp
index efa391827157b76f0a23d8e35fae134c90add0c2..333d6c93084a1b35d2880978d22452f96da476ca 100644
--- a/dG3D/src/nonLocalDamageHyperelasticDG3DIPVariable.cpp
+++ b/dG3D/src/nonLocalDamageHyperelasticDG3DIPVariable.cpp
@@ -16,7 +16,6 @@ nonLocalDamageHyperelasticDG3DIPVariable::nonLocalDamageHyperelasticDG3DIPVariab
 {
   _nldHyperipv = new IPHyperViscoElastoPlasticNonLocalDamage(mlaw.getConstRefToCompressionHardening(),
                                                             mlaw.getConstRefToTractionHardening(),
-                                                            mlaw.getConstRefToShearHardening(),
                                                             mlaw.getConstRefToKinematicHardening(),
                                                             mlaw.getViscoElasticNumberOfElement(),
                                                             mlaw.getCLengthLaw(),mlaw.getDamageLaw());
@@ -160,7 +159,6 @@ localDamageHyperelasticDG3DIPVariableWithFailure::localDamageHyperelasticDG3DIPV
 {
   _localIPv = new IPHyperViscoElastoPlasticMultipleLocalDamage(mlaw.getConstRefToCompressionHardening(),
                                                             mlaw.getConstRefToTractionHardening(),
-                                                            mlaw.getConstRefToShearHardening(),
                                                             mlaw.getConstRefToKinematicHardening(),
                                                             mlaw.getViscoElasticNumberOfElement(),
                                                             mlaw.getDamageLaw());
@@ -249,7 +247,6 @@ nonLocalDamageHyperelasticDG3DIPVariableWithFailure::nonLocalDamageHyperelasticD
 {
   _nldHyperipv = new IPHyperViscoElastoPlasticMultipleNonLocalDamage(mlaw.getConstRefToCompressionHardening(),
                                                             mlaw.getConstRefToTractionHardening(),
-                                                            mlaw.getConstRefToShearHardening(),
                                                             mlaw.getConstRefToKinematicHardening(),
                                                             mlaw.getViscoElasticNumberOfElement(),
                                                             mlaw.getCLengthLaw(),mlaw.getDamageLaw());
diff --git a/dgshell/src/shellMaterialLaw.h b/dgshell/src/shellMaterialLaw.h
index 12eac8c1511efe60f8de7c7b595967395b8ffa65..1183599782333945d56deda3a8112292ec4d5ec7 100644
--- a/dgshell/src/shellMaterialLaw.h
+++ b/dgshell/src/shellMaterialLaw.h
@@ -71,7 +71,9 @@ class shellMaterialLaw : public materialLaw{
                             IPVariable *q1,              // updated array of internal variable (in ipvcur on output),
                             STensor43 &Tangent,         // constitutive tangents (output)
                             const bool stiff,
-                            STensor43* elasticTangent = NULL
+                            STensor43* elasticTangent = NULL,
+                            const bool dTangent=false,
+                            STensor63* dCalgdeps = NULL
                             ) const
       {
         Msg::Error("shellMaterialLaw constitutive not defined");
@@ -244,7 +246,9 @@ class shellCohesiveLaw : public materialLaw{
                             IPVariable *q1,              // updated array of internal variable (in ipvcur on output),
                             STensor43 &Tangent,         // constitutive tangents (output)
                             const bool stiff,
-                            STensor43* elasticTangent = NULL
+                            STensor43* elasticTangent = NULL,
+                            const bool dTangent=false,
+                            STensor63* dCalgdeps = NULL
                             ) const
     {
         Msg::Error("shellMaterialLaw constitutive not defined");