]> OCCT Git - occt-copy.git/commitdiff
Patch to OCCT 6.7.1 version
authornbv <nbv@opencascade.com>
Tue, 29 Mar 2016 11:44:20 +0000 (14:44 +0300)
committernbv <nbv@opencascade.com>
Fri, 1 Apr 2016 06:50:51 +0000 (09:50 +0300)
46 files changed:
adm/templates/env.sh.in
samples/mfc/standard/01_Geometry/src/GeometryDoc.cpp
samples/mfc/standard/Data/shell1.brep
samples/qt/IESample/IESample-vc9.sln
samples/qt/Tutorial/Tutorial-vc9.sln
src/BOPAlgo/BOPAlgo.cdl
src/BOPAlgo/BOPAlgo_ArgumentAnalyzer.cdl
src/BOPAlgo/BOPAlgo_ArgumentAnalyzer.cxx
src/BOPAlgo/BOPAlgo_ArgumentAnalyzer.lxx
src/BOPAlgo/BOPAlgo_CheckResult.cdl
src/BOPAlgo/BOPAlgo_CheckResult.cxx
src/BOPTest/BOPTest_CheckCommands.cxx
src/BOPTools/BOPTools_AlgoTools.cdl
src/BOPTools/BOPTools_AlgoTools2D.cxx
src/BOPTools/BOPTools_AlgoTools_1.cxx
src/BRepClass3d/BRepClass3d_SClassifier.cxx
src/GCPnts/GCPnts_TangentialDeflection.cxx
src/GCPnts/GCPnts_TangentialDeflection.gxx
src/GeometryTest/GeometryTest_CurveCommands.cxx
src/IntCurvesFace/IntCurvesFace_Intersector.cxx
src/IntTools/IntTools_EdgeEdge.cdl
src/IntTools/IntTools_EdgeEdge.cxx
src/IntTools/IntTools_EdgeEdge.lxx
src/ProjLib/ProjLib_PrjResolve.cxx
src/ShapeFix/ShapeFix_Shell.cxx
src/ShapeFix/ShapeFix_Solid.cxx
src/math/FILES
src/math/math.cdl
src/math/math_DoubleTab.cdl
src/math/math_DoubleTab.cxx [new file with mode: 0644]
src/math/math_DoubleTab.lxx
src/math/math_GlobOptMin.cxx [new file with mode: 0644]
src/math/math_GlobOptMin.hxx [new file with mode: 0644]
src/math/math_IntegerVector.cxx
src/math/math_IntegerVector.hxx [new file with mode: 0644]
src/math/math_Matrix.cdl
src/math/math_Matrix.cxx
src/math/math_MultipleVarFunction.cdl
src/math/math_MultipleVarFunction.cxx
src/math/math_MultipleVarFunctionWithGradient.cdl
src/math/math_MultipleVarFunctionWithHessian.cdl
src/math/math_MultipleVarFunctionWithHessian.cxx
src/math/math_NewtonMinimum.cxx
src/math/math_SingleTab.hxx [new file with mode: 0644]
src/math/math_Vector.cxx
src/math/math_Vector.hxx [new file with mode: 0644]

index 4915aca68be0c4789f87ee3d73db23887f5e072d..30fd05545c54c9cf942d42d19a346f90610331ff 100644 (file)
@@ -60,12 +60,12 @@ fi
 BIN_PATH="${WOKSTATION}${ARCH}/${COMPILER}/bin${CASDEB}"
 LIBS_PATH="${WOKSTATION}${ARCH}/${COMPILER}/lib${CASDEB}"
 
-export PATH="${CASROOT}/${BIN_PATH}:${PATH}"
+export PATH="${CASROOT}/${BIN_PATH}:${THRDPARTY_PATH}:${PATH}"
 
 if [ "$LD_LIBRARY_PATH" != "" ]; then
-  export LD_LIBRARY_PATH="${CASROOT}/${LIBS_PATH}:${THRDPARTY_PATH}:${LD_LIBRARY_PATH}"
+  export LD_LIBRARY_PATH="${CASROOT}/${LIBS_PATH}:${LD_LIBRARY_PATH}"
 else
-  export LD_LIBRARY_PATH="${CASROOT}/${LIBS_PATH}:${THRDPARTY_PATH}"
+  export LD_LIBRARY_PATH="${CASROOT}/${LIBS_PATH}"
 fi
 
 if [ "$WOKSTATION" == "mac" ]; then
index 0376c6bfc87c7b23f772626af8e61d3425954448..1530942f1ecc7a65f27573f2af998bcd0ff25a83 100755 (executable)
@@ -1118,7 +1118,8 @@ static Standard_Boolean fixParam(Standard_Real& theParam)
 void CGeometryDoc::OnSimplify() 
 {
   CString initfile(((OCC_App*) AfxGetApp())->GetInitDataDir());
-  initfile += "\\..\\..\\Data\\";
+  //initfile += "\\..\\..\\Data\\";
+  initfile += "\\..\\Data\\";
   initfile += "shell1.brep";
 
   TCollection_AsciiString Path((Standard_CString)(LPCTSTR)initfile);
index 85f97efe5e01e86afdba6a06c1cb9ccd4b9c3059..43262a6a72c79538fc9f8543f2818a5c39c1a949 100755 (executable)
@@ -2,6994 +2,1176 @@ DBRep_DrawableShape
 
 CASCADE Topology V1, (c) Matra-Datavision
 Locations 0
-Curve2ds 402
-7 0 0  4 11 4  0 0.80000288773947181  0.082506784821301721 0.80000284737350258  0.16500777610602574 0.80000240771845865  0.24750487524125581 0.80000169847793945  0.41250104482576389 0.79999999981365855  0.49500011416532824 0.79999901037559229  0.5774991262059479 0.79999801041460517  0.74499494307892655 0.79999622192152875  0.82999186124653601 0.79999544070061257  0.91499285308463163 0.799994927484452  1 0.79999482411761935 
- 0 5 0.32999199745130986 3 0.66000767599804422 3 1 5
-1 0 0 0 1 
-1 0 1 1 0 
-1 0 0 1 0 
-7 0 0  1 2 2  1 0  1 0.66666379241227691 
- 0 2 0.66666379241227691 2
-7 0 0  6 7 2  1 0  0.83333413667444856 0  0.66667687112198415 0  0.49999535918337501 0  0.33333865975537458 0  0.16666805388563552 0  -1.1102230246251565e-16 0 
- 0 7 0.66666379241227691 7
-7 0 0  1 2 2  1 0.66666379241227691  1 1 
- 0.66666379241227691 2 1 2
-7 0 0  9 26 4  1 0  0.94444348250652699 0  0.88888568577234328 0  0.83332751589310783 0  0.77776960343111212 0  0.72221230341370857 0  0.66665569533558444 0  0.61109958315623947 0  0.55554349530216118 0  0.47220827934697207 0  0.44442986552655067 0  0.41665144330219722 0  0.38887301277226194 0  0.3610945740346807 0  0.33331612718787895 0  0.30553767232984247 0  0.27775920955886435 0  0.22220226838727447 0  0.19445959522720205 0  0.16647773750839887 0  0.13924276171556929 0  0.11058525567187498 0  0.083727232704600127 0  0.055334296052716059 0  0.027778530632942087 0  0 0 
- 0.66666379241227691 10 0.83333189620613846 8 0.91666594810306923 8 1 10
-1 0 0 0 1 
-1 0 1 1 0 
-1 0 0 1 0 
-1 0 0 1 0 
-8 0 1
-1 1 1 -0 -1 
-1 0 0 0 1 
-1 0 1 1 0 
-1 0 0 1 0 
-1 1 0 0 1 
-8 0 1
-1 1 0 -1 -0 
-1 0 0 0 1 
-1 0 0 1 0 
-1 0 1 1 0 
-1 0 0 1 0 
-8 0 1
-1 1 1 -0 -1 
-1 0 0 0 1 
-1 0 1 1 0 
-1 0 0 1 0 
-1 0 0 1 0 
-8 0 1
-1 1 1 -0 -1 
-1 0 0 0 1 
-1 0 0 1 0 
-1 1 0 0 1 
-8 0 1
-1 1 0 -1 -0 
-1 0 0 0 1 
-1 1 0 0 1 
-1 1 0 0 1 
-1 0 1 1 0 
-8 0 1
-1 0 1 -0 -1 
-1 1 0 0 1 
-1 0 0 0 1 
-1 0 1 1 0 
-8 0 1
-1 0 1 -0 -1 
-1 0 0 0 1 
-1 1 0 0 1 
-1 0 0 0 1 
-8 0 1
-1 1 1 -1 -0 
-1 1 0 0 1 
-1 0 0 0 1 
-1 0 1 1 0 
-8 0 1
-1 0 1 -0 -1 
-1 0 0 0 1 
-1 1 0 0 1 
-1 0 1 1 0 
-8 0 1
-1 0 1 -0 -1 
-1 0 0 0 1 
-1 1 0 0 1 
-1 0 1 1 0 
-8 0 1
-1 0 1 -0 -1 
-7 0 0  4 23 8  0.59999924847956987 0  0.60030110117738122 0.030168275463225706  0.60060378442530837 0.060310479204520276  0.60090599240072529 0.090288957745002604  0.60143717593063895 0.142771814843631  0.60166678063815249 0.16538753016776681  0.60189508855800722 0.18780399268888504  0.6024889932822598 0.24592906239474666  0.60285210907602438 0.28127785929284688  0.6032103953381458 0.31596618294005097  0.60396640953709835 0.38876141802465314  0.60436266948837147 0.42667041677889983  0.60475262380556472 0.46373429012872824  0.60546323518365719 0.53083960507626382  0.60578552259909302 0.56110116886322381  0.60610373951666252 0.59081147110589238  0.60695265717998204 0.66962493448292193  0.60747612556656738 0.71774075350964672  0.60798976382979086 0.76449177500333609  0.60904447429446018 0.85956547531815264  0.60958390959172604 0.90765667059321686  0.6101142405393849 0.95442857272084491  0.61063647489060302 1 
- 0 5 0.10111657573905432 3 0.1786166835009988 3 0.30406755137261521 3 0.44694481701160776 3 0.56844488970689189 3 0.77501392243741674 3 1 5
-1 0 1 1 0 
-8 0 1
-1 0 1 -0 -1 
-7 0 0  6 17 4  0 0.38935001051839579  0.051776242677948496 0.38990305030343914  0.10493999648869651 0.39046534748391631  0.15945760481797328 0.39103623825655198  0.21525147179345527 0.39161464914662347  0.27217126633192856 0.39219887790734403  0.38372284697080689 0.39333284674280206  0.43823015093940459 0.39388209027477539  0.49334784794526998 0.39443270185923013  0.54885286651556642 0.39498255718868419  0.60448691479916672 0.39552935037656234  0.71786924498222482 0.39663556969906261  0.77560830333614528 0.39719455952060351  0.83293368973929827 0.39774553449724304  0.88957193656833833 0.39828632716800261  0.94531118796555014 0.39881541520940039  1 0.39933183104343695 
- 0 7 0.34513407089943071 5 0.6657630349877004 5 1 7
-1 0 0 1 0 
-1 0 1 1 0 
-1 1 0 0 1 
-1 0 0 0 1 
-1 0 1 1 0 
-1 0 0 1 0 
-1 0 0 0 1 
-1 1 0 0 1 
-1 0 1 1 0 
-1 0 0 1 0 
-1 1 0 0 1 
-1 0 0 0 1 
-1 0 0 1 0 
-1 0 1 1 0 
-1 0 0 0 1 
-1 1 0 0 1 
-1 0 0 1 0 
-1 0 1 1 0 
-1 0 0 0 1 
-1 1 0 0 1 
-1 0 1 1 0 
-1 0 0 1 0 
-1 1 0 0 1 
-1 0 0 0 1 
-1 0 0 1 0 
-1 1 0 0 1 
-1 0 0 0 1 
-1 0 0 1 0 
-1 0 0 0 1 
-1 1 0 0 1 
-1 0 0 1 0 
-1 0 1 1 0 
-1 0 0 1 0 
-1 1 0 0 1 
-1 0 0 0 1 
-1 0 1 1 0 
-1 0 0 1 0 
-1 0 0 1 0 
-1 0 0 0 1 
-1 1 0 0 1 
-1 0 0 1 0 
-1 0 1 1 0 
-1 0 0 1 0 
-1 0 0 0 1 
-1 1 0 0 1 
-1 0 1 1 0 
-1 0 0 1 0 
-1 0 0 1 0 
-1 0 0 1 0 
-8 0 1
-1 1 1 -0 -1 
-1 0 0 1 0 
-1 0 1 1 0 
-1 1 0 0 1 
-1 0 0 0 1 
-1 1 0 0 1 
-1 0 1 1 0 
-1 0 0 1 0 
-1 0 0 0 1 
-8 0 1
-1 1 1 -1 -0 
-1 0 0 1 0 
-8 0 1
-1 1 1 -0 -1 
-1 0 1 1 0 
-7 0 0  11 12 2  -1.1102230246251565e-16 0  0.090908963742404411 0  0.18183149294795495 0  0.27272089561572826 0  0.36357692172171707 0  0.45470954108592232 0  0.54522982352270499 0  0.63657220279836402 0  0.72715164861303727 0  0.8182267137121898 0  0.90909035424182993 0  1.0000000000000002 0 
- 0 12 1 12
-1 0 0 1 0 
-1 0 0 0 1 
-1 0 0 1 0 
-1 0 1 1 0 
-7 0 0  11 42 5  1 1.3877787807814457e-17  1 0.022727282247066428  0.99999999999999678 0.045443391362605154  1.0000000000000311 0.068181456047979427  0.99999999999991585 0.090911905220744604  1.000000000000131 0.11363179853253789  0.999999999999867 0.13635606076089057  1.0000000000000862 0.15908918597047098  0.99999999999996847 0.18181936875378263  1.0000000000000029 0.20454041128501674  1.0000000000000027 0.22727014633345519  0.99999999999999667 0.26136118854285728  1.0000000000000231 0.27272488563308711  0.99999999999993971 0.28408859302177258  1.000000000000103 0.29545230465415928  0.99999999999986855 0.30681601447434725  1.0000000000001308 0.31817971642820803  0.99999999999989564 0.3295434044594972  1.0000000000000668 0.3409070725139457  0.99999999999996736 0.35227071453583869  1.000000000000012 0.36363432447029187  0.99999999999998224 0.38636146805379823  1.0000000000000921 0.39772537372590211  0.99999999999976152 0.40909563040790853  1.0000000000004241 0.42045500581433021  0.99999999999943312 0.43181132171604941  1.0000000000005833 0.44317775001744009  0.99999999999953892 0.45455032945125196  1.0000000000002693 0.46591303334149786  0.99999999999989619 0.47726582124754202  1.000000000000016 0.48863620974904703  0.99999999999997569 0.5454551610038233  1.0000000000000646 0.59089553636239089  0.99999999999986366 0.63641342285003455  1.0000000000002272 0.68170812363817623  0.9999999999997049 0.72743653938797581  1.0000000000002958 0.77255734093900941  0.99999999999977618 0.81830896324880842  1.0000000000001241 0.86357390412129009  0.99999999999995215 0.9091112277299469  1.0000000000000113 0.95454540541344923  1 0.99999999999999978 
- 0 12 0.25 10 0.375 10 0.5 10 1 12
-1 0 0 0 1 
-1 0 0 1 0 
-1 1 0 0 1 
-1 0 0 0 1 
-7 0 0  1 2 2  0 0  0 0.77953843068720752 
- 0 2 0.77953843068720752 2
-7 0 0  1 2 2  1 1  0 1 
- 0 2 0.77953843068720752 2
-1 0 0 0 1 
-1 1 0 0 1 
-1 1 0 0 1 
-7 0 0  1 2 2  0 0.77953843068720752  0 1 
- 0 2 1 2
-1 0 1 1 0 
-8 0 1
-1 1 1 -1 -0 
-1 0 0 0 1 
-8 0 1
-1 0 1 -0 -1 
-1 0 0 1 0 
-1 0 1 1 0 
-8 0 1
-1 1 1 -1 -0 
-1 0 0 1 0 
-1 0 1 1 0 
-1 1 0 0 1 
-1 0 0 0 1 
-1 0 1 1 0 
-7 0 0  1 2 2  0 0.53494362972914533  0 0 
- 0 2 1 2
-1 0 0 1 0 
-1 0 1 1 0 
-1 1 0 0 1 
-1 0 0 0 1 
-7 0 0  1 2 2  0 0.53494362972914533  0 1 
- 0.53494362972914533 2 1 2
-7 0 0  1 2 2  1 0  1 1 
- 0.53494362972914533 2 1 2
-1 0 0 1 0 
-1 0 0 0 1 
-1 0 0 0 1 
-1 0 0 1 0 
-1 0 1 1 0 
-1 1 0 0 1 
-1 0 0 0 1 
-1 1 0 0 1 
-1 0 0 1 0 
-1 0 0 0 1 
-1 0 0 1 0 
-1 0 0 1 0 
-1 0 0 0 1 
-1 0 1 1 0 
-1 1 0 0 1 
-1 0 1 1 0 
-7 0 0  1 2 2  0.47652841820184022 1  0 1 
- 0 2 1 2
-1 1 0 0 1 
-1 0 0 0 1 
-7 0 0  1 2 2  0.47652841820184022 1  1 1 
- 0.47652841820184022 2 1 2
-7 0 0  1 2 2  1 0  1 1 
- 0.47652841820184022 2 1 2
-1 0 1 1 0 
-8 0 1
-1 1 1 -1 -0 
-1 0 0 1 0 
-1 0 1 1 0 
-8 0 1
-1 1 1 -1 -0 
-1 0 0 0 1 
-1 1 0 0 1 
-1 0 0 0 1 
-1 0 0 1 0 
-1 1 0 0 1 
-7 0 0  1 2 2  0 0.87271205534690566  0 1 
- 0 2 1 2
-1 0 0 0 1 
-8 0 1
-1 1 1 -1 -0 
-1 0 0 1 0 
-1 0 0 0 1 
-1 1 0 0 1 
-1 0 0 1 0 
-1 1 0 0 1 
-1 0 0 0 1 
-1 1 0 0 1 
-1 0 0 0 1 
-1 0 0 1 0 
-1 1 0 0 1 
-1 0 0 0 1 
-1 0 0 1 0 
-1 0 1 1 0 
-1 1 0 0 1 
-1 1 0 0 1 
-1 0 0 0 1 
-1 0 0 1 0 
-1 1 0 0 1 
-1 0 1 1 0 
-1 0 0 0 1 
-1 0 0 1 0 
-1 0 1 1 0 
-1 1 0 0 1 
-1 0 1 1 0 
-8 0 1
-1 0 1 -0 -1 
-1 0 0 1 0 
-1 0 1 1 0 
-1 0 0 1 0 
-1 1 0 0 1 
-1 0 0 0 1 
-1 1 0 0 1 
-1 0 1 1 0 
-8 0 1
-1 0 1 -0 -1 
-1 0 1 1 0 
-1 0 0 1 0 
-1 0 0 1 0 
-1 0 0 0 1 
-1 1 0 0 1 
-1 0 0 1 0 
-1 0 1 1 0 
-1 0 0 1 0 
-1 0 0 0 1 
-1 1 0 0 1 
-1 0 0 0 1 
-8 0 1
-1 1 1 -1 -0 
-7 0 0  6 17 4  0.39406493945201349 0  0.39370812496624913 0.055889186089952594  0.3932751319176811 0.11140346830850339  0.39278280167344187 0.16648860211588551  0.39224667772258737 0.22118517050925404  0.39167914530481612 0.2756147906323751  0.39049912435709389 0.38464818767915759  0.38988690165474771 0.43920806099281845  0.38926490854418921 0.49386178214766013  0.38864346773834518 0.54876980559569444  0.38803326415783546 0.60409047639852997  0.38686953162605475 0.71495709811020558  0.38631574565428234 0.7704325004763084  0.38579588715081098 0.82665002906833118  0.3853237408462824 0.88370123970993286  0.38491725582045833 0.94155019565494058  0.38459484015211276 1 
- 0 7 0.33416049776810541 5 0.66993920599046752 5 1 7
-1 0 0 0 1 
-8 0 1
-1 1 1 -1 -0 
-1 0 0 1 0 
-7 0 0  5 14 4  0 0.61540482866382062  0.064973932117215943 0.61529608014518866  0.13064776686473903 0.61519856706943865  0.19684824498858436 0.61510981596479875  0.26336851091513452 0.61502669316638092  0.39619069735911383 0.61486563493702628  0.46249005162546669 0.61478767187235628  0.52869444091174878 0.61470877481729069  0.59459235340812644 0.6146255952545101  0.72952360765932245 0.61443920886150194  0.79849237863143951 0.614335074026781  0.86668275713206988 0.61421935432529573  0.9339005874573546 0.6140891977368973  1 0.61394273110047093 
- 0 6 0.32794621259812134 4 0.65372290810370193 4 1 6
-1 0 0 0 1 
-1 1 0 0 1 
-1 0 1 1 0 
-7 0 0  10 11 2  1.1102230246251565e-16 0  0.1000000967527457 0  0.20001192748109461 0  0.29996390484838387 0  0.40007375759011493 0  0.49990633985362876 0  0.60008485130057809 0  0.69995169457233475 0  0.8000180155580997 0  0.89999980277096903 0  1 0 
- 0 11 1 11
-7 0 0  7 20 4  0 0.61394226430657828  0.048852612540844019 0.61389020050825216  0.098068075289743081 0.61371590594544567  0.14668700622763359 0.6134319913266868  0.19421011406102751 0.61306605389677904  0.24046639239653864 0.61264208137587961  0.28558546572239801 0.61217658839294253  0.37885791708496341 0.61113129809822853  0.42669486390700739 0.61054661211712358  0.47382855842686478 0.60994060615491275  0.52049240449598355 0.6093255301633248  0.56691233160170029 0.60871270215490758  0.61331790608526959 0.60811286977463597  0.70700328297756598 0.60695976173890898  0.7540975848821414 0.60640917192561528  0.80178989375567622 0.6058959791305335  0.85031934430830614 0.6054357039597541  0.89970649710058448 0.60505095549354704  0.94976581781263225 0.60477101573933789  1 0.60461941547429454 
- 0 8 0.3117494214584467 6 0.6546920582466389 6 1 8
-1 1 0 0 1 
-1 0 0 0 1 
-1 0 0 1 0 
-1 0 1 1 0 
-7 0 0  6 17 4  0 0.6046244422258531  0.051402166236810085 0.60476797220349554  0.10478012077920598 0.60486543878498022  0.15986949045284715 0.60491697313726578  0.21637467000093014 0.604926986781955  0.27395161750030439 0.60490437067393021  0.38971331871809833 0.60481654071779289  0.44785635589310441 0.60475201444166815  0.50649063205929779 0.60467695459783877  0.56532069555698161 0.60460380290428339  0.62401724809701253 0.60454541843882725  0.73735477619494882 0.60448172662698285  0.79202863338594776 0.6044736945626884  0.84598333702823147 0.60449779646248658  0.89884589317663122 0.60456169294234929  0.95028263702832427 0.60466902066255146  1 0.60481951999240813 
- 0 7 0.3430717016492329 5 0.68080943218630496 5 1 7
-1 1 0 0 1 
-1 0 0 0 1 
-1 0 0 1 0 
-1 0 1 1 0 
-7 0 0  6 17 4  0 0.60481876572300342  0.05095229035545714 0.60531998523779595  0.10382537550260484 0.60578030439461039  0.15845352233036814 0.60619851949256376  0.21460483959783586 0.60657677661692078  0.27192578806405221 0.60692215112284265  0.38434977743498216 0.60754680652692783  0.43935827885918255 0.60782890198368666  0.4947568526549937 0.6080997975979322  0.55021672576506897 0.6083703646651597  0.60539564353217179 0.60865197083796707  0.71985069737128415 0.60928541801493186  0.7790155049570221 0.60964143625304479  0.83699989822910226 0.61003430465191055  0.89334719595266099 0.6104732216992107  0.94775285214168981 0.61096105399514533  1 0.61149609439611585 
- 0 7 0.33765129277467348 5 0.65364637575500684 5 1 7
-1 1 0 0 1 
-8 0 1
-1 1 1 -0 -1 
-1 0 1 1 0 
-1 0 0 1 0 
-7 0 0  5 14 4  0 0.39924787923265981  0.066688511457922039 0.39861805728956679  0.13301589565275201 0.39797070384509137  0.19899471206471028 0.39730811488861428  0.26464613364180722 0.39663245594483537  0.3965491453396498 0.3952465078978798  0.46278934002823408 0.39453581797881138  0.52875168347902701 0.39381583485151239  0.59447382493311429 0.39308861344407708  0.7283208620462549 0.39159238591189849  0.7964282920275576 0.39082292767785165  0.86437242103195266 0.39004998915462791  0.93220869047210164 0.38927576760000759  1 0.38850251792178125 
- 0 6 0.32467375889705741 4 0.65528611948353355 4 1 6
-1 1 0 0 1 
-1 0 0 0 1 
-1 0 0 1 0 
-7 0 0  10 11 2  2.2204460492503131e-16 1  0.09999999322983523 1.00000000000003  0.20001639458643822 0.99999999999988121  0.29994929207909043 1.0000000000002538  0.40010146633470894 0.99999999999962186  0.49987092630747942 1.0000000000004188  0.60011534344833206 0.99999999999965283  0.69993402733844468 1.0000000000002087  0.80002409418898135 0.99999999999991496  0.89999953633493524 1.0000000000000193  1 1 
- 0 11 1 11
-7 0 0  5 14 4  0 0.39811910321246968  0.065166136447414175 0.39825283390891558  0.13088245939307414 0.39836054378927283  0.19700391841560594 0.39844689533514127  0.26340629460961762 0.39851748831495021  0.39580330612509396 0.39863795023588527  0.46178889064610762 0.39868805209958413  0.52787215740647131 0.3987339524230562  0.59396860319005818 0.39878136357133892  0.72835399415420987 0.3988919981555149  0.7966334474354676 0.3989557163445972  0.8647494173768433 0.39903290610201325  0.93258388351332566 0.39912928280985649  1 0.39924959657869541 
- 0 6 0.33211359955845798 4 0.6602852667166641 4 1 6
-1 0 0 0 1 
-1 1 0 0 1 
-1 0 1 1 0 
-1 0 0 1 0 
-7 0 0  6 17 4  0 0.40000133244242564  0.050515922989695941 0.3998764683702018  0.10301222308263144 0.39975651372271098  0.15744526248452495 0.39964166354850666  0.21368621341552818 0.39953189051863292  0.27137519317538034 0.3994266334215254  0.38448263890148304 0.39923022850367612  0.43976970790347769 0.39913861529994504  0.49546779548491116 0.39904914328820412  0.55104937164766721 0.39896060757156615  0.6060120125416647 0.3988717100390905  0.72105934786326342 0.39867927299540235  0.78086733571278433 0.39857534815947826  0.83888130406395778 0.39846812482934041  0.89477935171257128 0.39835651534154326  0.94848615584841078 0.39824007299778436  1 0.39811866668642021 
- 0 7 0.33552387596375727 5 0.64734104289112193 5 1 7
-1 0 0 0 1 
-1 1 0 0 1 
-1 0 0 1 0 
-1 0 1 1 0 
-1 1 0.40000167120694718 0 1 
-7 0 0  5 14 4  0 0.39191774096508264  0.065465144355849408 0.39243753347283067  0.13118475842667088 0.39298400074455109  0.19716994665717724 0.39354950009204082  0.26343524537862489 0.39412650867664017  0.3954152626034656 0.39527841747338266  0.46111584690651436 0.39585314633103141  0.52711894058249698 0.39642450527486095  0.59342197805482499 0.39698505273804635  0.72754872137747451 0.39807716040562774  0.79537568680679072 0.39860813733446615  0.86345775106864042 0.39911218246988495  0.93171250905093006 0.39958083426444491  1 0.40000626220747182 
- 0 6 0.33559380390076604 4 0.66539264450876856 4 1 6
-1 0 0 0 1 
-1 1 0 0 1 
-1 0 1 1 0 
-1 0 0 1 0 
-7 0 0  5 14 4  0 0.39933282174136286  0.066113363033904277 0.39890810347114752  0.13232413674030302 0.39846394169325261  0.19847360696432903 0.39800369935426455  0.26440882952214556 0.39753123864038381  0.3969695162245368 0.39655939610338625  0.46358016635478683 0.39605965776952012  0.52969368667478045 0.39555521588324277  0.59519528289386625 0.39505006529077169  0.72979766856596251 0.3940066812470096  0.79878622220539364 0.39346890277355057  0.86685927309964905 0.39293880302330059  0.9339448486990295 0.39242019579958659  1 0.39191616492488107 
- 0 6 0.32044122240090905 4 0.64761656907444154 4 1 6
-1 0 1 1 0 
-7 0 0  10 20 3  0 0  0.050000003877265858 0  0.099999959029842669 0  0.14999988340655576 0  0.19999979495561482 0  0.2499997116263597 0  0.2999996513665309 0  0.34999963212564855 0  0.39999967185168028 0  0.4499997884936297 0  0.55000021150637846 0  0.60000405170649884 0  0.64998192739817695 0  0.70004713104247096 0  0.74992531104385074 0  0.80007856438669533 0  0.84995151034043059 0  0.90001924750310724 0  0.94999983311184388 0  1.0000000000000002 0 
- 0 11 0.5 9 1 11
-1 0 0 1 0 
-1 0 1 1 0 
-1 1 0 0 1 
-1 0 0 0 1 
-1 0 0 1 0 
-1 0 1 1 0 
-1 0 0 0 1 
-1 1 0 0 1 
-1 0 0 1 0 
-1 0 1 1 0 
-1 1 0 0 1 
-1 0 0 0 1 
-1 0 1 1 0 
-1 0 0 1 0 
-1 0 0 0 1 
-1 1 0 0 1 
-1 0 0 0 1 
-1 1 0 0 1 
-1 1 0 0 1 
-1 0 0 0 1 
-1 0 0 1 0 
-1 0 1 1 0 
-1 0 0 0 1 
-1 1 0 0 1 
-1 0 1 1 0 
-1 0 0 1 0 
-1 1 0 0 1 
-1 0 0 0 1 
-1 0 0 1 0 
-1 0 1 1 0 
-1 1 0 0 1 
-1 0 0 0 1 
-1 0 1 1 0 
-1 0 0 1 0 
-1 0 0 1 0 
-1 0 1 1 0 
-8 0 1
-1 1 1 -1 -0 
-1 0 1 1 0 
-1 0 0 1 0 
-1 1 0 0 1 
-8 0 1
-1 1 1 -0 -1 
-1 0 1 1 0 
-1 0 0 1 0 
-1 1 0 0 1 
-8 0 1
-1 1 1 -0 -1 
-1 1 0 0 1 
-1 0 0 0 1 
-1 0 0 1 0 
-1 0 1 1 0 
-1 1 0 0 1 
-8 0 1
-1 1 1 -0 -1 
-1 0 0 0 1 
-1 1 0 0 1 
-1 0 1 1 0 
-1 0 0 1 0 
-7 0 0  1 2 2  0 0  0 0.87271205534690566 
- 0 2 0.87271205534690566 2
-7 0 0  1 2 2  1 1  0 1 
- 0 2 0.87271205534690566 2
-1 0 1 1 0 
-1 0 0 1 0 
-1 1 0 0 1 
-1 0 1 1 0 
-1 0 0 0 1 
-1 1 0 0 1 
-1 1 0 0 1 
-1 0 0 0 1 
-1 0 0 0 1 
-1 1 0 0 1 
-1 1 0 0 1 
-8 0 1
-1 1 1 -0 -1 
-1 1 0 0 1 
-1 0 0 0 1 
-1 0 1 1 0 
-1 0 0 1 0 
-1 0 0 0 1 
-1 1 0 0 1 
-1 0 0 1 0 
-1 0 1 1 0 
-1 0 0 0 1 
-1 1 0 0 1 
-1 0 1 1 0 
-1 0 0 1 0 
-1 0 0 1 0 
-1 0 1 1 0 
-1 0 1 1 0 
-1 0 0 1 0 
-1 1 0 0 1 
-1 0 0 0 1 
-1 0 1 1 0 
-1 0 0 1 0 
-1 0 0 0 1 
-1 1 0 0 1 
-1 0 0 0 1 
-1 1 0 0 1 
-1 1 0 0 1 
-1 0 0 0 1 
-1 0 1 1 0 
-1 0 0 1 0 
-1 0 0 0 1 
-1 1 0 0 1 
-1 0 0 1 0 
-1 0 1 1 0 
-1 0 1 1 0 
-1 0 0 1 0 
-1 0 0 0 1 
-1 1 0 0 1 
-1 0 0 1 0 
-1 0 1 1 0 
-1 1 0 0 1 
-1 0 0 0 1 
-1 0 1 1 0 
-1 0 0 1 0 
-1 0 0 1 0 
-1 0 1 1 0 
-1 0 0 0 1 
-1 1 0 0 1 
-1 1 0 0 1 
-1 0 0 0 1 
-Curves 216
-7 0 0  4 11 4  91 -8.0271577359569704e-05 0  91 0.048137983974542928 0  91 0.096359624400286378 0  91.000000000000014 0.14458352401486479 0  91.000000000000014 0.24103707641773656 0  90.999999999999986 0.28926672878190884 0  91 0.33749641370464473 0  91 0.43541161333749429 0  90.999999999999986 0.48509706109696005 0  91.000000000000014 0.53478014479136815 0  91.000000000000014 0.58445963413453828 0 
- 0 5 0.32999199745130986 3 0.66000767599804422 3 1 5
-7 0 0  3 4 8  77.499912265000006 -9.6523674666657011e-05 0  84.999956765000007 -0.00026420328785997649 0  92.49998728333334 -9.680098099996981e-05 0  99.999984765000008 0.00065140704866670229 0 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  85.000054676666679 -0.58420716719999999 0  84.999930061666674 -0.0004168505933333335 0  85.000050863333342 0.5846241315166667 0  85.000034334999995 1.1684163611666669 0 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  77.500027976666672 0.58578912563133334 0  84.999982200000005 0.58395773519470173 0  92.500031791666657 0.58487348681308338 0  100.00027848333333 0.58304277002050009 0 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  75.000094096666658 -7.8702866666557902e-06 0  80.000041960000004 -0.00015866724066664062 0  84.999964395000006 -0.00023322334599996941 0  89.999926246666675 -0.00015887743199997917 0 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  80.000002543333338 -0.59619559850000003 0  80.000033058333344 -0.00029208758333330864 0  80.00000636 0.59648909176666676 0  79.999970754999993 1.1923948924000001 0 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  93.102831524999999 0.5438144456866667 1.3656666665584627e-08  83.992425281666669 0.60490217801666679 1.1173333334946189e-08  80.927477518333347 0.54307139918333336 -7.4500000023236534e-09  72.297692616666666 0.80086672333333353 3.7283333330362378e-09 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  69.999888099999993 0.00014734250000048021 0  74.999958039999996 -7.8081999998480534e-06 0  80.000026700000006 -0.00015859803333331812 0  85.000076296666663 -0.00023265673333322523 0 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  75.000054676666679 -2.7417480551666671 0  74.999898275000007 -1.4876350000012084e-05 0  75.000054678333328 2.7417641880000003 0  74.999880469999994 5.4835055671666666 0 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  67.69368553000001 7.658248820833335 0  75.694348656666662 2.2439476652000003 0  79.528959909999998 -0.18349189561666665 0  86.189840956666671 2.0680790891500003 0 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  65.000078835000011 0.00023206033333367238 0  70.000024158333332 0.00014648836666686371 0  74.999949138333335 -7.728799999939806e-06 0  79.999881743333333 -0.00015894573333333217 0 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  69.999991101666666 -6.4429797339999997 0  70.000035601666667 0.00026938816666660648 0  69.999991098333339 6.4427124663333331 0  70.000031149999998 12.885964870333334 0 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  81.25033696666668 -1.1131350793000001 2.4816666673033172e-09  74.593695326666676 2.8677578368333334 2.4836666667749085e-08  70.374895731666669 6.0926485461666671 -1.116666666772792e-08  63.906762443333342 11.418724852 1.9868333332728749e-08 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  59.999863938333334 0.00017539700000002156 0  64.999964393333329 0.00023150410000005728 0  70.000002545000001 0.00014700490000030264 0  75.000054675000001 -8.3445000000348379e-06 0 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  65.000080748333332 -10.486415047450002 0  64.999872205000003 0.00041178866666663483 0  65.000084561666668 10.486009438500002 0  65.000070573333332 20.9728589845 0 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  78.026659651666662 0.094303449000000039 4.2233333330532474e-08  68.986338296666673 7.2169976640000009 -4.9683333350203362e-09  66.028040571666665 9.6947836888333327 1.1166666664258473e-08  56.901523593333337 16.921139081666666 6.5193333353280591e-09 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  55.00006993833334 -9.8626599999818154e-05 0  60.000007629999999 0.00017452246666715965 0  64.999941506666659 0.00023047146666677065 0  69.999880473333334 0.00014513738333343795 0 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  59.999963756666659 -14.066509723333334 0  60.000031151666668 0.00027540576499999331 0  59.99996058 14.066241740000001 0  59.999962491666665 28.133052825000004 0 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  52.931085586666661 16.696194787933337 0  60.790880836666673 14.115336297700001 0  63.905304593333334 11.240676720783334 0  73.588181814999999 3.8392653463333337 0 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  65.000001905000005 6.1573905150000003 0.082810300091666678  65.00000636 10.781567730666666 -0.041405139488333333  65.000003813333336 13.633613744333335 0.082810311271666673  65.000001910000009 16.900049528333334 0.70272455610000006 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  59.99998346666667 11.505401611166668 0.079835154110000001  60.000019074999997 14.245078084999999 -0.039917559670000005  59.999981563333336 15.912519928333335 0.079835144186666679  59.999876658333335 17.886001586666666 0.64388290539999993 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  70.267403921666656 9.7246716813333336 0.17862254384333337  64.861003874999994 14.036833445000001 0.16440977527833336  60.288604101666671 16.344066775000002 0.15629901674166669  53.984401704999996 16.36805884 0.13370008023166668 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  69.999991098333339 2.8597696225 0.11264374855166667  70.000013988333336 6.4967923953333342 -0.056321871158333335  69.999993645000018 9.8101376696666662 0.11264373612  70.000063580000003 13.207793075000001 0.64868400496666667 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  76.875563305 3.968045542833333 0.18613514678333332  69.383642831666677 10.362374707000001 0.17212536495666669  65.589899700000004 13.527592023333334 0.16830031076666668  58.256676994999999 17.743269923333337 0.14723340988233335 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  75.000005088333324 -0.54244816300000009 0.12589153523166668  75.000001275000002 2.8321656783333338 -0.062945747750000003  75.000003816666677 5.6643302638666668 0.12589154643  75.000001273333339 9.1527911441666667 0.63085696101666666 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  62.424857458333335 16.205428761666667 0.15750167271166668  70.824349723333341 9.1435720926666662 0.17730074000000001  74.277721406666672 6.1654324528333326 0.17623277983166669  82.06476974666667 0.83697565399999996 0.18924556676666671 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  80.000016533333337 -1.9037311573500002 0.12775669370333334  79.999997455000013 0.71136280901666671 -0.063878339404999998  80.000021618333335 2.6363344193666665 0.12775664901833333  79.999930066666678 5.592441798166667 0.63013858596666661 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  85.879543303333335 0.89840079358333336 0.18106576553666667  79.766370136666666 2.5977034366833336 0.17878899911499999  75.054978688333335 5.5599223775000004 0.1810657705116667  70.013556161666671 9.8048783148333332 0.16842472675 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  84.999996186666664 -0.09540915481666673 0.11753536635333334  85.000003813333336 0.60921447348833335 -0.058767667663333335  84.999998729999987 1.1650458178 0.1175353552  85.000006361666664 3.1794795000000002 0.6500476301 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  90.497833254999989 1.3183505053383335 0.16919495165500001  84.872954051666667 1.13484170045 0.17797275199333334  80.010355633333333 2.5911599375500001 0.18033542360833332  75.085637410000004 5.3496608340000007 0.17797239620833336 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  89.999998728333338 0.28929957248333332 0.10065904504333334  90.000005086666675 0.58797306321666665 -0.050329494291666665  90.000005084999998 0.86530238386666669 0.10065903886333333  90.000005088333324 2.2164533538333333 0.69656584660000009 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  97.427121479999997 0.67762299874999998 0.19320650056333333  89.239346821666672 1.0879282355833333 0.16949032557333335  85.61552174833335 1.2363000114333333 0.17770470490500001  78.298589069999991 2.41574730445 0.18111215283166668 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  4 23 8  91 0.58442303020518105 1.498242259555051e-08  91 0.59189031736704989 3.8130157984444065e-05  91 0.59935778733229028 0.00042769937394222536  91 0.6068640471682788 0.0011802680127149959  91 0.6202574156477072 0.0031396686545457214  91 0.6261133318175649 0.0041994767971997035  91 0.63203096427768146 0.0054661377407165231  91 0.6477323290639353 0.0093091135248666874  91 0.6576422532930748 0.012211148958173454  91 0.66782765487826712 0.015613911327910148  91 0.6903224514792673 0.023899875648713462  91 0.70273008656793357 0.028923347479001389  91 0.71564976257411772 0.03451599681528638  91 0.74060192256247204 0.045850370730147416  91 0.75247805117966404 0.051444624723942851  91 0.76479584907196374 0.057402057935819858  91 0.79930566445865536 0.074418627472423421  91 0.82237356315815879 0.086129133360017707  91 0.84688236085545254 0.098745249898073789  91 0.90118114075129951 0.12685530935858061  90.999999999999986 0.93124856628547281 0.1425052961151925  91.000000000000014 0.96312955166248726 0.15906433678944676  91.000000000000014 0.99683473747747975 0.1764695999315348 
- 0 5 0.10111657573905432 3 0.1786166835009988 3 0.30406755137261521 3 0.44694481701160776 3 0.56844488970689189 3 0.77501392243741674 3 1 5
-7 0 0  3 4 8  96.126553853333348 0.82718905804999998 0.20290709536666671  92.118783318333328 0.93913454806666663 0.17844562480500001  90.398331958333344 1.0278922021666668 0.17490848213333335  86.287390391666662 1.2149313191166669 0.17079230150166666 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  6 17 4  90.999999999999986 0.99683640814562335 0.17646954315928798  90.999999999999986 1.0700204855741757 0.21428757124853273  91.000000000000085 1.1417929396955506 0.25142582413998182  90.999999999999929 1.212157971299304 0.28794593965150755  91.000000000000043 1.2811571023079749 0.32394351249845499  91 1.3488960912822372 0.35956445826928485  91 1.4774612407872314 0.42790284545043961  91 1.5384367105908936 0.46064687333078114  91 1.5986057626292687 0.49336877358871883  91 1.658150660427214 0.52624178642486152  91 1.7172923513362999 0.55944996861343443  91 1.8377071834221312 0.62829304067258807  91 1.8989657899423689 0.66397199162290477  91 1.9602711010968203 0.70037788897505782  91 2.0218737513691103 0.73767533993762346  91 2.0839795475478677 0.77597606315328038  91 2.1467439043946834 0.81534729091761293 
- 0 7 0.34513407089943071 5 0.6657630349877004 5 1 7
-7 0 0  3 4 8  90.000005090000002 -0.70319635668333347 -0.6102523952833333  90.000006358333337 1.2059935331666667 0.24078234533333334  90.000001271666676 2.1448594130000003 0.69599522151666671  89.999986015000005 3.5923728940000004 1.5843464333333332 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  87.415967308333336 2.4637550116666667 0.6808102876333334  90.027679443333341 2.2214598255000002 0.75908243898333339  92.473312378333333 2.0282097655000002 0.89196962116666667  95.079152426666667 1.8993552524999999 1.1403772234666667 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  84.999997456666662 -1.4538894815333334 -0.6217175970933333  85.000001268333335 1.7782888416666669 0.28365127493333336  84.999994916666665 2.789609750166667 0.54853417476666655  84.999993641666663 5.1983261905000004 1.3656393885 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  80.071168263333348 4.7948297856666668 0.6086876443  84.989780425000006 2.7935468457166666 0.62523480385000008  89.969717661666664 2.1660294731833334 0.73379958170000015  95.131365456666657 1.9201370673833336 1.0486774841833335 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  79.999992371666679 0.28005284069833331 -0.11281120031333336  80.000000001666677 2.8849577307166667 0.15691112228333334  79.999989826666678 5.0292491116666671 0.56245477995000004  80.000005083333335 7.4492739043333334 1.1635911859999999 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  75.117454530000003 8.0522643721666665 0.53891035793499997  80.007035570000014 4.903862556 0.60112784063333335  84.854403179999991 2.7834994595000002 0.62689840791666673  90.575326286666666 2.0971936388333337 0.73470589019999999 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  75.000003813333336 3.0667154142833333 -0.052285738886666669  75.00000381833334 5.8311984935000005 0.15175150211666666  75.000001273333339 8.2507630985000002 0.51675710578333334  75.000001268333335 10.871014279333334 1.0840076803333334 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  69.747809093333331 12.371795653333333 0.50675245066333341  75.119387311666657 8.0795067948333337 0.55072653414666672  79.774679821666666 5.0154530601666671 0.59312882774999998  85.781903585000009 2.3098968634366668 0.64707846852166673 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  69.999992368333324 7.1007479033333327 -0.055039818256666671  69.999998731666665 9.9427398051666671 0.15765595556666667  69.999990463333333 12.073442461166668 0.46735340853333329  69.999999366666671 14.620213825 1.0681512158333333 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  61.616278333333341 18.521273611666668 0.46810645355000008  71.079527538333338 11.367264745833335 0.52181537941666667  74.065577184999995 8.8663869694999988 0.53985313080333341  82.658161161666669 2.8724473320000001 0.62155920258333341 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  64.999997453333336 11.226362587666667 -0.08142945883833333  65.000008268333346 13.889535265000001 0.16099527976666667  65.000004448333328 15.431573071666669 0.43000897765000001  65.000002539999997 17.507306096666667 1.0976768331666666 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  59.455086390000005 17.723713078333333 0.48777215186666667  65.107601166666669 15.821959495 0.49444782478333338  70.114529930000003 12.111495651666667 0.51314360643333334  74.434302009999996 8.588731448499999 0.54819940781666665 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  59.999994911666668 14.641131876666668 -0.016308245094000001  59.999994275000006 16.000726066666665 0.12178873023333334  59.999996186666671 17.137056985000001 0.45245906713333334  59.999982838333338 18.289672213333333 1.0339275996666668 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  54.43405215166667 17.289323488333334 0.50596023973000004  60.116200129999996 17.438869795000002 0.49156697583333336  65.101165769999994 15.793744085000002 0.49332201971666667  69.479165391666669 12.509287513333334 0.51385296883333331 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  60.000009536666667 16.015827339999998 0.13195341825000001  60.000003176666667 17.158510843333332 0.45893757043333333  60.000002541666674 18.188673338333334 0.99784649401666681  59.999990466666667 19.107659976666667 1.7730142080000002 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  53.935722351666669 18.335185684999999 1.0306974648666665  60.288023635000002 18.331195829999999 1.0345460772999999  64.91219838666666 17.360911370000004 1.0544556976499999  70.063205716666673 14.615341663333332 1.1082380016333333 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  65.000002541666674 13.850750605 0.16865417606666669  65.000003174999989 15.548039753333335 0.45131523909999999  65.000004446666665 17.080157758333332 1.0047921340000001  65.000003813333336 18.521506944999999 1.8901209434999999 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  59.999993008333327 17.345290820000002 0.54852603869999994  59.999992371666664 18.191667238333331 1.0180358489999999  59.999991100000003 18.908889138333336 1.6026686228333333  59.999981559999995 19.543534281666666 2.3707761766666664 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  54.908419924999997 18.944985386666666 1.621115804  60.009686791666667 19.042915978333333 1.635007044  65.052839914999993 18.254096033333333 1.6383424201666668  69.778966265000008 16.179483256666664 1.6814502675000003 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  65.000003816666663 15.977173329999999 0.60575650136666659  65.000003816666663 17.087065854999999 1.0347400904999999  65.000003814999999 18.064746223333337 1.6158900061666668  64.999993640000014 18.892732619999997 2.371526877 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  59.99999618333333 17.94433403 0.82287200290000007  59.999997454999999 18.941385905000001 1.6090109948333333  59.999994916666665 19.660878180000005 2.5405698616666665  59.999988558333342 20.028870580000003 3.6736979884999998 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  55.006737388333342 19.600444795000001 2.5513200560000002  59.989109675000009 19.716109913333334 2.5670631926666667  65.036842350000001 19.148789721666667 2.6254177690000002  69.863549550000002 17.984759331666666 2.7901668750000002 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  65.000003815000014 16.812085786666668 0.88969944911666665  65.000002543333324 18.079877853333336 1.5978241366666666  64.999997454999999 19.107170103333335 2.5888252655000001  65.000008263333328 19.787462556666668 3.9057759446666669 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  60.000004450000006 18.960781095000002 1.6115916966666666  60.000002543333338 19.660059930000003 2.5561520260000004  60.000003814999999 20.012653355000001 3.608790795  59.999991098333339 20.012923239999999 4.8455034888333337 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  55.012204491666665 19.943566643333334 3.5922133528333333  59.992643993333331 20.017457010000001 3.6324261425000004  65.017261505000008 19.710205711666667 3.7149043878333337  69.938377380000006 19.009941098333336 3.9234264392666667 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  65.000002543333324 18.211459158333334 1.6952369214999998  65.000005725000008 19.096501666666668 2.6146200896666669  65.000003181666671 19.698562306666666 3.7051838634999998  64.999999365000008 19.977547961666666 4.9801239966666664 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  59.999998728333338 19.821452145000002 3.0335708853333334  59.999998096666673 19.972042723333335 3.6301472978333336  59.999998096666666 20.013978321666666 4.2826574248333333  59.999984108333337 19.972024283333333 5.0650742849999997 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  72.866372424999994 20.000000633333336 8.5534596444999984  64.126763661666672 20.000000003333334 5.5354603928333344  60.626606621666667 20.000001906666668 4.2444163360000005  53.366799669999999 19.999998730000002 3.3126986818333339 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  65.000006361666664 18.621678671666668 1.7251329621666667  65.000009536666667 19.78472837 3.7438517409999998  65.00000636 20.107636769999999 5.7149354616666663  65.000006994999993 19.784732179999999 8.3361342749999991 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  65.000008261666665 20.00000063666667 1.6965761978333334  65.000011443333335 20.000001271666669 5.8232872489999998  65.000006993333329 20.00000063666667 9.9500048954999993  64.999885556666669 19.999996821666667 14.076764425 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  59.999998096666673 20.00000063666667 -1.3413923583333336  59.999998090000005 20.000001271666669 4.3043045995  59.999999361666667 20.00000063666667 9.9499983790000002  59.999802271666667 19.999996821666667 15.595704715 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  69.999998730000002 20.000916161666666 9.9499986968333332  65.000011444999998 19.999694508333334 9.9499985385000009  59.999979651666663 20.000306129999998 9.9499980611666672  54.999867756666667 19.999081611666668 9.9500120473333347 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  69.999994909999998 20.00000063666667 5.8361761575000006  70.000012714999997 20.000000320000002 7.8930899310000004  69.999992368333324 20.00000063666667 9.9500012401666673  70.000008903333338 19.999997458333333 12.006911279666667 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  75.230925241666654 20.000000633333336 10.680456800000002  69.878613788333325 20.000000003333334 7.7127815884999995  65.25465774333334 20.000001906666668 5.8269539676666673  59.102816266666672 19.999998730000002 3.9191326301666671 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  74.999997456666676 20.000916161666666 9.9500055330000006  69.999998726666661 19.999694508333334 9.9499991741666669  64.999998728333338 20.000306129999998 9.950003941666667  59.999931333333336 19.999081611666668 9.9500563151666661 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  77.795440673333331 20.000718113333335 9.9500007640000003  73.897720336666666 19.99975586 9.9499991733333335  69.999997456666662 20.000243189999999 9.9500005251666668  66.10225423 19.999285065000002 9.949998299333334 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  79.220184325000005 19.999990779999997 12.919017158333334  73.436279294999991 19.999999043333332 9.6858895621666665  70.421059925000009 19.999989828333334 8.0374244053333328  64.87940724500001 19.999946914999999 5.5230200288333329 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  73.897691091666658 20.107813835000002 7.8999965191666668  73.897734323333339 20.000024160000002 9.9500004450000006  73.897691091666658 19.892074268333332 11.999999683333332  73.897701259999991 19.784280774999999 14.050007341666667 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  70.000025429999994 20.107813518333334 7.9000047840000009  69.999978383333328 20.000031475 9.9499983790000002  70.000025429999994 19.892074266666665 12.000001273333332  70.000174201666681 19.784182546666667 14.050000193333334 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  65 19.892101605000001 11.999999843666668  69.999997456666676 19.892110823333336 12.0000015915  75.000007629999999 19.892100333333332 11.999999843666668  79.999994913333339 19.892101926666665 11.999999203333333 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  72.624047596666671 20.03689193666667 9.2487008576666661  73.935354868333349 19.999124211666668 9.9672303203333357  75.020806631666673 19.966601051666668 10.582380772833334  75.981430053333327 19.93725586 11.150118348333335 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  72.795417788333339 19.892102556666668 11.9999973  73.897683465 19.892101288333333 12.000003020833333  75.000022888333334 19.892101921666669 11.999997455000001  76.102305093333342 19.892105736666668 12.000024 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  75.000013991666663 20.04210599 9.1489588416666674  74.999994913333339 19.967148144999999 10.574478150833333  75.000017803333321 19.892085708333333 12.000000315000001  75.00001398500001 19.817123733333332 13.425537430000002 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  76.321100873333336 19.920411426666668 9.9499990146666679  74.928593953333333 19.985733983333333 9.9499993324999991  73.964585620000008 20.007129984999999 9.9500001278333343  72.59942499666667 19.985722858333332 9.9499999685000002 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  75.000003811666673 19.915888151666664 11.254576759000001  75.000002545000001 19.975837708333337 10.555942690333335  75.000006358333337 19.983557066666666 9.968509833333334  75.000092823333347 19.960457801666667 9.2700303396666683 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  75.000001268333349 19.918621698333332 12.602852821666666  75.000013988333336 20.021813390000002 9.7505448661666669  75.000005084999998 19.864602086666668 8.094964186166667  75.000004448333343 19.086761158333331 5.9235880371666667 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  81.284189861666675 18.647739091666669 8.2372131344999993  74.512664793333329 19.976928708333332 7.9785313604999999  70.665189741666666 20.011528970000001 7.9026510714999993  62.826502480000009 19.976860683333335 7.7694715658333333 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  74.743269604999995 20.007128398333332 9.9500002878333333  77.430156710000006 19.864320436666667 9.9499990965000009  79.921784716666679 19.447689691666667 9.9499999676666668  82.882855733333329 18.574455581666669 9.9499986973333314 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  79.999998728333338 19.873792014999999 11.859541573333333  79.999993640000014 19.447972935000003 9.9137139325000003  80.000000003333341 18.563919383333335 8.1855975785000012  79.999986015000005 17.307902333333331 6.6745537123333332 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  84.545899711666664 16.354208631666669 8.4990113580000006  80.116334281666667 18.669340448333337 8.210831403666667  74.988742830000007 19.979982376666666 7.9883209861666673  69.928698221666679 19.977797825 7.8898663516666669 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  85.643400831666668 17.634189290000002 9.949998539000001  79.726552325000014 19.637525241666665 9.9499994909999998  75.450363159999995 20.045312881666668 9.9499983788333335  68.472019193333338 20.051702814999999 9.9500007621666668 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  77.412225085000003 19.667841911666667 15.153408048333333  77.367932638333329 19.93760554166667 11.690339878333333  77.412391661666675 19.934362408333335 10.085234006333334  77.368064880000006 19.237054190000002 7.6687201658333342 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  74.308339435000008 19.847662925000002 12.000000631666667  77.527943929999992 19.914322216666669 11.999999520000001  79.876234691666667 19.847660703333332 12.000000475  82.967128756666668 19.495043756666668 11.999999520000001 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  80.000011446666662 19.804616295000002 14.33033927  80.000015258333349 19.881638845000001 11.930483498333334  80.00000636 19.468810718333334 9.9477219579999989  80.000015258333335 18.472563746666665 7.9785711765000009 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  80.139684040000006 19.804468153333335 13.689129189999999  77.258800506666674 19.895794551666668 11.921718434999999  75.121461233333335 19.964980126666667 10.623998638  72.25537491 20.047080993333331 9.0291443666666673 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  79.76544443666667 19.892103196666667 11.999996187500001  77.382728573333338 19.892105106666669 12.000002543333334  75.000005083333335 19.892103830000003 11.999995865500001  72.617268879999997 19.892103196666667 11.999994754999999 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  77.382597608333327 19.997309686666664 9.9999964248333324  77.382779440000007 19.892120998333333 12.000002068333334  77.38259506 19.786829633333333 14.00000127  77.38276672500001 19.681656520000001 16.000004926666666 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  75.000003814999999 19.997297606666663 9.9999982511666676  75.000003814999999 19.892124810000002 11.999999366666668  75.000003814999999 19.786817236666664 14.000004451666667  74.999987283333326 19.681645395 16.000028450000002 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  79.76529566166667 19.786770818333334 14.000000001666667  77.382686613333334 19.786855698333333 14.000001749999999  74.999972025000005 19.786915143333331 14.000000314999999  72.617225648333331 19.786590898333337 13.999977745000001 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  74.770088196666663 19.975269954999998 10.396016753166666  77.381736758333346 19.892332713333332 12.003491240000002  79.999308264999996 19.808005333333334 13.590019703333333  82.621042886666672 19.726419446666668 15.170161563333334 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  70.000027971666668 19.785921416666667 13.999999206666667  74.999994911666661 19.787142753333335 14.000006356666667  80.000019070000008 19.786530491666667 13.999999045000001  85.000293731666673 19.787749928333334 13.999995864999999 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  80.000008905000001 19.765223821666666 14.411044278333335  80.000002545000001 19.786836306666668 14.000001905  80.000011443333335 19.808480578333331 13.588953333333334  80.000005084999998 19.830059366666667 13.17791875 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  79.999988558333342 19.660523415 15.558145841666667  80.000013983333332 19.836622553333335 13.475462915  79.999986010000015 19.843871433333334 12.073727290000001  80.000045779999994 19.587960239999997 10.229616961166668 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  81.347170510000012 19.765781406666669 14.402348838333335  80.683480578333331 19.786726631666667 14.001300175000001  80.005166368333335 19.80837472 13.592446806666665  79.295884450000003 19.83065955 13.16263739 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  80.704826356666672 19.578909240000002 16.847473465  80.669106800000009 19.82872867333333 13.756750743333331  80.704981488333345 19.827224098333335 12.125519595  80.669240313333333 19.285097758333333 9.7411678638333328 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  81.362293241666663 19.6597449 11.999999999  80.697625479999999 19.740083054999999 12.000002544500001  80.005502061666675 19.802655218333335 11.999998569999999  79.280370076666657 19.849364598333331 11.999992211666665 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  81.362064358333328 19.78686968666667 14.000001910000002  80.681045533333332 19.786827723333332 14.00000159  80.000003816666677 19.786869048333333 14.00000095  79.318969728333343 19.786745709999998 13.999999841666668 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  80.000006358333337 19.613210680000002 17.300001779999999  80.000010169999996 19.699983596666669 15.650000891666668  80.000003814999999 19.786854424999998 14.000000956666668  79.999994915000002 19.873612401666669 12.34999625 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  76.578479763333334 19.699513751666665 15.650001843333332  80.000015256666671 19.700138093333333 15.650000415000001  83.421510063333329 19.699933366666667 15.650002800000001  86.843068443333323 19.700137453333333 15.649998665000002 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  86.720083875 19.595262206666668 17.636189776666669  83.272935233333328 19.704792019999999 15.559943838333334  80.717299144999998 19.785578726666664 14.024045150000001  77.943749746666668 19.873897868333334 12.343903065000001 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  75.000013988333336 19.613218621666668 17.299997013333332  74.999993641666663 19.699982641666665 15.649998505000001  75.000013988333336 19.786863006666668 13.999998730000002  74.999986011666664 19.873704911666668 12.350003558333334 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  70.000025429999994 19.699083963333333 15.649998350000001  75.000005083333335 19.700305936666666 15.650000414999999  80.000005083333335 19.699696860000003 15.649998345  84.99998728333334 19.700914068333336 15.649998026666667 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  70.000002543333324 19.613218941666666 17.300000506666663  70.000001271666662 19.69998137 15.64999819  70.000002543333324 19.786862370000001 13.999999048333335  69.999992370000001 19.873626388333332 12.350003401666667 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  64.999994913333339 19.699084918333334 15.649998188333331  70.000002543333338 19.700310068333334 15.650000731666667  74.999997456666676 19.699694313333332 15.649998028333334  80.000010173333337 19.700924873333335 15.649996918333333 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  65.000007629999999 19.785925546666668 13.999998250000001  69.999996185000001 19.787153241666665 14.000006515000001  75.000010173333337 19.786535578333332 13.999998570000001  79.999998728333338 19.787844025000002 13.999996188333334 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  64.999999365000008 19.613218941666666 17.300000506666663  65.000014623333328 19.69998137 15.64999819  64.999999365000008 19.786862370000001 13.999999048333335  65.000002543333338 19.873626388333332 12.350003401666667 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  60.000005086666661 19.699085233333335 15.649998029999999  65.000007629999999 19.700307531666667 15.650001210000001  70 19.699695901666665 15.649998029999999  75.000002543333338 19.700915653333333 15.649998985 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  60.000000000000007 19.785937626666666 14.000005724999999  65.000001271666662 19.787143071666669 13.999998885  70.000003815000014 19.786547343333332 14.000005724999999  74.99998728333334 19.787809053333334 14.000038625 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  59.999993645000004 19.613220533333333 17.300005593333331  60.000007626666672 19.699981691666665 15.649997713333335  59.999993645000004 19.786863961666668 14.000004453333332  59.999989191666671 19.873627341666669 12.3500096 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  55.000005086666675 19.699085233333335 15.649998029999999  59.999998726666661 19.700307531666667 15.650001210000001  65.000017803333321 19.699695901666665 15.649998029999999  69.999987283333326 19.700915653333333 15.649998985 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  54.999999365000001 19.785927453333336 13.999998253333334  59.999990464999996 19.787150065000002 14.000007155  65.000010173333337 19.786537166666669 13.999998253333334  69.99998346833334 19.787758506666666 13.999997616666668 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  69.999994913333325 19.893019676666668 12.000000479833332  65.000006358333337 19.891798016666669 12.0000023865  59.99999682166667 19.892410596666664 12.000000479833332  55.000005086666661 19.891185440000001 12.000000161500001 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  59.999989193333334 19.997300151666668 10.000000953499999  59.999989830000004 19.892122585000003 11.999998411666667  59.999989193333334 19.786822315000002 14.000005401666666  59.999981564999999 19.681650480000002 16.000037988333332 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  65.000001906666668 19.997299830000003 10.000000953499999  65.000007629999999 19.892122901666667 11.999998411666667  65.000001906666668 19.786821366666665 14.000005401666666  65 19.681650158333333 16.000037988333332 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  65.000005723333345 20.107821784999999 7.8999964393333331  65.000004450000006 20.000024796666665 9.9499990143333328  65.000005723333345 19.892081895 12.000000475  64.999991733333331 19.784328461666668 14.050017678333333 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  60.000001271666676 20.107819560000003 7.8999969958333338  59.999997456666662 20.000028295 9.9499998090000012  60.000001271666676 19.892080623333335 11.999999526666667  59.999996188333334 19.784275055000002 14.050006551666668 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  75.000012716666674 19.892306011666669 12.000006037333335  69.999997456666662 19.892006238333337 11.999995229166668  65.000007629999999 19.892308551666666 12.000005721000001  59.999991100000003 19.891440393333333 12.000000479499999 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  70.000002543333338 19.997308091666667 9.9999918936666674  69.999996185000001 19.892125764999999 12.000001588333333  70.000002543333338 19.786829948333335 14.000003181666667  69.999997456666676 19.681695939999997 16.000046095000002 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  81.830370584999997 19.658942539999998 15.650001049999998  83.423938753333346 19.720532731666665 15.649999301666668  85.003053030000018 19.658943175000001 15.650000728333334  86.563869473333341 19.474575041666668 15.649998506666668 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  85.000013988333336 19.645520845 17.922399840000001  85.000002541666674 19.659609793333331 15.471674121666666  85.000010176666677 19.546931265000001 14.090920608333334  85.000005088333339 18.989058493333335 12.164665383333332 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  74.637713113333348 19.70449352166667 13.999998408333333  81.196005503333339 19.828015008333331 13.999999843333333  84.664499918333334 19.704494476666667 13.999998251666666  90.145987193333355 18.190411248333334 14.000002541666667 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  78.340597786666677 19.822519940000003 15.650001844999998  85.455888111666667 19.771555580000001 15.650003113333334  89.835884098333338 18.922149023333333 15.650002636666668  95.200608571666663 15.895028275 15.650000093333334 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  89.999992370000001 19.716789246666664 18.007960321666665  90.000001271666662 18.488131840000001 15.455656371666667  90.000003811666659 17.685857930000001 14.069426855  89.999999998333351 16.204810143333333 12.26665942 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  94.3871994 14.373143831666667 14.000001906666668  90.12460072833332 17.812547686666669 14.000000953333334  85.114438378333332 19.813052811666665 14.000001906666668  79.417677558333338 19.771631559999999 13.999999368333334 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  6 17 4  91 18.117573531795713 15.650001895174981  91 18.047410984239633 15.539769268481171  91 17.980111459165968 15.434645197804043  91 17.915237430029212 15.334135390999631  91 17.852245689144837 15.237567093875596  91 17.790562566329147 15.144212307680121  91 17.668175966928672 14.961824927070595  91 17.607527554485049 14.872887959666897  91 17.546937916979132 14.78565117091371  91 17.48581407498564 14.699428094511562  91 17.423536699327158 14.613543196634986  91 17.296341232173585 14.442431144341597  91 17.231544278633425 14.357296147587798  91 17.1642613210091 14.271050999264475  91 17.093832544669173 14.183076709171203  91 17.019624892173425 14.092831821529993  91 16.941231518211016 14.000003795015065 
- 0 7 0.33416049776810541 5 0.66993920599046752 5 1 7
-7 0 0  3 4 8  94.821545921666669 13.697966576666667 14.000002700000001  92.524745943333329 15.885800998333334 13.999999996666666  90.079518636666677 17.628967286666665 14.000002226666666  87.157160441666662 19.034695308333333 13.999999840000001 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  86.935577393333332 19.583841956666667 15.650001524999999  90.182530720000003 18.583785691666669 15.650002483333335  92.334300995000007 17.436189813333332 15.650001205000002  95.480323795000004 15.453771116666669 15.649999781666668 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  5 14 4  91 16.941230313222093 14.000001236460124  91 16.817836058099253 13.853438804912773  91 16.692309126624274 13.70974721895983  91 16.564411766091595 13.568943360320054  91 16.433912941604738 13.430943462712257  91 16.168238795519855 13.161100924382879  91 16.033102628268995 13.029226107981756  91 15.89504968544232 12.899780787757491  91 15.753974658656922 12.772528322042469  91 15.456674338557903 12.514005547458519  90.999999999999972 15.300056499768672 12.38298843895136  91.000000000000057 15.139984218790739 12.253850813130693  90.999999999999986 14.976563596574282 12.126276341725253  90.999999999999986 14.809999271626081 12.000001138219609 
- 0 6 0.32794621259812134 4 0.65372290810370193 4 1 6
-7 0 0  3 4 8  94.913678488333332 10.502762714999999 12.000000793333335  92.498484293333334 13.370875993333334 12.000000633333334  90.092422483333337 15.735814095 12.000000475  87.131791433333348 17.893672783333333 12.000000320000002 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  89.999998730000016 19.046408016666668 16.488840100000001  89.999996186666664 17.638707798333336 13.876842023333335  89.999997454999999 15.835126243333335 12.003800550000001  89.999983471666667 13.228568235000001 10.107977710666667 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  7 20 4  91 14.809999425274031 12.000000536270353  91 14.656599870775626 11.884076953550558  91 14.507765211890435 11.773071400090787  91.000000000000028 14.36564768551046 11.668595502164091  91 14.230219984028395 11.570432836560485  90.999999999999957 14.100730994518377 11.477805375395317  91 13.975883702076271 11.389585182458152  91 13.719299448086748 11.2103603390944  90.999999999999986 13.588585947085623 11.120283642903429  91.000000000000043 13.459632930771647 11.032447964907092  90.999999999999943 13.330965685307348 10.945676794060381  91.000000000000028 13.201164729611659 10.858860168538024  91 13.068801181345318 10.770907116391887  91 12.794437636639174 10.589463067832659  91 12.652931545961723 10.496304457574956  90.999999999999943 12.505188335535992 10.399295000587575  91.000000000000114 12.349349477019762 10.297077405852283  90.999999999999929 12.183952436107104 10.188521154919584  91.000000000000014 12.007991317016732 10.07274804930379  91.000000000000014 11.822123276265646 9.9499998625228212 
- 0 8 0.3117494214584467 6 0.6546920582466389 6 1 8
-7 0 0  3 4 8  95.947221118333346 5.9817469316666667 9.9499990143333328  92.187797548333322 10.437230428500001 9.9500006833333341  90.301603950000001 12.670882466333333 9.9499983761666666  86.605723063333343 16.459219613333335 9.9500127666666671 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  90.000005086666675 18.743230181666668 14.836574396666666  90.000003816666663 15.518799463333334 11.725559391666668  90.000008899999997 13.389372666 10.261192482166667  89.99999491666668 8.5035770369999995 6.9296719231666675 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  6 17 4  90.999999999999986 11.822130629932968 9.9499996963336361  90.999999999999986 11.728576160344785 9.8880026610741112  90.999999999999986 11.635653286569692 9.8264899728043602  90.999999999999972 11.543898273083931 9.7657690332496543  90.999999999999986 11.45358731848177 9.7059492702845915  90.999999999999986 11.364726261150849 9.6469398976983616  90.999999999999986 11.190813642466534 9.5309568121971662  90.999999999999986 11.105751568158468 9.473983800965307  90.999999999999972 11.021572376857328 9.4172637422300038  90.999999999999986 10.937888038978073 9.360441303657046  90.999999999999986 10.854286122137427 9.3031591766121977  90.999999999999986 10.691128591380995 9.1902671324359151  90.999999999999986 10.611620839310021 9.1347505278198433  91 10.53168377241481 9.0783937230199054  90.999999999999986 10.45126336059575 9.0211436760048436  90.999999999999986 10.370492027486197 8.9631141303819017  90.999999999999986 10.289703398399681 8.9045868747755499 
- 0 7 0.3430717016492329 5 0.68080943218630496 5 1 7
-7 0 0  3 4 8  95.629339851666671 5.2581777573333337 9.1083439189999993  92.288958230000006 8.9026918408333344 8.9727098939999994  90.214884441666669 11.152431328 8.8658007778333321  86.851496381666664 14.505141101666666 8.6569850445000007 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  90.000002540000011 15.362396718333333 11.625525633333334  89.999997456666676 12.668448286666667 9.7648919425000003  90.000000001666677 11.543696247333333 9.0149051349999993  89.999992373333328 9.1742726156666663 7.2684027355000005 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  6 17 4  91 10.289697224466467 8.9045861043098498  91 10.199322405201043 8.8393686369726687  90.999999999999986 10.107487884495566 8.7724737912056927  91 10.014556609238982 8.7040625694244742  91.000000000000014 9.9209104530806176 8.6343103580303762  91 9.8269844117941467 8.5634512959680151  91 9.6454388610274027 8.4246637250261536  91 9.5578028520447944 8.3568399014511723  91 9.4705299372234499 8.288422401532916  91 9.3838760457083126 8.2195893636928314  91 9.2980786090387042 8.1505474419892181  91 9.1204271405160284 8.0058029622874933  91.000000000000014 9.0287762370443456 7.9300922406210654  90.999999999999972 8.9387841642139367 7.8547528501561237  91 8.8508307179136398 7.7802109082150697  91 8.7651900300566314 7.7068353087998389  91 8.6821044282767836 7.6349674428480494 
- 0 7 0.33765129277467348 5 0.65364637575500684 5 1 7
-7 0 0  3 4 8  86.013153078333346 13.41472705 7.2771612801666672  90.492965701666662 9.174539089166668 7.6040373639999999  92.01499684833334 7.7036640641666674 7.7016617456666658  96.44715372666667 3.5180633665166665 7.9774507681666673 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  90.000003816666663 13.448828060000002 10.331043561666668  89.999997460000003 11.217268464833333 8.7773866653333332  90.000005088333339 9.6995870271666682 7.6523121198333337  89.999975840000005 7.8009262078333341 6.0083131789999999 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  5 14 4  91.000000000000028 7.6163696240789829 6.6169437935621973  91.000000000000028 7.683648452601477 6.6891511366332166  91 7.7512528602397053 6.75998241836768  90.999999999999972 7.8191703738067471 6.8295624458359168  91 7.8873944682472654 6.8980167768907776  91 8.02570814778365 7.0341604805581905  91 8.0958086288250861 7.101812618970575  91 8.1662251117993545 7.1685608312322255  91 8.2369604893920378 7.2345366636656294  91 8.3821133442703513 7.3679910295857551  91 8.4565587826718591 7.4354133549213186  91 8.5313655611758072 7.5022859835967406  91 8.6065434376976047 7.5687548026610409  91 8.6821062941937761 7.6349692365526245 
- 0 6 0.32467375889705741 4 0.65528611948353355 4 1 6
-7 0 0  3 4 8  87.338915508333343 10.453726291000001 6.082368533166667  90.054447171666666 8.3480386734999996 6.4901692870000005  92.443299613333338 6.4987281163333339 6.8154549600000003  95.172415411666663 4.4043064909999998 7.1299815971666671 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  90.000007626666658 7.2102719148333332 5.2932269571666666  90.000007631666676 8.379071157000002 6.4973107971666675  90.000001275000002 9.6180479518333328 7.576034068666667  90.000000001666677 10.9652845065 8.5935254099999998 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  5 14 4  91 6.5797055342620245 5.4157604521147293  91 6.645255396507455 5.4998558653240561  90.999999999999986 6.7114290091509723 5.5832655890925995  91 6.7781678890878156 5.6659017509573699  91 6.8454410834793995 5.7477421097595283  91 6.9802536636663444 5.908938655821304  91 7.0477758125300811 5.9883072909330872  91 7.1158194553953873 6.0669636884747344  91 7.1843855188718297 6.1449586467345512  91 7.3249907984494254 6.3024697361842987  91 7.3970623061549556 6.3819372493052748  91 7.4696842967604287 6.4608204957978597  91 7.5428137081225515 6.5391546812271732  91 7.6163665955497883 6.6169436399646093 
- 0 6 0.33211359955845798 4 0.6602852667166641 4 1 6
-7 0 0  3 4 8  86.801284791666674 9.1107216671666666 4.5868153176666659  90.239880881666664 7.0138104755000006 5.2589642205000002  92.239192959999997 5.8611586888333331 5.6698081496666664  95.803398128333342 3.8027004401666664 6.3399622439999996 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  90.000001269999998 5.9680361749999999 3.7965519429999999  90.000003815000014 7.1726730659999998 5.2514123913333339  90.000000001666663 8.3683969183333318 6.49027435  90.000007629999999 9.6983373558333348 7.6460250218333341 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  6 17 4  91 5.3271750242298257 3.7290621470662795  91 5.4031035209815359 3.8270660227912945  90.999999999999986 5.476915827864353 3.9236678852662492  91.000000000000014 5.5486155716231851 4.0188621681485763  91 5.6183328039221241 4.1127423495876716  91 5.6864481043498287 4.205571811559861  91 5.8158527094829573 4.3833869720085614  90.999999999999986 5.8772803114685352 4.4684578837484645  91.000000000000028 5.9382565745116507 4.5532696324830066  91 5.9993594478565857 4.6382177947304868  91 6.0611421426105219 4.723677495686756  91 6.1951305926575921 4.9074901951472079  91 6.2676362773191725 5.0060584505307517  91 6.3421245135305595 5.1060322462423668  91 6.4189401835716255 5.2076338242582123  91 6.4981539595628748 5.3108985261098276  91 6.5797076510958714 5.4157581913373409 
- 0 7 0.33552387596375727 5 0.64734104289112193 5 1 7
-7 0 0  3 4 8  87.488463085000006 6.7626683316666671 3.1663270196666669  90.004053751666675 5.7370700833333332 3.5633858441666666  92.495351155000009 4.7097649576666676 3.9759152330166669  95.014634448333339 3.7846282325000002 4.3984814979833331 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  90.000008903333338 3.5177243149999997 1.3462664878499999  90.000003814999999 6.0261777241666667 3.7963888248333331  90.000005083333335 6.7982784110000001 4.8639638421666671  89.999992371666679 9.8078381229999998 8.0402228830000002 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  5 14 4  91 3.8817542861799206 2.1589308753567038  91 3.9892348407184421 2.2587878423394372  91 4.0937698171513173 2.3578815325649676  91 4.1957292788297282 2.4567438397818817  91 4.295507271522105 2.5559356261029595  91 4.4898577271779043 2.7544481765172408  91 4.5844847141786662 2.8537314478164393  91 4.6778114836555522 2.9544726408607813  91 4.7702358226010606 3.0572415317711488  91 4.9554189381992693 3.2694895449255461  91.000000000000014 5.0481564982310019 3.3790372615694539  90.999999999999957 5.1407889071543345 3.4918256469310731  91.000000000000014 5.2336928466850052 3.608378983270482  91.000000000000014 5.3271709474140154 3.7290643182911913 
- 0 6 0.33559380390076604 4 0.66539264450876856 4 1 6
-7 0 0  3 4 8  86.054364525000011 4.8524344163500004 1.5513952487966669  90.486749011666674 3.942206700666667 2.0824114577833335  91.998577116666667 3.738252361666667 2.2939484518833333  96.518967948333341 2.8379676341666666 3.0623082323333333 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  90.000008905000001 1.9212210974333335 0.41745378083333329  90.000003816666663 4.1768059329999998 2.0717415211666665  90.000007631666676 5.7310673398333343 3.4705700871666663  89.99999364333334 7.3196550606666673 5.4417666596666665 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  5 14 4  91 2.1467438814484199 0.8153475852730534  91 2.2708455609389797 0.89314151402672171  90.999999999999943 2.3917656303648651 0.97155854808070352  91.000000000000014 2.5097822609960092 1.050846959049631  90.999999999999986 2.6252612109462716 1.131258979298138  90.999999999999986 2.8543127220024718 1.296499775185552  90.999999999999986 2.9677937244456176 1.3813855561572126  90.999999999999986 3.0794595593342886 1.4679195230125925  90.999999999999986 3.1897543836311097 1.5563116318574399  90.999999999999986 3.4168563622264667 1.7441125751978119  90.999999999999986 3.5335093253099368 1.8438445693137802  90.999999999999986 3.6495736398989695 1.9461354566905147  90.999999999999986 3.7655224298162562 2.0511322192056527  90.999999999999986 3.8817540956097547 2.1589296882091888 
- 0 6 0.32044122240090905 4 0.64761656907444154 4 1 6
-7 0 0  3 4 8  90.000007633333325 0.002150167999999994 -0.34047671033333338  89.999999998333337 2.3653433719999999 0.77187090116666668  90.000008901666689 3.9142781498333332 1.8621037205000002  90.000010175 6.3370721343333338 3.9547190663333334 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  85.00000636 0.49837640921666665 -0.05653652053333335  84.999997454999999 3.0587390663333331 0.60131104790000012  85.000011445000013 5.4017139671666659 1.4947187703333333  85.000006361666678 7.682835737833333 2.7456341581666663 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  80.167915346666675 7.3923118116666675 1.2825946214833335  84.962730408333329 5.2544638313333332 1.5189869901000002  89.981212616666681 3.9382635358333333 1.967277705516667  95.11246490500001 3.3520101310000001 2.7869070373333331 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  80.000005086666675 2.3525551209166666 0.088927402475  79.99999745833334 5.097779830166667 0.55284952121666664  80.000007626666672 7.7075410693333328 1.2699944971666668  79.999984745000006 10.337946732166667 2.2783865931666667 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  75.088962556666672 10.973492783166668 1.1991200248  80.036847434999999 7.4996134443333338 1.3057917557666667  84.763680776666661 5.2939405438333331 1.4889284916666667  90.90845998333333 3.6730603773333339 2.0643156020833335 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  75.000006358333337 5.3140192421666672 0.082278183966666668  75.000007633333325 8.3321053185 0.51870668930000008  75.000001269999984 11.062835376666667 1.1456824738333333  74.999998726666675 13.883149783333334 2.0911484754999998 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  69.909001668333332 14.637135505 1.0937744378000001  75.053497313333324 11.068247955666667 1.19965070465  79.877020518333339 7.5564692808333334 1.3002078037333336  85.43841552666666 4.9717653193333344 1.5107344987166667 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  70.000002541666674 9.6962811166666683 0.13223005082833333  69.999999996666659 12.174772741333333 0.47580367821666669  70.000003814999985 14.461350281666668 1.0597763460166667  70.000003811666659 16.746792474999999 1.9606785575000001 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  63.833620070000002 18.188989003333333 1.0337811508833334  70.385683698333338 14.301446278333334 1.1140660940333333  74.623644510000005 11.372135794666667 1.1855387988666668  81.119796751666669 6.6766039528333341 1.3363639609833335 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  59.609960556666664 18.498228075 1.0285666783666667  65.070509595000004 17.346089043333336 1.0560830734666666  70.108016969999994 14.507603965000001 1.1077079772833334  74.497412359999998 11.390416464166666 1.1886689660500001 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  59.061998366666664 19.357874549999998 1.6265960931500003  65.298034666666666 18.163630484999999 1.6414608955000003  69.745881400000002 16.226383370000001 1.6773822110000003  75.718460083333326 12.803629875 1.871109286666667 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  69.999991731666668 12.748884999666668 0.61510476471666675  70.000003181666671 14.507703301666666 1.0984109639999999  69.999994915000002 15.987211705000002 1.6668357051666667  69.999996185000001 17.416280748333335 2.456348895833333 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  59.258344648333335 19.845291136666667 2.5460139516666667  65.211922963333336 19.117561021666667 2.6316423019999999  69.893997191666671 17.980470018333335 2.7863153418333333  75.212137859999999 15.797501881666669 3.120509624666667 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  70.000002543333338 13.488144081166666 0.67078998686666669  70.000002545000001 16.144627096666667 1.7161365348333335  69.99999745333335 17.806184770000002 2.6867657898333333  70.000012713333334 19.467642151666666 4.4342143536666665 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  59.336096444999995 20.074801441666668 3.6094839178333333  65.201025646666665 19.69616572 3.7221465906666666  69.859844208333328 19.008741376666666 3.9173973403333333  75.35966110166666 17.565535861666667 4.3517882428333339 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  69.999992368333338 16.479190983333332 1.8925623296666667  70.000001275000002 17.854279518333335 2.7747291328333334  69.999998725000012 18.940636633333334 3.9059394596666666  69.999994913333339 19.679895716666667 5.3450478711666669 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  59.391712185000003 19.835763931666669 5.8955676156666676  65.211950941666657 20.081720669999999 5.8118306796666666  69.76052602 19.837361018333333 5.7968375283333344  75.746008556666666 19.122179986666666 6.1379414398333338 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  70.000008903333338 17.409436546666669 2.2974594436666669  70.000006355000011 19.010780018333335 3.9301710920000001  70.000011445000013 19.844179471666667 5.7253940898333333  70.000011443333335 20.165846825000003 8.3053747814999994 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  70.000006996666656 19.869708695 10.451876323333334  70.000003183333334 20.065141356666665 7.749323367833334  70.000008898333334 19.869711558333332 5.9093479318333335  70.000002545000001 19.009275119999998 3.7502939303333336 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  75.000005090000002 20.085418383333334 10.224239665000001  75.000005083333335 19.850114185000002 7.9289580183333328  75.000010171666659 19.081128440000001 6.1139143308333335  74.99998728333334 17.706985151666665 4.4641058049999991 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  64.989457451666667 20.081202191666669 5.7967049678333336  69.986818951666663 19.827145893333331 5.8079573709999996  75.063243863333327 19.163615863333334 6.1085495951666671  79.760220844999992 17.400093875000003 6.6065367063333333 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  80.000017803333336 19.567839301666666 10.109895386666667  80.00001398500001 18.539273900000001 8.1409184136666681  80.000019076666661 17.286614735000001 6.6570806503333335  80.000008900000012 15.485410375000001 5.0715403556666665 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  69.277907053333337 20.007292113333335 5.7617298361666673  75.223191576666665 19.121847473333332 6.1157723266666668  79.829374951666665 17.38698625833333 6.6238918303333341  85.459363301666656 14.501372180000001 7.2294649285000006 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  89.651551565000005 11.914568741333333 8.8457519214999998  85.012297316666675 16.061971348333334 8.519604206166667  80.299271903333334 18.657605490000002 8.2227693398333344  73.790668488333338 20.319252333333335 7.9199641549999997 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  85.000011443333335 17.502166908333333 10.097775936666668  85.000008901666661 15.772496225000001 8.463083267  85.000012718333323 14.227886355000001 7.1968269346666673  84.999997453333336 12.256928842166667 5.6886742908333332 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  74.445053101666673 19.279773711666667 6.0242670373333338  80.096318560000014 17.363144236666667 6.6563597516666668  85.169717153333323 14.438814799999999 7.1911081473333329  89.224817910000013 9.8225622174999998 7.5183184148333329 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  89.560980480000012 13.718303998333333 9.9499999680000002  85.039505008333336 17.551914535000002 9.9500004448333321  80.281012216666667 19.618939716666667 9.9499996510000006  73.836495715000012 20.201951663333332 9.9499998911666676 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  85.000005083333335 18.637953761666665 11.619626365000002  85.000001269999998 17.257906591666668 9.8815779695000003  85.000006361666664 15.875300091666666 8.554058233666666  84.999977115000007 14.060887970000001 7.0491486391666669 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  90.110006966666674 16.232307594999998 11.999998568166667  84.887573239999995 19.043909711666668 12.000001109333333  80.339733125000009 19.963479360000001 11.999998727333335  73.753573099999997 19.902155241666669 11.999999202666668 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  85.000000003333341 19.783878961666666 14.419864975000001  85.000002545000015 18.806727091666666 11.908886430000001  85.000005088333324 17.360662775000002 9.9445986755  84.999983473333344 15.295541448333333 8.0126832323333339 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  84.999986013333341 19.685453100000004 16.213190716666666  85.000005084999998 19.579738933333331 13.945662338333332  84.999986016666682 18.831995329999998 12.004155321666667  84.99995040666667 17.463647686666668 10.037697475833333 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  94.179958346666666 11.512120087666666 12.000001588333333  90.155138651666675 15.903816540000001 12.000000158333334  85.199516299999999 19.080414453333333 12.000002223833334  79.046811419999997 20.145975749999998 12.000000316833335 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  94.836764021666653 7.2460498409999996 9.9499961533333341  89.954533893333334 13.212057750000001 9.9500021944999997  85.345134738333343 17.485586323333337 9.9499963121666681  78.664933525000009 20.390516596666664 9.949976921166666 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  95.821200056666669 5.1207256316666676 9.1506155324999998  89.681991580000002 11.772761978333333 8.8484536800000022  85.45080693333334 15.805725735000001 8.5484762183333345  78.514761606666667 19.824387866666665 8.1045691968333333 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  96.990455631666663 2.9757633009999997 8.0367802778333335  89.35079574833334 10.258111634500001 7.5316449004999999  85.606334688333334 13.80834325 7.2315990126666669  78.223834993333327 19.449567158333334 6.4810236298333344 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  79.931559241666676 15.998696325000001 4.9137417875000002  85.019948326666679 12.261293093333334 5.7278006870000002  89.98867289333333 8.3936160406666662 6.4914854368333339  95.025371551666666 4.5088408391666661 7.164792378833333 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  84.999999998333337 10.151367027833333 4.265517036166667  84.999998730000002 12.286506491499999 5.7335302033333342  85.000003813333336 14.140102228166665 7.1167925993333334  84.999991100000003 16.094050250000002 8.7384101551666671 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  79.872553506666662 13.101259308333335 3.5784187515000001  85.039713541666671 10.242701846000001 4.2730262278333342  89.968607585000001 7.136267106 5.1864168245000002  95.085872650000013 4.2393550873333332 6.2737823324999997 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  85.000001268333335 8.039491812333333 2.8952768443333334  85.000002543333338 10.239255902 4.3192430733333342  85.000003816666663 12.211818378 5.6846913496666671  85.000007631666676 14.350955325000001 7.2584215003333341 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  77.739985146666669 11.030140242 1.9211956165666668  85.776369733333325 7.4458853405000003 2.8997826976666667  89.154544833333333 6.0947621660000006 3.4208803970000004  97.605447136666669 2.5957759816666668 4.8124847610000003 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  84.999994915000002 5.1718157135 1.3742225371500001  85.000002543333324 7.9019922404999994 2.8342857358333333  84.999992370000001 10.128662746833333 4.2298361458333336  84.999986009999986 12.791729607333334 6.1033214726666669 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  85.000012718333338 2.6128341558999999 0.36145627001666669  85.000005088333339 5.5117722351666671 1.5622939066666666  85.000013986666673 7.6885112919999994 2.7151898541666668  85.00000254166666 10.642628032999999 4.518154263833333 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  80.000012716666674 4.8349478245000004 0.45257636284166669  79.999989830000004 7.8452525131666668 1.3222053053333334  80.000001268333335 10.049923338833334 2.1698179844999999  80.000001270000013 13.248870375833333 3.5968225398333331 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  75.175078073333339 13.07125044 1.8686962326666667  79.960042321666663 10.114079554 2.2363994121666666  84.984769183333327 7.7662319334999994 2.7840176816666666  90.100869496666661 5.7293991245000004 3.5687521693333331 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  74.999996185000001 8.8349285136666662 0.62882828715000005  75.000015258333335 11.1238309505 1.1791169248333335  75.000001271666662 13.136341094166667 1.847289264  74.999997454999999 15.225590231666667 2.7854312658333336 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  67.173454283333342 17.802781738333337 1.5042221946500001  75.905719756666684 12.637376149833333 1.9186332621666669  79.203709918333345 10.5424776055 2.1749455429166669  87.279467266666671 6.486509104833333 2.979894419666667 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  63.674343746666665 19.041255 1.5984044023500001  70.444248198333327 15.845935661666665 1.6964101891166667  74.548633574999997 13.447834970000001 1.8380562070499999  81.361251828333337 9.2574969136666674 2.3050649165000001 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  64.373423261666673 19.372778893333333 2.5904163916666665  70.187716168333338 17.894527435000001 2.8007924951666672  74.875673930000005 15.886047043333333 3.1038271786666667  80.309599558333332 12.880641144 3.6249181428333337 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  75.000010171666673 10.292603731 0.91983279581666655  75.000005084999998 13.216039500666668 1.8453803463333331  75.000003814999999 15.738010721666667 3.0523457526666666  74.999991101666666 18.151274364999999 4.7862559956666662 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  64.114947003333342 19.894140565000001 3.6572821340000004  70.250236513333334 18.94177405166667 3.940370003  74.884087876666669 17.635490101666669 4.3247672718333332  80.213437396666663 15.155744871666668 4.9632906911666677 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  75.000012714999997 13.641355513333334 2.0165537593333331  75.000006355000011 15.798321405000001 3.1294248498333328  75.000012713333334 17.484653154999997 4.3067750931666673  75.000006355000011 18.902546248333334 5.8462126258333331 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  74.999999998333323 15.329990706666667 2.7580665748333333  75.000005083333335 17.560282868333335 4.3537068763333338  75.000005084999998 19.068357150000001 6.0298357013333339  74.999989826666663 20.047991753333335 8.3756427763333328 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  69.722384136666676 19.103997551666669 3.8890612126666673  75.067419688333331 17.585011166666668 4.3421471518333332  80.007991794999995 15.195469856666667 4.9450866775000009  84.900657655000003 12.744432768333334 5.6928963661666669 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  80.000007626666672 12.548254966666667 3.2267275058333338  80.000008898333334 15.343433696666668 5.0185574688333334  80.00001017000001 17.189319926666663 6.5144350524999997  79.99999491666668 19.070452055000001 8.7645165125000002 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  69.807629901666672 18.087428408333338 2.7645130555000001  75.045455934999993 15.799630481666668 3.1203175781666666  80.010571798333331 13.033340133333333 3.5952469508333333  84.912277223333334 10.317481279333334 4.2573906186666672 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  80.000008903333338 10.750824766833334 2.4565565588333333  80.000007626666672 13.075450423333333 3.5961583456666668  80.000010173333337 15.197934153333334 4.9175013701666677  80.000007626666658 17.244124733333337 6.5492369333333338 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  79.999998728333338 6.9814510745000007 1.0008802513666666  80.000007629999999 10.324784751999999 2.2643759248333333  80.000002543333324 13.013214905 3.5399264100000001  79.999993641666663 15.872926710000002 5.334613641333334 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  72.517627716666667 17.204993406666667 2.8144831261666665  80.789984386666674 12.599861148333334 3.6923290886666669  84.322479246666674 10.646140258666668 4.1748976706666667  91.920101168333332 6.0239154493333338 5.4650201000000003 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
-7 0 0  3 4 8  72.050647734999998 18.973474185000001 3.9415725470000003  80.813400268333339 14.847286386666667 5.0488105218333335  84.695789338333341 12.748697443333334 5.678580999666667  90.403438571666669 7.5953784780000007 6.5532512663333335 
- -3 1 -2 1 -1 1 0 1 1 1 2 1 3 1 4 1
+Curve2ds 39
+7 0 0  3 91 89  2.3503019887871592 5.8123978260946148  2.3431845034729579 5.8105845778707685  2.329041135334132 5.806951204515201  2.3077442775852468 5.8013819342133095  2.2863447011222182 5.7956878989067944  2.2636465433459563 5.7895379570286147  2.2402222603259405 5.7830688665690424  2.216291634918873 5.7763305451677232  2.1922380630305422 5.7694242792854258  2.1681977713285847 5.7623880648102794  2.143799917526322 5.7551060939716141  2.1191799382535077 5.7476109661394181  2.0943399571384722 5.7398970270818817  2.0693334010054207 5.7319747330631188  2.0440539274406189 5.7238050103888645  2.0184576013086297 5.7153622357050988  1.9934409089566982 5.7069486521582471  1.9661478197891264 5.6975871700947049  1.9395234894334048 5.6882856520078464  1.912949823756013 5.6788531902914468  1.8864869166528784 5.6693217526657484  1.8600170307324666 5.6596618564129129  1.8334346922567355 5.6498446418765997  1.8067411391094534 5.6398810292105237  1.7794440156706592 5.6295943711904775  1.7515161851176289 5.6189785798956926  1.7231169214636388 5.6081016773574062  1.6943426444764129 5.5970098780955464  1.6653977041977903 5.5857923256249453  1.6361628630595757 5.5744133952117476  1.606415355061233 5.5627987636136558  1.5762711232101629 5.551006339440792  1.5457614858333693 5.5390624559258299  1.5149398396865468 5.5270021680508412  1.4841830869137331 5.5149916874084139  1.4534270775911184 5.5030210649892481  1.422682400745144 5.4911097797916533  1.3919397133821578 5.4792691320590654  1.3611950541263651 5.4675123675224357  1.3304430125036746 5.4558520115200073  1.2996785202912868 5.4443006318456453  1.268896345753459 5.4328706860870186  1.2380912202342202 5.4215746202616755  1.2072578170657258 5.4104249017053743  1.1763907891050929 5.3994340894272081  1.1454848296958826 5.3886148428355831  1.1145346937921601 5.3779801531669795  1.0835354606381409 5.3675427453235622  1.052481959587257 5.3573175567986873  1.0220881813216061 5.3475481439029391  0.99219086663615352 5.3381816373206368  0.96277645345579355 5.3292121174792433  0.93375987281891981 5.3205965570060432  0.90508145505737425 5.3123077851377767  0.87666122891009046 5.3043154344260195  0.84850154303465231 5.296619390149421  0.82073202240150123 5.2892547731658066  0.79326307136490137 5.2821942395321191  0.76607277915463612 5.2754260996569107  0.73918177018646225 5.2689491423759449  0.71263101734296264 5.2627653897164883  0.68620018338527955 5.256819129653783  0.65995926668755833 5.2511247295830827  0.63394868423699136 5.2456867760088848  0.60821486215191134 5.2405097979031057  0.58280251303354136 5.2355962939979541  0.55775081848892383 5.2309463959028104  0.53311734042559511 5.226562592593603  0.50887699062679959 5.2224338210460379  0.48491263120227607 5.2185302684334838  0.46113109386008844 5.2148315959156513  0.43743686613655192 5.211320241685196  0.41373868701926081 5.2079827105608034  0.38994779914544031 5.2048088478375165  0.36597685758774839 5.2017915945497863  0.34174473318907245 5.1989271759677154  0.31715723941545543 5.1962133668714454  0.29217840915968918 5.1936552645040441  0.26656376910973067 5.191243167014961  0.24123043876000247 5.1890684564574023  0.21606124381965203 5.1871139725101401  0.19094518974281519 5.1853703929936863  0.16602563572405724 5.183845556487503  0.14124429780325196 5.1825328956379062  0.11657273800342172 5.1814301693443854  0.092010629348598993 5.1805349952285304  0.067450450657838112 5.1798490895379414  0.043405306814596513 5.1793719622052192  0.017931227115678624 5.1791069379649395  0.0048194094228698522 5.1790671519618208  0 5.1790808369801216 
+ 2.03784942368079 4 2.0960425650285792 1 2.1542357063763689 1 2.212428847724158 1 2.2706219890719472 1 2.3288151304197364 1 2.3870082717675261 1 2.4452014131153152 1 2.5033945544631044 1 2.5615876958108936 1 2.6197808371586833 1 2.6779739785064725 1 2.7361671198542616 1 2.7943602612020513 1 2.8525534025498405 1 2.9107465438976297 1 2.9689396852454188 1 3.027132826593208 1 3.0853259679409977 1 3.1435191092887869 1 3.2017122506365761 1 3.2599053919843657 1 3.3180985333321549 1 3.3762916746799441 1 3.4344848160277337 1 3.4926779573755224 1 3.5508710987233121 1 3.6090642400711013 1 3.6672573814188905 1 3.7254505227666801 1 3.7836436641144693 1 3.8418368054622585 1 3.9000299468100481 1 3.9582230881578373 1 4.0164162295056265 1 4.0746093708534161 1 4.1328025122012058 1 4.1909956535489945 1 4.2491887948967833 1 4.3073819362445729 1 4.3655750775923625 1 4.4237682189401522 1 4.4819613602879409 1 4.5401545016357296 1 4.5983476429835193 1 4.6565407843313089 1 4.7147339256790985 1 4.7729270670268873 1 4.8311202083746769 1 4.8893133497224657 1 4.9475064910702553 1 5.0056996324180449 1 5.0638927737658346 1 5.1220859151136233 1 5.1802790564614121 1 5.2384721978092017 1 5.2966653391569913 1 5.354858480504781 1 5.4130516218525697 1 5.4712447632003594 1 5.5294379045481481 1 5.5876310458959377 1 5.6458241872437274 1 5.704017328591517 1 5.7622104699393057 1 5.8204036112870945 1 5.8785967526348841 1 5.9367898939826738 1 5.9949830353304634 1 6.053176176678253 1 6.1113693180260409 1 6.1695624593738305 1 6.2277556007216202 1 6.2859487420694098 1 6.3441418834171994 1 6.4023350247649873 1 6.4605281661127769 1 6.5187213074605665 1 6.5769144488083562 1 6.6351075901561458 1 6.6933007315039355 1 6.7514938728517233 1 6.8096870141995129 1 6.8678801555473026 1 6.9260732968950922 1 6.9842664382428818 1 7.0424595795906697 1 7.1006527209384593 1 7.158845862286249 4
+8 -5.1790808369767198 -4.6606686162644397
+1 0 0 0 -1 
+7 0 0  3 25 23  0 4.6606686162644362  0.046597678258160628 4.6606731806397717  0.1401419970500033 4.661910487106474  0.2811676011006714 4.6675997654550878  0.42257070211153819 4.6772535023137047  0.56399820896655772 4.691064597280346  0.70548111241145073 4.7092518495356313  0.84588957824955968 4.7320311025347657  0.97297228524009771 4.7568381659322307  1.0947807721781682 4.7844719447453476  1.2172889645387392 4.8156741641363103  1.3386175395402629 4.8493324391575525  1.4580661854635568 4.8844441398624534  1.5750600546092177 4.9199979223419099  1.6906654794915053 4.9554879508080703  1.7985265765332537 4.9881748162820427  1.9049578398779494 5.0194101970106626  2.0247312362027277 5.0525678342686922  2.1671747139268644 5.0882436582376922  2.3466564788282529 5.1277057912515378  2.5145638939049686 5.1601568856486635  2.6788231642086004 5.1892049386326624  2.8400255474284593 5.2160334774713633  2.946653802438898 5.2334195569092943  3 5.2422190630349368 
+ -12.791400672854561 4 -12.20997336954299 1 -11.628546066231419 1 -11.047118762919848 1 -10.465691459608276 1 -9.8842641562967053 1 -9.3028368529851342 1 -8.7214095496735631 1 -8.139982246361992 1 -7.5585549430504217 1 -6.9771276397388506 1 -6.3957003364272795 1 -5.8142730331157093 1 -5.2328457298041382 1 -4.6514184264925671 1 -4.069991123180996 1 -3.4885638198694249 1 -2.9071365165578538 1 -2.3257092132462827 1 -1.7442819099347115 1 -1.1628546066231404 1 -0.58142730331156933 1 0 4
+8 5.2422190630349403 5.9443342009550602
+1 3 8.8817841970012523e-016 0 1 
+7 0 0  3 25 23  3 5.9443342009550628  2.9939357141661089 5.9432956616307617  2.9810653968779564 5.9410905162502248  2.9595276190702107 5.9373863902514561  2.9357138351993832 5.9332682352691029  2.9097085781839618 5.9287373768796412  2.8811007510557061 5.9237038003127669  2.8513143408837802 5.9183983658747774  2.8216500541264504 5.9130429073562611  2.7917465380540185 5.9075642319249946  2.7616861806091317 5.9019675537377081  2.7314343728934123 5.8962371079079734  2.7009763791996986 5.8903599938880093  2.6703302815366441 5.8843298906525687  2.6393579814912149 5.878108021209921  2.608560160047833 5.8717858460954364  2.5778890139064026 5.8653477716107068  2.5470994680578891 5.8587345123816794  2.5159948619017731 5.8518931798543043  2.4843430230664265 5.8447585095427765  2.4519623998029387 5.837271678658011  2.4184560421969588 5.8293164310309962  2.3841822390743426 5.820946771965759  2.3614808816080699 5.8152471213093362  2.350301988787157 5.8123978260946148 
+ 0 4 0.092629519258217732 1 0.18525903851643546 1 0.27788855777465321 1 0.37051807703287093 1 0.46314759629108865 1 0.55577711554930642 1 0.64840663480752414 1 0.74103615406574186 1 0.83366567332395958 1 0.9262951925821773 1 1.018924711840395 1 1.1115542310986128 1 1.2041837503568305 1 1.2968132696150483 1 1.3894427888732659 1 1.4820723081314837 1 1.5747018273897015 1 1.6673313466479192 1 1.759960865906137 1 1.8525903851643546 1 1.9452199044225724 1 2.03784942368079 4
+7 0 0  3 25 23  5.606125880534325 12.641482464459381  5.6148708874527493 12.641774516005446  5.6323605606170881 12.642365599125217  5.6585943718678138 12.643271706996694  5.684827521651779 12.644195852854539  5.7110610497224545 12.645136550593463  5.7372922478628006 12.646092423136961  5.7635323748788618 12.647061650559719  5.7897313863169568 12.648044349877246  5.8158947103300198 12.649037712446386  5.8420374974243741 12.650039191122836  5.8681722928803506 12.651046713222893  5.8943123357268963 12.652058600407635  5.9204706960068938 12.653073570583871  5.9466604334869455 12.654090706577236  5.9728948334272864 12.655109477367359  5.9991863137831318 12.656129583885868  6.0255505707429373 12.657151455493901  6.0519482885409905 12.658168212049036  6.0783684805652518 12.659173876662152  6.1046759508355821 12.660152126521732  6.1307934478108699 12.661098939312966  6.156676832413579 12.662011257081144  6.1737450969607091 12.66259372788058  6.1822247156705501 12.662877892336912 
+ 2.0379657823515802 4 2.1832443628929088 1 2.3285229434342374 1 2.473801523975566 1 2.619080104516895 1 2.7643586850582231 1 2.9096372655995522 1 3.0549158461408807 1 3.2001944266822093 1 3.3454730072235379 1 3.4907515877648665 1 3.6360301683061955 1 3.7813087488475237 1 3.9265873293888527 1 4.0718659099301817 1 4.2171444904715099 1 4.362423071012838 1 4.507701651554167 1 4.652980232095496 1 4.7982588126368242 1 4.9435373931781523 1 5.0888159737194822 1 5.2340945542608104 4
+7 0 0  3 25 23  6.1822242643724552 12.662854167309284  6.180975539339693 12.702464593825521  6.1784402373638372 12.781624918783647  6.1745234894798839 12.900219245631684  6.1704916462824135 13.018722958542471  6.1663471215926835 13.137121173604898  6.162091312851488 13.255417776052957  6.1577258730075117 13.37361151188462  6.1532523737915561 13.491702385879584  6.1486723997530772 13.609689938087865  6.1439875265984831 13.727573695384969  6.139199330249336 13.845353038988014  6.1343093873655636 13.963027227075045  6.1293192778978209 14.080595374330189  6.1242305866361573 14.19805644123948  6.1190449052995088 14.315409219242111  6.1137638320077867 14.43265231369721  6.108388979224725 14.549784129900738  6.1029219489927611 14.666802838415123  6.0973644291227291 14.78370640858285  6.0917178369257607 14.900492377618693  6.0859846505661288 15.017158595992051  6.0801625663747929 15.133698574768772  6.0762203828796224 15.211285013535608  6.0742337099225949 15.250047146552292 
+ 10.57202445903739 4 10.81829024350241 1 11.064556027967429 1 11.310821812432449 1 11.557087596897468 1 11.803353381362488 1 12.049619165827508 1 12.295884950292526 1 12.542150734757547 1 12.788416519222565 1 13.034682303687585 1 13.280948088152606 1 13.527213872617624 1 13.773479657082644 1 14.019745441547663 1 14.266011226012683 1 14.512277010477703 1 14.758542794942722 1 15.00480857940774 1 15.25107436387276 1 15.497340148337781 1 15.743605932802801 1 15.989871717267819 4
+7 0 0  3 47 45  6.0742337099225931 15.250047146552255  6.0733997603909877 15.266318024137744  6.0717263104051229 15.298849251216321  6.0691991717579601 15.347613514272195  6.0666547978604095 15.396343692334987  6.0640927795161179 15.445040077485732  6.0615127981946655 15.493701957186067  6.058914556022164 15.542328336624152  6.0562977506282634 15.590918289709212  6.0536620822328153 15.63947086480403  6.0510072518975395 15.687985111053264  6.0483329629445137 15.736460067663597  6.0456389186103578 15.784894780858979  6.0429248316600983 15.833288247269357  6.0401903899968845 15.881639623996344  6.0374353863997881 15.929947445632513  6.0346596744295713 15.978209982684104  6.0318630023631661 16.026426161353022  6.029045151552074 16.074594728665396  6.0262058997821999 16.122714476444834  6.0233450315280228 16.17078418164898  6.0204623356537112 16.218802622733275  6.017557606492141 16.266768575667125  6.0146306440235859 16.31468081543931  6.0116812543344018 16.362538116083154  6.0087092499109174 16.410339251270845  6.0057144503649029 16.458082994249995  6.0026966816470599 16.505768119985756  5.9996557809236499 16.55339339928506  5.9965915801834351 16.600957622871462  5.9935038072866176 16.648459450229737  5.9903921499953894 16.695898444679045  5.9872563301945121 16.743273492305761  5.9840960667353622 16.790583565466523  5.9809110806000962 16.837827611082002  5.9777010936760213 16.885004581369  5.974465829148512 16.932113424505566  5.9712050118084976 16.979153093217008  5.9679183670801734 17.026122521832836  5.9646057800211096 17.07301851165996  5.9612666289721963 17.119844729327767  5.9579018364972525 17.166584303035638  5.9545066567648783 17.213295784691681  5.9510976711882844 17.259753994331113  5.9476118667593099 17.30679281687134  5.9453927348436135 17.336461206289073  5.9443342009550664 17.350541349673339 
+ 15.989871717267841 4 16.093242869531647 1 16.196614021795455 1 16.299985174059263 1 16.40335632632307 1 16.506727478586875 1 16.610098630850683 1 16.71346978311449 1 16.816840935378298 1 16.920212087642103 1 17.023583239905911 1 17.126954392169718 1 17.230325544433526 1 17.333696696697331 1 17.437067848961139 1 17.540439001224946 1 17.643810153488754 1 17.747181305752559 1 17.850552458016367 1 17.953923610280174 1 18.057294762543982 1 18.160665914807787 1 18.264037067071595 1 18.367408219335402 1 18.47077937159921 1 18.574150523863018 1 18.677521676126823 1 18.78089282839063 1 18.884263980654438 1 18.987635132918246 1 19.091006285182051 1 19.194377437445858 1 19.297748589709666 1 19.401119741973474 1 19.504490894237279 1 19.607862046501086 1 19.711233198764894 1 19.814604351028702 1 19.91797550329251 1 20.021346655556314 1 20.124717807820122 1 20.22808896008393 1 20.331460112347735 1 20.434831264611542 1 20.53820241687535 4
+8 -5.9443342009550602 -5.2422190630349403
+1 8.8817841970012523e-016 17.350541349673339 -1 0 
+7 0 0  3 25 23  5.2422190630349359 17.350541349673339  5.2488207477290754 17.290099470227727  5.2618738111745422 17.169075583113809  5.2810085721839046 16.986980210815361  5.2997042885441212 16.804184437192262  5.3179677793245457 16.620553362128646  5.3358065230727236 16.435955368872182  5.3532287522358395 16.250262108583016  5.3702433739565985 16.063348429736127  5.3868600994660492 15.875090152487894  5.4030888849584287 15.685370836956626  5.4189418891178081 15.494055080625085  5.4344260275335028 15.301087083464532  5.4495706061047553 15.106122016259235  5.4643240369743387 14.909901332817912  5.4789391165607029 14.709120340581432  5.4939003130107249 14.496738951291183  5.5091075166871661 14.273447933905459  5.5246055084688708 14.037906808076386  5.5403906872032893 13.789299242718046  5.5564604352706271 13.526644591660748  5.5727958896733858 13.248974423530656  5.5893652669752409 12.955282406575932  5.60052710482194 12.748096647417032  5.6061281992750569 12.641481318295106 
+ -26.377649613757281 4 -25.66771305156778 1 -24.957776489378279 1 -24.247839927188778 1 -23.537903364999277 1 -22.827966802809776 1 -22.118030240620275 1 -21.408093678430774 1 -20.698157116241273 1 -19.988220554051772 1 -19.278283991862271 1 -18.56834742967277 1 -17.858410867483272 1 -17.148474305293767 1 -16.43853774310427 1 -15.728601180914767 1 -15.018664618725266 1 -14.308728056535765 1 -13.598791494346264 1 -12.888854932156763 1 -12.178918369967262 1 -11.468981807777761 1 -10.759045245588259 4
+7 0 0  3 25 23  4.1223859219806291 1.0981161730079028e-005  4.1305065642600303 1.0980101164727874e-005  4.1467534631228657 1.0977423247822152e-005  4.171140583596495 1.0971749662691518e-005  4.1955443896095801 1.0964432454445404e-005  4.2199648501974583 1.0955486677376202e-005  4.2444019739300485 1.0944928664870395e-005  4.2688558163714658 1.0932776184587372e-005  4.293326477924265 1.0919048346507302e-005  4.317814113661318 1.0903765555466768e-005  4.3423189020266486 1.088694945718502e-005  4.3668411633630715 1.0868622778057995e-005  4.3913809176398457 1.0848809544775898e-005  4.4159395330126685 1.0827533828636689e-005  4.4405135693863187 1.0804823978319923e-005  4.4650580556404904 1.0780752381616045e-005  4.4895825902158588 1.0755345472941048e-005  4.5140852065219814 1.0728640007704961e-005  4.5385669764865773 1.0700670577016425e-005  4.5630280934763876 1.0671472830514767e-005  4.5874689191742375 1.0641082508714352e-005  4.6118896987647551 1.0609535625256521e-005  4.6362906422718178 1.0576868338700953e-005  4.6525447982083499 1.0554367435835531e-005  4.6606686163013249 1.0542942353919419e-005 
+ 14.33346544095671 4 14.539077549490305 1 14.744689658023898 1 14.950301766557493 1 15.155913875091086 1 15.361525983624681 1 15.567138092158274 1 15.772750200691869 1 15.978362309225464 1 16.183974417759057 1 16.389586526292653 1 16.595198634826247 1 16.80081074335984 1 17.006422851893433 1 17.21203496042703 1 17.417647068960623 1 17.623259177494216 1 17.828871286027812 1 18.034483394561406 1 18.240095503094999 1 18.445707611628592 1 18.651319720162189 1 18.856931828695782 4
+7 0 0  3 25 23  4.6606686162750677 1.0542952950661717e-005  4.6606702277459497 0.034937462874937202  4.661367498578076 0.10498879656396448  4.6645492704981679 0.21050772907526272  4.6699144256882477 0.3163133714761075  4.6775321971559185 0.42226685553610599  4.687484588660527 0.52826009056524836  4.6998515510437668 0.63413752958438829  4.714755801711858 0.74000704585897781  4.7321754149906887 0.84509895481258734  4.7526737770813972 0.95231002506993878  4.7777143179934045 1.066306779245447  4.8082366501616374 1.1894607224288469  4.8462844899055977 1.3283937808996611  4.8864237818731233 1.4648364243621066  4.9272649794333496 1.5987781330907633  4.9681780844888266 1.7321022484950952  5.0048809837005548 1.8546609742517213  5.0418602012103175 1.9843714170914635  5.0817605034423288 2.1390879799874307  5.1278025451952374 2.3448607270098529  5.1716202848195207 2.5758038486441697  5.2077382424309278 2.7888918481607896  5.2306278968310442 2.929884116732604  5.2422190630349368 3 
+ 4.1060771490000001e-005 4 0.40810619072394633 1 0.81617132067640263 1 1.224236450628859 1 1.6323015805813152 1 2.0403667105337715 1 2.448431840486228 1 2.856496970438684 1 3.2645621003911405 1 3.6726272303435969 1 4.0806923602960525 1 4.488757490248509 1 4.8968226202009655 1 5.304887750153422 1 5.7129528801058775 1 6.121018010058334 1 6.5290831400107905 1 6.937148269963247 1 7.3452133999157034 1 7.753278529868159 1 8.1613436598206164 1 8.5694087897730729 1 8.9774739197255293 4
+8 -5.2422190630334402 -4.5564192418405698
+1 8.8817841970012523e-016 3 -1 0 
+7 0 0  3 25 23  4.5564192418405707 3  4.5466744238695718 2.9292796323321082  4.5240347195048596 2.765378314007084  4.4846742321941901 2.4954455349803055  4.4415916616465365 2.242086881443047  4.4047623498112429 2.0552183518230907  4.3715576417638671 1.9037983017018396  4.3412568145235637 1.7731899384918548  4.3086033211129058 1.6341303670677472  4.2761304265889857 1.4930900633745439  4.2441100291497555 1.3454383357067001  4.2174341894525114 1.2097975837220609  4.1961142987380953 1.0873556723376798  4.1790415544836561 0.9736925480624381  4.1654747127416245 0.86654846742538916  4.154569732337051 0.76368200659619845  4.1456428206273186 0.66208284346880153  4.1384820419814954 0.56180058682981615  4.1328847077314377 0.46304163677839372  4.1286640424093921 0.36601156270013063  4.1256472054110134 0.27095082309781798  4.1236750940376341 0.17812108824289336  4.1225995187980535 0.087804058471775359  4.1223884364495831 0.029477535150607508  4.122385951488468 0.00083634045969492728 
+ -7.06834388794866 4 -6.747197651364524 1 -6.4260514147803871 1 -6.1049051781962511 1 -5.7837589416121142 1 -5.4626127050279782 1 -5.1414664684438414 1 -4.8203202318597054 1 -4.4991739952755694 1 -4.1780277586914325 1 -3.8568815221072961 1 -3.5357352855231596 1 -3.2145890489390236 1 -2.8934428123548868 1 -2.5722965757707508 1 -2.2511503391866139 1 -1.9300041026024779 1 -1.6088578660183419 1 -1.287711629434205 1 -0.96656539285006904 1 -0.64541915626593216 1 -0.32427291968179617 1 -0.0031266830976601767 4
+7 0 0  3 25 23  4.1223859514884698 0.00083634045969512428  4.1223859506059251 0.00082383280709193466  4.1223859488804608 0.00079881770261363964  4.122385946411141 0.0007612956481094404  4.1223859440607074 0.00072377419584758462  4.1223859418291111 0.00068625334585678609  4.1223859397163674 0.00064873309816611388  4.1223859377224663 0.00061121345280478476  4.122385935847384 0.00057369440980132214  4.1223859340911124 0.00053617596918533903  4.1223859324536436 0.00049865813098532211  4.1223859309349651 0.00046114089523042036  4.1223859295350698 0.0004236242619498778  4.1223859282539381 0.00038610823117218922  4.1223859270915719 0.00034859280292693094  4.1223859260479383 0.00031107797724267799  4.1223859251230497 0.00027356375414859708  4.122385924316883 0.00023605013367378641  4.122385923629432 0.0001985371158469581  4.1223859230606763 0.00016102470069735361  4.1223859226106159 0.00012351288825398433  4.1223859222792285 8.6001678545696511e-005  4.1223859220665142 4.8491071601708294e-005  4.1223859220038115 2.3484402167861934e-005  4.122385921992235 1.0981167921309306e-005 
+ -0.0031266830976600006 4 -0.0029864275327750002 1 -0.0028461719678900001 1 -0.0027059164030050001 1 -0.00256566083812 1 -0.002425405273235 1 -0.0022851497083500004 1 -0.0021448941434649999 1 -0.0020046385785800003 1 -0.0018643830136950001 1 -0.0017241274488099998 1 -0.0015838718839250002 1 -0.0014436163190400001 1 -0.0013033607541550001 1 -0.0011631051892700001 1 -0.001022849624385 1 -0.00088259405949999998 1 -0.00074233849461499994 1 -0.0006020829297299999 1 -0.00046182736484499986 1 -0.00032157179995999976 1 -0.00018131623507499975 1 -4.1060670190000165e-005 4
+7 0 0  3 25 23  12.641530585655204 5.6061280481422653  12.641204957145527 5.5961189578012291  12.640565480220891 5.5761925379726636  12.639641984275681 5.5465741089098852  12.63875456845625 5.5172227705746826  12.637903658104207 5.4881345112667193  12.637089726243829 5.4593053798227151  12.636313303130567 5.4307314921124261  12.635574978391462 5.4024090259313704  12.6348754048428 5.3743342192337051  12.634215301550794 5.346503367690425  12.633595456786709 5.3189128226393949  12.633016730700291 5.2915589891333159  12.632480057761565 5.2644383241573864  12.631986448956036 5.2375473349913353  12.631536993739862 5.2108825777183849  12.631132861748497 5.1844406558733311  12.630775304282073 5.1582182192394237  12.630465655477629 5.1322119627482206  12.630205333501623 5.1064186256441868  12.62999584051448 5.0808349903040844  12.629838766052373 5.0554578829834673  12.629735776480452 5.0302841680075794  12.629704362317341 5.0136352340454478  12.62969825828832 5.0053436369529329 
+ -5.5330376427936203 4 -5.3959340078410261 1 -5.2588303728884318 1 -5.1217267379358375 1 -4.9846231029832442 1 -4.8475194680306499 1 -4.7104158330780557 1 -4.5733121981254614 1 -4.4362085631728672 1 -4.2991049282202738 1 -4.1620012932676786 1 -4.0248976583150853 1 -3.887794023362491 1 -3.7506903884098968 1 -3.6135867534573025 1 -3.4764831185047087 1 -3.3393794835521144 1 -3.2022758485995202 1 -3.0651722136469264 1 -2.9280685786943321 1 -2.7909649437417379 1 -2.6538613087891441 1 -2.5167576738365498 4
+7 0 0  3 25 23  12.629698264746686 5.0053440518207246  12.716521668082862 4.999049487724645  12.88537878273242 4.9866763162811472  13.125636996721433 4.9686779622079005  13.354208044216074 4.951154669107706  13.572436859779881 4.9340196572390447  13.781667156196354 4.9171846288395082  13.983248222522217 4.9005576866581562  14.17850129192062 4.8840452747765095  14.36883468327748 4.8675397985014994  14.55530433561926 4.8509616004737373  14.742988280889845 4.8338514693353414  14.932152217443274 4.8161618429598576  15.123704372432355 4.7977856196030224  15.318416819763875 4.7786426861109428  15.517113432396798 4.7586469308158117  15.720604568479489 4.7377093179240157  15.929706287487184 4.7157376398781787  16.145237508398122 4.6926370944417419  16.368023709349178 4.668310488510115  16.598899169897933 4.6426583889459856  16.838710993941625 4.6155787029538615  17.088319717357933 4.5869668106709858  17.261849058880777 4.5667965342512309  17.350541349673339 4.5564192418405698 
+ -13.38572945523376 4 -12.777287207268589 1 -12.168844959303417 1 -11.560402711338247 1 -10.951960463373076 1 -10.343518215407904 1 -9.7350759674427341 1 -9.1266337194775637 1 -8.5181914715123916 1 -7.9097492235472213 1 -7.301306975582051 1 -6.6928647276168798 1 -6.0844224796517086 1 -5.4759802316865382 1 -4.8675379837213679 1 -4.2590957357561958 1 -3.6506534877910255 1 -3.0422112398258552 1 -2.4337689918606831 1 -1.8253267438955127 1 -1.2168844959303424 1 -0.60844224796517032 1 0 4
+8 4.5564192418405698 5.2422190630334402
+1 17.350541349673339 0 0 1 
+7 0 0  3 25 23  17.350541349673339 5.2422190630349359  17.293722540913979 5.248425005271236  17.18001188461281 5.260698558998639  17.009110019615431 5.2787001874208546  16.837754134089501 5.2962991836201292  16.665830903298325 5.3135023879650261  16.493229571577707 5.3303171318962086  16.319842204122686 5.3467512847730516  16.145562589525962 5.3628132645143314  15.970288268126824 5.3785118562254555  15.793911652644431 5.3938568189544309  15.616351917868098 5.4088565138562101  15.43743500171912 5.4235266417437877  15.2573406854792 5.4378575089286372  15.074933551235768 5.4519360643806296  14.893991665558165 5.4654903260153604  14.696589963089712 5.4798394732851436  14.478316732605913 5.4951868165568625  14.238235700802786 5.5114786366652639  13.97444037374968 5.5287153948577616  13.685241474785322 5.5468631146756406  13.368833676942355 5.5658674285503906  13.023378521108176 5.5856455349337866  12.772391047459038 5.5992482681468454  12.641403196731057 5.6061324289342016 
+ 0 4 0.40947652292156411 1 0.81895304584312822 1 1.2284295687646924 1 1.6379060916862564 1 2.0473826146078205 1 2.4568591375293849 1 2.8663356604509489 1 3.2758121833725129 1 3.6852887062940769 1 4.0947652292156409 1 4.5042417521372053 1 4.9137182750587698 1 5.3231947979803333 1 5.7326713209018978 1 6.1421478438234614 1 6.5516243667450258 1 6.9611008896665902 1 7.3705774125881538 1 7.7800539355097182 1 8.1895304584312818 1 8.5990069813528471 1 9.0084835042744107 4
+1 12.662817664490388 6.1822479302894973 -0.99971756962729685 -0.023765121049366261 
+7 0 0  3 25 23  12.662792133831017 6.1822473233788768  12.662510919602013 6.1740060251005406  12.66193532315501 6.1574424576247315  12.661037153487385 6.1323673991514038  12.660108857170663 6.1070748759606657  12.659155364729342 6.0815805009392454  12.658181630846659 6.0559018559902631  12.657192587377928 6.030059111231326  12.656192795981873 6.0040728613829311  12.655187041344762 5.9779706445135457  12.654173887505342 5.9517336442771729  12.653152688206392 5.9253506985699351  12.652119970174628 5.8987573093220309  12.651091022347529 5.8721524706729751  12.650068588178236 5.8455533574648362  12.649053857919322 5.8189545235244768  12.648048438726807 5.7923565798940491  12.647053827942532 5.7657585101230389  12.64607155550793 5.7391597289924068  12.645103147234916 5.7125595304877077  12.644150136082645 5.6859572353905721  12.643214061113413 5.6593521512018938  12.642296468293853 5.6327435831825365  12.641698100625517 5.6150017468364899  12.641402516243485 5.6061300141796222 
+ 0.82773512582161002 4 0.97321375926766274 1 1.1186923927137156 1 1.2641710261597683 1 1.409649659605821 1 1.5551282930518737 1 1.7006069264979264 1 1.8460855599439792 1 1.9915641933900319 1 2.1370428268360846 1 2.2825214602821373 1 2.42800009372819 1 2.5734787271742432 1 2.7189573606202959 1 2.8644359940663486 1 3.0099146275124014 1 3.1553932609584541 1 3.3008718944045068 1 3.4463505278505595 1 3.5918291612966122 1 3.7373077947426649 1 3.8827864281887177 1 4.0282650616347704 4
+7 0 0  3 25 23  12.641403196731014 5.6061324289342016  12.772391047459012 5.5992482681468445  13.023378521108182 5.5856455349337839  13.368833676942399 5.5658674285503942  13.685241474785355 5.5468631146756389  13.974440373749687 5.5287153948577625  14.238235700802823 5.5114786366652622  14.478316732605938 5.4951868165568616  14.69658996308973 5.4798394732851454  14.893991665558161 5.4654903260153604  15.074933551235743 5.4519360643806323  15.257340685479202 5.4378575089286327  15.437435001719125 5.4235266417437886  15.616351917868078 5.4088565138562092  15.793911652644404 5.3938568189544309  15.970288268126827 5.3785118562254564  16.145562589525934 5.3628132645143305  16.319842204122644 5.3467512847730534  16.493229571577739 5.3303171318962095  16.665830903298271 5.3135023879650225  16.837754134089518 5.296299183620131  17.009110019615395 5.2787001874208519  17.180011884612796 5.260698558998639  17.293722540913976 5.2484250052712351  17.350541349673339 5.2422190630349359 
+ -9.0084835042744107 4 -8.5990069813528471 1 -8.1895304584312818 1 -7.7800539355097182 1 -7.3705774125881547 1 -6.9611008896665902 1 -6.5516243667450258 1 -6.1421478438234622 1 -5.7326713209018978 1 -5.3231947979803333 1 -4.9137182750587698 1 -4.5042417521372053 1 -4.0947652292156409 1 -3.6852887062940773 1 -3.2758121833725129 1 -2.8663356604509493 1 -2.4568591375293849 1 -2.0473826146078205 1 -1.6379060916862569 1 -1.2284295687646924 1 -0.81895304584312889 1 -0.40947652292156356 1 0 4
+8 5.2422190630334402 5.9443346683218303
+1 17.350541349673339 8.8817841970012523e-016 0 1 
+7 0 0  3 25 23  17.350541349673339 5.9443346683218286  17.319631316435409 5.9466571136625701  17.257706221109899 5.9512652332537286  17.164512487844682 5.9580690652771393  17.071021645131346 5.9647665025006207  16.977242727850086 5.9713595441925138  16.883184788244371 5.9778502169942103  16.788856887623936 5.9842405735261863  16.694268086256869 5.9905326979477582  16.599427417686282 5.9967286652455662  16.504343932695196 6.0028306782910876  16.409026450500463 6.0088404493049206  16.313483565944971 6.0147592100854244  16.217723923743524 6.0205884342148952  16.12175614358036 6.026329666073905  16.025588825395658 6.031984550803883  15.92923053503571 6.0375548111494224  15.83268979687853 6.0430422393132295  15.735975086252601 6.0484486855934119  15.639094823185443 6.053776048745541  15.542057367921229 6.0590262666137393  15.444871014329211 6.0642013079354413  15.34754399569106 6.0693031631291081  15.282570964050379 6.0726569489449025  15.250063720751928 6.0743223131346387 
+ 0 4 0.20778114964539093 1 0.41556229929078187 1 0.62334344893617277 1 0.83112459858156373 1 1.0389057482269546 1 1.2466868978723455 1 1.4544680475177365 1 1.6622491971631275 1 1.8700303468085184 1 2.0778114964539092 1 2.2855926460993001 1 2.4933737957446911 1 2.7011549453900821 1 2.908936095035473 1 3.116717244680864 1 3.3244983943262549 1 3.5322795439716459 1 3.7400606936170369 1 3.9478418432624278 1 4.1556229929078183 1 4.3634041425532093 1 4.5711852921986003 4
+7 0 0  3 47 45  15.250063720751928 6.0743223131346387  15.230725805220978 6.0753129751109798  15.192035226132781 6.0772862199115956  15.133956565949461 6.0802224433682071  15.075836557337414 6.0831356387579589  15.017676676338374 6.0860263448788441  14.959478488931115 6.0888950926461396  14.901242139415588 6.0917425806518546  14.842969366456902 6.0945685924567492  14.784661453084116 6.0973728919793118  14.726319782185028 6.1001552476660574  14.667945688829578 6.1029154262347909  14.609540500926393 6.105653194551472  14.551105529454832 6.1083683193155593  14.492642071890243 6.1110605673357981  14.434151413112328 6.1137297055937188  14.375634823027495 6.1163755015233443  14.317093569694183 6.1189977225958829  14.258528873571404 6.1215961384258781  14.199942081623423 6.1241705134439393  14.141334020738066 6.1267206347398719  14.082707413898314 6.1292462086154966  14.024057865895372 6.1317472470869667  13.965360140975523 6.1342246128649656  13.906620188809901 6.1366778409069118  13.847836537899072 6.1391067813259204  13.789009691207527 6.141511199382153  13.730139609095119 6.1438908826104246  13.67122638401834 6.1462456120631082  13.612270060738375 6.1485751699286819  13.553270682616301 6.1508793375049375  13.494228287949465 6.1531578953513186  13.435142879951158 6.1554106243428786  13.376014552020127 6.1576373009120653  13.316843018114779 6.1598377146109407  13.25762936733191 6.1620116021774463  13.19836946491729 6.1641588951785984  13.139060178331656 6.1662794715426639  13.079701986324723 6.1683730720247967  13.020294308377732 6.1704394743876003  12.960837135434021 6.1724784354785269  12.901329178122483 6.174489747995179  12.84177370191 6.176473068863463  12.782172187724198 6.1784281330796329  12.722523131542678 6.1803547543653545  12.682724946452453 6.1816200753795174  12.662817664490388 6.1822479302894973 
+ 4.5711852921986003 4 4.6947903565251492 1 4.818395420851699 1 4.942000485178248 1 5.0656055495047978 1 5.1892106138313467 1 5.3128156781578966 1 5.4364207424844455 1 5.5600258068109945 1 5.6836308711375443 1 5.8072359354640941 1 5.9308409997906431 1 6.054446064117192 1 6.1780511284437418 1 6.3016561927702908 1 6.4252612570968406 1 6.5488663214233895 1 6.6724713857499385 1 6.7960764500764883 1 6.9196815144030381 1 7.0432865787295871 1 7.166891643056136 1 7.290496707382685 1 7.4141017717092348 1 7.5377068360357846 1 7.6613119003623336 1 7.7849169646888825 1 7.9085220290154323 1 8.0321270933419804 1 8.1557321576685311 1 8.27933722199508 1 8.402942286321629 1 8.5265473506481797 1 8.6501524149747269 1 8.7737574793012776 1 8.8973625436278265 1 9.0209676079543755 1 9.1445726722809262 1 9.2681777366074751 1 9.3917828009340241 1 9.5153878652605748 1 9.6389929295871219 1 9.7625979939136727 1 9.8862030582402216 1 10.009808122566771 4
+7 0 0  3 25 23  4.660668616273635 1.0542947374227749e-005  4.6709341813633731 1.0528507207598522e-005  4.6912208428610489 1.0499389106600822e-005  4.7209303851722471 1.0455168393275577e-005  4.7499333249443083 1.0410579902995214e-005  4.7782403900721073 1.0365778268437458e-005  4.8058601622276731 1.0320905106211686e-005  4.8327987703266775 1.0276088488166704e-005  4.8590599719990752 1.0231445189940189e-005  4.8846451701440197 1.0187082382873177e-005  4.9095534706443953 1.0143099474615818e-005  4.933781778196777 1.0099589762471677e-005  4.9573248094362388 1.0056641922764508e-005  4.9801754863657557 1.0014341213797137e-005  5.0023239582685122 9.9727706163618404e-006  5.0237617728111736 9.9320111211251313e-006  5.0444624907031539 9.8922277908028857e-006  5.064451942124677 9.8534581635414215e-006  5.0835622733610029 9.8161201102943357e-006  5.1026645886235817 9.7785025432733393e-006  5.1217690339918276 9.7405957509268925e-006  5.1408728917438973 9.7024220322779123e-006  5.1599768922240541 9.6639948337731678e-006  5.1727128557294035 9.6382180086320954e-006  5.1790808394911876 9.6252924013398964e-006 
+ 0.01380223016778 4 0.20741636185933321 1 0.40103049355088638 1 0.59464462524243966 1 0.78825875693399283 1 0.981872888625546 1 1.1754870203170993 1 1.3691011520086525 1 1.5627152837002056 1 1.7563294153917588 1 1.949943547083312 1 2.1435576787748651 1 2.3371718104664185 1 2.5307859421579715 1 2.7244000738495249 1 2.9180142055410778 1 3.1116283372326312 1 3.3052424689241846 1 3.4988566006157376 1 3.6924707323072909 1 3.8860848639988439 1 4.0796989956903973 1 4.2733131273819502 4
+7 0 0  3 113 111  5.1790808394973249 9.6252926400040772e-006  5.1790820451682036 0.0030582051169365143  5.1790908854030535 0.0099408013345935829  5.17915802050904 0.022636296244448722  5.1793120227156946 0.037710305421354354  5.1795914694161542 0.055199062722728842  5.180044825269702 0.075051234862442806  5.180626265790516 0.094574811358756131  5.181343268485012 0.11426433028005122  5.1821943165090989 0.13399972462072679  5.1831810005638035 0.15382962099802613  5.1843036077334421 0.1737438632678775  5.1855667592268864 0.19380022745441464  5.1869613803955179 0.21384515613614699  5.1884798080417109 0.23379447936039355  5.1901350060817846 0.25382897848084185  5.1919408676534538 0.2740810470865393  5.1939074972382784 0.29462738285394457  5.1960813495425002 0.31583172703554907  5.1983237663462241 0.33634228884286865  5.2006362553554384 0.35631321823235446  5.2030222419157051 0.37585370610570751  5.2054888734846223 0.39508795601073909  5.2080466615909771 0.41413953206118553  5.2107095195198632 0.43313454131648937  5.2134956977489662 0.4522052945664008  5.216425117447189 0.47147346114298527  5.2195306765242977 0.49111506413951422  5.2228177951798562 0.51111881674047521  5.2262633130614056 0.53132244432915532  5.2298725076913213 0.55173538077287243  5.2336422998297873 0.57232122180837941  5.2375702783434948 0.59305240774701384  5.241654887661789 0.61390867212895028  5.2458851175646313 0.63482819571909832  5.2502810897978938 0.65590463417181311  5.2548643289580577 0.67722254808790416  5.2596295618104492 0.69873835055473477  5.2645777093830555 0.72044091824945111  5.269708792338526 0.74231608303340968  5.275016939088875 0.76432783905729451  5.2805170493307614 0.78652882006776226  5.2862361824225053 0.80901469858525021  5.2921656892657456 0.8317356421125025  5.2983063750530865 0.85468319852445085  5.3046522018189748 0.87782534988281058  5.3112103697719135 0.90118155452197624  5.3179990175453398 0.92480850891460953  5.3250084256157528 0.94866844162205044  5.3322584242070379 0.9728098898668085  5.339751475400802 0.99721279675864694  5.3474248700086759 1.0216578531204012  5.3553638421482477 1.046425101329439  5.3635179410965881 1.0713617255138921  5.3718806258940335 1.0964643345848517  5.3804505634316664 1.1217428525899533  5.3892277070855306 1.1472109455868462  5.3981536864868449 1.1727165113888969  5.4072293830218428 1.1982840026051622  5.4164503920298888 1.2239209142733285  5.4257982392946493 1.2495981439807893  5.4352152816636998 1.2751831390443287  5.4447052540166396 1.3007075736436331  5.4542593837358417 1.3261689009453044  5.4638644699894074 1.3515539767522613  5.4734788931468517 1.3767803112158219  5.4830945306219814 1.4018492667968701  5.4926953133329413 1.4267427613181696  5.5022676567256052 1.4514489606710614  5.5117978241002632 1.4759554804205994  5.5212727852351815 1.5002512986822214  5.5306800439945798 1.5243261146241343  5.5400079800517146 1.5481710422997237  5.5492450588263962 1.5717763793382715  5.5583817412540579 1.595136489565919  5.567437146802364 1.6183173142795384  5.5764080268929686 1.6413214205287994  5.5852713455167677 1.6641035926119732  5.594001116930361 1.6866097612077293  5.6026035912362557 1.7088686043019936  5.6110751901418849 1.7308839997516137  5.6194567720378901 1.7527747177667852  5.6276471906001051 1.774289195999474  5.6357109159818615 1.7956135736859642  5.6436294437807781 1.8167107779913554  5.6513525232499022 1.8374543557894039  5.6589223597434684 1.8579648964797075  5.6664669708173205 1.8785962804105432  5.6740173211997922 1.8994512316764456  5.6815572431680508 1.9205065957322072  5.6890834109166111 1.9417764019521042  5.6965833740707694 1.963251657979334  5.7040632272320764 1.9849783883403138  5.7114586555829376 2.0068059646976284  5.7185062997804161 2.0279638512968345  5.7252964984782961 2.0486823691390654  5.7318347269493559 2.0689543799032477  5.7381491129421542 2.0888417993487249  5.7442501848558916 2.1083559862660719  5.7501855752865119 2.1276308908917159  5.7560392387839112 2.1469354354903896  5.7617804325198172 2.1661649150480309  5.7674079309633486 2.1853081001002201  5.7729136769188791 2.2043297440544976  5.7782924228806101 2.2232019489819139  5.7835390729262439 2.2418957599900882  5.7886492417777511 2.2603830065075621  5.7936192563657887 2.2786369489959735  5.798445183545148 2.2966274798490161  5.8031801182268943 2.3145410187732587  5.8078267091057834 2.3323813157208324  5.8108728259944913 2.3442501566287479  5.8123844089591774 2.3501828933388773 
+ 4.1055189929999997e-005 4 0.039041957347727543 1 0.078042859505525086 1 0.11704376166332263 1 0.15604466382112017 1 0.19504556597891773 1 0.23404646813671526 1 0.27304737029451276 1 0.31204827245231032 1 0.35104917461010787 1 0.39005007676790543 1 0.42905097892570293 1 0.46805188108350049 1 0.5070527832412981 1 0.5460536853990956 1 0.58505458755689321 1 0.62405548971469071 1 0.66305639187248822 1 0.70205729403028583 1 0.74105819618808333 1 0.78005909834588094 1 0.81906000050367844 1 0.85806090266147594 1 0.89706180481927356 1 0.93606270697707106 1 0.97506360913486856 1 1.0140645112926661 1 1.0530654134504636 1 1.0920663156082611 1 1.1310672177660586 1 1.1700681199238563 1 1.2090690220816538 1 1.2480699242394513 1 1.2870708263972488 1 1.3260717285550463 1 1.365072630712844 1 1.4040735328706415 1 1.443074435028439 1 1.4820753371862365 1 1.521076239344034 1 1.5600771415018317 1 1.5990780436596292 1 1.6380789458174267 1 1.6770798479752242 1 1.7160807501330217 1 1.7550816522908192 1 1.794082554448617 1 1.8330834566064145 1 1.872084358764212 1 1.9110852609220095 1 1.950086163079807 1 1.9890870652376047 1 2.0280879673954022 1 2.0670888695531997 1 2.1060897717109972 1 2.1450906738687947 1 2.1840915760265922 1 2.2230924781843897 1 2.2620933803421872 1 2.3010942824999852 1 2.3400951846577827 1 2.3790960868155802 1 2.4180969889733777 1 2.4570978911311752 1 2.4960987932889727 1 2.5350996954467702 1 2.5741005976045677 1 2.6131014997623652 1 2.6521024019201627 1 2.6911033040779602 1 2.7301042062357581 1 2.7691051083935556 1 2.8081060105513531 1 2.8471069127091506 1 2.8861078148669481 1 2.9251087170247456 1 2.9641096191825431 1 3.0031105213403406 1 3.0421114234981381 1 3.0811123256559356 1 3.1201132278137336 1 3.1591141299715311 1 3.1981150321293286 1 3.2371159342871261 1 3.2761168364449236 1 3.3151177386027211 1 3.3541186407605186 1 3.3931195429183161 1 3.4321204450761136 1 3.4711213472339111 1 3.5101222493917086 1 3.5491231515495065 1 3.588124053707304 1 3.6271249558651015 1 3.666125858022899 1 3.7051267601806965 1 3.744127662338494 1 3.7831285644962915 1 3.822129466654089 1 3.8611303688118865 1 3.900131270969684 1 3.9391321731274815 1 3.9781330752852795 1 4.017133977443077 1 4.0561348796008749 1 4.095135781758672 1 4.1341366839164699 1 4.1731375860742679 1 4.2121384882320649 1 4.2511393903898629 1 4.2901402925476599 4
+7 0 0  3 25 23  5.8123844089591747 2.3501828933388795  5.8149166595649122 2.3601227250402279  5.8199170567010476 2.3799920894648263  5.8272626554072042 2.4099126454958304  5.8344724738798233 2.4400126662525103  5.8416290735055458 2.4706506855553467  5.8484892196804408 2.5007572960573579  5.8550676503716792 2.5303187616839713  5.8614022537869594 2.5594433159991405  5.8675209793307861 2.5882023696322389  5.8734512834971255 2.616673774423802  5.8792178575080731 2.6449295191791888  5.8848443957332801 2.6730432746795865  5.8903506780740029 2.7010737979609827  5.8957641613842018 2.7291247822243365  5.9010780659114417 2.7571228316970147  5.9062725370263651 2.7849248819409724  5.9113622697512263 2.8125709328712944  5.9163523803150184 2.8400515194797942  5.9212502342080189 2.8673700422986776  5.9260622834021746 2.8945260994645623  5.9307949095592765 2.9215199778856107  5.9354542286298608 2.9483515018296993  5.9385154358153862 2.9661306928852103  5.940035769594485 2.9749931115698862 
+ 4.2901402925476599 4 4.3554862122914839 1 4.4208321320353079 1 4.4861780517791319 1 4.5515239715229567 1 4.6168698912667807 1 4.6822158110106047 1 4.7475617307544287 1 4.8129076504982526 1 4.8782535702420766 1 4.9435994899859006 1 5.0089454097297246 1 5.0742913294735494 1 5.1396372492173734 1 5.2049831689611974 1 5.2703290887050214 1 5.3356750084488453 1 5.4010209281926702 1 5.4663668479364933 1 5.5317127676803182 1 5.5970586874241421 1 5.6624046071679661 1 5.7277505269117901 4
+7 0 0  3 25 23  5.9400357695944859 2.9749931115698809  5.9401014510287169 2.9753735221015405  5.9402327743946621 2.9761342757968405  5.9404296405358208 2.9772751972925042  5.9406263873696181 2.978415902799886  5.9408230144943106 2.9795563853701665  5.941019521518152 2.9806966381159681  5.9412159080133646 2.9818366539443244  5.941412173687846 2.9829764265556835  5.9416083177441887 2.9841159467149589  5.9418043412716433 2.9852552161683059  5.9420002383190793 2.9863941957048548  5.9421960292108693 2.9875329989932466  5.9423916358491136 2.9886711670719608  5.9425869958439259 2.9898083318938071  5.9427821255697975 2.9909445836938344  5.9429770202935526 2.9920798899171945  5.943171680934956 2.9932142509168744  5.9433661068961854 2.9943476582346555  5.9435602979831312 2.9954801057796581  5.9437542538905488 2.996611586833132  5.9439479743399346 2.9977420948510214  5.9441414590428066 2.9988716232484163  5.9442702914872259 2.9996239847225223  5.944334668321833 3 
+ 5.7277505269117901 4 5.7335344421596375 1 5.7393183574074849 1 5.7451022726553322 1 5.7508861879031787 1 5.7566701031510261 1 5.7624540183988735 1 5.7682379336467209 1 5.7740218488945683 1 5.7798057641424156 1 5.785589679390263 1 5.7913735946381095 1 5.7971575098859569 1 5.8029414251338043 1 5.8087253403816517 1 5.8145092556294991 1 5.8202931708773464 1 5.8260770861251938 1 5.8318610013730412 1 5.8376449166208877 1 5.8434288318687351 1 5.8492127471165825 1 5.8549966623644298 4
+8 -5.9443346683218303 -5.2422190630334402
+1 8.8817841970012523e-016 3 -1 0 
+7 0 0  3 25 23  5.2422190630349368 3  5.2306278968310442 2.9298841167325862  5.2077382424309269 2.7888918481607701  5.1716202848195225 2.5758038486441954  5.1278025451952374 2.3448607270098343  5.0817605034423305 2.1390879799874241  5.0418602012103149 1.9843714170914653  5.0048809837005575 1.8546609742517262  4.9681780844888177 1.7321022484950539  4.9272649794333567 1.5987781330907955  4.8864237818731295 1.4648364243621395  4.8462844899055968 1.3283937808996629  4.8082366501616383 1.1894607224288485  4.7777143179934027 1.0663067792454459  4.7526737770814007 0.952310025069939  4.7321754149906861 0.84509895481259201  4.7147558017118572 0.74000704585897981  4.699851551043766 0.63413752958438963  4.6874845886605261 0.52826009056524892  4.6775321971559185 0.42226685553610593  4.6699144256882477 0.31631337147610777  4.6645492704981661 0.21050772907526247  4.6613674985780769 0.10498879656396502  4.6606702277459506 0.034937462874937611  4.6606686162750677 1.0542952950810268e-005 
+ -8.9774739197255293 4 -8.5694087897730729 1 -8.1613436598206164 1 -7.7532785298681599 1 -7.3452133999157043 1 -6.9371482699632478 1 -6.5290831400107914 1 -6.1210180100583358 1 -5.7129528801058793 1 -5.3048877501534228 1 -4.8968226202009664 1 -4.4887574902485099 1 -4.0806923602960534 1 -3.6726272303435969 1 -3.2645621003911414 1 -2.8564969704386849 1 -2.4484318404862284 1 -2.0403667105337719 1 -1.6323015805813155 1 -1.2242364506288599 1 -0.81617132067640341 1 -0.40810619072394694 1 -4.1060771490464276e-005 4
+7 0 0  3 25 23  4.5564192418405698 17.350541349673339  4.5643174934781428 17.2830363092387  4.5801303640750595 17.147232187761666  4.6038443339968103 16.941342353756916  4.6274994460909928 16.733469944831551  4.6510389722062353 16.523806913933491  4.6744048172858053 16.312540535155257  4.6975378627251692 16.099853999108984  4.7203788580935448 15.885927765338126  4.7428690049121585 15.670942929892513  4.7649514689001666 15.455076494271083  4.7865695865988558 15.238527147526597  4.8076773257384238 15.021426568957502  4.8282038608001079 14.804176924392907  4.8482256175211544 14.585920330744958  4.8677335220978204 14.366889578170696  4.8867168727448353 14.147432128940222  4.9051751281243314 13.927887224190387  4.923112989168021 13.708614027047524  4.9405399272198798 13.48997958714552  4.9574685549382371 13.272358077507159  4.9739133091567913 13.056127515052157  4.9898894070650917 12.84166799534087  5.0002371342250562 12.700128698136803  5.0053376556600435 12.629780760588691 
+ -10.097004591974979 4 -9.638754840364129 1 -9.1805050887532786 1 -8.7222553371424301 1 -8.2640055855315797 1 -7.8057558339207294 1 -7.347506082309879 1 -6.8892563306990295 1 -6.4310065790881801 1 -5.9727568274773297 1 -5.5145070758664794 1 -5.0562573242556299 1 -4.5980075726447796 1 -4.1397578210339301 1 -3.6815080694230797 1 -3.2232583178122303 1 -2.7650085662013799 1 -2.3067588145905296 1 -1.8485090629796801 1 -1.3902593113688297 1 -0.93200955975797939 1 -0.47375980814713081 1 -0.015510056536280459 4
+7 0 0  3 25 23  5.0053437811373955 12.629685496294512  5.0138291639523 12.629698521662741  5.0308440544515047 12.629743146392117  5.0565222635821545 12.629862434319525  5.0823798222024763 12.63003032190927  5.1084402857506701 12.630244388079941  5.1347271722054133 12.630503086768549  5.1612642961132984 12.630805882636064  5.1880745233493508 12.631153185561322  5.2151843967092706 12.631546495443878  5.242606861479711 12.63198790243715  5.27040572383937 12.632481949487191  5.2984550811376119 12.633028683148865  5.3264335365425124 12.633616656266568  5.3544238031733418 12.634246490730236  5.3824043100075905 12.634915722860127  5.4103814190742412 12.635622736434248  5.4383539980507889 12.636365705459333  5.4663229131474536 12.637142874211587  5.4942884856621079 12.637952479092977  5.5222511737672679 12.638792766630839  5.5502113898816221 12.639661985804073  5.5781695506375168 12.640558387665502  5.5968072242327294 12.641172944038344  5.6061258540231904 12.641484169392355 
+ -4.6315372478723704 4 -4.4766138693226525 1 -4.3216904907729345 1 -4.1667671122232175 1 -4.0118437336734996 1 -3.8569203551237816 1 -3.7019969765740637 1 -3.5470735980243462 1 -3.3921502194746287 1 -3.2372268409249108 1 -3.0823034623751928 1 -2.9273800838254753 1 -2.7724567052757574 1 -2.6175333267260399 1 -2.462609948176322 1 -2.3076865696266045 1 -2.1527631910768865 1 -1.9978398125271686 1 -1.8429164339774511 1 -1.6879930554277331 1 -1.5330696768780157 1 -1.3781462983282977 1 -1.2232229197785802 4
+7 0 0  3 25 23  5.606128199275056 12.64148131829508  5.6005271048219374 12.748096647417016  5.5893652669752383 12.955282406575929  5.5727958896733876 13.248974423530663  5.5564604352706262 13.526644591660743  5.5403906872032911 13.789299242718045  5.5246055084688734 14.0379068080764  5.5091075166871644 14.273447933905461  5.4939003130107267 14.496738951291164  5.4789391165607011 14.709120340581451  5.4643240369743387 14.909901332817915  5.4495706061047535 15.106122016259205  5.4344260275335037 15.301087083464527  5.4189418891178045 15.494055080625094  5.4030888849584295 15.685370836956603  5.3868600994660474 15.875090152487889  5.3702433739566002 16.063348429736127  5.3532287522358413 16.250262108582994  5.3358065230727245 16.435955368872179  5.3179677793245448 16.620553362128646  5.2997042885441203 16.804184437192259  5.2810085721839064 16.986980210815354  5.2618738111745431 17.169075583113777  5.2488207477290745 17.290099470227698  5.2422190630349359 17.350541349673339 
+ 10.759045245588259 4 11.468981807777761 1 12.178918369967262 1 12.888854932156763 1 13.598791494346264 1 14.308728056535765 1 15.018664618725264 1 15.728601180914765 1 16.438537743104266 1 17.148474305293767 1 17.858410867483268 1 18.56834742967277 1 19.278283991862271 1 19.988220554051772 1 20.698157116241273 1 21.408093678430774 1 22.118030240620275 1 22.827966802809776 1 23.537903364999277 1 24.247839927188778 1 24.957776489378279 1 25.66771305156778 1 26.377649613757281 4
+8 -5.2422190630334402 -4.5564192418405698
+1 8.8817841970012523e-016 17.350541349673339 -1 0 
+7 0 0  3 25 23  0 4.122385921987151  0.065320685840229889 4.1223701882373138  0.1999909021558039 4.1235102614782395  0.40505388823891697 4.1294212570810176  0.6200951138825046 4.141677007132575  0.79621208117519227 4.1573197621830058  0.94248636780834627 4.1746617178243195  1.0540605580660738 4.1908613222048317  1.1645962027086874 4.209324746530231  1.2741351947926094 4.2299002692990539  1.3822124862171474 4.2520445963676812  1.4883365980764729 4.2752274158782049  1.5917193809854124 4.2987973958761216  1.6917614770084792 4.3221392008098105  1.7863128143228926 4.344299000349773  1.8802525926540226 4.3660343439621814  1.9807009759901968 4.3885635785565835  2.0948155895109357 4.4125795915759332  2.2290202026799224 4.4386646132619827  2.3924257914616112 4.4673617387183837  2.550371152899146 4.4924489870408939  2.7058107462112622 4.5153822875982979  2.8562587118292173 4.5365161584814855  2.9528330732027355 4.5498473901744081  3 4.5564192418405707 
+ -8.5116719656905904 4 -8.1247777854319274 1 -7.7378836051732645 1 -7.3509894249146006 1 -6.9640952446559377 1 -6.5772010643972747 1 -6.1903068841386109 1 -5.8034127038799479 1 -5.4165185236212849 1 -5.029624343362622 1 -4.642730163103959 1 -4.2558359828452952 1 -3.8689418025866322 1 -3.4820476223279693 1 -3.0951534420693054 1 -2.7082592618106425 1 -2.3213650815519795 1 -1.9344709012933166 1 -1.5475767210346536 1 -1.1606825407759898 1 -0.7737883605173268 1 -0.38689418025866296 1 0 4
+8 4.5564192418405698 5.2422190630334402
+1 3 8.8817841970012523e-016 0 1 
+7 0 0  3 25 23  3 5.2422190630349368  2.9466538024388971 5.2334195569092934  2.8400255474284606 5.2160334774713641  2.6788231642086089 5.1892049386326597  2.5145638939049642 5.1601568856486644  2.3466564788282578 5.1277057912515369  2.1671747139268529 5.0882436582376922  2.0247312362027392 5.052567834268693  1.9049578398779381 5.0194101970106608  1.798526576533271 4.9881748162820454  1.6906654794914855 4.9554879508080658  1.575060054609227 4.9199979223419144  1.4580661854635351 4.8844441398624463  1.3386175395402515 4.8493324391575525  1.2172889645387228 4.8156741641363094  1.0947807721781846 4.7844719447453485  0.97297228524009394 4.756838165932229  0.84588957824955524 4.7320311025347692  0.70548111241145117 4.7092518495356277  0.56399820896655684 4.6910645972803495  0.4225707021115378 4.6772535023137021  0.28116760110067096 4.6675997654550887  0.14014199705000285 4.6619104871064749  0.046597678258160413 4.6606731806397725  0 4.6606686162644362 
+ 0 4 0.581427303311571 1 1.162854606623142 1 1.7442819099347129 1 2.325709213246284 1 2.9071365165578551 1 3.4885638198694258 1 4.0699911231809969 1 4.651418426492568 1 5.2328457298041391 1 5.8142730331157102 1 6.3957003364272813 1 6.9771276397388515 1 7.5585549430504226 1 8.1399822463619937 1 8.7214095496735649 1 9.302836852985136 1 9.8842641562967071 1 10.465691459608278 1 11.047118762919849 1 11.62854606623142 1 12.209973369542992 1 12.791400672854561 4
+7 0 0  3 25 23  -1.7281319646209097e-013 4.6606686162892137  -1.7289890612013219e-013 4.6525447981986412  -1.7305957090591326e-013 4.6362906422630417  -1.732683957363705e-013 4.6118896987513684  -1.7344512390652026e-013 4.5874689191665654  -1.7358988554600757e-013 4.5630280934635952  -1.7370284531043196e-013 4.5385669764783803  -1.7378420616307114e-013 4.5140852065127852  -1.7383420771395227e-013 4.4895825902072364  -1.7385312213778756e-013 4.4650580556318458  -1.7384126479952605e-013 4.4405135693785649  -1.7379894812289018e-013 4.4159395330028568  -1.7372667460114244e-013 4.3913809176310554  -1.73625018024926e-013 4.3668411633545219  -1.7349454675065765e-013 4.3423189020185653  -1.733358600381137e-013 4.3178141136536832  -1.7314957642886336e-013 4.2933264779171054  -1.7293633495274749e-013 4.2688558163648178  -1.7269679286831844e-013 4.2444019739239236  -1.7243162434034278e-013 4.219964850191916  -1.7214151875050366e-013 4.1955443896046196  -1.7182717946868117e-013 4.1711405835921669  -1.7148932109376757e-013 4.1467534631191922  -1.7124888857565081e-013 4.1305065642568213  -1.7112499469364252e-013 4.1223859219776564 
+ -18.856931828695782 4 -18.651319720162189 1 -18.445707611628592 1 -18.240095503094999 1 -18.034483394561406 1 -17.828871286027812 1 -17.623259177494216 1 -17.417647068960623 1 -17.21203496042703 1 -17.006422851893433 1 -16.80081074335984 1 -16.595198634826247 1 -16.389586526292653 1 -16.183974417759057 1 -15.978362309225464 1 -15.772750200691869 1 -15.567138092158274 1 -15.361525983624681 1 -15.155913875091086 1 -14.950301766557493 1 -14.744689658023898 1 -14.539077549490305 1 -14.33346544095671 4
+Curves 39
+7 0 0  3 42 21  318204.29681176716 -7327.7551440800471 23761.593637618731  318256.22004934534 -7275.5221595692165 23761.471740562003  318307.71573921765 -7223.7334186162216 23761.357666471198  318462.55486496392 -7068.1331092537494 23761.03735374501  318579.11880208412 -6951.1606024596804 23760.820117133229  318795.59218099434 -6734.9681869327796 23760.571522503611  318900.8782659556 -6630.2618633929496 23760.499617771751  319055.40031494154 -6477.6571404063507 23760.421806463419  319105.28107099433 -6428.5585036673601 23760.40094945392  319196.38020383182 -6339.2514721038297 23760.367148492558  319235.4783816149 -6301.0511795068296 23760.352434685319  319440.1812722332 -6101.7900097178399 23760.323109534649  319591.01434317272 -5956.9742802027604 23760.492410400369  319856.35683520511 -5696.6980270859804 23760.619520830271  319977.00951390032 -5576.3365533103306 23760.618829358431  320189.68945118529 -5353.4481440751597 23760.256432552949  320286.44396999152 -5247.6576419225994 23759.939388194831  320691.78005668498 -4770.5229315739807 23757.831435995718  320929.58776727272 -4397.6104926709704 23754.979792925573  321138.80582896748 -3758.0334796485699 23753.09329201551  321180.14406975388 -3561.8668638165996 23753.163992256748  321215.55974705837 -3302.9309314153302 23753.015518960459  321222.2625869473 -3245.3427338320798 23752.981732660959  321239.18153380015 -3075.1204481837599 23752.925015373021  321246.73600664909 -2961.5725524949703 23752.951994013092  321260.75961991207 -2635.8608572144703 23753.032917010911  321260.7243140483 -2418.1923561906201 23753.12066309747  321249.86546913243 -1861.8929618893601 23753.228414409532  321233.2160621314 -1535.38118290907 23753.107318490311  321212.49226239847 -1055.1735641508201 23752.990882442278  321208.6334953825 -962.27046026986 23752.969601883509  321199.62585719471 -725.29407798710997 23752.903153508189  321194.97144450323 -582.50095111593998 23752.84725306011  321189.96772519185 -366.36656628037002 23752.757930867709  321188.63054487761 -293.52474071089 23752.727971499207  321187.25566250668 -183.98609014569999 23752.699566288273  321186.90236514236 -147.28815367461999 23752.692983758439  321186.5473081572 -92.181083514169998 23752.69095388741  321186.45809367613 -73.768920987450002 23752.69160300152  321186.31695258763 -29.406413680309999 23752.697231943439  321186.31482363207 -9.6106993109800012 23752.70326031173  321186.31694541447 0 23752.70646049764 
+ 2.03784942368079 4 2.1751565670841901 2 2.4518218071203899 2 2.70815375426122 2 2.8297238009612502 2 2.9301159635845502 2 3.3091958129466201 2 3.60926464976618 2 3.8659325868056502 2 4.7372331047651999 2 5.1211695392922199 2 5.2303717651176598 2 5.4439541024941001 2 5.8438615793538 2 6.4966724763943802 2 6.6550241285512497 2 6.8979583733438998 2 7.02144403910353 2 7.0836473514029201 2 7.11485687083524 2 7.1588458622862499 4
+7 0 0  3 5 3  321186.31694540213 0 23752.706460479072  320970.24105610087 0 23426.809228578742  320410.46068450389 0 22456.083891749466  320108.75438370212 0 21392.778486733532  320023.23895255552 0 20688.000000000025 
+ -5.1790808369767198 4 -5 1 -4.6606686162644397 4
+7 0 0  3 12 6  320023.23895255552 0 20688  320023.23895255552 -970.96176080434009 20688  320086.16337141796 -1911.4995117152901 20688  319948.08340634796 -3184.8519742741501 20688  319848.5039906879 -3536.3553085172803 20688  319473.66182227485 -4290.4491864627798 20688  319168.72190191335 -4628.0710166674398 20688  318524.15331850376 -5247.3426200296799 20688  318248.16094527737 -5467.72410146129 20688.000000000011  317125.28522555431 -6603.4437391747506 20688.000000000011  316596.63578317815 -7195.9046667213606 20688  316000 -7836.69546463392 20688 
+ -12.791400672854561 4 -9.6803441453241792 2 -7.7806943884433304 2 -5.2167851792128701 2 -2.62664880410806 2 0 4
+7 0 0  3 4 2  316000 -7836.6954646339273 20688.000000000022  316000 -8214.2918401130773 21767.796452675746  316000 -8830.9218099617483 22796.166249350466  316000 -9499.971650047517 23769.526373148648 
+ 5.2422190630349403 4 5.9443342009550602 4
+7 0 0  3 10 5  316000 -9499.9716500475206 23769.526373148652  316111.77287037019 -9394.14416625995 23769.036031118911  316256.19554926537 -9256.582319915211 23768.480022109612  316707.33353087428 -8820.8061607056698 23766.633567127268  316979.8171764228 -8552.8014903851108 23765.480253113688  317506.72474087554 -8029.0314005568689 23763.552299663559  317744.12131026539 -7790.6709916516402 23762.782582072989  318074.88746355148 -7457.9582248597271 23761.907926559787  318139.92074700206 -7392.5152428446945 23761.744769427623  318204.29681176716 -7327.7551440800471 23761.593637618731 
+ 0 4 0.46177466560884001 2 1.18779709285598 2 1.8676117041407201 2 2.03784942368079 4
+7 0 0  3 8 4  307925.92202974309 -14604.401561316927 20688.000255860778  307928.91498065123 -14657.256578902039 20961.50211630161  307932.11321325152 -14714.930362101135 21234.124368858505  307942.3832752938 -14907.366344755481 22073.962855784419  307949.79925552639 -15055.687715624381 22631.308456509221  307959.63375319022 -15284.87423001561 23394.882331238663  307962.14055137039 -15346.548667281055 23592.433136508269  307964.59307003545 -15409.700590205095 23788.832767117987 
+ 2.0379657823515802 4 2.8736470442811299 2 4.6217042692906896 2 5.2340945542608104 4
+7 0 0  3 8 4  307964.53494427615 -15409.695952404072 23788.835181975388  308033.93841162836 -15369.157924737092 23788.728624595977  308103.27199774998 -15328.483383649665 23788.622500431116  309559.92951547401 -14470.096821510881 23786.397900806791  310927.93604131881 -13590.69183265812 23783.729956884421  312327.76535095816 -12565.875520750869 23780.540891240435  312415.10043364775 -12501.400193767764 23780.341183951274  312502.17478449357 -12436.574759077652 23780.140179556554 
+ 10.57202445903739 4 10.814236735294971 2 15.666023518681991 2 15.989871717267819 4
+7 0 0  3 20 10  312502.17478449357 -12436.574759077639 23780.140179556547  312578.1537056918 -12380.009690878793 23779.964788101785  312653.93410891772 -12323.178055040607 23779.788409047043  313013.60511876887 -12051.452888321939 23778.94074140404  313294.87593341211 -11833.03547944574 23778.243165687949  313991.40246565978 -11276.796938138959 23776.355418722469  314402.86630971817 -10934.204201444709 23775.110845820709  315009.35956030502 -10407.05564498419 23773.107855824401  315210.02354844334 -10228.861985733371 23772.416809713293  315508.2372521208 -9958.2020784921187 23771.35279633852  315607.24033009534 -9867.3613755077313 23770.99331057625  315755.02995682514 -9730.2571475107998 23770.447878367839  315804.18892399571 -9684.4010364022797 23770.26497526047  315877.74578065943 -9615.4064520607189 23769.989135272059  315902.23817177839 -9592.3696726443395 23769.896926790319  315938.9309763062 -9557.7619799220302 23769.758249715618  315951.15520738694 -9546.2164495122706 23769.711959758009  315976.82028330053 -9521.9427431692002 23769.614585414391  315989.08968132286 -9510.3191166855904 23769.56792750788  316000 -9499.9716500475315 23769.526373148667 
+ 15.989871717267841 4 16.27245363170697 2 17.33466491761526 2 18.930936224761929 2 19.731317673097202 2 20.13205926084769 2 20.33256134350081 2 20.432844161924301 2 20.482993369269341 2 20.53820241687535 4
+7 0 0  3 4 2  316000 -9499.9716500475151 23769.526373148645  316000 -8830.9218099617465 22796.166249350466  316000 -8214.2918401130773 21767.79645267575  316000 -7836.6954646339263 20688.000000000025 
+ -5.9443342009550602 4 -5.2422190630349403 4
+7 0 0  3 6 3  316000 -7836.69546463392 20688  314712.88337289309 -9236.7452836856392 20688  313374.31428059406 -10526.7282271395 20688  310870.46680636867 -12559.505079118493 20688  309617.05045502848 -13485.071842741358 20687.999998318493  307925.96132823161 -14604.467795144006 20687.999998079336 
+ -26.377649613757281 4 -17.07881914456522 2 -10.759045245588259 4
+7 0 0  3 6 3  320467.12795666768 0.041060731960000006 17391.002135276838  320225.73275659594 0.041060731959999999 17969.63017538478  320072.43001348601 0.041060731959999992 18582.103717580321  319958.18435497925 0.041060731959999999 19700.434020566721  319963.68075587094 0.041060731959999999 20197.3045982203  320023.22801046557 0.041060731959999999 20688.001327846643 
+ 14.33346544095671 4 16.86372592362769 2 18.856931828695782 4
+7 0 0  3 12 6  320023.238952593 0.041060753223832284 20688  320023.2408962117 1064.9629745234938 20688  320098.85350817681 2093.0238572945723 20688.000000000011  319910.64715920022 3322.6740256908597 20688.000000000011  319801.13214393175 3694.9118812644601 20688.000000126591  319353.53121157247 4427.4293627363295 20688.000000126591  319084.72099189623 4712.0419557099704 20688  318449.72032700805 5314.1246720176196 20688  318151.49389333848 5551.1798831163405 20688  316984.31199000479 6761.1880107018305 20688  316514.37892921577 7284.2490747680304 20688  316000 7836.69546463392 20688 
+ 4.1060771490000001e-005 4 3.1948096445429099 2 4.7157276071027203 2 6.0779884079570303 2 7.7673353422315197 2 8.9774739197255293 4
+7 0 0  3 5 3  316000 7836.6954646315071 20687.999999993102  316000 7706.4304477796113 20315.486617346516  316000 7418.1551608354448 19243.452654345732  316000 7419.3551819968725 18123.533614814107  316000 7485.1142849357757 17390.999999999996 
+ -5.2422190630334402 4 -5 1 -4.5564192418405698 4
+7 0 0  3 12 6  316000 7485.1142849357802 17391  316319.37845834065 7163.6083376213101 17391  316723.05194171361 6756.43320993818 17391  317637.06137615594 5884.5932061251096 17391  317976.31203962164 5597.70992524961 17391  318594.99600760493 5052.6353145888397 17391  318937.71015590633 4738.1047303157702 17391.00000002647  319724.51992209215 3799.0532323981897 17391.00000002647  319976.34668224928 3284.1796287452698 17391  320415.20699136326 1866.377822926876 17391  320467.00039534067 882.86197532323115 17391  320467.12262129138 3.1271210001934366 17391 
+ -7.06834388794866 4 -6.3281561653519898 2 -5.2993278279235803 2 -4.2377254376676499 2 -2.64159248030849 2 -0.0031266830976600006 4
+7 0 0  3 4 2  320467.12262129138 3.1271210001934366 17391  320467.12276423164 2.0982922014287162 17391  320467.12283650268 1.0696053412421651 17391  320467.12283837621 0.041060745767718843 17391 
+ -0.0031266830976600006 4 -4.1060670190000003e-005 4
+7 0 0  3 4 2  307925.89575801505 14604.180778249221 20688.059649656843  307912.96526003222 14372.349089965533 19490.923537354211  307905.13931057602 14256.456311092275 18398.216002145964  307904.92698106117 14218.473686196812 17391.000044768811 
+ -5.5330376427936203 4 -2.5167576738365498 4
+7 0 0  3 6 3  307904.97001335281 14218.535429583537 17391  309216.26436809287 13304.207274286004 17391  310214.22900718078 12573.817447900214 17391  312602.00544098514 10696.525126088422 17391  314049.80587504554 9413.9300469893296 17391  316000 7485.1142849357802 17391 
+ -13.38572945523376 4 -8.2287475547969908 2 0 4
+7 0 0  3 5 3  316000 7485.1142849357775 17391  316000 7419.3551819968734 18123.53361481411  316000 7418.1551608354448 19243.452654345732  316000 7706.4304477796113 20315.486617346509  316000 7836.6954646315071 20687.999999993095 
+ 4.5564192418405698 4 5 1 5.2422190630334402 4
+7 0 0  3 6 3  316000 7836.69546463392 20688  314730.69282126758 9217.3732124614198 20688  313419.12541800988 10482.54823906254 20688  311098.06907140039 12379.054031373948 20687.999999999996  309853.6024656411 13328.435383596943 20688  307925.82440257329 14604.563495601044 20688 
+ 0 4 5.6264292242903204 2 9.0084835042744107 4
+7 0 0  2 3 2  307964.47019342415 15409.774575525402 23788.958820235068  307964.44744782156 15409.786586869188 23788.954980623137  307964.42470221687 15409.79859820228 23788.951141019144 
+ 0 3 2.5537872042216608e-005 3
+7 0 0  3 6 3  307964.4522183247 15409.845748611264 23788.935636492319  307958.3441016858 15254.369471523689 23305.054895919435  307952.00310795975 15110.144013021712 22820.926533663489  307938.5143694508 14834.551094865334 21775.604309290731  307931.737314642 14709.975404311264 21233.776481235622  307925.77925602644 14604.495290959203 20688.000000986121 
+ 0.82773512582161002 4 2.3822074193488998 2 4.0282650616347704 4
+7 0 0  3 6 3  307925.82440257329 14604.563495601042 20688  309853.6024656411 13328.435383596943 20688  311098.06907140039 12379.054031373948 20687.999999999996  313419.12541800988 10482.54823906254 20688  314730.69282126758 9217.3732124614198 20688  316000 7836.69546463392 20688 
+ -9.0084835042744107 4 -5.6264292242903204 2 0 4
+7 0 0  3 4 2  316000 7836.6954646315062 20687.999999993102  316000 8214.2920914595306 21767.797171443752  316000 8830.9226308866255 22796.167618428288  316000 9499.9729861176074 23769.528316915992 
+ 5.2422190630334402 4 5.9443346683218303 4
+7 0 0  3 4 2  316000 9499.9729861176002 23769.528316915981  314894.41899677675 10548.505957702508 23773.721577554199  313723.83673447551 11527.329058496452 23777.80485346826  312502.20348384243 12436.758893996253 23780.565274705848 
+ 0 4 4.5711852921986003 4
+7 0 0  3 14 7  312502.20348384243 12436.758893996253 23780.565274705848  312485.51925323723 12449.179264092543 23780.602974649319  312468.82550048607 12461.58669079989 23780.640427850947  312318.67305347463 12573.00592395937 23780.974864599411  312184.61527804966 12671.20670948206 23781.261747340293  311526.88453024247 13146.877463908 23782.63964067919  310994.67613898648 13512.843397951559 23783.685903197627  309985.83480643132 14177.15506169085 23785.565821514709  309509.11261260719 14479.176054270831 23786.409813261758  308818.2313768476 14902.34842097235 23787.577745331793  308607.44500191062 15029.547965108201 23787.92704236928  308252.40791769623 15240.822990038434 23788.501974378752  308108.59047769167 15325.59238993008 23788.731826901239  307964.46955841704 15409.773487406519 23788.959178044195 
+ 4.5711852921986003 4 4.6336154114794503 2 5.1323959038076596 2 7.0699810189869998 2 8.7668427816176102 2 9.5074573548111996 2 10.009808122566771 4
+7 0 0  3 6 3  320023.23870421812 0.041060731959999999 20688.000030127903  320152.26331743971 0.041060731959999999 21751.681340199892  320506.34922954033 0.041060731959999999 22584.698033205721  320946.16702696768 0.041060731959999999 23376.161794795928  321062.51525184308 0.041060731959999999 23565.982332359075  321186.31675366987 0.041060731959999999 23752.706607268181 
+ 0.01380223016778 4 3.23343388149073 2 4.2733131273819502 4
+7 0 0  3 52 26  321186.31695451133 0.041060732484002903 23752.706474154813  321186.32954218442 56.661199706731054 23752.725285447897  321186.53019523527 144.90839077466387 23752.667433770039  321191.02444225916 448.45368142065001 23752.744759400648  321196.3379012525 631.59873743670005 23752.84372790443  321208.69448877551 968.74425465347997 23752.961142440279  321215.03782172088 1116.2488505577001 23752.998809885481  321233.68476717704 1538.31980766021 23753.119213409649  321243.7611319102 1755.16787305037 23753.19956346785  321256.56832193636 2167.9527838473 23753.200657039601  321260.09877806681 2348.06220122594 23753.161837132007  321258.26468944806 2679.4626886198898 23753.055811829028  321253.96656627732 2835.4930979222199 23752.984769645551  321235.95508448483 3116.6192075500999 23752.976770236921  321223.87498307595 3244.4789585274898 23753.010863716478  321198.39592539298 3427.2914370709204 23753.085947850701  321189.36447317043 3483.8145127156199 23753.112080520339  321168.9230291401 3594.9099227889596 23753.14606884056  321157.5432178381 3649.66201409225 23753.155355683572  321132.98558530392 3754.0367679027404 23753.234052484051  321120.1381046616 3803.2330521345302 23753.302800649049  321079.25143338484 3944.9895019073601 23753.600786477062  321048.26247287128 4035.8237447957804 23753.9063409724  320977.64585378091 4213.7173864085507 23754.635058298929  320938.49484451866 4299.9239104746293 23755.056548031662  320849.39594299602 4474.26118793146 23755.966674260209  320799.41714660375 4561.2401851266604 23756.432623918092  320618.91165938514 4846.5097257755806 23758.036386495482  320472.63031006296 5033.0043740650799 23759.127520149901  320287.16814713681 5244.5747787376704 23759.872540655258  320256.81674394262 5278.46779812362 23759.975463758947  320165.02120728954 5379.1353923110701 23760.232043975571  320102.4243839478 5445.3783070666695 23760.349261309831  320008.96704827307 5541.9523087280795 23760.484060888859  319978.28389822488 5573.2941973549496 23760.521179371441  319917.10498672922 5635.2145161634407 23760.583285930348  319886.38085637719 5666.0301803303701 23760.609803448191  319840.76650249888 5711.4605827579007 23760.638857567908  319825.664272931 5726.4494783139799 23760.64629283567  319780.32058396982 5771.3157135486999 23760.660532675509  319749.86235317081 5801.2693441232605 23760.659030971659  319689.67175117123 5860.2115474269303 23760.64023557174  319659.62139047158 5889.5132935000602 23760.621620331629  319514.66636212822 6030.48581205757 23760.504798040271  319392.13304185367 6148.5082551677897 23760.38779606378  319142.21679736068 6391.9358570210197 23760.363051080782  319028.83584850002 6503.6093297581201 23760.37247230309  318748.04486089962 6781.9777984011707 23760.604400689641  318572.58197728626 6957.7003517311805 23760.873343122479  318338.02508376044 7193.3013351750787 23761.350942636753  318271.63508416287 7260.0682476157363 23761.500949153295  318204.68610814598 7327.4206423969481 23761.662756378413 
+ 4.1055189929999997e-005 4 0.16985560778388001 2 0.43054331525499001 2 0.64709811393323002 2 1.0134780131238199 2 1.2859329129628001 2 1.5238839544915601 2 1.7202913516988401 2 1.8083679588758399 2 1.89438675819286 2 1.9735681075093501 2 2.1227012055224499 2 2.2697862331885301 2 2.4256976420687102 2 2.7931470311325799 2 2.8641318066860499 2 3.00519390867741 2 3.0734112084844298 2 3.1407552515169899 2 3.1739902452249602 2 3.2404139370337801 2 3.3064002595876798 2 3.55836004300249 2 3.79000455760315 2 4.1482937024872797 2 4.2901402925476599 4
+7 0 0  3 8 4  318204.68610814598 7327.4206423969481 23761.662756378413  318090.81758621545 7441.975309226983 23761.937962224085  317975.3320532777 7558.2236635840791 23762.247305244418  317550.77088118996 7984.80138138246 23763.40968905811  317264.27256824315 8271.3046182341786 23764.3045489336  316675.68560503435 8851.4819962986003 23766.591801917868  316384.7613655735 9134.3130575294508 23767.99721889542  316092.13492912048 9412.5188013981387 23769.096713148771 
+ 4.2901402925476599 4 4.5313965822182398 2 5.1400757053985897 2 5.7277505269117901 4
+7 0 0  3 6 3  316092.13492912048 9412.5188013981387 23769.096713148771  316076.81782538595 9427.0944451759406 23769.173544181551  316061.48873157048 9441.6632107928599 23769.247748429461  316030.72532608482 9470.8639045417913 23769.391737612961  316015.33892784477 9485.4501312275988 23769.461269719708  316000 9499.9729861176111 23769.528316915999 
+ 5.7277505269117901 4 5.79118254289929 2 5.8549966623644298 4
+7 0 0  3 4 2  316000 9499.9729861176074 23769.528316915992  316000 8830.9226308866273 22796.167618428291  316000 8214.2920914595306 21767.797171443752  316000 7836.695464631508 20687.999999993102 
+ -5.9443346683218303 4 -5.2422190630334402 4
+7 0 0  3 12 6  316000 7836.69546463392 20688  316514.37892921577 7284.2490747680304 20688  316984.31199000479 6761.1880107018305 20688  318151.49389333848 5551.1798831163405 20688  318449.72032700805 5314.1246720176196 20688  319084.72099189623 4712.0419557099704 20688  319353.53121157247 4427.4293627363295 20688.000000126591  319801.13214393175 3694.9118812644601 20688.000000126591  319910.64715920022 3322.6740256908597 20688.000000000011  320098.85350817675 2093.0238572945727 20688.000000000011  320023.2408962117 1064.9629745234938 20688  320023.238952593 0.041060753223801705 20688 
+ -8.9774739197255293 4 -7.7673353422315197 2 -6.0779884079570303 2 -4.7157276071027203 2 -3.1948096445429099 2 -4.1060771490000001e-005 4
+7 0 0  3 6 3  316000 -7485.1142849357802 17391  314717.62171673245 -8753.4349172418097 17391  313314.98248606839 -10074.539690236859 17391  310564.3957794091 -12330.332061142877 17391  309197.91686690587 -13316.405281768093 17391  307905.07478226314 -14218.372310937149 17391 
+ -10.097004591974979 4 -4.74252026318677 2 -0.015510056536280001 4
+7 0 0  3 6 3  307905.24186725065 -14218.973321800828 17390.977384694434  307905.45359938586 -14236.74794785401 17864.906912857583  307906.83941020077 -14271.021156113824 18350.774179791642  307913.73582470283 -14395.018023918103 19479.4023762344  307919.3343641939 -14488.029338712546 20085.84088475709  307925.92482765153 -14604.399256885281 20688.000670575959 
+ -4.6315372478723704 4 -3.0644856340078501 2 -1.22322291977858 4
+7 0 0  3 6 3  307925.96132823161 -14604.467795144003 20687.999998079333  309617.05045502842 -13485.071842741358 20687.999998318493  310870.46680636867 -12559.505079118495 20688  313374.31428059406 -10526.7282271395 20688  314712.88337289309 -9236.7452836856392 20688  316000 -7836.69546463392 20688 
+ 10.759045245588259 4 17.07881914456522 2 26.377649613757281 4
+7 0 0  3 5 3  316000 -7836.6954646315071 20687.999999993102  316000 -7706.4304477796113 20315.486617346516  316000 -7418.1551608354448 19243.452654345732  316000 -7419.3551819968725 18123.533614814107  316000 -7485.1142849357757 17390.999999999996 
+ -5.2422190630334402 4 -5 1 -4.5564192418405698 4
+7 0 0  3 12 6  320467.12283841358 0 17391  320467.12283841358 -615.16984240030001 17391  320441.88830136071 -1239.3670943754901 17391  320227.70628458488 -2606.7767042497799 17391  320035.96802739013 -3102.2238545350601 17391.000000000007  319508.66746237426 -4160.2789184972899 17391.000000000007  318952.49682423478 -4722.75530208489 17391  318152.22477911925 -5449.1511245440197 17391  317844.43950711645 -5699.9023616558006 17391.000000000007  316858.52774386544 -6619.5503089459708 17391.000000000007  316415.98502256849 -7066.3582440794808 17391  316000 -7485.1142849357802 17391 
+ -8.5116719656905904 4 -7.5452236857722799 2 -6.3302570217287304 2 -3.6568441213792502 2 -1.7707629561278999 2 0 4
+7 0 0  3 5 3  316000 -7485.1142849357775 17391  316000 -7419.3551819968734 18123.53361481411  316000 -7418.1551608354448 19243.452654345732  316000 -7706.4304477796113 20315.486617346509  316000 -7836.6954646315071 20687.999999993095 
+ 4.5564192418405698 4 5 1 5.2422190630334402 4
+7 0 0  3 12 6  316000 -7836.69546463392 20688  316596.63578317815 -7195.9046667213606 20688  317125.28522555431 -6603.4437391747506 20688.000000000011  318248.16094527737 -5467.72410146129 20688.000000000011  318524.15331850376 -5247.3426200296799 20688  319168.72190191335 -4628.0710166674398 20688  319473.66182227485 -4290.4491864627798 20688  319848.5039906879 -3536.3553085172803 20688  319948.08340634796 -3184.8519742741501 20688  320086.16337141796 -1911.4995117152901 20688  320023.23895255552 -970.96176080434009 20688  320023.23895255552 0 20688 
+ 0 4 2.62664880410806 2 5.2167851792128701 2 7.7806943884433304 2 9.6803441453241792 2 12.791400672854561 4
+7 0 0  3 6 3  320023.22801046557 0.041060731960000006 20688.001327846643  319963.68075587094 0.041060731960000006 20197.3045982203  319958.18435497925 0.041060731960000006 19700.434020566721  320072.43001348595 0.041060731959999999 18582.103717580318  320225.73275659594 0.041060731960000006 17969.630175384784  320467.1279566678 0.041060731960000006 17391.002135276842 
+ -18.856931828695782 4 -16.86372592362769 2 -14.33346544095671 4
 Polygon3D 0
-PolygonOnTriangulations 22
-4 8 9 10 5 
-p 0.06583129916633 1 0 0.444444444444444 0.722222222222222 1 
-4 1 5 6 7 
-p 0.06583129916633 1 0 0.444444444444444 0.722222222222222 1 
-4 8 9 10 5 
-p 0.06583129916633 1 0 0.444444444444444 0.722222222222222 1 
-4 1 5 6 7 
-p 0.06583129916633 1 0 0.444444444444444 0.722222222222222 1 
-4 5 9 10 8 
-p 0.06583129916633 1 0 0.444444444444444 0.722222222222222 1 
-4 4 11 12 8 
-p 0.06583129916633 1 0 0.444444444444444 0.722222222222222 1 
-4 5 9 10 8 
-p 0.06583129916633 1 0 0.444444444444444 0.722222222222222 1 
-4 2 11 12 10 
-p 0.06583129916633 1 0 0.444444444444444 0.722222222222222 1 
-4 5 9 10 8 
-p 0.06583129916633 1 0 0.444444444444444 0.722222222222222 1 
-4 4 11 12 10 
-p 0.06583129916633 1 0 0.444444444444444 0.722222222222222 1 
-4 5 9 10 8 
-p 0.06583129916633 1 0 0.444444444444444 0.722222222222222 1 
-4 1 2 3 4 
-p 0.06583129916633 1 0 0.444444444444444 0.722222222222222 1 
-4 1 3 4 2 
-p 0.06583129916633 1 0 0.444444444444444 0.722222222222222 1 
-4 7 8 9 10 
-p 0.06583129916633 1 0 0.444444444444444 0.722222222222222 1 
-4 8 9 10 7 
-p 0.06583129916633 1 0 0.444444444444444 0.722222222222222 1 
-4 7 8 9 10 
-p 0.06583129916633 1 0 0.444444444444444 0.722222222222222 1 
-4 10 12 13 11 
-p 0.06583129916633 1 0 0.444444444444444 0.722222222222222 1 
-4 1 2 3 4 
-p 0.06583129916633 1 0 0.444444444444444 0.722222222222222 1 
-4 8 9 10 5 
-p 0.06583129916633 1 0 0.444444444444444 0.722222222222222 1 
-4 1 5 6 7 
-p 0.06583129916633 1 0 0.444444444444444 0.722222222222222 1 
-4 8 9 10 5 
-p 0.06583129916633 1 0 0.444444444444444 0.722222222222222 1 
-4 5 8 9 10 
-p 0.06583129916633 1 0 0.444444444444444 0.722222222222222 1 
-Surfaces 99
-9 0 0 0 0 3 3 4 4 8 8 77.500045779999994 -0.58157169819999999 0  85 -0.58506709339999996 0  92.500213619999997 -0.58340275289999999 0  99.999412539999994 -0.58781468869999998 0  
-77.499786380000003 -0.0015667586120000001 0  84.999954220000006 -7.0550631790000003e-05 0  92.49985504 -0.00065166212149999996 0  100.0003281 0.0026766625229999999 0  
-77.500282290000001 0.58725959059999999 0  84.999923710000004 0.58376407620000004 0  92.50028992 0.58542859550000004 0  99.999183650000006 0.58101648090000002 0  
-77.499252319999997 1.1672631499999999 0  85.000244140000007 1.168760657 0  92.499176030000001 1.1681782009999999 0  100.00460820000001 1.1715140340000001 0  
+PolygonOnTriangulations 39
+7 1 3 4 5 6 7 2 
+p 179.407650441715 1 2.03784942368079 4.31384784083877 4.59834764298352 4.9094481766288 5.47179759804316 6.03414701945752 7.15884586228625 
+4 2 9 10 8 
+p 179.407650441715 1 -5.17908083697672 -5.00627676340596 -4.8334726898352 -4.66066861626444 
+8 8 12 13 14 15 16 17 11 
+p 179.407650441715 1 -12.7914006728546 -10.8520822041757 -8.91276373549677 -8.13568614462086 -7.33622360256745 -6.25694917079535 -3.12847458539767 0 
+4 11 19 20 18 
+p 179.407650441715 1 5.24221906303494 5.47625744234165 5.71029582164835 5.94433420095506 
+2 18 1 
+p 179.407650441715 1 0 2.03784942368079 
+2 1 2 
+p 179.407650441715 1 2.03797826722199 5.23408771278374 
+2 2 3 
+p 179.407650441715 1 10.5720735435623 15.9898717172678 
+2 3 4 
+p 179.407650441715 1 15.9898717172678 20.5382024168754 
+3 4 6 5 
+p 179.407650441715 1 -5.94433420095506 -5.593276631995 -5.24221906303494 
+4 5 7 8 1 
+p 179.407650441715 1 -26.3776496137573 -19.4360488773154 -15.0975484170392 -10.7590479567631 
+5 1 3 4 5 2 
+p 179.407650441715 1 14.3334654409567 15.6905053572784 17.0475452736002 17.952238551148 18.8569318286958 
+8 2 7 8 9 10 11 12 6 
+p 179.407650441715 1 4.106077149e-005 1.49627987059716 2.99251868042284 3.74063808533567 4.3017276390203 4.85392392327903 6.91569892150228 8.97747391972553 
+4 6 14 15 13 
+p 179.407650441715 1 -5.24221906303344 -5.01361912263582 -4.78501918223819 -4.55641924184057 
+8 13 17 18 19 20 21 22 16 
+p 179.407650441715 1 -7.06834388794866 -5.1803608459857 -4.23636932500422 -3.29237780402274 -2.59705445280733 -1.55406942598421 -0.778598054540935 -0.00312668309766018 
+2 16 1 
+p 179.407650441715 1 -0.00312668309766 -4.10606701900002e-005 
+2 1 2 
+p 179.407650441715 1 -5.53302709384876 -2.51675767383655 
+3 2 4 3 
+p 179.407650441715 1 -13.3857294552338 -6.69286472761688 0 
+4 3 6 7 5 
+p 179.407650441715 1 4.55641924184057 4.78501918223819 5.01361912263582 5.24221906303344 
+4 5 8 9 1 
+p 179.407650441715 1 0 4.00371148390131 6.50603116133963 9.00835083877794 
+2 1 1 
+p 179.407650441715 1 0 2.55378720422166e-005 
+2 1 2 
+p 179.407650441715 1 0.82773512582161 4.02826506163477 
+4 2 4 5 3 
+p 179.407650441715 1 -9.00848350427441 -6.00565566951627 -3.00282783475814 0 
+4 3 7 8 6 
+p 179.407650441715 1 5.24221906303344 5.47625759812957 5.7102961332257 5.94433466832183 
+2 6 9 
+p 179.407650441715 1 0 4.5711852921986 
+2 9 1 
+p 179.407650441715 1 4.5711852921986 10.0098081225668 
+5 1 3 4 5 2 
+p 179.407650441715 1 0.01380223016778 1.16387017241561 2.31393811466343 3.29362562102269 4.27331312738195 
+8 2 7 8 9 10 11 12 6 
+p 179.407650441715 1 4.105518993e-005 0.858060902661476 1.71608075013302 1.99755416109606 2.25817768976554 2.57483527709896 3.43248778482331 4.29014029254766 
+2 6 13 
+p 179.407650441715 1 4.29014029254766 5.72775052691179 
+2 13 14 
+p 179.407650441715 1 5.72775052691179 5.85499666236443 
+3 14 16 15 
+p 179.407650441715 1 -5.94433466832183 -5.59327686567764 -5.24221906303344 
+9 15 17 18 19 20 21 22 23 1 
+p 179.407650441715 1 -8.97747391972553 -7.48123510989986 -5.98499630007418 -5.23687689516135 -4.67578734147672 -4.12359105721799 -3.49236530932279 -1.74620318504714 -4.10607714904643e-005 
+3 1 3 2 
+p 179.407650441715 1 -10.097004591975 -5.05625732425563 -0.0155100565362805 
+2 2 4 
+p 179.407650441715 1 -4.63153724787237 -1.22322291977858 
+4 4 6 7 5 
+p 179.407650441715 1 10.7590452455883 17.7006471869967 22.039148400377 26.3776496137573 
+4 5 8 9 1 
+p 179.407650441715 1 -5.24221906303344 -5.01361912263582 -4.78501918223819 -4.55641924184057 
+7 1 3 4 5 6 7 2 
+p 179.407650441715 1 -8.51167196569059 -7.56485003176173 -6.943640160911 -6.30453535550901 -5.72934103064723 -2.86467051532361 0 
+4 2 9 10 8 
+p 179.407650441715 1 4.55641924184057 4.78501918223819 5.01361912263582 5.24221906303344 
+9 8 12 13 14 15 16 17 18 11 
+p 179.407650441715 1 0 2.13190011214243 4.26380022428485 6.39570033642728 7.19516287848069 8.06937516821609 8.87883099204517 10.8351158324499 12.7914006728546 
+5 11 19 20 21 1 
+p 179.407650441715 1 -18.8569318286958 -17.3491096994494 -15.8412875702031 -15.0873765055799 -14.3334654409567 
+Surfaces 8
+9 0 0 0 0 3 3 6 10 4 8 316000 0 0  318629.09516861039 0 0  324481.66856330726 0 302.58243565712002  329101.91261022864 0 6026.5237239512198  325944.95917403308 0 12093.13126690926  319811.34228883771 0 16253.578597082338  319654.02350208652 0 23089.58742787188  325258.33200689126 0 27858.70187491037  327200.31664643978 0 30786.004002987131  328014.32322258851 0 32178.111664453532  
+316000 0 0  318629.09516861039 -366.56788718203001 0  324481.66856330726 -1167.8324836828399 302.58243565712002  329101.91261022864 -1670.73500723303 6026.5237239512198  325944.95917403308 -1382.13389169467 12093.13126690926  319811.34228883771 -1191.9088583422399 16253.578597082338  319654.02350208652 -1332.2566226536601 23089.58742787188  325258.33200689126 -1710.24326057589 27858.70187491037  327200.31664643978 -2043.4046780424301 30786.004002987131  327608.9108318194 -2058.9774048128202 32138.638522167861  
+316000 0 0  317860.22270019189 -795.35522357773004 0  321987.65545769053 -2477.8936000702897 585.19430795875007  325332.02062722109 -3406.8872872760699 6051.6427399737404  323558.79683987203 -3747.8450711599903 11697.785960544101  319866.04190144798 -3574.0763023169102 16307.728053848488  320056.15266584163 -3697.4544660941501 22435.050283851069  324058.87509253348 -4978.8629320816908 27000.181374514279  325586.27423501259 -5888.0577340641803 30116.10672282047  326266.40715453931 -5338.0420089042 32007.925105708742  
+316000 0 0  317115.67451639759 -1599.3086662812 0  319613.21446970198 -5223.7910762562697 1155.5004059056  320329.2423861493 -5964.6006790887304 6953.7086112511997  319326.30036414898 -6157.34663437989 11318.250122775209  317835.56191459682 -6121.7544362491999 15179.136360705319  317729.88993545668 -4940.7662117243199 20348.313518654191  319741.44289696967 -6443.72887981433 24993.271793473799  320724.14993064216 -8289.8911396880303 26841.567096906248  321783.70671953383 -10951.46936178577 31571.465154992289  
+316000 0 0  316371.20834738092 -1616.2817253768101 0  317207.8905577382 -5196.9520990367901 548.53416956704007  317471.00755556219 -7481.6795198301106 5415.5716740215703  317126.81052311475 -7935.8536043675203 10261.267846261801  316624.356766432 -7341.9211712181295 14786.58766369214  316606.80558556458 -6239.3989823970105 19896.159276696912  317300.27805630548 -8518.3305456713206 24403.104459367667  317623.73273020354 -10534.724233514429 26691.855585727899  318236.57593957719 -12863.67968933084 31226.097324183229  
+316000 0 0  315999.99999999977 -1627.4665402768201 0  316000.00000000017 -5173.5672106306802 282.85894446215997  316000 -8197.0716896474005 4652.9723113127502  316000.00000000006 -8823.5859814716696 9721.336162905769  316000 -7956.0747279902798 14585.071226615821  316000.00000000006 -6923.4238158264898 19654.058926817394  316000 -9583.6770922198484 24112.165509567589  315999.99999999994 -11662.47090760269 26635.574526464028  316411.24187299516 -13832.138454022059 31048.372930529771  
+
+0 4
+1 1
+2 1
+3 4
+
+0 4
+1 1
+2 1
+3 1
+4 1
+5 1
+6 1
+7 4
+
+9 0 0 0 0 3 3 10 11 8 9 284250 0 0  285495.59472963907 0 0  288013.48115771159 0 0  292038.46925664111 0 0  296027.75469610014 0 0  300029.66433632019 0 0  304061.59760022501 0 0  308034.41368393204 0 0  312109.94710375112 0 0  314703.00712463411 0 0  316000 0 0  
+284249.99999999988 -2532.8034406788602 0  285493.27242656553 -2533.4894168046499 -0.022052392129999997  288005.5925495362 -2535.09500351528 0.036759316959999996  292038.48617194634 -2251.4607900463602 -0.17884507627000001  296027.7500640002 -2108.7368433939901 0.04897507073  300029.66560667224 -2035.17053389535 -0.013431398069999999  304061.59724690503 -1922.69247167354 0.0037356425599999999  308034.41378234903 -1855.5274565381701 -0.0010405597599999999  312109.94707377814 -1719.8634161714601 0.00031690384  314703.00712463411 -1657.9138691572798 -0  316000 -1627.4665402767801 -0  
+284250.00000000012 -14100.84488199209 -0  285507.93406887178 -14097.391185736751 0.11026196065  288054.3946410073 -14089.30671895965 -0.1837965848  292038.41307263868 -6849.29912095689 107.00689408378999  296027.77008156985 -6269.4390680078695 192.55264347803998  300029.66011685983 -6067.9336487389601 132.91899604693  304061.59877377341 -5679.9880655212301 0  308034.41335704119 -5590.3590489231201 0  312109.94720330602 -5299.3601319312402 0  314703.00712463411 -5211.3460312777797 0  316000 -5173.5672106306902 282.85894446215997  
+284249.99999999994 -18497.400885685121 0  285447.52671464329 -18133.696021088577 -0.35283827407000001  287853.21728052408 -17402.205426002201 0.58814907134999994  292038.77853662649 -13161.605662110431 0  296027.67000263551 -12855.56608355477 0  300029.68756347697 -12339.986975771961 0  304061.59114011156 -11850.325735712771 138.51896842521998  308034.41548339074 -11028.31657596721 1157.4749134854901  312109.94655572373 -9914.1174050017889 2816.5772277481801  314703.00712463417 -8828.1958694734003 3999.6135564071201  316000 -8197.0716896473896 4652.9723113127502  
+284249.99999999994 -20760.311021057252 760.38799735984003  285475.12776078278 -20476.856694131769 851.49818625582998  287988.12857021246 -19893.965504425949 1036.9440293882399  292038.05750743899 -20030.746433325039 1404.1542986555  296027.86744981247 -18991.29434125117 2454.09728502082  300029.63341364957 -17670.599423033462 3504.0144707985901  304061.60620067315 -16048.20824380948 4944.1612328943393  308034.41128828516 -13976.770826254529 6333.6255709340594  312109.94783334853 -11583.95309346973 7881.3732101408395  314703.00712463411 -9789.2175204927698 9076.3420101310603  316000 -8823.5859814716696 9721.336162905769  
+284250 -23328.680665793439 3113.2022590859201  285524.67773993831 -22965.965670579259 3108.3805320537699  288009.49871339329 -22251.96483867526 3103.7184257897898  292043.30364092236 -22824.90928289009 7934.7032623205296  296026.43084465829 -21183.352472880099 8813.7300748352209  300030.02740217058 -19232.65971149828 9673.0018767875099  304061.49662159028 -16973.345604117261 10703.62559098476  308034.44181143679 -14568.129388422021 11796.398348673829  312109.93853748252 -11520.908983528579 13260.719201135509  314703.00712463411 -9214.645146307801 14136.586485516711  316000 -7956.0747279902907 14585.071226615821  
+284250 -24799.904341341389 6954.8769456019099  285524.62694583467 -24567.880806381789 7177.0353682441601  288010.28126645047 -24103.51561849346 7611.4110185007203  292043.42652865121 -22454.201771419579 14675.721789743451  296026.39719298977 -20862.05768191463 15157.487320894161  300030.03663113038 -19007.212725054749 15784.57152183367  304061.49405476166 -16717.124812662623 16459.94507700012  308034.44252642465 -13856.92214501343 17421.49410994929  312109.93831973226 -10891.76844289749 18309.27108267208  314703.00712463423 -8332.7033324493095 19172.079035345552  316000.00000000006 -6923.4238158264898 19654.058926817397  
+284250 -24799.904341341389 11651.480316228319  285548.84436398913 -24509.388518419262 11652.32418234837  288036.14868655906 -23940.70494489788 11651.79767802322  292045.82498191146 -22521.961400550812 21243.06386732755  296025.74039873795 -20988.324350947762 21649.116228249848  300030.21675675164 -19152.38374987452 21877.866517986789  304061.44395685429 -17058.27953157451 22510.210571182331  308034.45648114971 -14941.29788399829 22818.01587507837  312109.93406980223 -12442.170856213221 23451.628291640242  314703.00712463417 -10583.929296421211 23876.277033890608  315999.99999999994 -9583.6770922198484 24112.165509567578  
+284249.99999999994 -24799.904341341389 19161.493224142578  285539.71521147253 -24543.829638429208 19161.31549550713  288018.94503626379 -24044.002591718188 19161.405425406792  292044.84287279513 -22715.10635193807 25701.463602865089  296026.0093402401 -21374.05059991188 25898.427395559909  300030.14299962734 -19833.93607461574 25980.06923487247  304061.46447074669 -18173.514813481099 26163.859048023467  308034.45076702425 -16320.376181975409 26300.985381646249  312109.93581004662 -14210.905827966921 26491.358749645849  314703.00712463417 -12559.66791448961 26588.496768824261  316000 -11662.47090760269 26635.574526464039  
+284250 -24800 27916.980537397361  285529.78918731899 -24506.671344700258 28041.587732038959  288000.58093801903 -24091.30971235325 28282.15737557791  292025.51083810459 -22882.710146130128 28674.04631201235  296007.05032217695 -21749.741065705661 29061.71052294724  300015.08628178632 -20500.28717307873 29451.954573997402  304074.16542389384 -19151.740462254871 29847.168465267892  308117.42891679093 -17705.483118446347 30240.842459421678  312314.56476796156 -15902.006838165069 30649.498298310002  315024.74547572003 -14567.765215576121 30913.376144998969  316411.24187299516 -13832.138454022059 31048.372930529771  
+
+0 4
+1 1
+2 1
+3 1
+4 1
+5 1
+6 1
+7 4
+
+0 4
+1.9951151004176799 1
+4.0652428178250997 1
+6.1633608799973301 1
+8.2931965274620207 1
+10.457542441649849 1
+12.683067653175151 1
+14.9572780176164 1
+17.350541349673339 4
+
+9 0 0 0 0 3 3 10 6 8 4 316000 0 0  316000 0 0  316000 0 0  316000 0 0  316000 0 0  316000 0 0  
+318629.09516861039 0 0  318629.09516861039 366.56788718203001 0  317860.22270019189 795.35522357773004 0  317115.67451639759 1599.3086662812 0  316371.20834738092 1616.2817253768101 0  315999.99999999977 1627.4665402768201 0  
+324481.66856330726 0 302.58243565712002  324481.66856330726 1167.8324836828399 302.58243565712002  321987.65545769053 2477.8936000702897 585.19430795875007  319613.21446970198 5223.7910762562697 1155.5004059056  317207.8905577382 5196.9520990367901 548.53416956704007  316000.00000000017 5173.5672106306802 282.85894446215997  
+329101.91261022864 0 6026.5237239512198  329101.91261022864 1670.73500723303 6026.5237239512198  325332.02062722109 3406.8872872760699 6051.6427399737404  320329.2423861493 5964.6006790887304 6953.7086112511997  317471.00755556219 7481.6795198301106 5415.5716740215703  316000 8197.0716896474005 4652.9723113127502  
+325944.95917403308 0 12093.13126690926  325944.95917403308 1382.13389169467 12093.13126690926  323558.79683987203 3747.8450711599903 11697.785960544101  319326.30036414898 6157.34663437989 11318.250122775209  317126.81052311475 7935.8536043675203 10261.267846261801  316000.00000000006 8823.5859814716696 9721.336162905769  
+319811.34228883771 0 16253.578597082338  319811.34228883771 1191.9088583422399 16253.578597082338  319866.04190144798 3574.0763023169102 16307.728053848488  317835.56191459682 6121.7544362491999 15179.136360705319  316624.356766432 7341.9211712181295 14786.58766369214  316000 7956.0747279902798 14585.071226615821  
+319654.02350208652 0 23089.58742787188  319654.02350208652 1332.2566226536601 23089.58742787188  320056.15266584163 3697.4544660941501 22435.050283851069  317729.88993545668 4940.7662117243199 20348.313518654191  316606.80558556458 6239.3989823970105 19896.159276696912  316000.00000000006 6923.4238158264898 19654.058926817394  
+325258.33200689126 0 27858.70187491037  325258.33200689126 1710.24326057589 27858.70187491037  324058.87509253348 4978.8629320816908 27000.181374514279  319741.44289696967 6443.72887981433 24993.271793473799  317300.27805630548 8518.3305456713206 24403.104459367667  316000 9583.6770922198484 24112.165509567589  
+327200.31664643978 0 30786.004002987131  327200.31664643978 2043.4046780424301 30786.004002987131  325586.27423501259 5888.0577340641803 30116.10672282047  320724.14993064216 8289.8911396880303 26841.567096906248  317623.73273020354 10534.724233514429 26691.855585727899  315999.99999999994 11662.47090760269 26635.574526464028  
+328014.32322258851 0 32178.111664453532  327608.9108318194 2058.9774048128202 32138.638522167861  326266.40715453931 5338.0420089042 32007.925105708742  321783.70671953383 10951.46936178577 31571.465154992289  318236.57593957719 12863.67968933084 31226.097324183229  316411.24187299516 13832.138454022059 31048.372930529771  
+
+0 4
+1 1
+2 1
+3 1
+4 1
+5 1
+6 1
+7 4
+
+0 4
+1 1
+2 1
+3 4
 
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 77.707649230000001 -0.85272949929999997 0  79.070991520000007 -0.52793318030000003 0  86.008544920000006 -0.61271584030000004 0  86.89515686 -0.52644646169999998 0  
-74.998382570000004 0.02459561452 0  80.000572199999993 -0.007402196061 0  84.999603269999994 0.0032616849059999998 0  90.000595090000004 -0.0081456471229999997 0  
-72.29938507 0.75429981950000002 0  80.926971440000003 0.55658996110000003 0  83.992828369999998 0.59826976060000003 0  93.102020260000003 0.55807578560000004 0  
-69.590309140000002 1.763405085 0  81.856651310000004 1.0394696000000001 0  82.983650209999993 1.2330722810000001 0  96.208953859999994 1.0387394430000001 0  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 92.582641600000002 0.93501567839999999 0.01619294286  94.996917719999999 0.4304404557 -0.028433343400000002  97.429702759999998 0.85520970819999997 0.097540415820000004  99.847000120000004 0.214458704 0.79751068349999998  
-90.767387389999996 0.1538186222 0.1202691793  89.997741700000006 0.63652193550000002 -0.053655039520000003  89.241661070000006 0.80475699899999997 0.094351127739999999  88.47169495 2.6720194820000001 0.69319248200000005  
-84.34780121 0.18550726770000001 0.1066846102  85.012146000000001 0.5513101816 -0.058923464270000003  85.603683470000007 1.1175765989999999 0.1290093064  86.26625061 2.3961834909999999 0.60911446810000003  
-81.84138489 -1.468299866 0.1582048684  79.953742980000001 0.81352221970000005 -0.063257202509999999  78.343612669999999 1.715210795 0.094824105500000005  76.463340759999994 6.8201184269999997 0.77063369749999999  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 93.877815249999998 0.55658739810000002 0.1316598803  94.998641969999994 0.53072458509999998 -0.063631862400000003  96.127639770000002 0.82975506779999997 0.1228675917  97.250122070000003 1.113389492 0.78960406780000003  
-92.880249019999994 0.36872613430000001 0.09146381915  92.500282290000001 0.59441775080000003 -0.045908823610000003  92.118621829999995 0.75918143989999998 0.092171654110000001  91.737930300000002 2.003663778 0.74789595600000003  
-89.601211550000002 0.3297393918 0.094997264440000007  90.000213619999997 0.5727143884 -0.048988830300000001  90.397918700000005 0.88681298490000005 0.1009580716  90.798103330000004 2.0473868849999999 0.69460743670000002  
-88.714790339999993 0.048113096510000002 0.13250167669999999  87.498886110000001 0.64256352189999999 -0.060113012790000003  86.289573669999996 0.88537949319999998 0.1079505831  85.067161560000002 3.1055064200000002 0.65306448939999995  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 74.973991389999995 -11.341476439999999 0  73.704673769999999 -1.190933824 0  80.20765686 -0.34528830649999998 0  85.464714049999998 -1.0050865410000001 0  
-69.140983579999997 1.445493221 0  75.191413879999999 -0.41366481779999997 0  80.092811580000003 0.20907926560000001 0  84.437538149999995 -0.4244047701 0  
-68.461402890000002 5.5603876110000003 0  75.529418949999993 2.8455462460000001 0  79.421257019999999 -0.49198034410000002 0  86.78559113 2.7013096810000001 0  
-63.17551804 22.26244926 0  76.857002260000002 2.4951658249999999 0  79.395919800000001 0.65789073710000001 0  85.559143070000005 2.027640581 0  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 96.301048280000003 1.858845592 0.087095879020000003  92.900360109999994 -0.051803044970000003 -0.041024178270000003  90.714500430000001 1.611253262 0.077000916000000003  87.228637699999993 1.516893029 0.74819022420000003  
-83.032142640000004 -0.53786021470000001 0.1187648624  84.019882199999998 0.88527309890000005 -0.060099821540000001  84.842880249999993 0.62618088719999998 0.12163449079999999  85.846321110000005 3.4190535550000001 0.64139837030000002  
-81.570358279999994 -0.27985966210000002 0.14305686949999999  81.020133970000003 0.16599749029999999 -0.071182541550000006  79.913970950000007 2.874298096 0.141673252  79.386116029999997 3.883769751 0.58650207519999997  
-70.686523440000002 -9.765088081 0.07554782182  71.899566649999997 2.7189137940000001 -0.038440048689999999  75.501365660000005 3.6946332449999999 0.078212395310000002  76.608795169999993 14.60051823 0.79342484469999996  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 66.660423280000003 -14.282899860000001 0  69.53231049 -5.2079663280000004 0  75.210281370000004 -3.5431132320000001 0  79.626892089999998 2.9299309249999999 0  
-64.813346859999996 1.3469259739999999 0  70.030456540000003 -0.42539104820000001 0  75.065040589999995 0.35625454779999999 0  79.708770749999999 -0.99971640110000004 0  
-64.086662290000007 8.8965883259999998 0  70.346008299999994 6.9104094509999996 0  74.529251099999996 2.1180486680000001 0  81.537315370000002 1.067981005 0  
-62.280559539999999 31.579051969999998 0  70.83487701 9.3396625520000001 0  74.380119320000006 8.3780870440000008 0  81.643928529999997 -9.9509773250000002 0  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 86.124862669999999 7.5685620309999999 0.18278071279999999  86.311759949999995 0.68653565650000004 -0.082442894579999995  85.767860409999997 2.093748808 0.14699098469999999  85.894058229999999 -3.671126127 0.58087354899999999  
-79.341217040000004 -4.476065159 0.11985115709999999  79.513801569999998 0.32995402810000002 -0.061869684610000003  79.777099609999993 2.0552966590000001 0.1276276559  79.976020809999994 7.0350799559999997 0.62409305569999995  
-76.510246280000004 -1.08669126 0.104354538  75.633056640000007 2.261827469 -0.053348168729999999  75.12374878 5.5030636790000003 0.1090382785  74.201820369999993 9.0854520799999996 0.70358967780000004  
-64.617691039999997 5.5681409840000002 0.21807979050000001  67.9540863 7.6157231330000004 -0.10241203760000001  69.727806090000001 9.9184331889999999 0.1915684044  73.216026310000004 11.539814 0.34668678050000001  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 62.965610499999997 -19.726736070000001 0  64.018562320000001 -8.7622766490000004 0  70.960418700000005 -8.1426858899999992 0  72.139633180000004 2.6750936510000001 0  
-60.043224330000001 1.421553493 0  64.984695430000002 -0.4723390341 0  70.017440800000003 0.47030147909999998 0  74.945655819999999 -1.4072332380000001 0  
-56.860675809999996 14.04157448 0  66.042442320000006 10.65302181 0  68.969833370000003 6.2623620029999998 0  78.078071589999993 2.9537892339999998 0  
-53.923175809999996 43.939033510000002 0  67.013725280000003 16.028936389999998 0  68.02111816 17.782220840000001 0  80.901054380000005 -9.8422546390000001 0  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 80.44564819 -2.0841064450000002 0.089526019989999997  81.247261050000006 -1.3980691430000001 -0.044439900669999997  82.067329409999999 0.99757254120000005 0.088233597580000003  82.871963500000007 2.4296023849999999 0.82697844509999996  
-74.884384159999996 -1.1163837910000001 0.13833197950000001  74.60199738 3.0978636740000001 -0.069130212070000002  74.269798280000003 5.9314761159999998 0.13818901780000001  73.985160829999998 10.16884518 0.57377105949999996  
-70.016845700000005 3.2949526310000001 0.1124952734  70.344757079999994 5.9996085170000004 -0.056713737549999997  70.853500370000006 9.2625045779999997 0.1143596098  71.187400819999993 11.81176376 0.66307908299999996  
-65.048179630000007 5.095191002 0.087549418209999993  64.019058229999999 11.884456630000001 -0.041946064679999999  62.31616211 15.87933159 0.080234959719999999  61.265617370000001 21.83085823 0.66601663830000002  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 54.483848569999999 -17.784173970000001 0  59.855922700000001 -13.59802818 0  66.092300420000001 -12.222788810000001 0  65.775360109999994 -0.42930686470000001 0  
-55.86465836 0.72844588759999995 0  59.78271866 -0.29818606380000001 0  65.004608149999996 0.46596622469999999 0  70.198081970000004 -1.563208103 0  
-52.057937619999997 14.869798660000001 0  61.013248439999998 14.791819569999999 0  63.888916020000003 10.36030674 0  73.431594849999996 6.6830101009999998 0  
-53.490104680000002 39.969528199999999 0  60.909572599999997 25.822925569999999 0  62.87155533 25.536867139999998 0  77.604629520000003 -2.133240223 0  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 78.35199738 -2.0100781919999999 0.26285457610000001  78.300964359999995 -0.38273531199999999 -0.1051590815  76.604103089999995 4.1068401339999996 0.1577820033  76.536003109999996 7.7636480329999999 0.59084194899999998  
-68.723518369999994 3.7674543859999998 0.072993636129999998  68.942276000000007 7.2827286720000002 -0.045352902260000001  69.425407410000005 10.40361691 0.1084179431  69.657951350000005 13.277051930000001 0.64443331960000005  
-66.753967290000006 4.0988845830000002 0.1210334226  65.929992679999998 10.23257065 -0.051360487939999998  65.694305420000006 13.13953495 0.084408596160000002  64.832183839999999 18.37484169 0.72352796789999996  
-54.260673519999997 16.781330109999999 -0.060266003009999999  57.337760930000002 16.476396560000001 0.002364326734  57.797424319999998 18.839918140000002 0.050808735190000003  61.012603759999998 14.623550420000001 0.67780119179999998  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 75.129898069999996 -7.3941349980000002 0.091945841910000006  74.193420410000002 5.4741783140000004 -0.051807105540000002  69.624267579999994 8.5328788759999998 0.11528266970000001  68.913932799999998 18.742336269999999 0.66241168979999998  
-63.50595474 8.6558189389999995 0.085041522980000006  63.716262819999997 11.106956479999999 -0.040780819949999998  65.060699459999995 14.36039257 0.078081794080000003  65.206962590000003 15.672473910000001 0.7149122953  
-60.846294399999998 9.7152023320000005 0.064749866719999993  60.941566469999998 14.78740215 -0.033500451590000001  60.13295746 15.82723331 0.069252021610000006  60.258228299999999 19.968065259999999 0.69428646559999996  
-53.10876846 21.515781400000002 0.1349699348  52.517585750000002 15.21390343 -0.064722731709999995  54.407360079999997 17.80579376 0.12392098460000001  53.759384160000003 11.771274569999999 0.37123927470000001  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 54.397941590000002 17.570703510000001 0.048329457639999997  60.24141693 14.45232582 -0.023855013769999999  64.636405940000003 12.46671963 -0.050757996739999998  71.212944030000003 3.0389711859999999 -0.26168975230000002  
-53.697380070000001 15.68428993 0.064902625980000003  60.36162186 16.59452057 0.12840843199999999  64.856155400000006 13.94200706 0.1521957219  70.213806149999996 10.974662779999999 0.22878035899999999  
-54.719421390000001 17.900156020000001 0.49425965550000001  60.043918609999999 17.233972550000001 0.44801551099999998  65.104934689999993 15.98625183 0.42843359710000001  69.536369320000006 11.41045856 0.41830396650000001  
-54.02924728 16.45102692 0.99382019040000003  60.159904480000002 19.102808 1.0289313790000001  65.331100460000002 16.875450130000001 1.0940020079999999  68.515708919999994 18.439228060000001 1.1811215879999999  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 56.747886659999999 19.488988880000001 -0.24277117849999999  66.138603209999999 9.7141818999999998 -0.042931970210000003  68.697738650000005 9.0123996730000009 -0.074079275129999997  79.070465089999999 -3.15933156 0.0090108504520000007  
-58.360584260000003 17.090929030000002 0.1799774468  65.567840579999995 14.00995445 0.1565292925  69.368057250000007 10.20648098 0.1598775834  76.959915159999994 4.8205509190000004 0.14989538490000001  
-59.350540160000001 18.607187270000001 0.4062630236  65.129409789999997 15.41156292 0.42661702629999998  70.1318512 12.33592033 0.46732148530000001  74.343215939999993 7.6853775979999996 0.50821745399999996  
-60.967773440000002 14.822600359999999 1.1216033700000001  64.560127260000002 19.275550840000001 1.103689551  70.79171753 13.11881161 1.0496981139999999  72.273033139999995 15.970327380000001 1.1064312460000001  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 62.79788971 13.64214325 0.084701389069999994  70.661628719999996 6.4785571099999997 -0.1068422571  74.555549619999994 3.0481157300000001 0.012428729790000001  81.116172789999993 -0.27073740959999998 -0.25658872719999998  
-62.569435120000001 16.251161580000002 0.11095523089999999  70.793647770000007 9.278157234 0.1757009923  74.255966189999995 6.2926483150000001 0.13217653330000001  82.182495119999999 0.53845494989999998 0.20610284810000001  
-61.473514559999998 18.585782999999999 0.41648772360000003  71.109878539999997 11.27024651 0.46784272789999998  74.086914059999998 8.7738857269999997 0.51626181599999998  82.542465210000003 3.138771534 0.56765073539999999  
-61.234195710000002 20.533330920000001 1.0317322019999999  71.243995670000004 13.84445953 1.0838202240000001  73.789817810000002 11.81011391 1.041894197  83.596611019999997 4.1412296299999998 1.252651811  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 69.762840269999998 7.1992888449999999 0.1205968186  75.093719480000004 2.880865097 -0.10217899079999999  79.862304690000002 -0.32245674730000001 -0.025595288720000001  85.457015990000002 0.089278936389999994 -0.47230705620000002  
-70.185638429999997 9.8124494549999994 0.106514357  75.020721440000003 5.6051316260000004 0.1675255746  79.731498720000005 2.754215002 0.13389235729999999  86.053283690000001 0.6877547503 0.2383717299  
-69.576599119999997 12.380237579999999 0.46389684079999999  75.153396610000001 8.0581312179999998 0.51847136019999995  79.809822080000004 4.8918161390000003 0.56276035310000005  85.607254029999993 2.5500988960000002 0.60521590709999995  
-69.994796750000006 14.89736748 1.078412294  75.081993100000005 10.639368060000001 1.0629488229999999  79.677238459999998 7.7712459559999996 1.1738384959999999  86.209083559999996 2.9712915419999999 1.223244309  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 75.032302860000001 3.0278766159999999 0.31052091720000002  80.045471190000001 0.1594294161 -0.084625512360000002  84.785797119999998 -1.9852921960000001 -0.64888679979999997  90.811325069999995 -0.94159752129999996 -1.050132871  
-75.093177800000007 5.2815408709999998 0.036764912310000002  79.999633790000004 2.6086201670000002 0.15294824539999999  84.908340449999997 1.593738914 0.29290843010000001  90.367012020000004 1.686157227 0.37732568379999998  
-75.109016420000003 7.9439325329999999 0.61025607589999997  80.018089290000006 4.9530405999999996 0.55484563109999996  84.818603519999996 2.4193887709999999 0.54508966209999998  90.70746613 2.1070628170000001 0.55600076909999996  
-75.175483700000001 11.25631523 0.75567293170000005  79.970222469999996 7.0023927690000001 1.2344362739999999  84.943664549999994 5.4297027590000004 1.288123369  90.255081180000005 2.468753338 1.806906581  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 76.984436040000006 -4.3075175290000001 -0.35771110649999999  86.123664860000005 -0.83701658249999999 -0.72755122179999998  88.520950319999997 -1.0677556989999999 -0.46238985659999998  99.792549129999998 0.88886135820000001 -1.0844060179999999  
-78.144248959999999 3.7665448189999999 0.23729050160000001  85.655075069999995 1.372097254 0.31539341809999999  89.235443119999999 1.414804816 0.20304362479999999  97.403152469999995 0.20464347299999999 0.31712850930000003  
-80.230186459999999 3.7358298300000001 0.49522370100000002  84.949127200000007 2.766428232 0.53220564130000003  89.973342900000006 1.9361072779999999 0.66715800759999999  95.157516479999998 2.3582966330000001 0.97513091559999998  
-81.362007140000003 10.05911255 1.433936954  84.487121579999993 4.3234758380000002 1.307193756  90.689460749999995 3.836940765 1.5311183930000001  92.755065920000007 1.8829972740000001 2.0744078159999999  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 85.161705019999999 -0.48770678039999998 -0.3774242699  90.767814639999997 -0.72196221350000001 -0.58448463679999996  91.767066959999994 -0.84362250569999997 -0.9461515546  97.164054870000001 -1.1737213129999999 -1.2780363560000001  
-86.287284850000006 1.3718945979999999 0.18582424519999999  90.398712160000002 1.180001259 0.23846341670000001  92.117904659999994 1.1440615649999999 0.30501615999999998  96.129753109999996 1.064038754 0.37758481500000002  
-87.416137699999993 2.2897264960000001 0.65888655190000001  90.027450560000005 2.1693115230000002 0.68008071179999996  92.474067689999998 1.9021838900000001 0.79676192999999995  95.076385500000001 1.8807057140000001 0.98513835670000005  
-88.543968199999995 4.2517294879999996 1.2634912730000001  89.657562260000006 3.4715116020000001 1.5957083700000001  92.825698849999995 3.4164614680000001 1.8597538469999999  94.039619450000004 2.8092699049999998 2.5241250989999999  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 88.794250489999996 -1.3200109 -0.1158637106  89.559738159999995 0.41030481460000001 -0.426158011  92.966751099999996 -0.3083204329 -0.22237108650000001  93.573310849999999 1.8056964870000001 -0.40702509879999998  
-87.410568240000003 3.0213475230000002 0.72557270529999995  90.030593870000004 2.23878932 0.76537889240000001  92.467071529999998 2.215568304 0.84414112569999999  95.101173399999993 1.5122210979999999 1.034784317  
-86.059310909999994 4.0171475409999999 1.2984348539999999  90.483963009999997 3.963300705 1.9191389080000001  92.004798890000004 3.615303516 2.1976244450000002  96.496902469999995 3.5415534970000002 3.1101443770000001  
-84.678413390000003 10.024657250000001 3.3890495299999999  90.954078670000001 5.5612506870000002 4.0525374410000001  91.505203249999994 5.7527194020000003 4.129038811  98.025070189999994 1.34929812 4.8984656329999998  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
+9 0 0 0 0 3 3 11 10 9 8 284250 0 0  284249.99999999988 2532.8034406788602 0  284250.00000000012 14100.84488199209 -0  284249.99999999994 18497.400885685121 0  284249.99999999994 20760.311021057252 760.38799735984003  284250 23328.680665793439 3113.2022590859201  284250 24799.904341341389 6954.8769456019099  284250 24799.904341341389 11651.480316228319  284249.99999999994 24799.904341341389 19161.493224142578  284250 24800 27916.980537397361  
+285495.59472963907 0 0  285493.27242656553 2533.4894168046499 -0.022052392129999997  285507.93406887178 14097.391185736751 0.11026196065  285447.52671464329 18133.696021088577 -0.35283827407000001  285475.12776078278 20476.856694131769 851.49818625582998  285524.67773993831 22965.965670579259 3108.3805320537699  285524.62694583467 24567.880806381789 7177.0353682441601  285548.84436398913 24509.388518419262 11652.32418234837  285539.71521147253 24543.829638429208 19161.31549550713  285529.78918731899 24506.671344700258 28041.587732038959  
+288013.48115771159 0 0  288005.5925495362 2535.09500351528 0.036759316959999996  288054.3946410073 14089.30671895965 -0.1837965848  287853.21728052408 17402.205426002201 0.58814907134999994  287988.12857021246 19893.965504425949 1036.9440293882399  288009.49871339329 22251.96483867526 3103.7184257897898  288010.28126645047 24103.51561849346 7611.4110185007203  288036.14868655906 23940.70494489788 11651.79767802322  288018.94503626379 24044.002591718188 19161.405425406792  288000.58093801903 24091.30971235325 28282.15737557791  
+292038.46925664111 0 0  292038.48617194634 2251.4607900463602 -0.17884507627000001  292038.41307263868 6849.29912095689 107.00689408378999  292038.77853662649 13161.605662110431 0  292038.05750743899 20030.746433325039 1404.1542986555  292043.30364092236 22824.90928289009 7934.7032623205296  292043.42652865121 22454.201771419579 14675.721789743451  292045.82498191146 22521.961400550812 21243.06386732755  292044.84287279513 22715.10635193807 25701.463602865089  292025.51083810459 22882.710146130128 28674.04631201235  
+296027.75469610014 0 0  296027.7500640002 2108.7368433939901 0.04897507073  296027.77008156985 6269.4390680078695 192.55264347803998  296027.67000263551 12855.56608355477 0  296027.86744981247 18991.29434125117 2454.09728502082  296026.43084465829 21183.352472880099 8813.7300748352209  296026.39719298977 20862.05768191463 15157.487320894161  296025.74039873795 20988.324350947762 21649.116228249848  296026.0093402401 21374.05059991188 25898.427395559909  296007.05032217695 21749.741065705661 29061.71052294724  
+300029.66433632019 0 0  300029.66560667224 2035.17053389535 -0.013431398069999999  300029.66011685983 6067.9336487389601 132.91899604693  300029.68756347697 12339.986975771961 0  300029.63341364957 17670.599423033462 3504.0144707985901  300030.02740217058 19232.65971149828 9673.0018767875099  300030.03663113038 19007.212725054749 15784.57152183367  300030.21675675164 19152.38374987452 21877.866517986789  300030.14299962734 19833.93607461574 25980.06923487247  300015.08628178632 20500.28717307873 29451.954573997402  
+304061.59760022501 0 0  304061.59724690503 1922.69247167354 0.0037356425599999999  304061.59877377341 5679.9880655212301 0  304061.59114011156 11850.325735712771 138.51896842521998  304061.60620067315 16048.20824380948 4944.1612328943393  304061.49662159028 16973.345604117261 10703.62559098476  304061.49405476166 16717.124812662623 16459.94507700012  304061.44395685429 17058.27953157451 22510.210571182331  304061.46447074669 18173.514813481099 26163.859048023467  304074.16542389384 19151.740462254871 29847.168465267892  
+308034.41368393204 0 0  308034.41378234903 1855.5274565381701 -0.0010405597599999999  308034.41335704119 5590.3590489231201 0  308034.41548339074 11028.31657596721 1157.4749134854901  308034.41128828516 13976.770826254529 6333.6255709340594  308034.44181143679 14568.129388422021 11796.398348673829  308034.44252642465 13856.92214501343 17421.49410994929  308034.45648114971 14941.29788399829 22818.01587507837  308034.45076702425 16320.376181975409 26300.985381646249  308117.42891679093 17705.483118446347 30240.842459421678  
+312109.94710375112 0 0  312109.94707377814 1719.8634161714601 0.00031690384  312109.94720330602 5299.3601319312402 0  312109.94655572373 9914.1174050017889 2816.5772277481801  312109.94783334853 11583.95309346973 7881.3732101408395  312109.93853748252 11520.908983528579 13260.719201135509  312109.93831973226 10891.76844289749 18309.27108267208  312109.93406980223 12442.170856213221 23451.628291640242  312109.93581004662 14210.905827966921 26491.358749645849  312314.56476796156 15902.006838165069 30649.498298310002  
+314703.00712463411 0 0  314703.00712463411 1657.9138691572798 -0  314703.00712463411 5211.3460312777797 0  314703.00712463417 8828.1958694734003 3999.6135564071201  314703.00712463411 9789.2175204927698 9076.3420101310603  314703.00712463411 9214.645146307801 14136.586485516711  314703.00712463423 8332.7033324493095 19172.079035345552  314703.00712463417 10583.929296421211 23876.277033890608  314703.00712463417 12559.66791448961 26588.496768824261  315024.74547572003 14567.765215576121 30913.376144998969  
+316000 0 0  316000 1627.4665402767801 -0  316000 5173.5672106306902 282.85894446215997  316000 8197.0716896473896 4652.9723113127502  316000 8823.5859814716696 9721.336162905769  316000 7956.0747279902907 14585.071226615821  316000.00000000006 6923.4238158264898 19654.058926817397  315999.99999999994 9583.6770922198484 24112.165509567578  316000 11662.47090760269 26635.574526464039  316411.24187299516 13832.138454022059 31048.372930529771  
 
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 79.947166440000004 1.5402637720000001 0.4258014262  85.035949709999997 0.43748050929999999 -0.12132369730000001  89.909072879999997 -0.29992735390000003 -0.27972576020000001  95.327804569999998 0.7751299143 -0.80263352389999998  
-80.079627990000006 4.9523949619999996 0.48523843290000002  84.983589170000002 2.7513422969999999 0.60048657660000004  89.986000059999995 2.3946702480000002 0.72068154809999996  95.072410579999996 1.8620369430000001 1.148012638  
-80.161331180000005 7.4191350939999996 1.2853707080000001  84.968376160000005 5.3184313769999996 1.4707862140000001  89.965232850000007 3.7174232009999999 1.799797058  95.170745850000003 3.2975447180000002 2.5026478769999998  
-80.282539369999995 9.7249355319999999 2.0688464639999999  84.919288640000005 7.501715183 2.6302905079999999  90.040344239999996 6.3652181629999998 3.883796453  94.919395449999996 5.0598449710000004 5.5628380780000004  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
+0 4
+1.9951151004176799 1
+4.0652428178250997 1
+6.1633608799973301 1
+8.2931965274620207 1
+10.457542441649849 1
+12.683067653175151 1
+14.9572780176164 1
+17.350541349673339 4
 
--3 1
--2 1
--1 1
-0 1
+0 4
 1 1
 2 1
 3 1
 4 1
+5 1
+6 1
+7 4
 
-9 0 0 0 0 3 3 4 4 8 8 75.175628660000001 4.4142475130000003 0.17831161619999999  79.956169130000006 2.4713439940000002 0.093743443489999995  84.999725339999998 -0.18429276350000001 -0.01972097531  90.044921880000004 1.2560675139999999 -0.35408043859999999  
-75.107620240000003 8.3131513600000009 0.4707211852  80.014022830000002 4.83631134 0.56432914729999994  84.83627319 2.9282822610000001 0.5890593529  90.640846249999996 1.803012609 0.6873010397  
-75.098632809999998 10.64674664 1.172265887  80.029953000000006 7.6065855029999998 1.255706787  84.781600949999998 5.1721577639999996 1.4248739479999999  90.843635559999996 4.1150469779999996 2.0131073000000002  
-75.031555179999998 14.940820690000001 2.0349304680000002  80.087257390000005 9.7350368500000002 2.2475943570000001  84.619323730000005 8.1467123029999993 2.645011663  91.435310360000003 3.7750265600000001 3.646145105  
+9 0 0 0 0 3 3 11 10 9 8 284250 0 0  284249.99999999988 2532.8034406788602 0  284250.00000000012 14100.84488199209 -0  284249.99999999994 18497.400885685121 0  284249.99999999994 20760.311021057252 760.38799735984003  284250 23328.680665793439 3113.2022590859201  284250 24799.904341341389 6954.8769456019099  284250 24799.904341341389 11651.480316228319  284249.99999999994 24799.904341341389 19161.493224142578  284250 24800 27916.980537397361  
+285495.59472963907 0 0  285493.27242656553 2533.4894168046499 -0.022052392129999997  285507.93406887178 14097.391185736751 0.11026196065  285447.52671464329 18133.696021088577 -0.35283827407000001  285475.12776078278 20476.856694131769 851.49818625582998  285524.67773993831 22965.965670579259 3108.3805320537699  285524.62694583467 24567.880806381789 7177.0353682441601  285548.84436398913 24509.388518419262 11652.32418234837  285539.71521147253 24543.829638429208 19161.31549550713  285529.78918731899 24506.671344700258 28041.587732038959  
+288013.48115771159 0 0  288005.5925495362 2535.09500351528 0.036759316959999996  288054.3946410073 14089.30671895965 -0.1837965848  287853.21728052408 17402.205426002201 0.58814907134999994  287988.12857021246 19893.965504425949 1036.9440293882399  288009.49871339329 22251.96483867526 3103.7184257897898  288010.28126645047 24103.51561849346 7611.4110185007203  288036.14868655906 23940.70494489788 11651.79767802322  288018.94503626379 24044.002591718188 19161.405425406792  288000.58093801903 24091.30971235325 28282.15737557791  
+292038.46925664111 0 0  292038.48617194634 2251.4607900463602 -0.17884507627000001  292038.41307263868 6849.29912095689 107.00689408378999  292038.77853662649 13161.605662110431 0  292038.05750743899 20030.746433325039 1404.1542986555  292043.30364092236 22824.90928289009 7934.7032623205296  292043.42652865121 22454.201771419579 14675.721789743451  292045.82498191146 22521.961400550812 21243.06386732755  292044.84287279513 22715.10635193807 25701.463602865089  292025.51083810459 22882.710146130128 28674.04631201235  
+296027.75469610014 0 0  296027.7500640002 2108.7368433939901 0.04897507073  296027.77008156985 6269.4390680078695 192.55264347803998  296027.67000263551 12855.56608355477 0  296027.86744981247 18991.29434125117 2454.09728502082  296026.43084465829 21183.352472880099 8813.7300748352209  296026.39719298977 20862.05768191463 15157.487320894161  296025.74039873795 20988.324350947762 21649.116228249848  296026.0093402401 21374.05059991188 25898.427395559909  296007.05032217695 21749.741065705661 29061.71052294724  
+300029.66433632019 0 0  300029.66560667224 2035.17053389535 -0.013431398069999999  300029.66011685983 6067.9336487389601 132.91899604693  300029.68756347697 12339.986975771961 0  300029.63341364957 17670.599423033462 3504.0144707985901  300030.02740217058 19232.65971149828 9673.0018767875099  300030.03663113038 19007.212725054749 15784.57152183367  300030.21675675164 19152.38374987452 21877.866517986789  300030.14299962734 19833.93607461574 25980.06923487247  300015.08628178632 20500.28717307873 29451.954573997402  
+304061.59760022501 0 0  304061.59724690503 1922.69247167354 0.0037356425599999999  304061.59877377341 5679.9880655212301 0  304061.59114011156 11850.325735712771 138.51896842521998  304061.60620067315 16048.20824380948 4944.1612328943393  304061.49662159028 16973.345604117261 10703.62559098476  304061.49405476166 16717.124812662623 16459.94507700012  304061.44395685429 17058.27953157451 22510.210571182331  304061.46447074669 18173.514813481099 26163.859048023467  304074.16542389384 19151.740462254871 29847.168465267892  
+308034.41368393204 0 0  308034.41378234903 1855.5274565381701 -0.0010405597599999999  308034.41335704119 5590.3590489231201 0  308034.41548339074 11028.31657596721 1157.4749134854901  308034.41128828516 13976.770826254529 6333.6255709340594  308034.44181143679 14568.129388422021 11796.398348673829  308034.44252642465 13856.92214501343 17421.49410994929  308034.45648114971 14941.29788399829 22818.01587507837  308034.45076702425 16320.376181975409 26300.985381646249  308117.42891679093 17705.483118446347 30240.842459421678  
+312109.94710375112 0 0  312109.94707377814 1719.8634161714601 0.00031690384  312109.94720330602 5299.3601319312402 0  312109.94655572373 9914.1174050017889 2816.5772277481801  312109.94783334853 11583.95309346973 7881.3732101408395  312109.93853748252 11520.908983528579 13260.719201135509  312109.93831973226 10891.76844289749 18309.27108267208  312109.93406980223 12442.170856213221 23451.628291640242  312109.93581004662 14210.905827966921 26491.358749645849  312314.56476796156 15902.006838165069 30649.498298310002  
+314703.00712463411 0 0  314703.00712463411 1657.9138691572798 -0  314703.00712463411 5211.3460312777797 0  314703.00712463417 8828.1958694734003 3999.6135564071201  314703.00712463411 9789.2175204927698 9076.3420101310603  314703.00712463411 9214.645146307801 14136.586485516711  314703.00712463423 8332.7033324493095 19172.079035345552  314703.00712463417 10583.929296421211 23876.277033890608  314703.00712463417 12559.66791448961 26588.496768824261  315024.74547572003 14567.765215576121 30913.376144998969  
+316000 0 0  316000 1627.4665402767801 -0  316000 5173.5672106306902 282.85894446215997  316000 8197.0716896473896 4652.9723113127502  316000 8823.5859814716696 9721.336162905769  316000 7956.0747279902907 14585.071226615821  316000.00000000006 6923.4238158264898 19654.058926817397  315999.99999999994 9583.6770922198484 24112.165509567578  316000 11662.47090760269 26635.574526464039  316411.24187299516 13832.138454022059 31048.372930529771  
 
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
+0 4
+1.9951151004176799 1
+4.0652428178250997 1
+6.1633608799973301 1
+8.2931965274620207 1
+10.457542441649849 1
+12.683067653175151 1
+14.9572780176164 1
+17.350541349673339 4
 
--3 1
--2 1
--1 1
-0 1
+0 4
 1 1
 2 1
 3 1
 4 1
+5 1
+6 1
+7 4
 
-9 0 0 0 0 3 3 4 4 8 8 68.88252258 10.52015495 0.038719888780000003  75.376289369999995 4.7572722430000001 0.087282784279999998  79.612358090000001 2.3348715310000001 0.1058180779  86.174278259999994 0.01856420562 0.02301558293  
-69.983276369999999 12.21641159 0.49212014679999999  75.055496219999995 8.1801090240000001 0.51779735090000001  79.794784550000003 5.055784225 0.54893058539999995  85.765380859999993 2.1834375860000002 0.60357558730000005  
-69.671226500000003 14.844972609999999 1.0333142280000001  75.118049619999994 10.999332430000001 1.145887017  79.856582639999999 7.53470993 1.2572325470000001  85.455619810000002 5.1070666310000004 1.4451528789999999  
-70.785827639999994 16.226510999999999 1.9372695680000001  74.793289180000002 14.232048989999999 2.0965588089999998  80.041008000000005 10.14419174 2.2233860490000001  85.04263306 7.2188878059999997 2.680219889  
+9 0 0 0 0 3 3 10 6 8 4 316000 0 0  316000 0 0  316000 0 0  316000 0 0  316000 0 0  316000 0 0  
+318629.09516861039 0 0  318629.09516861039 366.56788718203001 0  317860.22270019189 795.35522357773004 0  317115.67451639759 1599.3086662812 0  316371.20834738092 1616.2817253768101 0  315999.99999999977 1627.4665402768201 0  
+324481.66856330726 0 302.58243565712002  324481.66856330726 1167.8324836828399 302.58243565712002  321987.65545769053 2477.8936000702897 585.19430795875007  319613.21446970198 5223.7910762562697 1155.5004059056  317207.8905577382 5196.9520990367901 548.53416956704007  316000.00000000017 5173.5672106306802 282.85894446215997  
+329101.91261022864 0 6026.5237239512198  329101.91261022864 1670.73500723303 6026.5237239512198  325332.02062722109 3406.8872872760699 6051.6427399737404  320329.2423861493 5964.6006790887304 6953.7086112511997  317471.00755556219 7481.6795198301106 5415.5716740215703  316000 8197.0716896474005 4652.9723113127502  
+325944.95917403308 0 12093.13126690926  325944.95917403308 1382.13389169467 12093.13126690926  323558.79683987203 3747.8450711599903 11697.785960544101  319326.30036414898 6157.34663437989 11318.250122775209  317126.81052311475 7935.8536043675203 10261.267846261801  316000.00000000006 8823.5859814716696 9721.336162905769  
+319811.34228883771 0 16253.578597082338  319811.34228883771 1191.9088583422399 16253.578597082338  319866.04190144798 3574.0763023169102 16307.728053848488  317835.56191459682 6121.7544362491999 15179.136360705319  316624.356766432 7341.9211712181295 14786.58766369214  316000 7956.0747279902798 14585.071226615821  
+319654.02350208652 0 23089.58742787188  319654.02350208652 1332.2566226536601 23089.58742787188  320056.15266584163 3697.4544660941501 22435.050283851069  317729.88993545668 4940.7662117243199 20348.313518654191  316606.80558556458 6239.3989823970105 19896.159276696912  316000.00000000006 6923.4238158264898 19654.058926817394  
+325258.33200689126 0 27858.70187491037  325258.33200689126 1710.24326057589 27858.70187491037  324058.87509253348 4978.8629320816908 27000.181374514279  319741.44289696967 6443.72887981433 24993.271793473799  317300.27805630548 8518.3305456713206 24403.104459367667  316000 9583.6770922198484 24112.165509567589  
+327200.31664643978 0 30786.004002987131  327200.31664643978 2043.4046780424301 30786.004002987131  325586.27423501259 5888.0577340641803 30116.10672282047  320724.14993064216 8289.8911396880303 26841.567096906248  317623.73273020354 10534.724233514429 26691.855585727899  315999.99999999994 11662.47090760269 26635.574526464028  
+328014.32322258851 0 32178.111664453532  327608.9108318194 2058.9774048128202 32138.638522167861  326266.40715453931 5338.0420089042 32007.925105708742  321783.70671953383 10951.46936178577 31571.465154992289  318236.57593957719 12863.67968933084 31226.097324183229  316411.24187299516 13832.138454022059 31048.372930529771  
 
--3 1
--2 1
--1 1
-0 1
+0 4
 1 1
 2 1
 3 1
 4 1
+5 1
+6 1
+7 4
 
--3 1
--2 1
--1 1
-0 1
+0 4
 1 1
 2 1
-3 1
-4 1
+3 4
 
-9 0 0 0 0 3 3 4 4 8 8 58.991584779999997 22.52947807 0.12961390610000001  71.823013309999993 7.2421655649999996 0.15281462670000001  73.716308589999997 6.6794943809999996 0.052506178620000003  83.311737059999999 -2.0760459899999999 0.13082706929999999  
-61.756282810000002 17.265336990000002 0.41678106780000002  71.061882019999999 11.759069439999999 0.48141264919999999  73.996162409999997 8.7470474239999998 0.51239132880000005  82.953475949999998 3.2453598979999998 0.58126306530000005  
-63.680953979999998 19.53681564 1.011900544  70.406623839999995 13.925145150000001 1.0524270529999999  74.692504880000001 11.53063774 1.137047291  80.823326109999996 6.3292903899999997 1.2734758850000001  
-66.521568299999998 13.72135162 1.738300562  69.625709529999995 18.348987579999999 1.993276  74.975555420000006 13.36322594 2.0526492599999999  80.472000120000004 11.496906279999999 2.343016386  
+9 0 0 0 0 3 3 10 11 8 9 284250 0 0  285495.59472963907 0 0  288013.48115771159 0 0  292038.46925664111 0 0  296027.75469610014 0 0  300029.66433632019 0 0  304061.59760022501 0 0  308034.41368393204 0 0  312109.94710375112 0 0  314703.00712463411 0 0  316000 0 0  
+284249.99999999988 -2532.8034406788602 0  285493.27242656553 -2533.4894168046499 -0.022052392129999997  288005.5925495362 -2535.09500351528 0.036759316959999996  292038.48617194634 -2251.4607900463602 -0.17884507627000001  296027.7500640002 -2108.7368433939901 0.04897507073  300029.66560667224 -2035.17053389535 -0.013431398069999999  304061.59724690503 -1922.69247167354 0.0037356425599999999  308034.41378234903 -1855.5274565381701 -0.0010405597599999999  312109.94707377814 -1719.8634161714601 0.00031690384  314703.00712463411 -1657.9138691572798 -0  316000 -1627.4665402767801 -0  
+284250.00000000012 -14100.84488199209 -0  285507.93406887178 -14097.391185736751 0.11026196065  288054.3946410073 -14089.30671895965 -0.1837965848  292038.41307263868 -6849.29912095689 107.00689408378999  296027.77008156985 -6269.4390680078695 192.55264347803998  300029.66011685983 -6067.9336487389601 132.91899604693  304061.59877377341 -5679.9880655212301 0  308034.41335704119 -5590.3590489231201 0  312109.94720330602 -5299.3601319312402 0  314703.00712463411 -5211.3460312777797 0  316000 -5173.5672106306902 282.85894446215997  
+284249.99999999994 -18497.400885685121 0  285447.52671464329 -18133.696021088577 -0.35283827407000001  287853.21728052408 -17402.205426002201 0.58814907134999994  292038.77853662649 -13161.605662110431 0  296027.67000263551 -12855.56608355477 0  300029.68756347697 -12339.986975771961 0  304061.59114011156 -11850.325735712771 138.51896842521998  308034.41548339074 -11028.31657596721 1157.4749134854901  312109.94655572373 -9914.1174050017889 2816.5772277481801  314703.00712463417 -8828.1958694734003 3999.6135564071201  316000 -8197.0716896473896 4652.9723113127502  
+284249.99999999994 -20760.311021057252 760.38799735984003  285475.12776078278 -20476.856694131769 851.49818625582998  287988.12857021246 -19893.965504425949 1036.9440293882399  292038.05750743899 -20030.746433325039 1404.1542986555  296027.86744981247 -18991.29434125117 2454.09728502082  300029.63341364957 -17670.599423033462 3504.0144707985901  304061.60620067315 -16048.20824380948 4944.1612328943393  308034.41128828516 -13976.770826254529 6333.6255709340594  312109.94783334853 -11583.95309346973 7881.3732101408395  314703.00712463411 -9789.2175204927698 9076.3420101310603  316000 -8823.5859814716696 9721.336162905769  
+284250 -23328.680665793439 3113.2022590859201  285524.67773993831 -22965.965670579259 3108.3805320537699  288009.49871339329 -22251.96483867526 3103.7184257897898  292043.30364092236 -22824.90928289009 7934.7032623205296  296026.43084465829 -21183.352472880099 8813.7300748352209  300030.02740217058 -19232.65971149828 9673.0018767875099  304061.49662159028 -16973.345604117261 10703.62559098476  308034.44181143679 -14568.129388422021 11796.398348673829  312109.93853748252 -11520.908983528579 13260.719201135509  314703.00712463411 -9214.645146307801 14136.586485516711  316000 -7956.0747279902907 14585.071226615821  
+284250 -24799.904341341389 6954.8769456019099  285524.62694583467 -24567.880806381789 7177.0353682441601  288010.28126645047 -24103.51561849346 7611.4110185007203  292043.42652865121 -22454.201771419579 14675.721789743451  296026.39719298977 -20862.05768191463 15157.487320894161  300030.03663113038 -19007.212725054749 15784.57152183367  304061.49405476166 -16717.124812662623 16459.94507700012  308034.44252642465 -13856.92214501343 17421.49410994929  312109.93831973226 -10891.76844289749 18309.27108267208  314703.00712463423 -8332.7033324493095 19172.079035345552  316000.00000000006 -6923.4238158264898 19654.058926817397  
+284250 -24799.904341341389 11651.480316228319  285548.84436398913 -24509.388518419262 11652.32418234837  288036.14868655906 -23940.70494489788 11651.79767802322  292045.82498191146 -22521.961400550812 21243.06386732755  296025.74039873795 -20988.324350947762 21649.116228249848  300030.21675675164 -19152.38374987452 21877.866517986789  304061.44395685429 -17058.27953157451 22510.210571182331  308034.45648114971 -14941.29788399829 22818.01587507837  312109.93406980223 -12442.170856213221 23451.628291640242  314703.00712463417 -10583.929296421211 23876.277033890608  315999.99999999994 -9583.6770922198484 24112.165509567578  
+284249.99999999994 -24799.904341341389 19161.493224142578  285539.71521147253 -24543.829638429208 19161.31549550713  288018.94503626379 -24044.002591718188 19161.405425406792  292044.84287279513 -22715.10635193807 25701.463602865089  296026.0093402401 -21374.05059991188 25898.427395559909  300030.14299962734 -19833.93607461574 25980.06923487247  304061.46447074669 -18173.514813481099 26163.859048023467  308034.45076702425 -16320.376181975409 26300.985381646249  312109.93581004662 -14210.905827966921 26491.358749645849  314703.00712463417 -12559.66791448961 26588.496768824261  316000 -11662.47090760269 26635.574526464039  
+284250 -24800 27916.980537397361  285529.78918731899 -24506.671344700258 28041.587732038959  288000.58093801903 -24091.30971235325 28282.15737557791  292025.51083810459 -22882.710146130128 28674.04631201235  296007.05032217695 -21749.741065705661 29061.71052294724  300015.08628178632 -20500.28717307873 29451.954573997402  304074.16542389384 -19151.740462254871 29847.168465267892  308117.42891679093 -17705.483118446347 30240.842459421678  312314.56476796156 -15902.006838165069 30649.498298310002  315024.74547572003 -14567.765215576121 30913.376144998969  316411.24187299516 -13832.138454022059 31048.372930529771  
 
--3 1
--2 1
--1 1
-0 1
+0 4
 1 1
 2 1
 3 1
 4 1
+5 1
+6 1
+7 4
 
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
+0 4
+1.9951151004176799 1
+4.0652428178250997 1
+6.1633608799973301 1
+8.2931965274620207 1
+10.457542441649849 1
+12.683067653175151 1
+14.9572780176164 1
+17.350541349673339 4
 
-9 0 0 0 0 3 3 4 4 8 8 59.699058530000002 18.739997859999999 0.1354572624  65.027458190000004 13.53881073 0.18676257130000001  70.191123959999999 10.20926285 0.1294175088  74.208061220000005 3.80182457 0.088947698470000003  
-59.322383879999997 17.09566689 0.4489269555  65.146614069999998 16.06541824 0.44670042399999998  70.091178889999995 11.930898669999999 0.47216278309999998  74.488670350000007 9.2596235280000005 0.51947051290000001  
-59.741939539999997 19.219667430000001 0.99546813960000002  65.031692500000005 17.131282809999998 0.99312281609999997  70.131317139999993 14.736147880000001 1.0607934000000001  74.443061830000005 10.69222736 1.1223616599999999  
-59.369590760000001 17.015077590000001 1.7406027319999999  65.149681090000001 19.485950469999999 1.917302251  70.031707760000003 16.1701622 1.930913925  74.723510739999995 16.314155580000001 2.1231133940000002  
+9 0 0 0 0 3 3 6 10 4 8 316000 0 0  318629.09516861039 0 0  324481.66856330726 0 302.58243565712002  329101.91261022864 0 6026.5237239512198  325944.95917403308 0 12093.13126690926  319811.34228883771 0 16253.578597082338  319654.02350208652 0 23089.58742787188  325258.33200689126 0 27858.70187491037  327200.31664643978 0 30786.004002987131  328014.32322258851 0 32178.111664453532  
+316000 0 0  318629.09516861039 -366.56788718203001 0  324481.66856330726 -1167.8324836828399 302.58243565712002  329101.91261022864 -1670.73500723303 6026.5237239512198  325944.95917403308 -1382.13389169467 12093.13126690926  319811.34228883771 -1191.9088583422399 16253.578597082338  319654.02350208652 -1332.2566226536601 23089.58742787188  325258.33200689126 -1710.24326057589 27858.70187491037  327200.31664643978 -2043.4046780424301 30786.004002987131  327608.9108318194 -2058.9774048128202 32138.638522167861  
+316000 0 0  317860.22270019189 -795.35522357773004 0  321987.65545769053 -2477.8936000702897 585.19430795875007  325332.02062722109 -3406.8872872760699 6051.6427399737404  323558.79683987203 -3747.8450711599903 11697.785960544101  319866.04190144798 -3574.0763023169102 16307.728053848488  320056.15266584163 -3697.4544660941501 22435.050283851069  324058.87509253348 -4978.8629320816908 27000.181374514279  325586.27423501259 -5888.0577340641803 30116.10672282047  326266.40715453931 -5338.0420089042 32007.925105708742  
+316000 0 0  317115.67451639759 -1599.3086662812 0  319613.21446970198 -5223.7910762562697 1155.5004059056  320329.2423861493 -5964.6006790887304 6953.7086112511997  319326.30036414898 -6157.34663437989 11318.250122775209  317835.56191459682 -6121.7544362491999 15179.136360705319  317729.88993545668 -4940.7662117243199 20348.313518654191  319741.44289696967 -6443.72887981433 24993.271793473799  320724.14993064216 -8289.8911396880303 26841.567096906248  321783.70671953383 -10951.46936178577 31571.465154992289  
+316000 0 0  316371.20834738092 -1616.2817253768101 0  317207.8905577382 -5196.9520990367901 548.53416956704007  317471.00755556219 -7481.6795198301106 5415.5716740215703  317126.81052311475 -7935.8536043675203 10261.267846261801  316624.356766432 -7341.9211712181295 14786.58766369214  316606.80558556458 -6239.3989823970105 19896.159276696912  317300.27805630548 -8518.3305456713206 24403.104459367667  317623.73273020354 -10534.724233514429 26691.855585727899  318236.57593957719 -12863.67968933084 31226.097324183229  
+316000 0 0  315999.99999999977 -1627.4665402768201 0  316000.00000000017 -5173.5672106306802 282.85894446215997  316000 -8197.0716896474005 4652.9723113127502  316000.00000000006 -8823.5859814716696 9721.336162905769  316000 -7956.0747279902798 14585.071226615821  316000.00000000006 -6923.4238158264898 19654.058926817394  316000 -9583.6770922198484 24112.165509567589  315999.99999999994 -11662.47090760269 26635.574526464028  316411.24187299516 -13832.138454022059 31048.372930529771  
 
--3 1
--2 1
--1 1
-0 1
+0 4
 1 1
 2 1
-3 1
-4 1
+3 4
 
--3 1
--2 1
--1 1
-0 1
+0 4
 1 1
 2 1
 3 1
 4 1
+5 1
+6 1
+7 4
 
-9 0 0 0 0 3 3 4 4 8 8 55.368618009999999 16.837617869999999 0.18016138670000001  59.870605470000001 16.162641529999998 0.1031088233  65.149017330000007 14.606780049999999 0.1991238296  69.533317569999994 8.5146989820000005 0.11232377590000001  
-54.289394379999997 17.0736618 0.46147784590000002  60.14064407 17.558025359999998 0.46239173410000001  65.148048399999993 15.64530182 0.44258064029999999  69.267181399999998 13.149055479999999 0.4751756191  
-54.078125 18.603668209999999 1.0096873040000001  60.264034270000003 18.238477710000002 0.99672675129999999  64.865753170000005 17.574460980000001 0.99048465490000004  70.272933960000003 13.94456673 1.0700914859999999  
-53.012393950000003 18.52272224 1.6839592459999999  60.531368260000001 19.475240710000001 1.7579774859999999  64.862075809999993 18.222274779999999 1.9222160580000001  70.020309449999999 18.76461411 1.8938726189999999  
+Triangulations 8
+133 244 1 68.3591027075252
+318204.296811767 -7327.75514408005 23761.5936376187 321186.316945408 2.66453525910038e-015 23752.7064604884 320799.509393646 -4558.16849175178 23756.3543401649 320998.378979637 -4160.81223188989 23754.4028573911 321148.053184713 -3689.6472160146 23753.2095354637 321253.395897441 -2803.75665955021 23752.9916663106 321248.42826932 -1907.96452803127 23753.1774600656 320023.238952556 0 20688 320631.502599425 0 22781.485691234 320240.81250731 0 21753.8112991336 316000 -7836.69546463392 20688 320045.342238307 -1751.36994910285 20688 319913.002515926 -3229.64445562497 20688 319772.211855676 -3673.50957674547 20688 319569.301430771 -4074.29383648006 20688 319225.638270173 -4542.19439064001 20688 317985.389915899 -5739.38334339826 20688 316000 -9499.97165004752 23769.5263731486 316000 -8287.05808549061 21750.52152968 316000 -8855.30671945309 22777.9623960537 320115.354052135 -1760.87566913314 21092.3331346663 320115.239460479 -1764.74302164892 21091.6720622207 320163.487884196 -1768.94818345937 21311.4513044028 320163.363890376 -1772.82806924971 21310.7680231003 320229.883118317 -1779.27097244568 21570.3846231511 320229.744107148 -1783.16761787584 21569.6753461442 320237.87075936 -1780.46664690605 21599.0181990321 320237.729823751 -1784.36528218997 21598.3060686819 320346.565176989 -1796.050510782 21950.1046738163 320346.396275775 -1799.97590922608 21949.3580063125 320054.048860025 -2576.91692229974 20910.3537025211 320099.576312453 -2586.83926839283 21123.8760123587 320161.917395214 -2599.78089562801 21376.2720616847 320169.390952594 -2601.29665876334 21404.1889323442 320605.060796785 -1830.05972201621 22603.8061989551 320604.817245451 -1834.04804501985 22602.9983482245 320270.692883594 -2621.33676209173 21746.6137502718 320793.614089601 -1853.45760377145 22987.9773382474 320793.312092555 -1857.49205811725 22987.1361616042 319955.475094475 -3239.74371236417 20895.7212333918 319906.06040364 -3380.17629642984 20834.3356779345 320013.036985248 -3252.90636217639 21141.4966970124 320019.916825039 -3254.47349260267 21168.6897634115 320509.797736944 -2666.61325341585 22385.0365458157 321121.526406187 -1892.91283047292 23556.0849025105 321121.118635304 -1897.02853624982 23555.1984502 319962.36082484 -3393.05906922632 21078.5433259524 319969.085988897 -3394.60137257392 21105.5653808956 320112.859403038 -3275.61800883652 21502.3997018293 320683.325192768 -2698.72772933703 22760.9252201275 320059.880894663 -3415.5500551905 21437.2225681716 319825.60436199 -3685.33492314669 20928.7727441658 319831.968107147 -3686.76962089386 20955.4224494035 319756.006604374 -3805.30607079608 20859.6045197657 319762.205639055 -3806.67368110069 20886.0955860838 320330.827315322 -3325.64436748362 22125.6093121071 319917.790871056 -3706.63423146774 21282.6206226887 320984.201560206 -2754.06719156026 23317.8170888397 319845.78023427 -3825.81612005002 21211.3981797219 320272.554620998 -3465.83333995102 22056.8796923766 319575.133472904 -4075.39706554314 20714.1237373946 321100.389532689 -2775.46963713175 23511.3468658272 320488.341498115 -3362.48039239314 22493.348034318 321185.309891485 -2791.15206833224 23647.134886671 320426.123390842 -3503.26975557524 22422.7342911482 320118.419598191 -3756.25289802544 21894.6128420382 319653.208417639 -4092.34896103289 21035.0582612359 319595.25361367 -4162.21720175575 20984.9893945592 320041.045012801 -3874.67032789623 21820.1526193576 320760.77883967 -3427.58957790956 23039.2935433931 320263.116221148 -3794.28289308037 22256.4343866256 320691.622206656 -3569.92155665825 22966.1670195273 320865.843530176 -3453.1667031583 23229.3186589296 320181.831686902 -3912.67475747202 22180.2834583411 319835.515555859 -4138.48101938215 21636.3924584686 320942.600235749 -3472.01816296914 23362.7351255124 320793.988331499 -3596.21953462591 23155.3899541225 319773.94069291 -4207.41781237287 21584.3454561658 321004.124424463 -3487.23037048653 23466.791306351 320868.768502544 -3615.63397726619 23288.2635168058 320513.122815996 -3863.2556139957 22794.5188431723 320928.706011553 -3631.31782727671 23391.9072583809 319966.939569772 -4175.8795986032 21992.6743040127 319902.766449213 -4244.54035471518 21939.6066193944 320425.054787391 -3982.23446557926 22716.1381549544 320609.488567703 -3890.77011226807 22982.038389662 320679.880406709 -3911.16561058448 23113.7589816705 320518.803125178 -4010.13148025615 22902.9491441619 320736.298659735 -3927.687446015 23216.5262858955 319383.145818117 -4581.04554381145 21276.5111055901 320587.28335718 -4030.85110572507 23034.1900669198 320194.007653034 -4246.01523044116 22523.4773436966 320642.169982457 -4047.65768009788 23136.5925221392 320125.370040352 -4314.67075031147 22469.0752132875 320281.542587311 -4274.53483685527 22708.686196088 320942.801460927 -3989.44473629043 23574.8830465451 319496.838643885 -4616.02145104364 21626.2079682263 320211.192104829 -4343.30454705848 22653.8614923261 320345.490167227 -4295.82357322328 22838.8423421923 320843.073370432 -4110.62691952856 23493.7315435919 320396.747915418 -4313.15000488085 22940.4192011053 320273.891257285 -4364.70979814423 22783.7314724896 320324.150089959 -4382.14804622379 22885.0904270461 319693.554846189 -4685.28457415903 22148.4303592692 320584.402320744 -4378.45458684217 23294.7954260098 320508.161137687 -4447.98682832195 23238.7358517428 319769.470320161 -4714.28248321179 22330.9253018941 320729.500636639 -4430.85625072834 23553.5355424573 319824.955564205 -4736.15221198473 22459.2431307148 320650.457450134 -4500.92071831383 23496.9613013508 319869.445679029 -4754.07313002596 22559.4194307927 320032.437274401 -4822.42555510036 22909.0884224886 320158.585262002 -4878.01414272442 23164.4972308915 320290.815110576 -4938.62534748419 23421.0718132596 320373.278503657 -4977.59537091487 23576.2960590548 318098.843617791 -5812.48839873804 21191.9031627504 318142.730443602 -5844.98512537998 21368.5312352751 318174.883435142 -5869.9402948292 21492.8683310661 318200.708491402 -5890.6277181509 21590.0091339488 318295.623289214 -5971.08223552934 21929.4701967002 317528.129701128 -6286.62555606156 20932.9283874683 317560.3975014 -6323.46501605859 21107.9211365307 318369.382655781 -6037.89537970167 22177.665886984 317584.0510892 -6351.66675736517 21231.1467101661 317603.0568664 -6374.99706256294 21327.4422424597 318446.956744225 -6111.78777365383 22427.0485262368 318495.463058415 -6159.7590359428 22577.8866114079 317672.959850477 -6465.39544719671 21664.1122251681 317727.332248378 -6540.14527540318 21910.4318570187 317784.559387371 -6622.5461082549 22158.0746727008 317820.363944436 -6675.91039842899 22307.9332320899 318853.874718283 -6553.18833440045 23607.9749394449 318085.394099864 -7110.51199006736 23332.9152967149 2.35030198878716 5.81239782609461 0 5.17908083698012 1.29625620361845 5.4430448829673 1.1454774669468 5.38864560232275 0.982038739533831 5.33509913499375 0.712399346707969 5.26274736497442 0.468913157627896 5.21605177222586 0 4.66066861626444 0 5.00627676340596 0 4.8334726898352 3 5.24221906303494 0.470013315883743 4.68211724465811 0.930803347568053 4.74882819336701 1.0958000231212 4.78528414850428 1.26361982821358 4.82865469330834 1.48580176285685 4.89296102857527 2.11462406381462 5.07483562188914 3 5.94433420095506 3 5.47625744234165 3 5.71029582164835 0.468913157627896 4.74882819336701 0.470013315883743 4.74882819336701 0.468913157627896 4.78528414850428 0.470013315883743 4.78528414850428 0.468913157627896 4.82865469330834 0.470013315883743 4.82865469330834 0.468913157627896 4.8334726898352 0.470013315883743 4.8334726898352 0.468913157627896 4.89296102857527 0.470013315883743 4.89296102857527 0.712399346707969 4.74882819336701 0.712399346707969 4.78528414850428 0.712399346707969 4.82865469330834 0.712399346707969 4.8334726898352 0.468913157627896 5.00627676340596 0.470013315883743 5.00627676340596 0.712399346707969 4.89296102857527 0.468913157627896 5.07483562188914 0.470013315883743 5.07483562188914 0.930803347568053 4.78528414850428 0.982038739533831 4.78528414850428 0.930803347568053 4.82865469330834 0.930803347568053 4.8334726898352 0.712399346707969 5.00627676340596 0.468913157627896 5.17908083698012 0.470013315883743 5.17908083698012 0.982038739533831 4.82865469330834 0.982038739533831 4.8334726898352 0.930803347568053 4.89296102857527 0.712399346707969 5.07483562188914 0.982038739533831 4.89296102857527 1.0958000231212 4.82865469330834 1.0958000231212 4.8334726898352 1.1454774669468 4.82865469330834 1.1454774669468 4.8334726898352 0.930803347568053 5.00627676340596 1.0958000231212 4.89296102857527 0.712399346707969 5.17908083698012 1.1454774669468 4.89296102857527 0.982038739533831 5.00627676340596 1.26361982821358 4.8334726898352 0.712399346707969 5.21605177222586 0.930803347568053 5.07483562188914 0.712399346707969 5.24221906303494 0.982038739533831 5.07483562188914 1.0958000231212 5.00627676340596 1.26361982821358 4.89296102857527 1.29625620361845 4.89296102857527 1.1454774669468 5.00627676340596 0.930803347568053 5.17908083698012 1.0958000231212 5.07483562188914 0.982038739533831 5.17908083698012 0.930803347568053 5.21605177222586 1.1454774669468 5.07483562188914 1.26361982821358 5.00627676340596 0.930803347568053 5.24221906303494 0.982038739533831 5.21605177222586 1.29625620361845 5.00627676340596 0.930803347568053 5.26274736497442 0.982038739533831 5.24221906303494 1.0958000231212 5.17908083698012 0.982038739533831 5.26274736497442 1.26361982821358 5.07483562188914 1.29625620361845 5.07483562188914 1.1454774669468 5.17908083698012 1.0958000231212 5.21605177222586 1.0958000231212 5.24221906303494 1.1454774669468 5.21605177222586 1.0958000231212 5.26274736497442 1.48580176285685 5.00627676340596 1.1454774669468 5.24221906303494 1.26361982821358 5.17908083698012 1.1454774669468 5.26274736497442 1.29625620361845 5.17908083698012 1.26361982821358 5.21605177222586 1.0958000231212 5.33509913499375 1.48580176285685 5.07483562188914 1.29625620361845 5.21605177222586 1.26361982821358 5.24221906303494 1.1454774669468 5.33509913499375 1.26361982821358 5.26274736497442 1.29625620361845 5.24221906303494 1.29625620361845 5.26274736497442 1.48580176285685 5.17908083698012 1.26361982821358 5.33509913499375 1.29625620361845 5.33509913499375 1.48580176285685 5.21605177222586 1.26361982821358 5.38864560232275 1.48580176285685 5.24221906303494 1.29625620361845 5.38864560232275 1.48580176285685 5.26274736497442 1.48580176285685 5.33509913499375 1.48580176285685 5.38864560232275 1.48580176285685 5.4430448829673 1.48580176285685 5.47625744234165 2.11462406381462 5.17908083698012 2.11462406381462 5.21605177222586 2.11462406381462 5.24221906303494 2.11462406381462 5.26274736497442 2.11462406381462 5.33509913499375 2.35030198878716 5.17908083698012 2.35030198878716 5.21605177222586 2.11462406381462 5.38864560232275 2.35030198878716 5.24221906303494 2.35030198878716 5.26274736497442 2.11462406381462 5.4430448829673 2.11462406381462 5.47625744234165 2.35030198878716 5.33509913499375 2.35030198878716 5.38864560232275 2.35030198878716 5.4430448829673 2.35030198878716 5.47625744234165 2.11462406381462 5.71029582164835 2.35030198878716 5.71029582164835 18 1 20 21 10 8 21 8 12 22 21 12 23 10 21 23 21 22 24 23 22 25 10 23 26 25 23 26 23 24 27 10 25 28 25 26 28 27 25 29 9 10 29 10 27 30 27 28 30 29 27 31 12 13 31 22 12 31 24 22 32 24 31 33 26 24 33 24 32 34 28 26 34 26 33 35 9 29 35 29 30 36 35 30 37 30 28 37 28 34 38 2 9 38 9 35 39 35 36 39 38 35 40 31 13 40 32 31 41 13 14 41 40 13 42 33 32 42 32 40 43 33 42 43 34 33 44 30 37 44 36 30 45 7 2 45 2 38 45 38 39 46 45 39 46 7 45 47 42 40 47 40 41 48 43 42 48 42 47 49 34 43 49 37 34 50 36 44 50 39 36 51 43 48 51 49 43 52 47 41 52 41 14 53 48 47 53 51 48 53 47 52 54 14 15 54 52 14 55 53 52 55 52 54 56 37 49 56 44 37 57 51 53 58 46 39 58 39 50 59 53 55 59 57 53 60 49 51 60 56 49 61 54 15 61 15 16 61 59 55 61 55 54 62 46 58 62 7 46 63 44 56 63 50 44 64 6 7 64 7 62 65 56 60 65 63 56 66 51 57 66 60 51 67 59 61 68 61 16 68 67 61 69 57 59 69 66 57 70 58 50 70 50 63 70 62 58 71 65 60 71 60 66 72 63 65 72 70 63 73 64 62 73 62 70 74 66 69 74 71 66 75 69 59 75 59 67 76 64 73 77 76 73 77 70 72 77 73 70 78 67 68 78 75 67 79 64 76 79 5 6 79 6 64 80 76 77 81 65 71 81 72 65 82 5 79 82 76 80 82 79 76 83 69 75 83 74 69 84 83 75 84 75 78 85 81 71 85 74 83 85 71 74 86 80 77 86 77 72 86 72 81 87 80 86 88 86 81 88 87 86 88 81 85 89 82 80 89 80 87 90 78 68 90 16 17 90 68 16 91 89 87 91 87 88 92 85 83 92 88 85 93 89 91 94 92 83 94 83 84 95 88 92 95 91 88 96 4 5 96 82 89 96 5 82 97 78 90 97 84 78 97 90 17 98 92 94 98 95 92 99 91 95 100 4 96 100 89 93 100 96 89 101 93 91 101 91 99 102 95 98 102 99 95 102 101 99 103 101 102 104 84 97 104 94 84 105 100 93 105 93 101 106 101 103 106 105 101 107 94 104 107 98 94 107 102 98 108 3 4 108 4 100 108 100 105 109 102 107 110 3 108 110 105 106 110 108 105 111 103 102 111 102 109 112 103 111 112 106 103 113 106 112 113 110 106 114 110 113 114 3 110 115 3 114 116 97 17 116 104 97 117 104 116 117 107 104 118 109 107 118 111 109 118 107 117 119 111 118 120 112 111 120 111 119 121 17 11 121 116 17 122 121 11 122 117 116 122 118 117 122 116 121 123 113 112 123 112 120 123 114 113 124 118 122 124 122 11 125 119 118 125 124 11 125 118 124 126 114 123 127 115 114 127 114 126 128 11 19 128 125 11 128 119 125 128 120 119 129 123 120 129 128 19 129 120 128 130 129 19 130 126 123 130 123 129 131 127 126 131 130 19 131 126 130 132 1 3 132 3 115 132 115 127 132 127 131 133 19 20 133 1 132 133 131 19 133 20 1 133 132 131 
+8 6 1 91.8613796084568
+307925.942834271 -14604.4351423643 20688.0062560445 307964.585063061 -15409.6848904203 23788.8306509614 312502.174784494 -12436.5747590776 23780.1401795566 316000 -9499.97165004752 23769.5263731487 316000 -7836.69546463392 20688 316000 -8559.03850811324 22268.6768099034 312989.586690224 -10800.7279434588 20688 310853.808002851 -12543.7529093181 20687.9999996005 5.60612813510504 12.641482539754 6.1822235177004 12.6628778521911 6.07423370992259 15.2500471465523 5.94433420095507 17.3505413496733 5.24221906303494 17.3505413496733 5.593276631995 17.3505413496733 5.41538935958513 15.536437533473 5.50745187967406 14.2968222413196 2 8 1 3 7 8 3 8 2 6 5 7 4 7 3 4 6 7 
+151 278 1 96.5870011983953
+320467.125397522 0.0410607388638593 17391.0010676384 320023.233481529 0.0410607425919161 20688.0006639233 320154.948798745 0.04106073196 18348.001502321 319996.020753432 0.04106073196 19344.0890859954 319975.717431827 0.04106073196 20016.980814192 316000 7836.69546463271 20687.9999999966 320044.362647722 1455.77767865949 20688 319993.196426326 2765.53147250402 20688 319883.538277775 3345.44111516283 20688.0000000372 319731.258727032 3768.14939797388 20688.0000001036 319498.927818808 4184.80740845445 20688.0000001229 318264.567485339 5474.44729270223 20688 316000 7485.11428493578 17391 316000 7550.33222424823 19617.0640605255 316000 7442.90448471324 18515.409155515 320467.122621291 3.12712100019346 17391 318387.426953958 5234.93120921323 17391.0000000009 319253.196371357 4361.57385708601 17391.0000000265 319887.232557886 3398.35710954724 17391.0000000096 320155.423493943 2704.95196364468 17391 320378.820629237 1620.66842662513 17391 320449.308772612 800.533540923761 17391 320443.474149923 3.12752856852783 17448.4861208223 320390.014658475 3.12879977603786 17584.8501480478 320330.715727863 3.13087282341226 17748.2453856169 320206.536570867 3.13835683433849 18147.8254709819 320431.4573151 800.595952742789 17435.9202523813 320154.943955733 3.14334000019928 18348.0001041528 320379.62836243 800.836299275537 17571.8399707631 320322.171555575 801.242455106292 17734.667262289 320076.772644117 3.15472653570885 18721.0866181002 320397.664813144 1411.28997946 17406.1652386783 320202.010715562 802.762740673725 18132.712156037 320348.973980487 1411.52915397156 17541.1511428488 320152.184522492 803.798367450246 18332.0485804964 320295.058397984 1411.99431736752 17702.7934602529 320331.626356226 1620.8665695007 17525.5863931958 319996.021794811 3.17957824437203 19344.090628085 320279.271623245 1621.28004045331 17686.6729713611 320076.890587902 806.204961961259 18703.4676769151 320182.603323441 1413.940893511 18097.6694314744 320136.153863045 1415.34373494037 18295.2906068851 320170.20620606 1623.17326276439 18080.0740419008 320125.238285676 1624.59112134531 18276.9018989065 319975.73161591 3.21432273180913 20016.9801793246 319976.167837475 3.21547122797894 20036.842350078 319999.806394711 811.584208037206 19323.4377852177 320066.340089198 1418.71718059259 18663.31941512 320057.821603407 1628.07329399152 18643.3700159863 320113.141097289 2704.2247297369 17547.9382345847 320110.672281391 2714.44343911151 17546.0909172183 319996.176092202 1426.56925462139 19277.1727514001 319981.965994554 819.304386365989 19992.7952348714 319982.451410006 819.562824967608 20012.5501973577 319990.661691752 1636.36509713249 19254.4251688791 320025.839548839 2703.49292694855 17930.511410899 320023.597700093 2713.66283440635 17928.5357350368 319990.319725557 2703.72010495904 18121.5945248148 319988.175675543 2713.8659733513 18119.551537294 319923.145756357 3312.75368379939 17414.4588628261 319982.850331662 1438.26208225364 19939.4655726915 319983.423723516 1438.65976353469 19959.0068404141 319938.066555746 2705.26482387738 18476.8783044462 319936.078054919 2715.36740366862 18474.7054510656 319979.255940593 1648.94696222677 19913.5055644782 319979.865743413 1649.37812616156 19932.9499144217 319849.402621633 3308.01328958415 17788.4728117111 319816.07574116 3393.21496972285 17763.8239164044 319819.682773944 3306.22918464052 17975.1075132811 319787.143909097 3391.0360035178 17949.7560243113 320032.850328707 1453.4530239142 20599.4815850472 319889.523528576 2711.3474695651 19068.1634582962 319887.721544128 2721.38481073681 19065.7639252958 320029.85181852 1665.52537719721 20570.2084993703 319776.572418449 3304.0739987336 18321.8696182246 319645.266343016 3756.03466951341 17643.8099234229 319745.258089387 3388.14449520344 18295.1839218715 319619.509562419 3751.81004374452 17826.5406186556 319889.339494559 2723.39852254302 19704.859551563 319887.641963638 2733.38038572344 19702.2065915864 319890.144679222 2723.8486429015 19723.6326885807 319888.448749316 2733.82916893931 19720.9721724666 319582.489450004 3745.08355622217 18165.9268949447 319738.730700935 3304.30054533226 18898.4295119015 319359.779974472 4215.83210099615 17457.3159696837 319708.792838737 3387.16982504566 18869.4673544637 319337.622703677 4208.21139502124 17635.5927592505 319232.63756447 4352.04742461182 17567.8332300595 319942.286331792 2741.90578354694 20338.732024341 319940.596550144 2751.85421120273 20335.8232592361 319551.270918564 3737.77681925242 18729.9962711283 319305.953876432 4195.09016954698 17966.6456415738 319744.060436247 3310.82166536035 19518.8323363071 319953.452609937 2744.93549347337 20423.7273592463 319951.756616063 2754.88147944371 20420.7843595443 319744.936054581 3311.12536242904 19537.1219678088 319714.725219238 3392.4884089315 19487.3846059651 319715.605132846 3392.75878462402 19505.6009325203 319202.476472564 4336.59784752863 17896.1588747301 319559.064945674 3736.61066323966 19336.8708666185 319279.957425466 4177.11095888871 18516.807263939 319559.94175736 3736.69831786805 19354.7630398061 319796.501995069 3325.06053711282 20136.4008178388 319807.149177861 3327.63730324653 20219.2237443464 319766.89054672 3405.69334649814 20102.494094113 319177.813598549 4314.7229424255 18441.7984005812 319777.43478506 3408.14788185883 20184.9912898481 319846.308720339 3336.8714675674 20479.7599080816 319816.168611793 3417.02772876224 20444.512393656 319609.313594454 3744.02199528365 19941.1500043114 319288.482925425 4164.78505900426 19108.8583566305 319289.306450754 4164.55346390105 19126.3183684737 319619.317461268 3745.76823675271 20022.2190297017 319186.213241827 4298.29826607793 19029.0648337661 319187.009147392 4297.94885320826 19046.3858568156 319655.913668712 3752.54795216085 20277.299034398 319690.832237634 3759.45569117113 20481.2178861379 319334.594777522 4161.8778325085 19698.78391777 319343.678476728 4162.32617619685 19777.9730228396 319720.594022069 3765.60810976893 20635.207981023 319230.645585122 4291.55918096331 19614.3886780545 319239.38727674 4291.521113585 19692.9772986248 319376.815844669 4165.18638654625 20027.226018866 318368.929562403 5185.33301389957 17909.1287580307 319271.268420198 4292.90383567983 19940.3723186166 319408.351915085 4169.16048047368 20226.5942631431 319435.193447818 4173.22933677414 20377.2193698657 319301.602890908 4295.76140424792 20138.2931036392 319444.988804124 4174.84363461982 20428.7964958399 319327.420051557 4299.02988082057 20287.8499336451 319336.841476136 4300.37929871994 20339.0666092121 318373.653068287 5140.18749848272 18467.3175082825 318374.186234249 5139.01476291006 18483.7945996303 317969.541557865 5562.25589369799 17679.5402519593 318404.373405418 5106.71555281061 19024.7242704348 317972.255705988 5506.56837211611 18227.8685423711 317972.663079746 5505.10061451085 18244.056120236 318410.517849133 5103.28892078819 19099.6739018024 318433.053917814 5094.38160417539 19335.8159060597 318454.630332101 5089.46302811808 19524.9773838763 317996.621051077 5463.75484517403 18775.6046681347 318473.069200107 5087.15494419991 19668.0741300744 318001.581243246 5459.18362107145 18849.2798129031 318479.812596041 5086.65807142143 19717.1120420883 318019.873679825 5446.86781806258 19081.4606599575 318517.089373403 5086.56719201008 19963.8966387424 318037.487184538 5439.45188049205 19267.5178012167 318052.592927628 5435.40369025919 19408.3131453596 318058.127276282 5434.34161087744 19456.5725572722 318088.7976194 5431.66186959152 19699.5260255799 318236.139508317 5463.20751287568 20555.9908555068 4.12238592198063 1.0981161730079e-005 4.66066861630132 1.05429423539194e-005 4.28353900377763 1.09244666996163e-005 4.44541991842472 1.07998916762048e-005 4.55324269589555 1.06830958943693e-005 5.24221906303494 3 4.67512213491715 0.386951903129763 4.72070555953133 0.775012363057934 4.75728952629506 0.97197103323405 4.79453454783475 1.13358006356016 4.84253588202024 1.31349376557639 5.04033049009853 1.98109797124912 4.55641924184057 3 5.01361912263582 3 4.78501918223819 3 4.12238595148847 0.000836340459694936 4.34466123934778 1.78805797863436 4.250415667877 1.37335215455579 4.18344127004293 1.00171785505597 4.15566978302554 0.771778573323796 4.13229655470114 0.446654065817418 4.12453530472634 0.216727939660852 4.13229655470114 0.000836340459694936 4.15566978302554 0.000836340459694936 4.18344127004293 0.000836340459694936 4.250415667877 0.000836340459694936 4.13229655470114 0.216727939660852 4.28353900377763 0.000836340459694936 4.15566978302554 0.216727939660852 4.18344127004293 0.216727939660852 4.34466123934778 0.000836340459694936 4.13229655470114 0.386951903129763 4.250415667877 0.216727939660852 4.15566978302554 0.386951903129763 4.28353900377763 0.216727939660852 4.18344127004293 0.386951903129763 4.15566978302554 0.446654065817418 4.44541991842472 0.000836340459694936 4.18344127004293 0.446654065817418 4.34466123934778 0.216727939660852 4.250415667877 0.386951903129763 4.28353900377763 0.386951903129763 4.250415667877 0.446654065817418 4.28353900377763 0.446654065817418 4.55324269589555 0.000836340459694936 4.55641924184057 0.000836340459694936 4.44541991842472 0.216727939660852 4.34466123934778 0.386951903129763 4.34466123934778 0.446654065817418 4.18344127004293 0.771778573323796 4.18344127004293 0.775012363057934 4.44541991842472 0.386951903129763 4.55324269589555 0.216727939660852 4.55641924184057 0.216727939660852 4.44541991842472 0.446654065817418 4.250415667877 0.771778573323796 4.250415667877 0.775012363057934 4.28353900377763 0.771778573323796 4.28353900377763 0.775012363057934 4.18344127004293 0.97197103323405 4.55324269589555 0.386951903129763 4.55641924184057 0.386951903129763 4.34466123934778 0.771778573323796 4.34466123934778 0.775012363057934 4.55324269589555 0.446654065817418 4.55641924184057 0.446654065817418 4.250415667877 0.97197103323405 4.250415667877 1.00171785505597 4.28353900377763 0.97197103323405 4.28353900377763 1.00171785505597 4.66066861630132 0.386951903129763 4.44541991842472 0.771778573323796 4.44541991842472 0.775012363057934 4.66066861630132 0.446654065817418 4.34466123934778 0.97197103323405 4.250415667877 1.13358006356016 4.34466123934778 1.00171785505597 4.28353900377763 1.13358006356016 4.55324269589555 0.771778573323796 4.55324269589555 0.775012363057934 4.55641924184057 0.771778573323796 4.55641924184057 0.775012363057934 4.34466123934778 1.13358006356016 4.44541991842472 0.97197103323405 4.250415667877 1.31349376557639 4.44541991842472 1.00171785505597 4.28353900377763 1.31349376557639 4.28353900377763 1.37335215455579 4.66066861630132 0.771778573323796 4.66066861630132 0.775012363057934 4.44541991842472 1.13358006356016 4.34466123934778 1.31349376557639 4.55324269589555 0.97197103323405 4.67512213491715 0.771778573323796 4.67512213491715 0.775012363057934 4.55641924184057 0.97197103323405 4.55324269589555 1.00171785505597 4.55641924184057 1.00171785505597 4.34466123934778 1.37335215455579 4.55324269589555 1.13358006356016 4.44541991842472 1.31349376557639 4.55641924184057 1.13358006356016 4.66066861630132 0.97197103323405 4.67512213491715 0.97197103323405 4.66066861630132 1.00171785505597 4.44541991842472 1.37335215455579 4.67512213491715 1.00171785505597 4.72070555953133 0.97197103323405 4.72070555953133 1.00171785505597 4.66066861630132 1.13358006356016 4.55324269589555 1.31349376557639 4.55641924184057 1.31349376557639 4.67512213491715 1.13358006356016 4.55324269589555 1.37335215455579 4.55641924184057 1.37335215455579 4.72070555953133 1.13358006356016 4.75728952629506 1.13358006356016 4.66066861630132 1.31349376557639 4.67512213491715 1.31349376557639 4.78501918223819 1.13358006356016 4.66066861630132 1.37335215455579 4.67512213491715 1.37335215455579 4.72070555953133 1.31349376557639 4.44541991842472 1.78805797863436 4.72070555953133 1.37335215455579 4.75728952629506 1.31349376557639 4.78501918223819 1.31349376557639 4.75728952629506 1.37335215455579 4.79453454783475 1.31349376557639 4.78501918223819 1.37335215455579 4.79453454783475 1.37335215455579 4.55324269589555 1.78805797863436 4.55641924184057 1.78805797863436 4.44541991842472 1.98109797124912 4.66066861630132 1.78805797863436 4.55324269589555 1.98109797124912 4.55641924184057 1.98109797124912 4.67512213491715 1.78805797863436 4.72070555953133 1.78805797863436 4.75728952629506 1.78805797863436 4.66066861630132 1.98109797124912 4.78501918223819 1.78805797863436 4.67512213491715 1.98109797124912 4.79453454783475 1.78805797863436 4.72070555953133 1.98109797124912 4.84253588202024 1.78805797863436 4.75728952629506 1.98109797124912 4.78501918223819 1.98109797124912 4.79453454783475 1.98109797124912 4.84253588202024 1.98109797124912 5.01361912263582 1.98109797124912 6 14 12 23 22 16 23 16 1 24 23 1 25 1 3 25 24 1 26 25 3 27 22 23 27 23 24 28 26 3 29 27 24 30 29 24 30 24 25 31 3 4 31 28 3 32 21 22 32 22 27 33 25 26 33 30 25 34 27 29 34 32 27 35 33 26 35 26 28 36 29 30 36 34 29 37 20 21 37 21 32 37 32 34 38 31 4 39 34 36 39 20 37 39 37 34 40 28 31 40 35 28 40 31 38 41 30 33 41 36 30 42 33 35 42 41 33 43 36 41 43 39 36 44 43 41 44 41 42 45 4 5 45 38 4 46 5 2 46 45 5 47 38 45 47 40 38 48 40 47 48 42 35 48 35 40 49 44 42 49 42 48 50 20 39 51 20 50 52 48 47 53 45 46 53 47 45 54 2 7 54 46 2 54 53 46 55 49 48 55 48 52 56 51 50 56 50 39 56 39 43 57 51 56 58 56 43 58 57 56 58 43 44 59 57 58 60 19 20 60 20 51 61 52 47 61 47 53 62 53 54 62 61 53 63 49 55 63 44 49 63 58 44 63 59 58 64 59 63 65 55 52 65 52 61 65 61 62 66 65 62 67 51 57 67 60 51 68 19 60 68 60 67 69 57 59 69 67 57 70 68 67 70 67 69 71 54 7 71 62 54 72 63 55 72 55 65 72 64 63 73 64 72 74 7 8 74 71 7 74 66 62 74 62 71 75 59 64 75 69 59 75 70 69 75 64 73 76 19 68 77 70 75 78 68 70 78 76 68 79 72 65 80 73 72 80 72 79 81 79 65 81 80 79 81 65 66 81 66 74 82 80 81 83 70 77 83 78 70 84 73 80 84 75 73 85 18 19 85 19 76 86 77 75 86 75 84 87 85 76 87 76 78 88 17 18 88 18 85 88 85 87 89 81 74 90 82 81 90 81 89 91 77 86 91 83 77 92 87 78 92 83 91 92 78 83 93 80 82 93 84 80 94 74 8 94 89 74 94 90 89 95 90 94 95 94 8 96 93 82 96 82 90 97 93 96 97 86 84 97 84 93 98 97 96 99 17 88 99 88 87 99 87 92 100 91 86 100 86 97 100 97 98 101 92 91 101 91 100 101 99 92 102 100 98 103 90 95 103 96 90 103 98 96 104 103 95 105 98 103 106 17 99 106 99 101 107 103 104 107 105 103 108 8 9 108 95 8 108 104 95 108 107 104 109 108 9 109 107 108 110 102 98 110 98 105 111 101 100 111 100 102 111 106 101 112 111 102 113 110 105 113 105 107 114 111 112 114 106 111 115 114 112 116 113 107 116 107 109 117 116 109 117 109 9 118 102 110 118 112 102 119 110 113 119 118 110 120 9 10 120 117 9 121 112 118 121 115 112 122 118 119 122 121 118 123 116 117 123 119 113 123 122 119 123 113 116 124 17 106 124 106 114 125 122 123 126 123 117 126 117 120 127 126 120 128 125 123 128 123 126 128 126 127 129 10 11 129 120 10 129 127 120 130 128 127 130 127 129 131 129 11 131 130 129 132 124 114 132 114 115 133 132 115 134 13 17 134 124 132 134 17 124 135 133 115 135 115 121 136 13 134 136 132 133 136 134 132 137 13 136 137 136 133 138 135 121 138 121 122 139 122 125 139 125 128 139 138 122 140 139 128 141 133 135 141 13 137 141 137 133 142 128 130 142 140 128 143 15 13 143 135 138 143 13 141 143 141 135 144 130 131 144 142 130 145 139 140 145 138 139 145 15 143 145 143 138 146 131 11 146 11 12 146 144 131 147 15 145 147 145 140 147 140 142 148 147 142 148 15 147 149 142 144 149 144 146 149 148 142 149 15 148 150 14 15 150 15 149 150 149 146 151 146 12 151 150 146 151 14 150 151 12 14 
+9 7 1 104.611267337447
+307925.973440302 14604.2958348035 20688.0235446493 307904.948497207 14218.5045578902 17391.0000223844 316000 7485.11428493578 17391 311957.36614133 11187.5680422803 17391 316000 7836.69546463271 20687.9999999965 316000 7442.90448471324 18515.409155515 316000 7550.33222424823 19617.0640605255 313191.59263384 10621.2168054632 20688 311208.405776928 12272.3235346948 20688 12.6415305104924 5.60612573780297 12.6296982582883 5.00534363695293 17.3505413496733 4.55641924184057 14.9325502538492 4.81604741012963 17.3505413496733 5.24221906303344 17.3505413496733 4.78501918223819 17.3505413496733 5.01361912263582 15.6557266679972 5.40549462611673 14.5000648819776 5.49358866346311 9 1 2 9 2 4 8 9 4 6 4 3 7 4 6 7 8 4 5 8 7 
+9 7 1 112.154364325028
+307964.469558417 15409.7734874065 23788.9591780442 307925.8018293 14604.5293932801 20688.0000004931 316000 7836.69546463271 20687.9999999966 311661.828196182 11915.6378238231 20688 313917.030298943 9953.89695457948 20688 316000 9499.9729861176 23769.528316916 316000 8287.05842911125 21750.5222253613 316000 8855.30753603589 22777.9637401897 312502.203483842 12436.7588939963 23780.5652747058 12.6628176644904 6.1822479302895 12.6414025162435 5.60613001417962 17.3505413496733 5.24221906303494 14.7612582340304 5.47511062452639 16.0870818901182 5.36802600043518 17.3505413496733 5.94433466832183 17.3505413496733 5.47625759812957 17.3505413496733 5.7102961332257 15.2500637207519 6.07432231313464 4 1 2 9 4 5 9 1 4 7 5 3 8 5 7 6 9 5 6 5 8 
+178 331 1 64.5287785187472
+320023.238828406 0.0410607425918732 20688.000015064 321186.316854091 0.0410607322220014 23752.7065407115 320236.409499229 0.04106073196 21739.3738588042 320554.416097269 0.04106073196 22613.0336415024 320857.529103008 0.04106073196 23216.4595779815 318204.686108146 7327.42064239695 23761.6627563784 321240.367552707 1696.15779612447 23753.1627980478 321207.408025652 3362.57288300682 23753.0593924461 321092.738475885 3896.93838366809 23753.5084622686 320905.407308529 4364.4856801984 23755.3941464548 320582.366378957 4883.58816382858 23758.2353193284 319451.325634475 6091.53803802708 23760.4561489148 316092.13492912 9412.51880139814 23769.0967131488 316000 9499.97298611761 23769.528316916 316000 7836.69546463271 20687.9999999966 316000 8559.03907722345 22268.6778358157 317786.218491196 5935.51351845546 20688 318859.084806481 4925.53822980876 20688.0000000017 319299.517399768 4454.10171997011 20688.0000000852 319583.357406698 4050.91155922 20688.0000001263 319787.817362946 3634.17252996008 20688.000000084 319929.533393279 3156.34508250228 20688.0000000126 320045.494368117 1687.34497526493 20688 317932.194646845 6060.70364410348 21380.0837112561 318681.103298817 5506.69466119318 21753.4170378154 318778.790444377 5568.0346812956 22050.287478049 317894.90391506 6026.92635030294 21218.3006370655 317528.413110705 6286.3768234188 20933.0466791371 317864.351068603 6000.5149563829 21080.2876735547 319101.059810865 5798.84874727744 22922.2900903104 319649.687632959 5274.7100184272 22942.5087982165 319815.737811989 5370.2660356626 23300.4772965554 318964.263390667 5696.02599363187 22568.1429110702 317553.597466322 6314.95414583897 21070.3201796822 318003.72985792 6129.66486712508 21673.4954134651 317584.344625371 6351.41350497949 21231.2662695859 318066.817579891 6194.46962562727 21917.3259298114 318864.808939755 5625.65126461647 22296.8363934152 319285.257245922 5947.5917169453 23372.9216476892 317643.351368095 6425.61767253594 21523.2467145007 318139.86117864 6273.62596869031 22185.7752517252 317695.413472606 6495.13272786698 21765.9784786657 318240.49355223 6389.23499019372 22536.3547519865 317755.716039083 6579.82319989687 22033.3206101402 317838.834659965 6703.16893324598 22382.6296105317 318376.275217138 6556.30563124169 22982.6022100446 318498.964405357 6717.74537610936 23366.3805138251 317951.053514814 6880.83582800823 22827.5784558376 316061.856855879 7776.86564071691 20707.0104393248 320113.531501181 1565.45658660915 21092.8726517132 318052.517691253 7051.96553460155 23210.560918067 320110.873820433 1699.67284395258 21071.9991715533 320162.987304914 1573.07186038976 21321.2275234451 316064.186543374 7881.84668121142 20994.1508603847 320160.032980799 1707.76840195302 21299.6056726902 316066.241324888 7978.17964390479 21233.3810764765 316068.620664456 8093.5584312222 21497.5427146854 320230.80408743 1582.665024885 21587.3086415956 320239.419064221 1583.83314343714 21618.2593539244 316071.899296156 8258.56353699803 21843.9978986549 320227.370485132 1717.99079744883 21564.8224872697 316076.324431087 8491.2981927303 22287.9711495974 320235.920230655 1719.23722936845 21595.6733784373 320327.480140937 1595.30533858385 21907.6292680222 316080.324443593 8711.00924483166 22673.088108841 316086.322004517 9056.95757061627 23233.4029899144 320323.273856057 1731.49640975991 21884.1193270689 320486.840392923 1614.59442867981 22343.6298269364 320542.075940758 1620.98568307716 22476.4187671426 320481.224202257 1752.17406180968 22318.7693782018 320535.944597164 1759.04144349468 22451.1598548477 319951.156039732 3078.04387810386 20717.8571040338 320829.396286899 1652.77929461142 23069.7340214808 320874.806695797 1657.65534570619 23152.6717779417 319995.176428321 3088.2689312356 20934.8428646155 320820.449258897 1793.30152290249 23042.7889274979 319973.166261962 3166.54143272122 20904.1805686169 320865.399813917 1798.56756270259 23125.5039818978 320054.670814612 3101.75757377353 21187.8442746949 320062.176643264 3103.442313668 21217.2878673311 320032.018526109 3179.96363799266 21156.3228016329 320039.440609688 3181.64429928615 21185.6677070503 321139.778013881 1685.66245311496 23597.9036100772 320138.41641986 3120.43107586099 21492.7424173605 321127.636441766 1828.85891017463 23569.5967827995 320114.804331672 3198.63480963864 21460.2141872184 319823.500590297 3562.19146319369 20725.311124329 319878.651549161 3574.60301430979 20972.8783986891 319885.595516438 3576.18520087007 21001.6987330136 320274.851194139 3150.60274569447 21908.5216934487 319842.460728631 3646.29818052596 20934.6244187987 319849.306705434 3647.84646135599 20963.3449914262 320249.591357963 3228.96030638902 21874.6844741305 320321.830294473 3160.99116338906 22035.3732561138 320295.987008759 3239.43621494114 22001.1542940504 319956.00005515 3592.46435421342 21271.4275941456 319918.703163859 3663.8482230614 21232.1595616595 319635.980069219 3979.80189339322 20735.419163047 319642.321058716 3981.12533150161 20763.6594362965 320081.593492107 3622.51486713752 21678.9846534881 320564.628272837 3215.04616649731 22603.7234635056 320042.454259616 3693.63215875143 21638.4111542119 320124.760703079 3633.12206301676 21803.4461433971 320602.831557403 3223.62285861539 22683.381856584 320535.689766821 3294.1474765384 22567.9138993544 319706.555680076 3995.21649197835 21028.0798541364 320573.39749275 3302.8516006075 22647.3649858052 320084.979903525 3704.19917193844 21762.4950260195 319652.333171678 4066.20915667717 20979.667847332 320825.166547621 3273.98670160013 23111.8871141273 319820.979680804 4022.85587524853 21428.0835681824 320792.820088269 3354.05166018782 23074.8170879713 320347.476379757 3689.83028832338 22361.8814053954 320909.349225708 3293.26955740804 23261.6757067162 319764.587938556 4093.20075867767 21378.2979315843 319860.279232988 4032.96917413695 21550.3667837882 320382.479692677 3699.00389370917 22440.2525220935 320304.348094171 3760.9980135203 22319.3742737221 320875.890631664 3373.68688320706 23224.2610562235 319803.141579824 4103.16152883984 21500.1865869932 320338.821585267 3770.22086572213 22397.5445647967 321011.786891453 3316.9023225853 23436.7442984347 319328.854765776 4425.41169783826 20711.0204835222 320976.970092097 3397.77090021628 23398.9413419769 320586.062770209 3753.53931966911 22862.2311171923 320539.312639835 3825.17811286198 22818.5080709147 320062.929967287 4089.05896703761 22099.863696944 320663.103979943 3774.66419905976 23009.8868324811 319429.215553611 4448.26141963753 21102.5911461857 320094.770271875 4098.36164131566 22177.0854795755 320001.950165682 4158.86640785408 22048.0734364183 319398.820618987 4476.63410858671 21078.9911538463 320615.180799011 3846.51337621412 22965.8327469687 319463.700516306 4457.19850239834 21222.4579610828 320033.187860043 4168.15561968519 22125.0892197459 320756.831147859 3800.70257054246 23182.5520952988 319432.959706532 4485.47484408636 21198.6957358171 320707.479802701 3872.83926632418 23138.1249656682 320279.939686803 4154.52061189113 22593.2658551404 320935.776572928 3851.41011400626 23494.7485161884 320214.860062239 4224.41719864848 22540.2330376782 320883.6976672 3924.18053416448 23449.6807185755 320350.011259392 4176.58649438547 22739.0330843803 319641.662300797 4509.90687054099 21762.1283619515 320283.611792214 4246.58946503739 22685.6632310106 319609.156073529 4537.88427406122 21737.708808614 319669.642630735 4518.99202420741 21838.0967923865 320435.262363124 4203.97234850585 22909.5700665979 319636.861299558 4546.94556099901 21813.5936737393 320367.260008578 4274.14655473865 22855.8203276229 318886.794802936 4933.42175781979 20805.1942477681 320598.043230178 4257.795719808 23218.1061696843 319832.454381436 4575.09110061451 22247.9804128086 320526.989592973 4328.40864145577 23163.7017811332 319798.082786473 4602.99439539739 22223.0581531865 319894.103463656 4597.58378552786 22391.7022568375 320740.855437377 4306.57068668534 23473.9768850426 319859.133900905 4625.5010509271 22366.6439763212 320667.135597443 4377.67407673498 23419.0530358453 319969.13452202 4625.76660141855 22559.9334216904 319933.439994609 4653.72120629595 22534.7217608789 319033.574959813 4980.92542277319 21334.0771857802 319056.704538238 4989.59525823546 21408.6754043017 320112.481633255 4681.8529448328 22864.4903218736 320075.410067668 4709.93305466489 22839.0135236505 320238.330523199 4733.31217410754 23117.1923442855 319191.502885056 5044.81889119472 21811.688171146 320200.058201709 4761.55339704126 23091.5035608237 319242.627132771 5067.55308667271 21953.179995174 320383.437018795 4795.03157361788 23395.1884642043 319304.902431274 5096.38242291792 22118.8955321443 318459.37062337 5388.28813216838 20978.5022664441 320343.789321209 4823.51009574189 23369.2693845624 318478.220455745 5396.91837950794 21052.0607733391 319424.029544618 5154.64165171982 22419.0989715853 318588.284978385 5453.09305324865 21449.8398064872 319528.764325109 5208.88841500434 22668.3129102919 318630.107868881 5476.62537953709 21589.6268551732 4.66066861627364 1.05429473742277e-005 5.17908083949119 9.6252924013399e-006 4.83108865549559 1.0278801480063e-005 4.97735345022551 1.00195004103412e-005 5.08241451218191 9.81832175174776e-006 5.81238440895918 2.35018289333888 5.20806417322807 0.414130104261995 5.30468759201682 0.877861025429611 5.35715165805044 1.05185267177276 5.41554001754554 1.22135187216447 5.49287115526688 1.42717867932867 5.68162590205254 1.9207416707023 5.94003576959449 2.97499311156989 5.94433466832183 3 5.24221906303344 3 5.59327686567764 3 5.09739741621206 2.21035556138763 4.9543329152774 1.68712544020903 4.87980321288109 1.44185284546968 4.82590813862084 1.25351636388256 4.7815792185729 1.08035034150741 4.74379460688466 0.905176963032726 4.68046468199539 0.451854389812949 5.24221906303344 2.21035556138763 5.24221906303344 1.9207416707023 5.30468759201682 1.9207416707023 5.20806417322807 2.21035556138763 5.17908083949119 2.35018289333888 5.17908083949119 2.21035556138763 5.49287115526688 1.9207416707023 5.41554001754554 1.68712544020903 5.49287115526688 1.68712544020903 5.41554001754554 1.9207416707023 5.20806417322807 2.35018289333888 5.30468759201682 2.21035556138763 5.24221906303344 2.35018289333888 5.35715165805044 2.21035556138763 5.35715165805044 1.9207416707023 5.59327686567764 1.9207416707023 5.30468759201682 2.35018289333888 5.41554001754554 2.21035556138763 5.35715165805044 2.35018289333888 5.49287115526688 2.21035556138763 5.41554001754554 2.35018289333888 5.49287115526688 2.35018289333888 5.59327686567764 2.21035556138763 5.68162590205254 2.21035556138763 5.59327686567764 2.35018289333888 5.24221906303344 2.97499311156989 4.74379460688466 0.414130104261995 5.68162590205254 2.35018289333888 4.74379460688466 0.451854389812949 4.7815792185729 0.414130104261995 5.30468759201682 2.97499311156989 4.7815792185729 0.451854389812949 5.35715165805044 2.97499311156989 5.41554001754554 2.97499311156989 4.82590813862084 0.414130104261995 4.83108865549559 0.414130104261995 5.49287115526688 2.97499311156989 4.82590813862084 0.451854389812949 5.59327686567764 2.97499311156989 4.83108865549559 0.451854389812949 4.87980321288109 0.414130104261995 5.68162590205254 2.97499311156989 5.81238440895918 2.97499311156989 4.87980321288109 0.451854389812949 4.9543329152774 0.414130104261995 4.97735345022551 0.414130104261995 4.9543329152774 0.451854389812949 4.97735345022551 0.451854389812949 4.74379460688466 0.877861025429611 5.08241451218191 0.414130104261995 5.09739741621206 0.414130104261995 4.7815792185729 0.877861025429611 5.08241451218191 0.451854389812949 4.7815792185729 0.905176963032726 5.09739741621206 0.451854389812949 4.82590813862084 0.877861025429611 4.83108865549559 0.877861025429611 4.82590813862084 0.905176963032726 4.83108865549559 0.905176963032726 5.17908083949119 0.414130104261995 4.87980321288109 0.877861025429611 5.17908083949119 0.451854389812949 4.87980321288109 0.905176963032726 4.7815792185729 1.05185267177276 4.82590813862084 1.05185267177276 4.83108865549559 1.05185267177276 4.9543329152774 0.877861025429611 4.82590813862084 1.08035034150741 4.83108865549559 1.08035034150741 4.9543329152774 0.905176963032726 4.97735345022551 0.877861025429611 4.97735345022551 0.905176963032726 4.87980321288109 1.05185267177276 4.87980321288109 1.08035034150741 4.82590813862084 1.22135187216447 4.83108865549559 1.22135187216447 4.9543329152774 1.05185267177276 5.08241451218191 0.877861025429611 4.9543329152774 1.08035034150741 4.97735345022551 1.05185267177276 5.09739741621206 0.877861025429611 5.08241451218191 0.905176963032726 4.87980321288109 1.22135187216447 5.09739741621206 0.905176963032726 4.97735345022551 1.08035034150741 4.87980321288109 1.25351636388256 5.17908083949119 0.877861025429611 4.9543329152774 1.22135187216447 5.17908083949119 0.905176963032726 5.08241451218191 1.05185267177276 5.20806417322807 0.877861025429611 4.9543329152774 1.25351636388256 4.97735345022551 1.22135187216447 5.09739741621206 1.05185267177276 5.08241451218191 1.08035034150741 5.20806417322807 0.905176963032726 4.97735345022551 1.25351636388256 5.09739741621206 1.08035034150741 5.24221906303344 0.877861025429611 4.87980321288109 1.42717867932867 5.24221906303344 0.905176963032726 5.17908083949119 1.05185267177276 5.17908083949119 1.08035034150741 5.08241451218191 1.22135187216447 5.20806417322807 1.05185267177276 4.9543329152774 1.42717867932867 5.09739741621206 1.22135187216447 5.08241451218191 1.25351636388256 4.9543329152774 1.44185284546968 5.20806417322807 1.08035034150741 4.97735345022551 1.42717867932867 5.09739741621206 1.25351636388256 5.24221906303344 1.05185267177276 4.97735345022551 1.44185284546968 5.24221906303344 1.08035034150741 5.17908083949119 1.22135187216447 5.30468759201682 1.05185267177276 5.17908083949119 1.25351636388256 5.30468759201682 1.08035034150741 5.20806417322807 1.22135187216447 5.08241451218191 1.42717867932867 5.20806417322807 1.25351636388256 5.08241451218191 1.44185284546968 5.09739741621206 1.42717867932867 5.24221906303344 1.22135187216447 5.09739741621206 1.44185284546968 5.24221906303344 1.25351636388256 4.97735345022551 1.68712544020903 5.30468759201682 1.22135187216447 5.17908083949119 1.42717867932867 5.30468759201682 1.25351636388256 5.17908083949119 1.44185284546968 5.20806417322807 1.42717867932867 5.35715165805044 1.22135187216447 5.20806417322807 1.44185284546968 5.35715165805044 1.25351636388256 5.24221906303344 1.42717867932867 5.24221906303344 1.44185284546968 5.08241451218191 1.68712544020903 5.09739741621206 1.68712544020903 5.30468759201682 1.42717867932867 5.30468759201682 1.44185284546968 5.35715165805044 1.42717867932867 5.17908083949119 1.68712544020903 5.35715165805044 1.44185284546968 5.20806417322807 1.68712544020903 5.41554001754554 1.42717867932867 5.24221906303344 1.68712544020903 5.08241451218191 1.9207416707023 5.41554001754554 1.44185284546968 5.09739741621206 1.9207416707023 5.30468759201682 1.68712544020903 5.17908083949119 1.9207416707023 5.35715165805044 1.68712544020903 5.20806417322807 1.9207416707023 24 25 26 24 27 25 28 17 29 30 31 32 30 33 31 34 29 27 34 27 24 34 28 29 35 24 26 36 34 24 36 24 35 37 26 38 37 38 33 37 35 26 39 30 32 39 32 12 40 36 35 41 37 33 42 37 41 42 35 37 42 40 35 43 33 30 43 41 33 44 42 41 45 41 43 45 44 41 46 30 39 46 43 30 46 45 43 47 12 6 47 39 12 47 46 39 48 45 46 49 15 17 49 28 34 50 1 3 49 34 36 50 23 1 49 17 28 51 47 6 51 46 47 52 23 50 51 48 46 53 50 3 54 15 49 54 36 40 54 40 42 54 49 36 55 50 53 55 52 50 56 15 54 56 54 42 57 16 15 58 53 3 57 42 44 57 15 56 59 58 3 57 56 42 60 44 45 60 16 57 60 57 44 61 55 53 62 60 45 61 53 58 62 45 48 62 16 60 63 58 59 63 61 58 64 3 4 65 48 51 65 16 62 65 62 48 66 6 13 66 13 14 66 14 16 66 16 65 64 59 3 66 51 6 66 65 51 67 59 64 67 63 59 68 64 4 69 68 4 70 67 64 70 64 68 71 68 69 71 70 68 72 22 23 72 23 52 73 4 5 73 69 4 74 5 2 74 73 5 75 52 55 75 72 52 76 71 69 76 69 73 77 22 72 77 72 75 78 73 74 78 76 73 79 55 61 79 75 55 80 61 63 80 79 61 81 77 75 81 75 79 82 79 80 82 81 79 83 2 7 83 74 2 84 63 67 84 80 63 85 78 74 85 7 8 85 83 7 85 74 83 86 80 84 86 82 80 87 21 22 87 22 77 88 87 77 88 77 81 88 21 87 89 81 82 89 82 86 89 88 81 90 84 67 90 67 70 91 21 88 92 88 89 92 91 88 93 86 84 93 84 90 94 90 70 94 70 71 94 71 76 95 93 90 95 90 94 96 89 86 96 92 89 97 92 96 98 20 21 98 21 91 98 91 92 99 20 98 99 92 97 99 98 92 100 86 93 100 96 86 100 97 96 101 94 76 102 97 100 103 93 95 103 100 93 103 102 100 104 76 78 104 78 85 104 101 76 105 95 94 105 94 101 105 103 95 106 99 97 107 101 104 107 105 101 108 102 103 109 20 99 109 99 106 110 104 85 111 97 102 111 106 97 112 104 110 112 107 104 113 103 105 113 108 103 114 110 85 115 106 111 115 109 106 116 111 102 116 102 108 117 107 112 117 113 105 117 105 107 118 116 108 118 108 113 119 110 114 119 112 110 120 111 116 120 115 111 121 113 117 121 118 113 122 119 114 122 114 85 122 85 8 123 19 20 123 20 109 124 119 122 124 122 8 125 121 117 125 117 112 126 121 125 127 116 118 128 112 119 128 119 124 128 126 125 128 125 112 129 109 115 129 123 109 129 19 123 130 118 121 130 127 118 130 121 126 131 120 116 131 116 127 132 18 19 132 19 129 133 126 128 134 115 120 134 120 131 134 129 115 134 132 129 135 127 130 135 131 127 136 128 124 136 133 128 137 132 134 138 133 136 139 130 126 140 8 9 140 124 8 140 136 124 140 138 136 141 135 130 141 130 139 142 140 9 142 138 140 143 139 126 143 126 133 143 133 138 144 134 131 144 137 134 145 139 143 145 141 139 146 137 144 147 144 131 147 135 141 147 131 135 147 146 144 148 143 138 149 146 147 150 145 143 150 143 148 151 18 132 151 132 137 151 137 146 152 148 138 152 138 142 153 147 141 153 141 145 153 149 147 154 150 148 154 148 152 155 149 153 156 153 145 156 155 153 156 145 150 157 9 10 157 152 142 157 142 9 158 155 156 159 154 152 159 152 157 159 157 10 160 150 154 160 156 150 160 158 156 161 158 160 162 151 146 163 149 155 163 162 146 163 146 149 164 161 160 164 160 154 165 161 164 166 164 154 166 165 164 166 154 159 167 163 155 168 165 166 169 155 158 169 158 161 169 167 155 170 10 11 170 159 10 170 166 159 170 168 166 171 169 161 172 18 151 172 17 18 172 151 162 173 170 11 173 168 170 174 162 163 174 17 172 174 163 167 174 172 162 175 161 165 175 171 161 176 174 167 177 165 168 177 168 173 177 175 165 178 169 171 178 167 169 178 176 167 25 178 171 31 177 173 26 25 171 26 171 175 32 31 173 32 11 12 32 173 11 38 26 175 38 175 177 29 176 178 29 17 174 29 174 176 27 29 178 27 178 25 33 38 177 33 177 31 
+9 7 1 112.619148254795
+316000 -7485.11428493578 17391 307905.158324757 -14218.672816369 17390.9886923472 312110.273719605 -11060.8033691478 17391 307925.943077942 -14604.4335260146 20688.0003343276 316000 -7836.69546463271 20687.9999999966 312180.649757394 -11493.1069294891 20688 314154.605140053 -9727.53697488436 20688 316000 -7550.33222424823 19617.0640605255 316000 -7442.90448471324 18515.409155515 4.55641924184057 17.3505413496733 5.00533765566004 12.6297807605887 4.80758045839211 15.0214017246249 5.60612585402319 12.6414841693924 5.24221906303494 17.3505413496733 5.45281822026417 15.0624106163634 5.35507146216945 16.2293507581441 5.01361912263582 17.3505413496733 4.78501918223819 17.3505413496733 6 3 2 6 2 4 9 1 3 7 3 6 7 9 3 8 9 7 5 8 7 
+132 241 1 43.7012219604535
+320467.125397541 0.02053036598 17391.0010676384 316000 -7485.11428493578 17391 320352.692895412 -1808.2500536073 17391 320128.582967256 -2793.02409264656 17391 319860.689389686 -3453.77605681891 17391 319600.575171439 -3898.68177087637 17391 318061.856480255 -5521.21718846103 17391 316000 -7836.69546463271 20687.9999999965 316000 -7442.90448471324 18515.409155515 316000 -7550.33222424823 19617.0640605255 320023.233481511 0.02053036598 20688.0006639233 317374.387638373 -6357.11761794269 20688 318493.591709174 -5264.38737374253 20688 319273.238010553 -4486.01805965329 20688 319528.315745044 -4139.89549241463 20688 319757.594662671 -3708.50654968216 20688 319907.990406935 -3250.62501529024 20688 320045.274425179 -1765.86583274309 20688 319981.656234526 0.04106073196 19568.2386729716 320129.699617494 0.04106073196 18457.105523298 320274.847933737 0.04106073196 17916.6874807581 320316.89264 -1716.32024840609 17533.726391502 320307.012045639 -1808.71506999602 17525.2891617006 320265.794800631 -1716.71693654909 17694.4114162169 320256.674959272 -1809.06579518156 17685.6874790068 320222.247479591 -1717.2808561401 17843.9561961118 320219.602016277 -1717.32313963878 17853.4819237055 320213.790334413 -1809.59226346576 17834.9529702837 320211.185635414 -1809.63234499959 17844.4605218625 320097.519804935 -1720.80122350675 18374.4265744253 320091.079362884 -1813.02718589052 18364.3482876064 320023.947064748 -1725.91477371682 18843.2196990522 320087.273004244 -2792.03665532545 17547.287879143 320018.881150802 -1818.13728525011 18832.1014224768 320052.540438445 -2791.43323177303 17692.6588626838 320050.436449506 -2791.40224920247 17701.9139413548 319957.314930617 -3213.43877899292 17455.1939295238 319976.728140378 -1735.6445923249 19461.898456206 319926.360826099 -3211.79280338346 17598.3472533518 319924.488244339 -3211.69517215515 17607.45934332 319972.929200086 -1827.98762986175 19449.3130814858 319954.466369858 -2791.13683846254 18207.2822523198 319832.102252936 -3450.83053514606 17532.6418554393 319830.357843013 -3450.68127845588 17541.662338718 319977.237818684 -1745.14068963173 19919.6734530779 319973.992948962 -1837.68055645096 19905.9545819524 319898.818634465 -2793.47621822042 18660.9748012689 319839.551922012 -3207.77929381385 18104.7328291338 319714.55514362 -3697.04573601739 17454.3912421992 319712.936741727 -3696.83116739629 17463.3093524731 319751.47582941 -3443.90779192692 18033.7992036365 319791.2533601 -3206.91300541625 18550.7689347798 320027.477775716 -1761.81483168941 20555.3423592784 320024.474998577 -1854.80779140194 20540.0126689927 319867.706882854 -2800.75474725258 19258.6043475476 319639.949132322 -3686.42613851644 17949.7481071122 319707.106418385 -3440.470627552 18475.0482439925 319532.201465795 -3884.81092006466 17872.4913174669 319874.847113787 -2809.57105770122 19700.2655910524 319766.349942149 -3210.27195482707 19137.9423073704 319599.299496672 -3679.68669622491 18385.748398509 319361.624145115 -4154.41781803508 17755.5900214787 319494.34638293 -3874.8795460278 18303.9749308444 319685.334952992 -3440.56514866841 19055.7668989554 319775.641897114 -3216.55012209617 19571.7281554352 319927.027375435 -2827.31485257663 20313.2087696765 319580.296610922 -3675.51705398998 18959.4623811932 319327.213230535 -4139.48728135775 18180.678779545 319944.174906827 -2831.90550302824 20441.1168660037 319695.508970172 -3444.60819013663 19484.7416099466 319067.667236544 -4543.04353669303 17565.0770926912 319477.2592998 -3866.54976753989 18871.7098727583 319591.024007732 -3676.57019230172 19383.2608009255 319827.458601529 -3231.49603032296 20173.7161440126 319844.041477017 -3235.63345847347 20299.353520895 319037.547429683 -4519.77366517605 17980.6647971156 319312.234928488 -4124.60565174104 18740.0065134391 319488.166783637 -3864.64746500003 19291.1202759546 319746.582550878 -3456.84168358801 20080.0972416521 319762.723540291 -3460.48558900647 20204.3679458979 319640.81769293 -3685.03695897946 19971.5347538523 319323.001383362 -4118.01047027236 19153.2834926527 319656.393241541 -3687.96795830276 20094.3534785496 319024.673942266 -4493.93553395368 18527.5836135251 319536.515991375 -3869.315698028 19873.4280218611 319551.543358083 -3871.51324196653 19995.0285087894 319716.147161764 -3699.89549130199 20474.3225697465 319034.510822829 -4479.45412029569 18931.8600407953 319368.824893369 -4116.57050537343 19727.2969903446 319753.401137372 -3707.75499973064 20667.7260183338 319382.985925284 -4117.573910644 19847.2100629493 319609.060904024 -3881.33540864257 20371.3085623896 319644.860848392 -3888.23153175218 20562.888502105 319648.871715655 -3889.03320232823 20582.9656794361 318208.114928304 -5381.39221834192 17471.9592416222 319437.08042711 -4123.92703520312 20218.3931727044 319075.634050156 -4467.66259132567 19493.767362708 319088.317322192 -4466.62497538451 19611.2265676616 319470.704150632 -4129.20708604882 20407.4609739961 319474.469903909 -4129.84591572268 20427.2784908042 318197.344559747 -5328.77981466815 17993.0534747901 319136.751689442 -4466.99935975183 19975.0166313173 318051.307673872 -5464.74258048127 17908.8236488631 319166.858484602 -4469.4597672059 20160.4515137655 319170.230678025 -4469.81286392611 20179.8939521417 318203.026655964 -5295.23929649089 18378.5664454554 319218.488704014 -4476.23958147163 20435.788994538 318056.284326827 -5428.64433970599 18291.9049610878 318230.49215581 -5258.67963981214 18915.2039345212 318239.169261875 -5252.7922421775 19027.5375742618 318081.491184765 -5388.896245772 18825.208368156 318089.507985051 -5382.40659594665 18936.8578081554 318272.665236101 -5239.02987272389 19375.880229848 318293.676812639 -5234.86322588078 19553.7223490888 318296.03706913 -5234.54637198141 19572.3808332152 318120.541998279 -5366.94319936827 19283.1224419206 318140.053494304 -5362.01427919528 19459.9342765401 318142.246773173 -5361.62192300146 19478.4860435881 318329.936461891 -5232.62926651175 19818.1892894328 317138.658170196 -6309.54831449803 17829.046157302 318173.774963704 -5358.79414742459 19722.9156198649 318368.627226628 -5235.12474645692 20060.9156567102 318209.808263334 -5360.55387406689 19964.3353332338 317151.779165295 -6261.96917356101 18348.7764712249 317156.064830568 -6254.35263204846 18457.5195731587 317172.843125959 -6236.62198897589 18794.7149216494 317183.488989992 -6231.29129589279 18966.8958558049 317184.689086003 -6230.88780351736 18984.9628350745 317202.001159924 -6228.48474988464 19223.0407204895 317221.898299738 -6231.75371417602 19458.2862704686 317286.926081521 -6269.76525429963 20067.1242841241 317289.656471701 -6272.01632793581 20089.1231780643 0 4.12238592198715 3 4.55641924184057 0.50092891839968 4.13513158541255 0.799718880768969 4.15847721745775 1.02090943483063 4.18620564468228 1.18547815158036 4.21345187849667 1.9406455271101 4.37951672589549 3 5.24221906303344 3 4.78501918223819 3 5.01361912263582 1.38777878078145e-017 4.66066861626444 2.40203152494413 5.13815559215955 1.8701307967269 5.00908436990044 1.4576570560006 4.88451782015821 1.29303246167396 4.83679131249349 1.10973659149103 4.78866511310417 0.938179654558812 4.750311070427 0.47414019773604 4.68250245855734 -1.73838787405981e-013 4.48140653980657 -1.73210169361381e-013 4.30148996727438 -1.72333541426527e-013 4.21182562234018 0.47414019773604 4.15847721745775 0.50092891839968 4.15847721745775 0.47414019773604 4.18620564468228 0.50092891839968 4.18620564468228 0.47414019773604 4.21182562234018 0.47414019773604 4.21345187849667 0.50092891839968 4.21182562234018 0.50092891839968 4.21345187849667 0.47414019773604 4.30148996727438 0.50092891839968 4.30148996727438 0.47414019773604 4.37951672589549 0.799718880768969 4.18620564468228 0.50092891839968 4.37951672589549 0.799718880768969 4.21182562234018 0.799718880768969 4.21345187849667 0.938179654558812 4.18620564468228 0.47414019773604 4.48140653980657 0.938179654558812 4.21182562234018 0.938179654558812 4.21345187849667 0.50092891839968 4.48140653980657 0.799718880768969 4.30148996727438 1.02090943483063 4.21182562234018 1.02090943483063 4.21345187849667 0.47414019773604 4.55641924184057 0.50092891839968 4.55641924184057 0.799718880768969 4.37951672589549 0.938179654558812 4.30148996727438 1.10973659149103 4.21182562234018 1.10973659149103 4.21345187849667 1.02090943483063 4.30148996727438 0.938179654558812 4.37951672589549 0.47414019773604 4.66066861626444 0.50092891839968 4.66066861626444 0.799718880768969 4.48140653980657 1.10973659149103 4.30148996727438 1.02090943483063 4.37951672589549 1.18547815158036 4.30148996727438 0.799718880768969 4.55641924184057 0.938179654558812 4.48140653980657 1.10973659149103 4.37951672589549 1.29303246167396 4.30148996727438 1.18547815158036 4.37951672589549 1.02090943483063 4.48140653980657 0.938179654558812 4.55641924184057 0.799718880768969 4.66066861626444 1.10973659149103 4.48140653980657 1.29303246167396 4.37951672589549 0.799718880768969 4.68250245855734 1.02090943483063 4.55641924184057 1.4576570560006 4.30148996727438 1.18547815158036 4.48140653980657 1.10973659149103 4.55641924184057 0.938179654558812 4.66066861626444 0.938179654558812 4.68250245855734 1.4576570560006 4.37951672589549 1.29303246167396 4.48140653980657 1.18547815158036 4.55641924184057 1.02090943483063 4.66066861626444 1.02090943483063 4.68250245855734 1.10973659149103 4.66066861626444 1.29303246167396 4.55641924184057 1.10973659149103 4.68250245855734 1.4576570560006 4.48140653980657 1.18547815158036 4.66066861626444 1.18547815158036 4.68250245855734 1.10973659149103 4.750311070427 1.4576570560006 4.55641924184057 1.29303246167396 4.66066861626444 1.10973659149103 4.78501918223819 1.29303246167396 4.68250245855734 1.18547815158036 4.750311070427 1.18547815158036 4.78501918223819 1.18547815158036 4.78866511310417 1.8701307967269 4.37951672589549 1.29303246167396 4.750311070427 1.4576570560006 4.66066861626444 1.4576570560006 4.68250245855734 1.29303246167396 4.78501918223819 1.29303246167396 4.78866511310417 1.8701307967269 4.48140653980657 1.4576570560006 4.750311070427 1.9406455271101 4.48140653980657 1.4576570560006 4.78501918223819 1.4576570560006 4.78866511310417 1.8701307967269 4.55641924184057 1.4576570560006 4.83679131249349 1.9406455271101 4.55641924184057 1.8701307967269 4.66066861626444 1.8701307967269 4.68250245855734 1.9406455271101 4.66066861626444 1.9406455271101 4.68250245855734 1.8701307967269 4.750311070427 1.8701307967269 4.78501918223819 1.8701307967269 4.78866511310417 1.9406455271101 4.750311070427 1.9406455271101 4.78501918223819 1.9406455271101 4.78866511310417 1.8701307967269 4.83679131249349 2.40203152494413 4.55641924184057 1.9406455271101 4.83679131249349 1.8701307967269 4.88451782015821 1.9406455271101 4.88451782015821 2.40203152494413 4.66066861626444 2.40203152494413 4.68250245855734 2.40203152494413 4.750311070427 2.40203152494413 4.78501918223819 2.40203152494413 4.78866511310417 2.40203152494413 4.83679131249349 2.40203152494413 4.88451782015821 2.40203152494413 5.00908436990044 2.40203152494413 5.01361912263582 8 12 10 22 1 3 22 21 1 23 3 4 23 22 3 24 21 22 25 24 22 25 22 23 26 21 24 27 20 21 27 21 26 28 24 25 28 27 26 28 26 24 29 27 28 30 20 27 31 30 27 31 27 29 32 19 20 32 20 30 32 30 31 33 25 23 33 23 4 34 32 31 35 28 25 35 25 33 36 29 28 36 28 35 37 4 5 37 35 33 37 33 4 38 19 32 39 35 37 40 36 35 40 35 39 41 32 34 41 38 32 42 31 29 42 34 31 42 29 36 42 36 40 43 37 5 43 39 37 44 39 43 44 40 39 45 11 19 45 19 38 46 45 38 46 38 41 47 34 42 48 42 40 48 47 42 48 40 44 49 5 6 49 44 43 49 43 5 50 49 6 50 44 49 51 48 44 52 47 48 53 18 11 53 11 45 54 18 53 54 53 45 54 45 46 55 34 47 55 47 52 55 41 34 56 50 6 56 44 50 56 51 44 57 52 48 57 48 51 58 56 6 59 46 41 59 54 46 59 41 55 60 55 52 61 51 56 61 57 51 61 56 58 62 58 6 63 61 58 64 52 57 64 60 52 65 59 55 65 55 60 66 59 65 66 54 59 67 64 57 67 57 61 67 61 63 68 58 62 68 63 58 69 17 18 69 18 54 69 54 66 70 60 64 70 65 60 71 6 7 71 62 6 71 68 62 72 67 63 72 63 68 73 64 67 73 70 64 73 67 72 74 66 65 75 66 74 75 17 69 75 69 66 76 68 71 77 68 76 77 72 68 78 72 77 78 73 72 79 65 70 79 74 65 80 74 79 80 17 75 80 75 74 81 73 78 81 79 70 81 70 73 82 78 77 83 79 81 83 80 79 84 82 77 84 77 76 85 81 78 86 81 85 86 83 81 87 17 80 87 80 83 87 83 86 88 82 84 89 85 78 89 78 82 89 82 88 90 16 17 90 17 87 91 86 85 91 85 89 92 87 86 93 87 92 93 90 87 94 15 16 94 16 90 94 90 93 95 76 71 95 71 7 96 86 91 96 92 86 97 89 88 98 89 97 98 91 89 99 93 92 99 94 93 99 92 96 100 15 94 100 94 99 101 88 84 101 84 76 101 76 95 102 96 91 102 91 98 103 95 7 103 101 95 104 96 102 104 99 96 105 100 99 105 99 104 106 97 88 106 88 101 107 14 15 107 15 100 107 100 105 108 101 103 108 106 101 109 97 106 109 106 108 110 98 97 110 97 109 111 109 108 112 109 111 112 110 109 113 102 98 113 98 110 114 104 102 114 102 113 115 104 114 115 105 104 116 110 112 116 113 110 117 113 116 117 114 113 118 115 114 118 114 117 119 105 115 119 115 118 119 107 105 120 7 2 120 103 7 120 108 103 121 119 118 122 13 14 122 107 119 122 119 121 122 14 107 123 13 122 123 122 121 124 108 120 124 111 108 124 2 9 124 120 2 125 112 111 125 111 124 125 124 9 126 117 116 126 116 112 126 125 9 126 112 125 127 126 9 127 117 126 128 127 9 128 118 117 128 117 127 129 121 118 129 128 9 129 118 128 130 9 10 130 129 9 130 123 121 130 121 129 131 13 123 131 130 10 131 123 130 132 12 13 132 13 131 132 10 12 132 131 10 
 
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
+TShapes 95
+Ve
+0.0592514252469888
+318204.296811767 -7327.75514408005 23761.5936376187
+0 0
 
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 53.070358280000001 18.219097139999999 0.44613623619999998  60.566589360000002 17.300979609999999 0.55799841880000001  64.663330079999994 16.64876366 0.61302828789999997  70.780113220000004 11.96700573 0.62442743779999998  
-53.899330139999996 18.163248060000001 1.044858217  60.288108829999999 18.42578125 1.009398818  64.948242190000002 17.283666610000001 1.025760174  69.918945309999998 14.961947439999999 1.096001029  
-54.946655270000001 19.139024729999999 1.5586156849999999  60.00911713 18.98307037 1.6116827730000001  65.016891479999998 18.382038120000001 1.6106652020000001  69.923339839999997 15.87725449 1.6409964560000001  
-55.764568330000003 18.950565340000001 2.447373867  59.733543400000002 19.899433139999999 2.3539123540000002  65.301231380000004 18.712757109999998 2.3616335390000001  69.061492920000006 18.605934139999999 2.4287147519999999  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 54.877136229999998 18.745353699999999 0.69570451970000002  60.043518069999998 17.841670990000001 0.83937382699999996  64.948829649999993 17.553913120000001 0.88402998450000003  70.161170960000007 12.8152113 0.96268367769999996  
-54.886085510000001 18.74978256 1.6265054940000001  60.005241390000002 19.185029979999999 1.608615994  65.092956540000003 18.158405299999998 1.5931004289999999  69.622962950000002 16.660619740000001 1.6059371229999999  
-55.029064179999999 19.925411220000001 2.5249645709999999  59.993648530000002 19.6756916 2.5362093450000001  64.996398929999998 19.337030410000001 2.5736184120000001  70.020790099999999 17.6192131 2.7022469039999999  
-55.038082119999999 19.15121078 3.5815365309999998  59.9548378 20.4088192 3.64893651  65.14250183 19.38621521 3.8649113179999999  69.475143430000003 20.7708683 4.326048374  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 60.560646060000003 18.463310239999998 0.60556936260000005  64.743721010000002 16.121803280000002 0.60008114580000005  70.464477540000004 12.912498469999999 0.62864065170000005  73.398376459999994 8.7214870449999999 0.57598066329999997  
-59.475872039999999 18.203905110000001 0.98701214790000003  65.103622439999995 17.468353270000001 1.031750441  70.109657290000001 14.44508839 1.0944284200000001  74.457725519999997 11.797541620000001 1.181002855  
-59.19562912 19.710437769999999 1.6177821160000001  65.264846800000001 18.081317899999998 1.609415531  69.744995119999999 16.35277176 1.6398935320000001  75.755195619999995 12.43084526 1.8320217130000001  
-58.113601680000002 19.101591110000001 2.3014359469999999  65.625198359999999 19.188158040000001 2.3793528080000002  69.385650630000001 17.50212479 2.4102907180000002  76.832252499999996 15.30085659 2.7175660129999999  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 55.056499479999999 19.785770419999999 1.561222434  59.98071289 18.85245132 1.6080559489999999  65.020675659999995 18.569110869999999 1.6761039499999999  69.936599729999998 16.139860150000001 1.8589497800000001  
-54.98822784 19.369201660000002 2.551807165  59.990741730000003 19.865203860000001 2.5467615129999999  65.048820500000005 19.130342479999999 2.598058939  69.814010620000005 18.192436220000001 2.7487232690000001  
-55.031013489999999 20.340091709999999 3.539469242  59.990978239999997 19.983392720000001 3.6072771549999998  65.005096440000003 19.802257539999999 3.6841669079999999  69.988655089999995 18.998950959999998 3.8871583940000001  
-54.960899349999998 18.931875229999999 4.8435964580000004  60.001186369999999 20.30593872 4.8186802860000002  65.034301760000005 19.921909329999998 4.9547033310000002  69.861602779999998 19.871711730000001 5.2432503700000002  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 59.43629456 20.92430878 1.180487871  65.251502990000006 16.329446789999999 0.86712211370000003  69.557716369999994 14.630418779999999 0.68922036890000005  76.517646790000001 6.0777425770000004 0.40073633190000002  
-58.871490479999999 18.6555748 1.510607958  65.34235382 18.42872238 1.5981874469999999  69.759109499999994 16.108802799999999 1.6835870740000001  75.621223450000002 14.003829 1.9642834659999999  
-59.449646000000001 20.600690839999999 2.5366616249999998  65.167304990000005 18.93740463 2.5888903139999999  69.88111877 18.292711260000001 2.640728712  75.308204649999993 14.728858949999999 2.9687895769999999  
-58.880023960000003 18.013469700000002 3.6188311579999999  65.259918209999995 20.527023320000001 3.8361082080000002  70.080352779999998 18.603212360000001 4.4713916779999998  74.418746949999999 21.865980149999999 4.883611202  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 56.125663760000002 20.80015564 4.27817297  59.489208220000002 19.72053528 2.9757840629999999  65.91753387 19.24645615 2.020106792  66.840705869999994 15.02373886 -0.70543974639999996  
-55.188934330000002 19.664770130000001 3.462319613  59.949119570000001 20.113721850000001 3.6522903439999999  65.014633180000004 19.712581629999999 3.709415436  69.992431640000007 19.744298929999999 3.973162174  
-53.191825870000002 20.2021637 3.4258286949999999  60.670177459999998 19.929319379999999 4.2096114160000004  64.127502440000001 20.1644516 5.4316577910000001  72.81983185 20.058712010000001 8.3533496859999996  
-52.244544980000001 19.526599879999999 2.7105464939999999  61.129859920000001 20.169010159999999 4.9757776260000002  63.23596191 19.629623410000001 7.77671051  75.926322940000006 20.021205900000002 13.93407154  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 59.345355990000002 20.604497909999999 1.5532219410000001  65.198432920000002 17.87457848 1.6819019319999999  69.860946659999996 17.165924069999999 1.8905829190000001  75.357849119999997 12.336874010000001 2.1111402510000001  
-59.203208920000002 19.484273909999999 2.5395309930000001  65.220130920000003 19.305736540000002 2.6015949250000001  69.916297909999997 17.871774670000001 2.7418098450000001  75.114715579999995 16.332843780000001 3.0795328620000002  
-59.39187622 20.53015327 3.5647377969999998  65.192581180000005 19.607841489999998 3.7015721799999999  69.837844849999996 19.229797359999999 3.8600697519999998  75.45611572 17.11676216 4.2937860490000004  
-59.245864869999998 18.843921659999999 4.8584213260000002  65.215698239999995 20.43989182 4.9249958989999998  69.891387940000001 19.261484150000001 5.3222951890000001  75.218788149999995 20.593322749999999 5.8560523990000002  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 75.958480829999999 20.001832960000002 7.1791601180000004  72.788040159999994 19.99908447 8.5423402789999994  70.087593080000005 20.001832960000002 9.9722366329999996  66.861579899999995 19.999080660000001 11.268705369999999  
-63.229484560000003 19.999389650000001 1.1165537830000001  64.135574340000005 20.000305180000002 5.5376434330000004  64.988800049999995 19.999389650000001 9.9456348420000005  65.909294130000006 20.00030327 14.379808430000001  
-61.123607640000003 20.00061226 -1.465941787  60.66970062 19.99969673 4.2468042370000001  59.957229609999999 20.00061226 9.9452228550000008  59.501258849999999 19.999691009999999 15.672292710000001  
-52.276073459999999 19.99816513 -3.3011407849999999  53.185611719999997 20.00091553 3.3009672160000001  55.182277679999999 19.99816513 9.9734640120000009  56.084484099999997 20.000913619999999 16.505249020000001  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 59.394805910000002 20.820587159999999 1.383209109  65.172561650000006 18.296314240000001 1.6560790540000001  69.914985659999999 17.72422791 2.343272448  75.167549129999998 15.2633934 2.7555878159999998  
-59.297054289999998 19.833219530000001 3.6411869530000001  65.207168580000001 19.943630219999999 3.7358560559999998  69.874328610000006 19.100629810000001 3.8784992690000002  75.295555109999995 17.718530650000002 4.3311734199999998  
-59.433532710000001 20.295408250000001 5.7089514729999999  65.204948430000002 20.10616684 5.7333855629999997  69.746711730000001 19.92574501 5.6471190450000002  75.808273319999998 19.255929949999999 6.0305027960000004  
-59.319087979999999 17.999731059999998 8.8964128490000007  65.244743349999993 20.122026439999999 8.2015857699999994  69.701980590000005 20.220556259999999 8.3140497209999999  75.947402949999997 19.990829470000001 8.3744640350000008  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 76.029449459999995 20.001832960000002 11.47305012  75.041587829999997 19.99908447 10.64938927  75.189750669999995 20.001832960000002 10.0121336  74.199394229999996 19.999080660000001 9.0021095280000001  
-69.630371089999997 19.999389650000001 5.4610376360000004  69.920860289999993 20.000305180000002 7.7200422289999997  69.957870479999997 19.999389650000001 9.9354829789999997  70.247650149999998 20.00030327 12.2380209  
-65.449035640000005 20.00061226 1.699856281  65.275047299999997 19.99969673 5.8289814  64.978721620000002 20.00061226 9.9459419249999996  64.810058589999997 19.999691009999999 14.08727455  
-58.573535919999998 19.99816513 -2.0810055730000001  58.979019170000001 20.00091553 3.9037556649999998  60.127285000000001 19.99816513 9.9807786939999996  60.51142883 20.000913619999999 15.87346745  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 70 20.108734129999998 7.8999977110000001  70 20.000946039999999 9.9499998089999995  70 19.892993929999999 11.99999905  69.999969480000004 19.785196299999999 14.050006870000001  
-65.000007629999999 20.107513430000001 7.8999958039999996  65 19.99972343 9.9499998089999995  65.000007629999999 19.891773220000001 12.00000191  65.000007629999999 19.783971789999999 14.050006870000001  
-60 20.108125690000001 7.8999977110000001  59.999992370000001 20.000333789999999 9.9499998089999995  60 19.89238739 11.99999905  59.999988559999998 19.78458023 14.050006870000001  
-55 20.10690117 7.8999953270000001  55.000015259999998 19.99911118 9.9499998089999995  55 19.891160960000001 11.99999905  55.000015259999998 19.78335762 14.050004960000001  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 76.215698239999995 19.999286649999998 6.9200778009999997  74.380683899999994 20.000238419999999 10.222186089999999  69.647880549999996 19.999763489999999 11.89117622  67.02777863 20.00071144 14.25459766  
-77.846183780000004 20.001428600000001 9.9674015049999998  73.890724180000007 19.999525070000001 9.9476919170000002  69.977165220000003 20.000476840000001 9.9418277740000001  66.200622559999999 19.998571399999999 9.984977722  
-79.172157290000001 19.999286649999998 12.910311699999999  73.442649840000001 20.000238419999999 9.6870460509999994  70.443527220000007 19.999763489999999 8.0415048599999999  64.783248900000004 20.00071144 5.5054864879999998  
-80.786430359999997 20.00142288 15.90543079  72.956130979999998 19.999523159999999 9.4194717410000006  70.775253300000003 20.000473020000001 6.1166725160000004  63.942787170000003 19.998569490000001 1.1309716700000001  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 59.299350740000001 19.861036299999999 8.5686769490000003  65.238319399999995 20.122888570000001 5.5983428960000001  69.747428889999995 19.647420879999999 3.977671623  75.771987920000001 15.343637469999999 0.99306130410000004  
-59.518394469999997 19.747037890000001 5.6598663330000001  65.189056399999998 20.108533860000001 5.8694944380000003  69.725402829999993 19.818822860000001 5.8018794060000003  75.909355160000004 19.834489820000002 6.3791036610000003  
-58.977321619999998 20.16542244 4.165229321  65.277168270000004 19.93327713 5.794671535  69.914054870000001 20.101486210000001 7.5958070759999998  75.066612239999998 20.051666260000001 10.31804371  
-59.18923187 19.591314319999999 1.1939735410000001  65.230194089999998 20.1583519 5.913541317  69.890037539999994 19.77526855 10.091581339999999  75.209709169999996 19.959150309999998 16.431484220000002  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 75.000022889999997 20.107295990000001 7.9000277519999997  75.000015259999998 20.001661299999999 9.9499855040000007  75.000022889999997 19.891555790000002 12.000021930000001  74.999969480000004 19.785951610000001 14.049963  
-69.999992370000001 20.107933039999999 7.8999881739999998  70.000015259999998 19.999513629999999 9.9500064849999994  69.999992370000001 19.89219284 11.999985690000001  70 19.783752440000001 14.05002213  
-65.000015259999998 20.107910159999999 7.9000120159999998  65 20.000438689999999 9.9499912259999999  65.000015259999998 19.89216995 12.00001621  64.999984740000002 19.784732819999999 14.04997826  
-59.99998093 20.107357029999999 7.8999423980000003  60.000011440000002 19.99888039 9.9500226969999996  59.99998093 19.891618730000001 11.99995232  60.000011440000002 19.783287049999998 14.050170899999999  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 77.795639039999998 20.107051850000001 7.8999900820000004  77.795341489999998 20.001485819999999 9.9500045779999997  77.795639039999998 19.89131355 11.999996189999999  77.794799800000007 19.785816189999998 14.05001259  
-73.897567749999993 20.108072279999998 7.8999958039999996  73.897796630000002 19.9995327 9.9499998089999995  73.897567749999993 19.892332079999999 12  73.898017879999998 19.783752440000001 14.05000877  
-70.000236509999993 20.107542039999998 7.9000058170000003  69.999877929999997 20.000528339999999 9.9499988560000006  70.000236509999993 19.89180374 12.00000191  69.999336240000005 19.784858700000001 14.04999638  
-66.101638789999996 20.10864067 7.9000096319999997  66.102561949999995 19.998542789999998 9.9499950409999993  66.101638789999996 19.892898559999999 12  66.105682369999997 19.781908040000001 14.050006870000001  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 75.39221191 21.526590349999999 12.14130211  72.548721310000005 19.42173004 12.64568901  84.412910460000006 20.298219679999999 12.89305878  65.120742800000002 19.385335919999999 13.29617882  
-74.937049869999996 19.664571760000001 9.8080549240000003  75.866699220000001 20.135047910000001 9.7525806429999999  71.596237180000003 19.92611694 9.6848917009999997  78.366027829999993 20.16047859 9.6231899260000002  
-82.786193850000004 19.33759117 8.3264722819999992  73.556045530000006 19.95248222 8.0439844130000004  72.989654540000004 20.040092470000001 8.0673751829999993  57.011695860000003 19.887086870000001 7.9110612869999999  
-81.623313899999999 14.871498109999999 6.3093347550000001  76.985107420000006 19.91659546 5.9426698680000003  60.436283109999998 19.982686999999999 5.4615139959999999  70.546203610000006 20.152338029999999 5.3493943210000001  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 72.469955440000007 20.252885819999999 6.5004544260000001  73.969795230000003 20.08260727 7.9337396619999998  75.036979680000002 20.063604349999999 9.1645679470000001  75.882369999999995 19.915611269999999 10.3017416  
-72.618186949999995 20.016595840000001 9.2471761699999995  73.936462399999996 20.005844119999999 9.9675884250000006  75.022308350000003 19.96016693 10.58247948  75.974273679999996 19.956377029999999 11.14936256  
-72.801582339999996 19.902082440000001 12.003046039999999  73.896484380000004 19.888761519999999 11.99928856  74.998626709999996 19.89533424 11.99979877  76.109115599999996 19.882415770000001 12.00151825  
-72.947990419999996 19.727689739999999 14.740623469999999  73.863700870000002 19.79171753 14.035275459999999  74.983322139999999 19.811107639999999 13.41831017  76.203094480000004 19.86659431 12.84470844  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 65 19.995420459999998 9.9999771119999998  69.999992370000001 19.99793816 9.9999971389999995  75.000007629999999 19.996641159999999 9.9999771119999998  80 19.999282839999999 10.00008392  
-65 19.89306259 12.000009540000001  70 19.89181709 12.00000191  75.000007629999999 19.892450329999999 12.000009540000001  79.999992370000001 19.891130449999999 11.999956129999999  
-65 19.78493881 13.99998379  69.999992370000001 19.78745842 14.00000477  75.000007629999999 19.786159519999998 13.99998379  80 19.788806919999999 14.00008678  
-64.999984740000002 19.682716370000001 16.000099179999999  70 19.68126869 15.99996662  74.999984740000002 19.682106019999999 16.000099179999999  79.999984740000002 19.680179599999999 15.99980736  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 72.556472779999993 20.007419590000001 10.69527817  73.997444150000007 19.997419359999999 9.9355316160000005  74.840019229999996 20.002933500000001 9.2625865940000001  76.64250183 19.753379819999999 8.6342449190000004  
-72.605461120000001 19.96580887 9.9343795779999997  73.963386540000002 20.011884689999999 9.9493141170000001  74.927337649999998 19.986665729999999 9.96835804  76.327255249999993 19.942813869999998 9.9883022310000005  
-72.618110659999999 20.043754580000002 9.2672023770000003  73.936500550000005 19.99786186 9.9672031400000005  75.022132869999993 19.96480751 10.563982960000001  75.974967960000001 19.997880940000002 11.112544059999999  
-72.66642761 20.080467219999999 8.4890050890000008  73.902725219999994 19.991466519999999 9.9852514269999997  75.108917239999997 19.95364189 11.26998901  75.661514280000006 19.689542769999999 12.46209335  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 79.3506012 19.89212418 10.297397610000001  77.511245729999999 19.911304470000001 12.078531269999999  74.900772090000004 19.815256120000001 13.38848209  72.885742190000002 19.73038292 14.920652390000001  
-79.778915409999996 19.914983750000001 12.00384998  77.381195070000004 19.886640549999999 11.99992943  74.992652890000002 19.89108658 11.99643421  72.648277280000002 19.901565550000001 12.01434517  
-80.126556399999998 19.80056381 13.687206270000001  77.260261540000002 19.894756319999999 11.921753880000001  75.128768919999999 19.973033910000002 10.62578487  72.224754329999996 20.015970230000001 9.0219554899999999  
-80.553070070000004 19.70949173 15.38209438  77.130531309999995 19.909130099999999 11.84337139  75.221145629999995 20.006618499999998 9.2444171910000001  71.984916690000006 20.316694259999998 6.0726675989999999  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 80.761482240000007 19.632326129999999 19.582256319999999  77.149024960000006 19.58016014 14.994088169999999  75.115768430000003 20.05408478 11.361839290000001  72.387924190000007 19.69882965 7.0860152239999996  
-80.111984250000006 19.840633390000001 13.084851260000001  77.241073610000001 19.964378360000001 11.61363029  75.131317139999993 19.927486420000001 10.60266685  72.233673100000004 20.18070221 9.3113584520000003  
-79.628685000000004 19.831949229999999 10.21311378  77.439483640000006 19.937093730000001 10.081701280000001  75.087730410000006 20.025850299999998 9.9714851380000002  72.209632869999993 19.86084747 9.8434171680000002  
-78.969612119999994 17.87081337 5.7626929279999999  77.534149170000006 19.406265260000001 7.7595577240000004  75.102180480000001 19.926450729999999 9.2113971709999998  72.057685849999999 20.650678630000002 11.01503563  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 86.394416809999996 20.506988530000001 10.78163052  79.403083800000005 19.558546069999998 11.96123695  75.993240360000001 20.501579280000001 12.530671119999999  66.623970029999995 17.94690323 13.533179280000001  
-85.760513309999993 17.15355301 10.133910180000001  79.704078670000001 19.90885544 9.8938941959999998  75.423133849999999 19.89886284 9.7727966310000003  68.603416440000004 20.626558299999999 9.5181922910000001  
-84.423934939999995 16.683935170000002 8.3827199940000003  80.139915470000005 18.631183620000002 8.1631832119999999  75.016403199999999 20.174846649999999 8.0781326290000006  69.794479370000005 19.857080459999999 8.0940561290000002  
-83.819145199999994 14.2359581 7.3292779919999997  80.434265139999994 17.58245277 6.718361378  74.443710330000002 19.28164482 5.8445987700000002  71.790855410000006 19.81190681 5.4447813030000001  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 82.514526369999999 21.14626312 9.6714668269999997  74.030548100000004 19.810894009999998 10.31415653  71.363327029999994 20.122623440000002 10.41734791  60.516185759999999 18.916864400000001 10.727709770000001  
-81.38391876 18.249567030000001 8.3036108019999997  74.48934174 20.213972089999999 7.8722066880000003  70.658706670000001 19.995199199999998 7.7812957760000003  62.875850679999999 20.19607925 7.4985504150000004  
-79.655029299999995 17.741939540000001 6.5373134610000001  75.08796692 19.194763179999999 6.0682163239999998  69.9931488 19.965793609999999 5.8733172419999997  64.939491270000005 20.160331729999999 5.8946022989999998  
-78.557273859999995 15.183026310000001 5.1863617900000003  75.538238530000001 17.988632200000001 4.5062556269999998  69.289726259999995 19.104463580000001 3.5731406209999999  67.302871699999997 19.649164200000001 3.702945471  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 73.851760859999999 18.545955660000001 16.066617969999999  74.315773010000001 20.196195599999999 11.431817049999999  74.73529053 19.755245209999998 10.206116679999999  75.202682499999995 20.825593949999998 7.4437179569999996  
-77.689613339999994 19.918674469999999 15.12325573  77.506614690000006 19.86872864 11.696487429999999  77.451751709999996 20.09235382 10.09079552  77.26731873 18.947778700000001 7.6403250690000002  
-79.863311769999996 19.786376950000001 14.360794070000001  79.865501399999999 19.954524989999999 11.92427635  79.932189940000001 19.481491089999999 9.9421052929999991  79.936447139999999 18.8056488 8.0073022839999997  
-82.857368469999997 19.763538359999998 13.41560364  83.03144073 19.603040700000001 12.189315799999999  82.819702149999998 18.794553759999999 9.8271236420000001  82.98688507 16.665477750000001 8.2021818159999995  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 89.739295960000007 17.51036453 11.098337170000001  84.98090363 18.388774869999999 11.681797980000001  80.337081909999995 20.762273789999998 11.892210009999999  73.670860289999993 17.804962159999999 11.90660477  
-89.471916199999995 13.077208519999999 9.9370651250000002  85.067955019999999 17.73806763 9.8618698120000001  80.256278989999998 19.51799011 9.904935837  73.906959529999995 20.877805710000001 10.00068188  
-89.738922119999998 12.490625380000001 8.8534021379999999  84.984306340000003 15.97044182 8.5707254410000004  80.323875430000001 18.87940407 8.1880445480000006  73.720275880000003 19.895524980000001 7.7906670570000003  
-89.481704710000002 8.4477024079999996 7.7238378519999999  85.068603519999996 14.751993179999999 6.9728536610000003  80.243850710000004 16.910026550000001 6.6795020100000002  73.955947879999997 21.45560837 6.3564348219999998  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 83.829338070000006 19.723949430000001 9.9893398280000003  80.331832890000001 19.220525739999999 10.114681239999999  74.843307499999995 20.800991060000001 10.211319919999999  70.294967650000004 18.088020319999998 10.38547707  
-84.480491639999997 15.832751269999999 8.4339838030000003  80.14019012 18.871395110000002 8.1250610349999999  74.95876312 19.917312620000001 7.9112763399999997  70.024787900000007 20.56003952 7.803581715  
-85.524040220000003 15.07025623 7.2688078880000004  79.80545807 17.309951779999999 6.6500406270000001  75.254127499999996 19.409633639999999 6.0735216139999997  69.178092960000001 19.538284300000001 5.7393589020000002  
-86.17949677 10.89444065 5.86757946  79.614135739999995 16.21073341 5.0181345940000002  75.363883970000003 17.175159449999999 4.4892663959999997  68.930252080000002 21.330539699999999 3.8094346520000002  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 73.86515808 19.939178470000002 13.798629760000001  77.671951289999996 19.876728060000001 11.994821549999999  79.74343872 19.90651703 10.222082139999999  83.354377749999998 18.024637219999999 8.4945077900000001  
-74.302253719999996 19.779140470000002 11.920378680000001  77.528625489999996 19.934009549999999 12.00104713  79.879577639999994 19.83743668 12.07543182  82.953048710000004 19.779483800000001 12.13962173  
-74.775863650000005 20.030237199999998 10.519859309999999  77.381210330000002 19.873167039999998 12.000987050000001  79.99565887 19.829700469999999 13.47619343  82.636199950000005 19.82769012 14.94700241  
-75.214820860000003 19.951530460000001 8.3762845989999999  77.236953740000004 19.927318570000001 12.015952110000001  80.133636469999999 19.691793440000001 15.55991268  82.228408810000005 19.268272400000001 19.09333801  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 89.835723880000003 21.810163500000002 14.292530060000001  84.896919249999996 19.02360535 14.49837303  80.576660160000003 20.798662190000002 14.233207699999999  72.796508790000004 16.60944366 14.55083179  
-90.385429380000005 15.171604159999999 11.93405628  84.83361816 19.48332787 11.89085197  80.280120850000003 19.735424040000002 11.95582199  74.045989989999995 20.864809040000001 11.868761060000001  
-89.282600400000007 14.897265429999999 9.9712362290000005  85.094047549999999 17.30654144 9.9382257460000005  80.341255189999998 20.040517810000001 9.9434967039999993  73.540969849999996 19.344251629999999 9.9741191859999994  
-89.850120540000006 7.549051285 7.8809785840000002  85.027244569999993 16.601995469999999 8.0562562940000007  80.040924070000003 17.816041949999999 7.970172882  74.809150700000004 22.969219209999999 7.9344792369999997  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 79.765068049999996 19.99708176 9.9999856949999995  79.765632629999999 19.892230990000002 12.00000191  79.765068049999996 19.786613460000002 13.99998379  79.765869140000007 19.68194008 16.000062939999999  
-77.382682799999998 19.99734879 10.000005720000001  77.382751459999994 19.892103200000001 12  77.382682799999998 19.78686905 14.000009540000001  77.382637020000004 19.68155479 15.999972339999999  
-74.999862669999999 19.99738121 9.9999723429999996  75.000076289999996 19.89208412 12.000005720000001  74.999862669999999 19.78690529 13.99997997  75.000305179999998 19.68178558 16.000076289999999  
-72.617706299999995 19.996934889999999 10.00004768  72.617050169999999 19.892309189999999 11.99996567  72.617706299999995 19.78644753 14.000058170000001  72.615478519999996 19.681446080000001 15.999668120000001  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 74.755912780000003 20.338815690000001 6.7914643290000001  77.385002139999997 19.939537049999998 10.006896019999999  79.99966431 19.886894229999999 13.180930139999999  82.616073610000001 19.4935112 16.336778639999999  
-74.776443479999998 19.925098420000001 10.39630032  77.380310059999999 19.90901375 12.00353432  79.998992920000006 19.79157257 13.58957481  82.623825069999995 19.775583269999998 15.17191219  
-74.758834840000006 19.812461849999998 13.999437329999999  77.384140009999996 19.77840424 13.999919889999999  80.000175479999996 19.79489899 14.00089073  82.614860530000001 19.76306915 13.996463779999999  
-74.779838560000002 19.546619419999999 17.605892180000001  77.37919617 19.69847107 15.996833799999999  79.999977110000003 19.749435420000001 14.40680218  82.619407649999999 19.895757679999999 12.841881750000001  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 70.000320430000002 19.61229706 17.299989700000001  69.999877929999997 19.699066160000001 15.650001530000001  70.000320430000002 19.785942080000002 13.999994279999999  69.999008180000004 19.872694020000001 12.350016589999999  
-74.999847410000001 19.613517760000001 17.300006870000001  75.000083919999994 19.70028877 15.649996760000001  74.999847410000001 19.787162779999999 14.000008579999999  75.000495909999998 19.87391663 12.350007059999999  
-80.000320430000002 19.612903589999998 17.300001139999999  79.999847410000001 19.699682240000001 15.649997709999999  80.000320430000002 19.786548610000001 13.99999809  79.998985289999993 19.87330627 12.350004200000001  
-84.999000550000005 19.614126209999998 17.300016400000001  85.00048065 19.700897220000002 15.64999008  84.999000550000005 19.787769319999999 14.00001144  85.005279540000004 19.874525070000001 12.34993935  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 81.376464839999997 19.784330369999999 13.59901142  80.678848270000003 19.79303741 13.99825001  79.994384769999996 19.764575959999998 14.40801048  79.343666080000006 19.740001679999999 14.83597374  
-81.362228389999999 19.792999269999999 13.99961472  80.680969239999996 19.785394669999999 14.0001297  80.000152589999999 19.786472320000001 13.99987125  79.31843567 19.789733890000001 14.00039673  
-81.347007750000003 19.76489067 14.40254116  80.683547970000006 19.786350250000002 14.001240729999999  80.005027769999998 19.810749049999998 13.592510219999999  79.296409609999998 19.821537020000001 13.16243839  
-81.332771300000005 19.742080690000002 14.80430031  80.685661319999994 19.789552690000001 14.002734179999999  80.010795590000001 19.820741649999999 13.18475437  79.271186830000005 19.90783691 12.325760839999999  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 81.403381350000004 19.65188599 18.125703810000001  80.705039979999995 19.52567101 16.847894669999999  80.005462649999998 19.718893049999998 15.56755066  79.273040769999994 19.56189728 14.230777740000001  
-81.323425290000003 19.76965714 14.02586842  80.671562190000003 19.84654617 13.759245870000001  80.004981990000005 19.81654739 13.4776516  79.30859375 19.906999590000002 13.18292522  
-81.385940550000001 19.86417389 12.18491554  80.709594730000006 19.8085041 12.122922900000001  80.005607600000005 19.865165709999999 12.07652378  79.267890929999993 19.794061660000001 12.01334572  
-81.306571959999999 18.732116699999999 9.2344694139999994  80.675811769999996 19.359935759999999 9.749077797  80.00559998 19.538721079999998 10.216244700000001  79.302062989999996 20.012941359999999 10.76364517  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 73.364997860000003 18.437547680000002 17.70075417  74.738388060000005 20.093303680000002 13.522711749999999  75.507728580000006 19.416198730000001 12.20838928  76.903198239999995 21.93323135 9.6437091830000004  
-81.579048159999999 19.895540239999999 16.773906709999999  81.164047240000002 19.72557449 13.771845819999999  80.940795899999998 20.17025185 12.138709070000001  80.520507809999998 18.851570129999999 9.6733245849999996  
-84.547767640000004 19.453746800000001 16.28845978  84.620063779999995 19.976770399999999 13.930409429999999  84.958976750000005 18.866138459999998 11.98989201  85.030212399999996 18.37107468 10.10999966  
-90.229797360000006 20.402191160000001 15.351398469999999  90.355728150000004 17.845777510000001 14.18049049  89.223213200000004 17.357166289999999 11.92665482  89.358345029999995 12.44601727 10.112861629999999  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 76.550903320000003 19.630203250000001 16.97284698  75.651153559999997 19.694641109999999 15.737489699999999  80.315361019999997 19.78831482 13.97720528  79.001052860000001 19.872543329999999 12.35372353  
-78.364288329999994 19.613542559999999 17.29701996  80.538139340000001 19.700119019999999 15.65084839  79.483245850000003 19.78680992 13.99958897  81.528991700000006 19.873819350000002 12.35077858  
-89.991981510000002 19.594890589999999 17.63908386  82.196350100000004 19.70478439 15.559122090000001  81.751678470000002 19.785572049999999 14.024444580000001  74.882949830000001 19.87385368 12.343139649999999  
-81.988288879999999 19.578468319999999 17.96378326  90.314071659999996 19.709495539999999 15.472326280000001  77.813835139999995 19.784374239999998 14.046903609999999  86.60170746 19.874153140000001 12.340081209999999  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 76.057937620000004 19.15641785 17.310468669999999  86.179809570000003 19.793226239999999 15.66192055  70.205047609999994 19.624332429999999 13.94185543  80.826225280000003 19.936347959999999 12.57069016  
-90.216262819999997 19.84959602 17.648433690000001  81.952903750000004 19.650564190000001 15.55572796  82.515754700000002 19.87134361 14.028650280000001  75.160049439999995 19.832159040000001 12.32964134  
-83.397621150000006 19.016777040000001 17.912900919999998  85.646202090000003 19.833274840000001 15.47483444  84.035888670000006 19.603782649999999 14.087765689999999  86.197250370000006 19.978500369999999 12.174135209999999  
-86.193084720000002 21.956386569999999 18.234373089999998  85.462394709999998 18.973999020000001 15.37495041  91.340553279999995 18.995067599999999 14.16581631  90.050384519999994 14.1876955 11.9618082  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 65.000015259999998 19.612239840000001 17.299995419999998  64.999984740000002 19.69909668 15.649999619999999  65.000015259999998 19.785882950000001 13.99999523  65 19.8729248 12.35000896  
-69.999992370000001 19.61356163 17.300008770000002  70.000007629999999 19.700273509999999 15.649996760000001  69.999992370000001 19.78720474 14.000008579999999  70 19.87382698 12.35000801  
-75.000022889999997 19.61284637 17.299991609999999  74.999984740000002 19.699707029999999 15.65000057  75.000022889999997 19.786491389999998 13.999994279999999  74.999984740000002 19.87354088 12.350013730000001  
-80 19.61436462 17.300006870000001  80.000015259999998 19.700794219999999 15.64999199  80 19.788007740000001 14.00000668  79.999977110000003 19.87423897 12.34995842  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 60 19.612300869999999 17.299995419999998  60.000007629999999 19.699066160000001 15.649999619999999  60 19.785945890000001 13.999994279999999  59.999984740000002 19.872714999999999 12.35001278  
-65.000007629999999 19.613527300000001 17.30001068  65.000007629999999 19.700286869999999 15.649996760000001  65.000007629999999 19.787170410000002 14.000009540000001  65 19.873931880000001 12.35000801  
-70 19.612913129999999 17.299995419999998  70 19.69967651 15.649999619999999  70 19.786556239999999 13.999994279999999  69.999984740000002 19.873321529999998 12.35001278  
-75.000007629999999 19.61413383 17.30001068  75 19.70089531 15.6499939  75.000007629999999 19.787778849999999 14.000007630000001  75.000015259999998 19.874540329999999 12.34996128  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 55 19.612300869999999 17.299995419999998  55.000007629999999 19.699066160000001 15.649999619999999  55 19.785945890000001 13.999994279999999  54.999988559999998 19.872714999999999 12.35001278  
-59.999988559999998 19.613527300000001 17.30001068  60.000003810000003 19.700286869999999 15.649996760000001  59.999988559999998 19.787170410000002 14.000009540000001  59.999984740000002 19.873931880000001 12.35000801  
-65.000007629999999 19.612913129999999 17.299995419999998  65.000022889999997 19.69967651 15.649999619999999  65.000007629999999 19.786556239999999 13.999994279999999  65.000007629999999 19.873321529999998 12.35001278  
-69.999977110000003 19.61413383 17.30001068  69.999992370000001 19.70089531 15.6499939  69.999977110000003 19.787778849999999 14.000007630000001  70 19.874540329999999 12.34996128  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 60 19.996141430000002 9.9999799730000003  65 19.997726440000001 10.00000477  70.000007629999999 19.996759409999999 9.9999799730000003  74.999984740000002 19.99908447 10.000026699999999  
-59.999992370000001 19.891641620000001 12.000005720000001  65.000007629999999 19.892210009999999 11.99999905  69.999992370000001 19.892250059999999 12.000005720000001  75 19.891544339999999 11.999987600000001  
-60 19.78567314 13.999996189999999  65 19.787242890000002 14.000003810000001  70.000007629999999 19.786285400000001 13.999996189999999  74.999984740000002 19.7885952 14.000030519999999  
-60.000007629999999 19.68129158 16.000043869999999  65 19.68167686 15.99997902  70 19.681892399999999 16.000043869999999  74.999984740000002 19.68092918 16.00012207  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 55 19.996355059999999 9.9999971389999995  60.000003810000003 19.997623440000002 9.9999961850000005  65.000007629999999 19.996965410000001 9.9999971389999995  69.999977110000003 19.998313899999999 10.00002098  
-55.000015259999998 19.891221999999999 12  60 19.89242363 12.00000191  65.000015259999998 19.89183044 12  69.999984740000002 19.892992020000001 11.99998856  
-55 19.785879139999999 14.00000095  60.000003810000003 19.787143709999999 14  65.000007629999999 19.786487579999999 14.00000095  69.999977110000003 19.78783417 14.000028609999999  
-55.000007629999999 19.680831909999998 16.000028610000001  59.999984740000002 19.681907649999999 15.999987600000001  65.000007629999999 19.681440349999999 16.000028610000001  69.999984740000002 19.682231900000001 16.00012589  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 76.454383849999999 16.915590290000001 18.000995639999999  78.613105770000004 20.67592621 15.44823456  79.136779790000006 19.315824509999999 14.106077190000001  81.345825199999993 20.690544129999999 12.12747478  
-85.977844239999996 20.424289699999999 17.872669219999999  85.395004270000001 19.535255429999999 15.483080859999999  85.177467350000001 20.064022059999999 14.095026020000001  84.581802370000005 19.086978909999999 12.136837010000001  
-89.634323120000005 19.260375979999999 18.042726519999999  89.806892399999995 19.14071083 15.44948673  90.153411869999999 17.709674840000002 14.05934238  90.326995850000003 16.89589119 12.313169479999999  
-95.48480988 20.8349762 18.004177089999999  95.377502440000001 14.830683710000001 15.452915190000001  94.208831790000005 15.212458610000001 14.084162709999999  94.109970090000004 10.55853939 12.21044159  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 86.59938812 18.544153210000001 18.053066250000001  86.973312379999996 20.074439999999999 15.44052887  87.120826719999997 18.661138529999999 14.08482742  87.486351010000007 19.489248280000002 12.22017288  
-90.298645019999995 20.23396683 17.990039830000001  90.178421020000002 18.343475340000001 15.46067429  90.082855219999999 17.894845960000001 14.06727791  89.967338560000002 15.85093689 12.270241739999999  
-92.205986019999997 18.820714949999999 18.034536360000001  92.313011169999996 17.48044968 15.4507122  92.547775270000002 15.87462521 14.06262207  92.644294740000007 14.33586502 12.29881668  
-95.877403259999994 19.439853670000002 18.007017139999999  95.569610600000004 14.745283130000001 15.45336533  94.726097109999998 14.30164051 14.07952023  94.454742429999996 10.23610306 12.22857952  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 94.167556759999997 20.71880531 16.533935549999999  90.143585209999998 18.166612629999999 16.56281662  85.25810242 20.89317703 16.147809980000002  78.823997500000004 16.373434069999998 16.12510872  
-94.531089780000002 13.168458940000001 13.861413000000001  90.107711789999996 18.262807850000002 13.858975409999999  85.038116459999998 19.612588880000001 13.963746069999999  79.73986816 20.765222550000001 13.960020070000001  
-94.031280519999996 12.84622192 12.02042389  90.173171999999994 15.65744209 12.00128746  85.276062010000004 19.53478432 11.99721718  78.722595209999994 19.195465089999999 12.03480721  
-94.423500059999995 4.5193667409999998 10.05692196  90.130416870000005 14.530366900000001 10.13586712  85.054718019999996 16.73075485 10.047417640000001  79.65065002 23.329042430000001 9.9008235930000001  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 94.809036250000005 19.049388889999999 16.660303119999998  92.523551940000004 17.541336059999999 16.613828659999999  90.096794130000006 19.786464689999999 16.490558620000002  87.089263919999993 17.59125328 16.35697746  
-94.797187809999997 12.945748330000001 13.799019810000001  92.533325199999993 16.09487343 13.829916949999999  90.069564819999997 17.478412630000001 13.878095630000001  87.188392640000004 19.823722839999999 13.91875267  
-94.931488040000005 11.35541725 12.14363384  92.491622919999998 13.39397621 12.066503519999999  90.102058409999998 16.07368851 11.99707222  87.100128170000005 17.322027210000002 11.968010899999999  
-94.95890808 4.6491928099999997 9.6264686580000003  92.491073610000001 10.554434779999999 9.9040527340000004  90.076766969999994 12.641752240000001 10.13363457  87.201759339999995 18.249965670000002 10.209275249999999  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 94.35643005 20.298069000000002 16.0466938  92.704078670000001 16.965198520000001 15.286258699999999  89.827316280000005 20.170455929999999 14.968576430000001  87.986640929999993 14.81237984 13.85889053  
-94.755462649999998 8.8756885529999998 11.3690567  92.533645629999995 13.10800266 11.571294780000001  90.109992980000001 15.21380806 11.69612789  87.026351930000004 19.149551389999999 11.997549060000001  
-96.103790279999998 7.2157530779999997 10.47708416  92.152244569999993 10.828046799999999 10.42856598  90.287246699999997 13.389196399999999 10.24691486  86.698699950000005 15.9514513 10.150915149999999  
-96.512702939999997 -1.8482192749999999 6.4226007459999996  91.984161380000003 6.2031927109999998 6.4144454  90.550643919999999 7.2547011379999997 7.0162029270000001  85.813186650000006 15.79996109 7.0988669399999997  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 96.330512999999996 5.8201875689999998 10.844417569999999  92.081451419999993 12.880756379999999 11.20197868  90.343727110000003 14.79114914 11.62368107  86.543617249999997 20.129058839999999 12.05642319  
-95.924957280000001 6.3247122759999996 9.9321889880000001  92.189620970000007 10.154259679999999 9.8552923200000002  90.316627499999996 12.494819639999999 9.7612209320000005  86.543899539999998 15.87712383 9.6891860960000002  
-95.653045649999996 4.771406174 9.1268234249999995  92.286880490000001 9.1255855560000008 9.0768508909999994  90.199493410000002 11.25483322 9.0314331049999996  86.915130619999999 15.117287640000001 8.886827469  
-95.238899230000001 6.1387295719999999 8.2105808259999993  92.396606449999993 6.7595491409999999 7.6735634800000003  90.174705509999995 9.4004354479999996 7.3078513149999997  86.90455627 10.68457222 6.7054142949999997  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 94.036308289999994 21.16070938 14.885744089999999  90.172744750000007 17.420541759999999 14.93555546  85.272743230000003 21.616504670000001 14.39148045  78.736282349999996 14.816713330000001 14.01771259  
-94.015037539999994 9.6530990600000006 11.637689590000001  90.214355470000001 16.187175750000002 11.69954109  85.127563480000006 18.710994719999999 11.9175024  79.275405879999994 21.809207919999999 12.083767890000001  
-94.983291629999997 9.2996149060000004 10.563507080000001  89.900665279999998 13.25365448 10.266281129999999  85.414100649999995 18.022003170000001 9.9385232929999994  78.442962649999998 18.822309489999999 9.6472177509999995  
-95.072380069999994 -3.3752596380000002 5.8082590100000004  89.910186769999996 10.07055283 6.9353475570000001  85.286842350000001 14.114510539999999 8.0283823010000006  78.942344669999997 25.244653700000001 9.0272226329999992  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 94.944190980000002 6.7274432180000003 9.9663715360000005  92.541000370000006 10.424751280000001 10.17686176  89.891906739999996 13.62434101 10.32458973  87.89139557 15.77085304 10.51104069  
-95.587005619999999 5.4164195060000004 9.1672954559999997  92.295738220000004 8.8080768589999998 8.9750185009999992  90.230026249999995 11.016471859999999 8.7959413529999999  86.784141539999993 14.42964649 8.5055360790000005  
-96.483917239999997 3.1559064389999998 8.0144910809999992  92.009704589999998 7.7591094969999999 7.7593207360000003  90.477348329999998 9.2243185039999993 7.6864371299999998  86.080932619999999 13.541138650000001 7.4088034629999999  
-97.160087590000003 3.0684642790000001 6.6394519809999997  91.755348209999994 6.3774795529999997 6.1976785659999996  90.818412780000003 7.133496761 6.0825085640000003  84.970855709999995 11.894090650000001 5.5221662519999999  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 94.658134459999999 11.214613910000001 11.852499010000001  90.050605770000004 15.29520035 11.5525856  85.139457699999994 19.778964999999999 11.690312390000001  79.391593929999999 17.416662219999999 11.40392303  
-94.568717960000001 6.7292203900000001 9.6071290969999996  90.013351439999994 13.002235410000001 9.7802343369999996  85.377861019999997 17.27252769 9.8612852100000001  78.475212099999993 21.455093380000001 10.06409264  
-96.087593080000005 5.3447580339999998 9.4189796450000003  89.62312317 11.968256 9.0264778139999997  85.419914250000005 16.04439545 8.5645399090000005  78.697258000000005 19.10596275 8.0397119519999993  
-96.00814819 2.6160712240000001 7.6206378939999997  89.586112979999996 9.7613372799999993 7.2045922280000001  85.647354129999997 13.38421535 7.1714096070000002  77.824333190000004 21.067129139999999 6.4046611789999996  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 88.618331909999995 5.2838387490000001 4.8443903920000002  89.628852839999993 8.3535537719999997 5.2930359840000003  92.866302489999995 4.5635776520000002 5.7428274149999998  93.90605927 7.4766821859999997 6.0753407480000003  
-87.354019170000001 11.19280148 6.0892028810000003  90.050178529999997 8.0821723940000005 6.5082240100000002  92.4453125 6.7529358860000004 6.8617658620000004  95.168609619999998 3.6801345350000001 7.1890139580000003  
-85.999137880000006 12.667346950000001 7.2930145260000003  90.49715424 9.4059686659999997 7.6150865550000004  92.012252810000007 7.4170660970000002 7.7028436659999997  96.453979489999995 4.2286477089999996 7.9485602379999998  
-84.728347779999993 18.62617302 8.4017066959999998  90.918998720000005 9.3411874770000001 8.6556539539999999  91.595657349999996 9.8007841110000005 8.5368299479999994  97.698394780000001 0.51365482809999996 8.8814496989999991  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 95.625930789999998 7.9030013080000003 10.47352695  89.830482480000001 13.58545303 10.342201230000001  85.052154540000004 18.44818115 10.143945690000001  79.960914610000003 17.634880070000001 9.6686716080000004  
-95.498405460000001 5.0051889420000002 9.0828866959999992  89.742492679999998 11.6754055 8.7783327100000008  85.531578060000001 15.59680653 8.4681053160000008  78.131164549999994 20.572345729999999 8.1277322769999998  
-97.307647709999998 2.8005967140000001 8.0986194610000002  89.291496280000004 10.34949684 7.6351900099999996  85.526374820000001 13.99894714 7.2744903560000003  78.602996829999995 19.02206421 6.4478144650000004  
-97.21373749 1.6470040079999999 6.7433171270000001  89.196296689999997 8.4752769469999993 5.8707766530000001  86.000930789999998 11.257464410000001 5.8235273359999997  76.799858090000001 20.036800379999999 4.9671516420000001  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 86.194618230000003 6.7086882589999997 3.0217683320000002  90.443206790000005 6.0550308230000001 3.8550996780000002  92.032592769999994 4.8794021609999998 4.3371262550000003  96.426536560000002 4.2375922199999998 5.3318109509999996  
-86.823471069999997 9.4472789759999998 4.594470501  90.234161380000003 6.9013967510000001 5.2982501979999999  92.23986816 5.9831681249999997 5.7210178379999999  95.806388850000005 3.4849381450000001 6.4032340049999998  
-87.31920624 10.16652584 6.1212415699999996  90.059432979999997 8.4222450260000006 6.505684853  92.443092350000001 6.3548774720000001 6.7976512910000002  95.168296810000001 4.6388578410000001 7.0950264929999998  
-87.933197019999994 12.608975409999999 7.4147744180000004  89.854789729999993 9.4978551860000007 7.6200261119999997  92.647560119999994 7.5896906849999999 7.9811067580000001  94.554916379999995 4.3854694370000002 7.9965496060000003  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 80.829330440000007 9.7879066469999998 3.4176802639999999  84.620697019999994 11.444284440000001 4.2301292420000003  90.687812809999997 5.3431444170000004 5.2548947330000004  92.627998349999999 10.444787030000001 6.509633064  
-80.198143009999995 16.83145142 4.9211387630000001  84.958030699999995 12.02434635 5.7358503340000002  89.96966553 8.7901763919999993 6.5366330149999996  95.163238530000001 3.0893683429999999 7.1014671329999999  
-77.967376709999996 18.878456119999999 6.3801846500000003  85.666770940000006 14.02607536 7.1932768820000001  89.365486149999995 9.8578519819999997 7.5474615099999998  96.871246339999999 4.2508230210000004 8.0730619430000008  
-77.275283810000005 24.351749420000001 8.4442558289999994  86.012870789999994 14.72137165 8.8806324009999997  88.673141479999998 13.32710934 8.4633865359999998  99.294487000000004 -2.2380647659999999 8.8267574310000008  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 88.274574279999996 2.5069057940000001 1.579073548  89.738334660000007 4.0856404299999998 1.3760688299999999  92.772140500000006 2.256878376 0.99425005909999997  94.173187260000006 4.3330235479999999 0.67931920290000003  
-87.459053040000001 7.5624074940000003 3.3110263350000002  90.012855529999996 5.859242439 3.7764949799999998  92.489547729999998 5.1576890950000003 4.3613266939999997  95.029060360000003 3.4487919809999998 4.9013648029999999  
-86.819992069999998 7.81947422 4.1747832300000001  90.23456573 6.8998103139999998 4.8982663149999999  92.241775509999997 5.3709549900000004 5.4159345630000004  95.798377990000006 4.5795779230000004 6.1061105729999996  
-86.068748470000003 15.824056629999999 7.5107293129999997  90.488174439999995 8.6243772510000003 8.1842079160000001  91.978508000000005 8.525463104 7.9937763210000004  96.597808839999999 1.049162626 8.7139883040000008  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 79.979972840000002 7.9069495200000004 1.9535061119999999  85.006370540000006 8.8164234159999992 2.9419412610000002  89.99455261 5.0643076899999997 3.6503899099999999  95.015426640000001 6.7345628739999999 5.2358107570000003  
-79.818923949999999 13.84849548 3.6808598039999998  85.056579589999998 10.0412178 4.2506732940000003  89.954772950000006 7.4221687320000003 5.2319054600000001  95.124351500000003 3.3061456680000001 6.3301792140000002  
-79.979652400000006 15.30662441 4.7935671810000002  85.005592350000001 12.474916459999999 5.6935229300000003  89.998001099999996 8.0646200179999994 6.5404891970000003  95.002403259999994 5.4769849779999999 7.086166382  
-79.851821900000004 20.91718483 6.6273221969999998  85.040740970000002 13.626874920000001 7.3420391079999998  89.985260010000005 10.68104744 7.5550503730000003  95.018264770000002 1.8389594549999999 8.3139095310000002  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 84.593734740000002 0.76076757910000004 -0.062290482219999999  90.985954280000001 2.2261075969999999 0.4577968717  91.462425229999994 1.862128496 0.73583102229999997  98.164344790000001 3.1389827729999999 1.642171383  
-86.061660770000003 5.46791172 1.566263199  90.481704710000002 3.8981702330000001 2.1406719679999999  92.011436459999999 4.0002460480000002 2.3014965059999999  96.472572330000006 2.4759092329999999 3.1367201809999998  
-87.485809329999995 6.4821920390000001 3.105609179  90.007720950000007 5.8344516750000004 3.473984003  92.483291629999997 4.5664014819999998 3.821873665  95.059173580000007 3.9851861 4.1847972870000003  
-88.925743100000005 9.1793508530000008 5.0092606540000002  89.511665339999993 7.186432838 5.3437066079999997  93.027427669999994 5.9927601810000004 6.2665033340000003  93.378509519999994 4.2912483220000004 6.5149712559999999  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 75.187057499999995 8.2862806320000004 0.9308573604  86.639251709999996 4.7779035570000001 1.5127212999999999  88.255981449999993 3.6329588890000002 1.263584614  100.33681489999999 1.7965744729999999 1.5105324979999999  
-77.877616880000005 11.103858949999999 1.734305263  85.735313419999997 7.439748764 2.9166333679999998  89.181121829999995 6.5491137500000001 3.6048867699999998  97.540199279999996 2.520875454 5.4421586990000002  
-79.742385859999999 13.47912502 3.659095287  85.077713009999997 10.13841343 4.2194414140000003  89.946800229999994 6.7391591069999999 4.8421506880000003  95.135070799999994 3.694579601 5.5957412719999997  
-82.388145449999996 13.58716297 5.0998134610000001  84.192146300000005 13.46281624 5.8437643049999997  90.843276979999999 9.3118209840000006 8.1449995039999994  92.434738159999995 8.1367416380000002 9.8175830840000007  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 82.114753719999996 1.650707841 0.8443614841  84.254455570000005 3.3659210210000001 0.26303312179999999  90.867500309999997 0.5626130104 0.27224364880000002  92.275596620000002 5.9109535219999998 1.152714968  
-80.329338070000006 8.2633419040000007 1.2273896929999999  84.926956180000005 5.1128768920000001 1.5237942929999999  89.962867739999993 4.3557839390000002 2.0511965750000001  95.22159576 2.5248229499999999 2.7018685339999999  
-77.575401310000004 9.6497831339999998 1.941636562  85.814102169999998 7.7093644140000004 2.7557187079999999  89.168273929999998 5.6438269620000003 3.3266277309999999  97.512847899999997 4.1017317770000004 4.761190891  
-75.809051510000003 19.318366999999999 2.5332343580000001  86.474906919999995 8.7249774930000008 4.8520293240000001  88.291336060000006 9.6374912259999999 5.1675739289999996  100.35971069999999 -3.3570120330000002 7.1282749179999998  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 74.427558899999994 9.2502593990000008 0.55688202379999996  80.236305239999993 4.3701190949999997 0.44858968259999998  84.627265929999993 2.278941154 0.36422094700000002  91.254638670000006 2.1910965440000001 0.26327016949999998  
-75.279777530000004 10.85935879 1.2317680120000001  79.996368410000002 7.6843009000000002 1.3073694709999999  84.734779360000005 5.4749684329999999 1.471983671  91.064559939999995 3.4864745140000002 2.178456068  
-74.987106319999995 13.153262140000001 1.7107660769999999  79.999305730000003 9.8903579710000002 2.1566829680000001  85.015701289999996 7.584828377 2.6814153190000001  89.937881469999994 5.9013676640000003 3.4087991710000001  
-75.822265630000004 14.955095289999999 3.1373450759999999  79.766662600000004 13.43874454 3.48429513  85.111030580000005 10.783109659999999 4.5064611430000001  89.789131159999997 7.2844495770000002 5.5988602639999998  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 72.483726500000003 11.766097070000001 0.89095664019999998  74.205886840000005 9.2674112320000006 0.59323912860000005  80.692810059999999 4.1738138200000003 0.50905466079999995  83.022949220000001 3.0470204349999999 0.086000405249999995  
-69.96156311 14.49371433 1.032214403  75.052093510000006 11.13879871 1.1851578949999999  79.830047609999994 7.6940646170000004 1.3018563990000001  85.62765503 5.1564579009999996 1.540648341  
-67.124061580000003 18.0818634 1.5428309440000001  75.90673065 12.586857800000001 1.864034534  79.249069210000002 10.38875198 2.0847644810000001  87.097000120000004 6.1576743130000002 2.815815449  
-64.582962039999998 19.995555880000001 1.8217949870000001  76.755287170000003 14.338018419999999 2.870505095  78.395881650000007 14.00581551 3.4087569709999999  89.661193850000004 9.1319417949999995 5.0754022599999997  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 63.953304289999998 18.68993378 0.56905841830000004  70.33550262 12.048669820000001 0.61498016119999999  74.704635620000005 9.6086969379999996 0.66164952519999998  80.845932009999999 2.5261135100000001 0.51139146089999998  
-63.846942900000002 17.701246260000001 1.009078264  70.382873540000006 14.523266789999999 1.1040607689999999  74.621582029999999 11.25190639 1.1651444440000001  81.130889890000006 7.2120933530000002 1.3100630040000001  
-63.660644529999999 19.639015199999999 1.597315431  70.447105410000006 15.666940690000001 1.653173327  74.550903320000003 13.61649227 1.791005492  81.349288939999994 8.685136795 2.2665402889999999  
-63.556541439999997 17.99022102 2.192090034  70.49421692 17.88458443 2.4617071149999998  74.466567990000001 14.96912575 2.6991748809999998  81.639495850000003 13.59245396 3.4541809560000001  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 62.872463230000001 20.006095890000001 0.29412266609999999  70.704544069999997 12.406970019999999 0.71571308369999997  74.309318540000007 11.294868470000001 0.86777091029999998  82.058242800000002 4.1691784859999999 1.33220005  
-63.709434510000001 18.488319400000002 1.7113950250000001  70.442878719999996 16.26785469 1.7005970479999999  74.519027710000003 13.308034899999999 1.783032537  81.481040949999993 9.7962427139999999 2.2395548820000002  
-64.335861210000004 20.28815651 2.4507236479999999  70.189430239999993 17.59722519 2.6603598590000002  74.906372070000003 16.160001749999999 3.0284361839999998  80.185104370000005 12.190832139999999 3.539969921  
-65.187660219999998 16.595727920000002 4.0282087329999996  69.925697330000006 20.710409160000001 4.4627184870000001  75.109527589999999 17.368240360000001 4.7261857989999996  79.636138919999993 18.724275590000001 5.3500742910000003  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 64.9072113 20.220577240000001 1.825616479  70.048851010000007 16.086036679999999 1.891028881  74.897338869999999 14.310421939999999 1.965641975  80.361785889999993 8.5203380580000001 2.345726252  
-64.28202057 18.888422009999999 2.5188627239999999  70.213127139999997 18.113807680000001 2.757413626  74.865478519999996 15.782024379999999 3.0998575690000001  80.324951170000006 13.548076630000001 3.6197111610000001  
-64.205276490000003 20.462371829999999 3.6414320469999999  70.224990840000004 18.82592773 3.8840782639999998  74.894752499999996 17.87773705 4.2578916549999999  80.196014399999996 14.570980069999999 4.9250063900000001  
-63.586532589999997 18.626892089999998 4.8591122630000001  70.388366700000006 20.23314285 5.3484959600000002  74.859970090000004 18.519910809999999 5.8171911239999998  80.171646120000005 19.10231018 6.4600744250000002  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 63.507125850000001 21.241542819999999 1.64754355  70.455032349999996 16.762966160000001 2.3609108920000001  74.672714229999997 16.163221360000001 2.6935358049999998  80.854110719999994 10.56409264 3.413345337  
-64.026000980000006 19.352457050000002 3.6781752110000001  70.269813540000001 19.290840150000001 3.8959486480000001  74.894729609999999 17.548833850000001 4.3190593719999999  80.151298519999997 15.87552166 4.9500551220000002  
-65.078552250000001 20.713472370000002 5.5834484099999999  69.967132570000004 19.724317549999999 5.6975145339999997  75.052894589999994 19.454383849999999 5.9788303379999999  79.821319579999994 16.868289950000001 6.5661783219999998  
-65.596534730000002 18.280866620000001 8.7682609560000007  69.782569890000005 20.774765009999999 8.1617374419999997  75.273155209999999 19.615325930000001 8.4169168469999995  79.124748229999994 21.051881789999999 8.4244518280000005  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 89.559013370000002 15.877869609999999 10.42998409  84.997322080000004 17.212413789999999 10.01687813  80.451766969999994 20.285476679999999 10.089159009999999  73.195716860000005 19.052715299999999 10.285858149999999  
-89.824836730000001 11.34927368 8.7693471909999996  84.964744569999993 16.190551760000002 8.4654254909999995  80.316238400000003 18.52349663 8.1474504470000007  73.770385739999995 20.951105120000001 7.7902832030000004  
-89.050979609999999 10.21237659 7.5671310419999998  85.217544559999993 14.397211070000001 7.2390451430000002  80.078918459999997 17.566097259999999 6.6576499939999998  74.466896059999996 19.058088300000001 6.0728387829999999  
-89.320289610000003 6.7366194730000002 6.0718293189999999  85.183410640000005 12.85349083 5.7250304219999997  79.946052550000005 15.390990260000001 5.1600947379999997  75.032432560000004 18.49501038 4.0638327600000004  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 70.133552550000005 18.664798739999998 2.418375492  74.890884400000004 15.20507813 2.7381193640000001  80.302970889999997 12.494783399999999 3.1775529379999998  83.897285460000006 10.10532856 3.912018776  
-69.733535770000003 18.824609760000001 3.797509909  75.07436371 17.809932709999998 4.3315958979999998  79.969062809999997 15.29742527 4.9983530040000002  85.049423219999994 13.06098652 5.7863392830000002  
-69.266609189999997 20.660747529999998 5.7259521480000002  75.216178889999995 19.065258029999999 5.9883799550000001  79.86872864 17.48833466 6.4995551110000003  85.308967589999995 14.117321970000001 7.1000022889999999  
-68.867469790000001 18.576152799999999 7.8690605160000002  75.400070189999994 20.66012001 8.4095182420000008  79.532272340000006 19.071153639999999 8.7467775339999996  86.470886230000005 17.47795868 9.1904411320000001  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 69.153823849999995 19.2204628 1.0994616749999999  81.633781429999999 11.33577919 3.532104731  84.311096190000001 10.72595024 4.1324844360000004  91.121833800000005 6.6686220169999997 5.5310597420000001  
-72.226760859999999 18.66544914 4.1930246350000004  80.776542660000004 15.140113830000001 5.0576033589999998  84.667121890000004 12.834697719999999 5.687906742  90.554962160000002 7.2401342389999996 6.5919508929999999  
-74.243110659999999 19.95859909 5.7778987879999999  80.140441890000005 17.187461849999998 6.5303292270000002  85.195182799999998 14.42747307 7.187394619  89.078849790000007 9.9432592389999996 7.4208478930000004  
-77.47111511 17.178796770000002 8.8409824369999992  79.239601140000005 20.28890419 8.7592382430000004  85.570449830000001 16.0882988 8.7091636660000002  88.478546140000006 11.922202110000001 8.8345680239999993  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 72.246551510000003 15.214371679999999 2.0797562599999999  80.859481810000005 10.3557539 2.490062714  84.315589900000006 7.8675565719999998 2.6993417740000001  91.878166199999995 6.4109601969999996 4.084210873  
-72.760482789999998 17.226274490000002 2.708090544  80.760498049999995 12.594281199999999 3.673787355  84.197563169999995 10.84933281 4.1737132069999996  92.449249269999996 5.443934917 5.5468268390000004  
-71.817283630000006 19.110490800000001 3.9747803209999999  80.838432310000002 14.866288190000001 4.968762398  84.829032900000001 12.611953740000001 5.6551914219999997  89.84544373 7.9567928309999996 6.5186023710000001  
-72.274269099999998 20.172607419999999 5.0422234540000002  80.766174320000005 17.024284359999999 6.744026184  84.661041260000005 15.195036890000001 7.2770071029999999  90.589607240000007 8.3011646270000004 7.6982712749999997  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 77.080497739999998 6.9998373989999996 0.9023358226  79.287925720000004 7.7897539140000003 0.93845915790000001  85.767791750000001 3.7298533919999999 1.3491090539999999  87.640876770000006 8.3217267990000003 1.9104398490000001  
-75.423133849999999 13.67195892 1.8808028699999999  79.907775880000003 10.03120708 2.224377155  84.945808409999998 8.1519212719999992 2.807944059  90.309005740000003 4.7730612749999999 3.549561024  
-72.277435299999993 16.739877700000001 2.786617041  80.841247559999999 12.7698822 3.5824337009999998  84.357589720000007 10.25988293 4.123206615  91.728347779999993 6.9625625610000004 5.3037567140000004  
-70.572853089999995 22.598527910000001 3.8596286769999999  81.467109679999993 14.48840141 5.599859715  83.558670039999996 14.68542671 5.7486143109999999  94.29812622 3.5202693940000001 8.0256118769999993  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 64.038085940000002 20.235717770000001 0.50218772889999996  76.856788640000005 8.3640909190000006 1.034925938  78.534828189999999 8.0634689329999993 0.87709611649999997  89.003936769999996 1.2706695800000001 1.4619671110000001  
-67.345489499999999 16.84353256 1.458460093  75.874336240000005 12.98760605 1.8626024720000001  79.157203670000001 10.50230026 2.1634168620000001  87.496871949999999 6.9519219400000001 3.0699861049999999  
-69.620681759999997 19.206842420000001 2.6893050669999998  75.080184939999995 15.509741780000001 3.0264637470000002  80.058616639999997 13.18219566 3.5189096929999999  84.685379029999993 9.8406972889999995 4.1374549869999999  
-73.017562870000006 14.85366821 4.3713979719999996  74.077659609999998 19.771209720000002 4.7534480090000004  80.671760559999996 14.968957899999999 5.3324260710000004  83.235275270000002 15.59017658 5.9245376590000003  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-9 0 0 0 0 3 3 4 4 8 8 69.676956180000005 17.76370811 1.541107416  75.071792599999995 13.287570000000001 2.0306396480000002  80.035949709999997 10.93414497 2.4356565479999999  84.784461980000003 7.4807987210000002 2.966073513  
-69.879859920000001 17.75123215 2.805466413  75.029335020000005 16.014068600000002 3.1032361979999998  80.002838130000001 12.98242188 3.5581378940000001  84.959358219999999 10.508946419999999 4.2411623000000001  
-69.6493988 19.755989069999998 3.8240971570000002  75.083633419999998 17.453916549999999 4.2783217430000002  80.016143799999995 15.33626366 4.9032664300000004  84.85185242 12.38863373 5.6136207579999997  
-69.85686493 17.8488121 5.2325081830000002  75.040657039999999 19.680278779999998 5.8363633159999999  79.980545039999996 16.845350270000001 6.4993143079999998  85.037208559999996 16.40306854 7.4618010520000002  
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
--3 1
--2 1
--1 1
-0 1
-1 1
-2 1
-3 1
-4 1
-
-Triangulations 12
-12 10 1 0.06583129916633
-91 11.8221269530993 9.94999977942823 91 10.2897003114331 8.9045864895427 91 11.123168907549 9.48546385384872 91 10.7086247554797 9.20224431454827 89.9999985447917 11.3362545017222 8.84881705362153 90.5703174867853 10.7434410496131 8.88124869869245 90.291235995075 11.0348569370171 8.86556011090349 89.9999958398958 12.92998808925 9.95000047435764 89.9999986569246 12.1951909941811 9.44872356315584 89.9999986832319 11.7835852471906 9.16463529828568 90.5759038741045 12.2994502810617 9.95000019832787 90.2964214953148 12.6078485416092 9.95000059170868 0 0.604624442225853 1 0.604819519992408 0.436545353361839 0.604759183970915 0.725040690189163 0.604494764107484 1 1 1 0.780454936239297 1 0.890227468119649 0 1 0.444444444444444 1 0.722222222222222 1 0 0.780344548233605 0 0.890172274116803 1 3 11 11 3 9 12 9 8 9 12 11 3 4 9 4 2 6 4 6 10 10 7 5 7 10 6 4 10 9 
-12 10 1 0.06583129916633
-89.9999958398958 12.92998808925 9.95000047435764 87.8834091980003 15.0430109595111 9.94999904172264 86.4964810899597 16.2065205907414 9.94999705540232 85.0000022795833 17.2574835275174 9.94999693511805 89.9999986569246 12.1951909941811 9.44872356315584 89.9999986832319 11.7835852471906 9.16463529828568 89.9999985447917 11.3362545017222 8.84881705362153 87.8164152064541 13.4901333009694 8.71308682392886 86.4631251440784 14.6752041169537 8.62277436457534 85.0000010347917 15.8033371473194 8.52449099372917 85.0000032850141 16.6370235299299 9.30070571642356 85.0000028231666 16.2322370576288 8.91314266425845 0 0 0 0.444444444444444 0 0.722222222222222 0 1 0.444444444444444 0 0.722222222222222 0 1 0 1 0.444444444444444 1 0.722222222222222 1 1 0.444444444444444 1 0.722222222222222 1 1 5 2 8 3 2 3 11 4 9 11 3 2 5 8 6 7 8 9 3 8 12 9 10 12 11 9 8 5 6 
-12 10 1 0.06583129916633
-91 10.2897003114331 8.9045864895427 91 8.68210536123528 7.63496833970034 91 9.55564338138305 8.35457051567079 91 9.10376192728806 7.99162522960735 89.9999984129861 9.63609133568403 7.56582537454167 90.4791075956943 9.1796098584643 7.59940962528095 90.7471900178788 8.92369214200347 7.61785873141418 89.9999985447917 11.3362545017222 8.84881705362153 90.0000007104569 10.5575701050795 8.28200868547527 90.0000007039794 10.0997952645434 7.9337827553948 90.5703174867853 10.7434410496131 8.88124869869245 90.291235995075 11.0348569370171 8.86556011090349 0 0.604818765723003 1 0.611496094396116 0.441118397295684 0.607830186302552 0.730621406181099 0.609364050433915 1 1 1 0.827332130283996 1 0.719414711711494 0 1 0.444444444444444 1 0.722222222222222 1 0 0.780454936239297 0 0.890227468119649 1 3 11 11 3 9 12 9 8 9 12 11 3 4 9 4 2 7 4 7 6 10 6 5 6 10 4 4 10 9 
-12 10 1 0.06583129916633
-89.9999985447917 11.3362545017222 8.84881705362153 85.0000010347917 15.8033371473194 8.52449099372917 87.8164152064541 13.4901333009694 8.71308682392886 86.4631251440784 14.6752041169537 8.62277436457534 90.0000007104569 10.5575701050795 8.28200868547527 90.0000007039794 10.0997952645434 7.9337827553948 89.9999984129861 9.63609133568403 7.56582537454167 87.7446761963527 11.7599312909982 7.39756010227401 86.4319602734677 12.9401203469063 7.28739087696172 84.9999961607292 14.1568349074861 7.15651154836111 85.0000105004698 15.0850533272509 7.90729242753376 85.0000104828043 14.6308371656642 7.53469330115276 0 0 0 1 0 0.444444444444444 0 0.722222222222222 0.444444444444444 0 0.722222222222222 0 1 0 1 0.444444444444444 1 0.722222222222222 1 1 0.444444444444444 1 0.722222222222222 1 1 5 3 8 4 3 4 11 2 9 11 4 3 5 8 6 7 8 9 4 8 12 9 10 12 11 9 8 5 6 
-12 10 1 0.06583129916633
-91 7.61636810981439 6.6169437167634 91 8.68210536123528 7.63496833970034 91 8.08274258370082 7.08859337954805 91 8.3800906875744 7.36575588889635 90.0000024117361 8.39076750746528 6.47641750670833 90.4483502128265 8.04344178840985 6.540225482921 90.7250010724211 7.8292170903827 6.57896471360288 89.9999984129861 9.63609133568403 7.56582537454167 90.0000046990569 8.93331708929736 6.97226487243023 90.0000033371764 9.28093559588504 7.27209640232526 90.4791075956943 9.1796098584643 7.59940962528095 90.7471900178788 8.92369214200347 7.61785873141418 0 0.39924787923266 1 0.388502517921781 0.450153418691572 0.394665173656325 0.726255493207909 0.391612621471028 0 0 0 0.177444136230332 0 0.288346721374289 1 0 0.444444444444444 0 0.722222222222222 0 1 0.172667869716004 1 0.280585288288506 5 9 6 6 9 3 7 3 1 3 7 6 9 11 3 10 8 11 11 4 3 4 12 2 12 4 11 11 9 10 
-12 10 1 0.06583129916633
-84.9999954447569 12.2395795864028 5.71940350527083 87.2258451795873 10.5383523755614 6.06445414042166 88.6123119601658 9.46643188689747 6.27349639416935 90.0000024117361 8.39076750746528 6.47641750670833 85.0000009103776 13.103749219542 6.34937907888375 85.0000013066084 13.6305094768017 6.74721560889661 84.9999961607292 14.1568349074861 7.15651154836111 89.9999984129861 9.63609133568403 7.56582537454167 87.7446761963527 11.7599312909982 7.39756010227401 86.4319602734677 12.9401203469063 7.28739087696172 90.0000046990569 8.93331708929736 6.97226487243023 90.0000033371764 9.28093559588504 7.27209640232526 0 0 0 0.444444444444444 0 0.722222222222222 0 1 0.444444444444444 0 0.722222222222222 0 1 0 1 1 1 0.555555555555556 1 0.277777777777778 0.444445275561795 1 0.722223234764157 1 1 5 2 9 3 2 3 11 4 12 11 3 2 5 10 6 7 10 10 9 2 12 9 8 12 3 9 5 6 10 
-12 10 1 0.06583129916633
-81 18.0954639604535 8.27666295300412 81 16.7202928907912 6.7482503535081 81 17.5174605151018 7.56982648796281 81 17.1290972301253 7.15036621605728 85.0000010347917 15.8033371473194 8.52449099372917 83.2840546680303 16.9298457994121 8.41307323433103 82.1700620313882 17.5432124717643 8.34464942664314 84.9999961607292 14.1568349074861 7.15651154836111 85.0000105004698 15.0850533272509 7.90729242753376 85.0000104828043 14.6308371656642 7.53469330115276 82.8455001946067 15.695123842792 6.94280766204936 83.9460999002772 14.9650436060387 7.05430486387075 0 0.816714986046588 1 0.811510907283606 0.447853122467915 0.814375551342694 0.72857702128032 0.812997763512315 0 0 0 0.362983812083232 0 0.589848694635251 1 0 0.444444444444444 0 0.722222222222222 0 1 0.450838588219613 1 0.225419294109806 5 9 6 11 7 6 7 3 1 4 3 7 6 9 12 10 8 12 12 11 6 4 11 2 4 7 11 9 10 12 
-16 18 1 0.06583129916633
-81 19.1034753858841 9.94999708635077 81 18.0954639604535 8.27666295300412 81 18.692799746979 9.16587329691677 81 18.4057919661286 8.70903412098806 85.0000022795833 17.2574835275174 9.94999693511805 83.2886582585346 18.2142446462459 9.95000011018904 82.1724218230139 18.7000339135122 9.94999999735629 85.0000010347917 15.8033371473194 8.52449099372917 85.0000032850141 16.6370235299299 9.30070571642356 85.0000028231666 16.2322370576288 8.91314266425845 83.2840546680303 16.9298457994121 8.41307323433103 82.1700620313882 17.5432124717643 8.34464942664314 83.2867678973112 17.679939548855 9.24630307121849 83.2851150558395 17.3060950984172 8.81560596704417 82.1713603881079 18.2270198218354 9.21316847609289 82.1706901541614 17.8896866928851 8.76215991488997 0 0.816686294565297 1 0.816713899163454 0.453308544053228 0.816694638289028 0.730372493662776 0.81673831089853 0 0 0 0.362971448851166 0 0.589828604383144 1 0 0.444444444444444 0 0.722222222222222 0 1 0.362983812083232 1 0.589848694635251 0.444444444444444 0.362971448851166 0.730372493662776 0.362971448851166 0.444444444444444 0.589848694635251 0.730372493662776 0.589848694635251 6 5 9 9 13 6 14 15 13 6 13 7 1 7 15 15 3 1 16 3 15 7 13 15 13 9 10 14 16 15 14 10 8 8 11 14 14 11 16 4 3 16 4 16 2 12 2 16 16 11 12 13 10 14 
-12 10 1 0.06583129916633
-89.9999989364447 14.4348512063048 11 85.000004524897 18.104871886 11 88.2439003223341 16.0051819268452 11 86.7153135318197 17.1179439265365 11 89.9999958398958 12.92998808925 9.95000047435764 90.000006313919 13.8211879962488 10.5632061620147 90.0000061710604 13.3974549208763 10.2701636154046 85.0000022795833 17.2574835275174 9.94999693511805 87.8834091980003 15.0430109595111 9.94999904172264 86.4964810899597 16.2065205907414 9.94999705540232 85.0000029254663 17.7483018062769 10.5273025570473 85.0000022170437 17.5093658745232 10.2374763083745 0.494106025260182 0 0.469900024026589 1 0.483303516265462 0.373061978264389 0.476326459281817 0.68002907240889 1 0 0.718947383975015 0 0.859473691987508 0 1 1 1 0.444444444444444 1 0.722222222222222 0.705500359935401 1 0.852750179967701 1 3 1 6 9 4 3 2 4 11 10 11 4 3 6 7 7 5 9 10 4 9 12 10 8 12 11 10 9 3 7 
-15 13 1 0.06583129916633
-86.1783785373219 9.49601079415537 4.50398920584463 90.0000015631408 7.95233966419322 6.04766033580677 87.9670488493818 8.81392579095986 5.18607420904014 89.0101143720472 8.37992877785313 5.62007122214687 85.0000015094792 10.2013896183368 4.30949029896875 85.5250163095577 9.88922041496355 4.39448264541289 85.8520498299434 9.69297743286791 4.4487877613389 85.0000031464011 11.1118946806419 4.92748421303749 85.0000036225375 11.6735312450656 5.3182682611855 84.9999954447569 12.2395795864028 5.71940350527083 90.0000024117361 8.39076750746528 6.47641750670833 87.2258451795873 10.5383523755614 6.06445414042166 88.6123119601658 9.46643188689747 6.27349639416935 90.0000017321744 8.14553422057732 6.23987397592818 90.0000017737862 8.2675726163693 6.35861032764702 0 0.234549808176747 0.647032323343157 1 0.262109516966384 0.593109607865025 0.444815946709569 0.802194208612471 0 0 0 0.104244255214751 0 0.169396914723971 0.444444444444444 0 0.722222222222222 0 1 0 1 1 1 0.444444444444444 1 0.722222222222222 0.803906845341482 1 0.901953422670741 1 5 8 6 6 8 7 1 7 9 3 1 12 3 13 4 8 9 7 9 10 12 13 3 12 13 14 4 2 4 14 11 15 13 14 13 15 12 1 9 
-12 10 1 0.06583129916633
-81 14.6862373140109 5.10916985938746 81 16.7202928907912 6.7482503535081 81 15.6440160642965 5.81585874819107 81 16.1998274547061 6.27926033325474 84.9999961607292 14.1568349074861 7.15651154836111 82.8455001946067 15.695123842792 6.94280766204936 83.9460999002772 14.9650436060387 7.05430486387075 84.9999954447569 12.2395795864028 5.71940350527083 85.0000009103776 13.103749219542 6.34937907888375 85.0000013066084 13.6305094768017 6.74721560889661 82.8688871592675 13.6725252586795 5.38607430592203 83.9270774195793 13.0062416776693 5.55065406428983 0 0.168245174353375 1 0.188490679297323 0.445948243311478 0.176950522790895 0.730358814442242 0.182444931773069 1 1 1 0.549161411780387 1 0.774580705890194 0 1 0.444444444444444 1 0.722222222222222 1 0 0.537914173870596 0 0.768957086935298 1 3 11 6 12 11 12 9 8 7 9 12 11 3 6 4 2 6 7 12 6 10 7 5 10 9 7 6 3 4 
-12 10 1 0.06583129916633
-81 12.4860288197134 3.74435292573632 81 14.6862373140109 5.10916985938746 81 13.4833953697487 4.32542993167102 81 14.0673015946872 4.69297370251077 84.9999954447569 12.2395795864028 5.71940350527083 82.8688871592675 13.6725252586795 5.38607430592203 83.9270774195793 13.0062416776693 5.55065406428983 85.0000015094792 10.2013896183368 4.30949029896875 85.0000031464011 11.1118946806419 4.92748421303749 85.0000036225375 11.6735312450656 5.3182682611855 82.7507514817382 11.5045463357956 3.97095187526382 83.8220231335164 10.8906978826326 4.12640721559015 0 0.181114278437512 1 0.168245526127611 0.445822117677242 0.175277386739194 0.713302351433368 0.171282143796614 1 1 1 0.537914173870596 1 0.768957086935298 0 1 0.444444444444444 1 0.722222222222222 1 0 0.545063578102623 0 0.772531789051312 1 3 11 7 12 11 12 9 8 7 9 12 11 3 6 4 2 6 7 11 6 10 7 5 10 9 7 6 3 4 
-
-TShapes 542
-Ve
-0.000106364940939169
-91 -8.02715773595697e-05 0
-0 0
-
-0101100
-*
-Ve
-0.000132564434852941
-91 0.58444133216986 7.49121129777525e-09
-0 0
-
-0101100
-*
-Ed
- 1e-07 1 1 0
-1  1 0 0 1
-2  1 1 0 0 1
-4 CN 1 0 1 0
-0
-
-0101000
-+542 0 -541 0 *
-Ve
-4.48247165110009e-05
-84.9999626995833 -0.000208381321981116 0
-0 0
-
-0101100
-*
-Ed
- 1e-07 1 1 0
-1  2 0 0 0.80000288773947
-2  2 1 0 0 0.80000288773947
-0
-
-0101000
-+539 0 -542 0 *
-Ve
-0.000106364940939169
-85.0000068360417 0.58441566796437 8.71180554999539e-09
-0 0
-
-0101100
-*
-Ed
- 4.48247165110009e-05 1 1 0
-1  3 0 0 1
-2  3 2 0 0 1
-2  4 1 0 0 1
-0
-
-0101000
-+539 0 -537 0 *
-Ve
-0.000132243402540292
-89.9999998934386 0.584424163629603 1.06533333305459e-08
-0 0
-
-0101100
-*
-Ed
- 0.000106364940939169 1 1 0
-1  4 0 0 0.666663792412277
-2  5 1 0 0 0.666663792412277
-2  6 3 0 0 0.666663792412277
-0
-
-0101000
-+537 0 -535 0 *
-Ed
- 9.6642946761428e-05 1 1 0
-1  4 0 0.666663792412277 0.799994824123493
-2  7 1 0 0.666663792412277 0.799994824123493
-2  8 4 0 0.666663792412277 0.799994824123493
-0
-
-0101000
--541 0 +535 0 *
-Wi
-
-0101000
--540 0 -538 0 +536 0 +534 0 +533 0 *
-Fa
-0  1e-07 1 0
-
-0111000
-+532 0 *
-Ve
-4.42093720913255e-05
-80.0000306223611 -0.000145884971833432 0
-0 0
-
-0101100
-*
-Ed
- 1e-07 1 1 0
-1  5 0 0 1
-2  9 2 0 0 1
-0
-
-0101000
-+530 0 -539 0 *
-Ve
-4.45088228914179e-05
-80.0000117886111 0.596342476226611 6.99444436221062e-10
-0 0
-
-0101100
-*
-Ed
- 4.42093720913255e-05 1 1 0
-1  6 0 0 1
-2  10 5 0 0 1
-2  11 2 0 0 1
-0
-
-0101000
-+530 0 -528 0 *
-Ed
- 4.45088228914179e-05 1 1 0
-1  7 0 0 1
-2  12 6 0 0 1
-2  13 2 0 0 1
-0
-
-0101000
-+537 0 -528 0 *
-Wi
-
-0101000
--529 0 +527 0 -526 0 -536 0 *
-Fa
-0  1e-07 2 0
-
-0111000
-+525 0 *
-Ve
-1.11284457766635e-05
-74.9999541179167 -7.15507500004264e-06 0
-0 0
-
-0101100
-*
-Ed
- 1e-07 1 1 0
-1  8 0 0 1
-2  14 5 0 0 1
-0
-
-0101000
-+523 0 -530 0 *
-Ve
-4.42220270446084e-05
-75.0000054046528 2.74175728668021 1.14079513904053e-08
-0 0
-
-0101100
-*
-Ed
- 1.11284457766635e-05 1 1 0
-1  9 0 0 1
-2  15 7 0 0 1
-2  16 5 0 0 1
-0
-
-0101000
-+523 0 -521 0 *
-Ed
- 1.36810796826077e-05 1 1 0
-1  10 0 0 1
-2  17 5 0 0 1
-2  18 8 0 0 1
-0
-
-0101000
-+521 0 -528 0 *
-Wi
-
-0101000
--522 0 +520 0 +519 0 -527 0 *
-Fa
-0  1e-07 5 0
-
-0111000
-+518 0 *
-Ve
-6.06571988742403e-05
-70.00001282125 0.000135122016667211 0
-0 0
-
-0101100
-*
-Ed
- 1e-07 1 1 0
-1  11 0 0 1
-2  19 7 0 0 1
-0
-
-0101000
-+516 0 -523 0 *
-Ve
-6.58845916793615e-05
-70.0000014834375 6.44284568122326 7.01666665294995e-10
-0 0
-
-0101100
-*
-Ed
- 6.06571988742403e-05 1 1 0
-1  12 0 0 1
-2  20 7 0 0 1
-2  21 9 0 0 1
-0
-
-0101000
-+516 0 -514 0 *
-Ed
- 4.18860079465931e-06 1 1 0
-1  13 0 0 1
-2  22 10 0 0 1
-2  23 7 0 0 1
-0
-
-0101000
-+521 0 -514 0 *
-Wi
-
-0101000
--515 0 +513 0 -512 0 -520 0 *
-Fa
-0  1e-07 7 0
-
-0111000
-+511 0 *
-Ve
-8.11446712234462e-05
-64.9999481822222 0.000207497001387669 0
-0 0
-
-0101100
-*
-Ed
- 1e-07 1 1 0
-1  14 0 0 1
-2  24 9 0 0 1
-0
-
-0101000
-+509 0 -516 0 *
-Ve
-8.11446712234462e-05
-65.0000068225694 10.4862125192861 4.96418055551728e-09
-0 0
-
-0101100
-*
-Ed
- 8.11446712234462e-05 1 1 0
-1  15 0 0 1
-2  25 11 0 0 1
-2  26 9 0 0 1
-0
-
-0101000
-+509 0 -507 0 *
-Ed
- 6.58845916793615e-05 1 1 0
-1  16 0 0 1
-2  27 12 0 0 1
-2  28 9 0 0 1
-0
-
-0101000
-+514 0 -507 0 *
-Wi
-
-0101000
--508 0 +506 0 -505 0 -513 0 *
-Fa
-0  1e-07 9 0
-
-0111000
-+504 0 *
-Ve
-2.79165048058623e-05
-60.0000078664583 0.000138785579720802 0
-0 0
-
-0101100
-*
-Ed
- 1e-07 1 1 0
-1  17 0 0 1
-2  29 11 0 0 1
-0
-
-0101000
-+502 0 -509 0 *
-Ve
-6.56518577966825e-05
-59.9999968991216 14.0663752954828 7.03630503728798e-09
-0 0
-
-0101100
-*
-Ed
- 2.75873009040785e-05 1 1 0
-1  18 0 0 1
-2  30 11 0 0 1
-0
-
-0101000
-+502 0 -500 0 *
-Ed
- 6.30204600120393e-05 1 1 0
-1  19 0 0 1
-2  31 11 0 0 1
-2  32 13 0 0 1
-0
-
-0101000
-+500 0 -507 0 *
-Wi
-
-0101000
--501 0 +499 0 +498 0 -506 0 *
-Fa
-0  1e-07 11 0
-
-0111000
-+497 0 *
-Ve
-5.31185825788818e-05
-65.0000014186111 13.7026770037639 0.165426750187097
-0 0
-
-0101100
-*
-Ed
- 3.01511635762364e-05 1 1 0
-1  20 0 0 1
-2  33 13 0 0 1
-2  34 12 0 0 1
-0
-
-0101000
-+507 0 -495 0 *
-Ve
-7.28995204461792e-05
-59.9999742893895 15.9635247704498 0.153884315553201
-0 0
-
-0101100
-*
-Ed
- 4.24581212646297e-05 1 1 0
-1  21 0 0 1
-2  35 13 0 0 1
-0
-
-0101000
-+500 0 -493 0 *
-Ed
- 5.31185825788818e-05 1 1 0
-1  22 0 0 1
-2  36 13 0 0 1
-2  37 14 0 0 1
-0
-
-0101000
-+495 0 -493 0 *
-Wi
-
-0101000
--494 0 -498 0 +492 0 -491 0 *
-Fa
-0  1e-07 13 0
-
-0111000
-+490 0 *
-Ve
-2.71237308143473e-05
-69.9999998953472 9.82419028248264 0.173822869324563
-0 0
-
-0101100
-*
-Ed
- 4.99104695352724e-06 1 1 0
-1  23 0 0 1
-2  38 10 0 0 1
-2  39 12 0 0 1
-0
-
-0101000
-+514 0 -488 0 *
-Ed
- 2.71237308143473e-05 1 1 0
-1  24 0 0 1
-2  40 12 0 0 1
-2  41 15 0 0 1
-0
-
-0101000
-+488 0 -495 0 *
-Wi
-
-0101000
--487 0 +505 0 +494 0 -486 0 *
-Fa
-0  1e-07 12 0
-
-0111000
-+485 0 *
-Ve
-4.4828354389927e-05
-74.99999896875 5.77371237922118 0.178579553344549
-0 0
-
-0101100
-*
-Ed
- 4.42220270446084e-05 1 1 0
-1  25 0 0 1
-2  42 10 0 0 1
-2  43 8 0 0 1
-0
-
-0101000
-+521 0 -483 0 *
-Ed
- 1.88986018320085e-05 1 1 0
-1  26 0 0 1
-2  44 16 0 0 1
-2  45 10 0 0 1
-0
-
-0101000
-+488 0 -483 0 *
-Wi
-
-0101000
--482 0 +512 0 +487 0 +481 0 *
-Fa
-0  1e-07 10 0
-
-0111000
-+480 0 *
-Ve
-4.4828354389927e-05
-80.0000020402083 2.80818951430271 0.179547936047569
-0 0
-
-0101100
-*
-Ed
- 9.50874022299606e-06 1 1 0
-1  27 0 0 1
-2  46 6 0 0 1
-2  47 8 0 0 1
-0
-
-0101000
-+528 0 -478 0 *
-Ed
- 4.4828354389927e-05 1 1 0
-1  28 0 0 1
-2  48 8 0 0 1
-2  49 17 0 0 1
-0
-
-0101000
-+478 0 -483 0 *
-Wi
-
-0101000
--477 0 -519 0 +482 0 -476 0 *
-Fa
-0  1e-07 8 0
-
-0111000
-+475 0 *
-Ve
-1.05642175606207e-05
-85.0000012181944 1.4081461282442 0.176903592677951
-0 0
-
-0101100
-*
-Ed
- 8.37003548886976e-06 1 1 0
-1  29 0 0 1
-2  50 6 0 0 1
-2  51 3 0 0 1
-0
-
-0101000
-+537 0 -473 0 *
-Ed
- 3.96962687436499e-06 1 1 0
-1  30 0 0 1
-2  52 6 0 0 1
-2  53 18 0 0 1
-0
-
-0101000
-+473 0 -478 0 *
-Wi
-
-0101000
--472 0 +526 0 +477 0 -471 0 *
-Fa
-0  1e-07 6 0
-
-0111000
-+470 0 *
-Ve
-0.000132564434852941
-89.9999931135069 1.04427273662222 0.174812063931285
-0 0
-
-0101100
-*
-Ed
- 0.000132243402540292 1 1 0
-1  31 0 0 1
-2  54 3 0 0 1
-2  55 4 0 0 1
-0
-
-0101000
-+535 0 -468 0 *
-Ed
- 6.35341597896184e-06 1 1 0
-1  32 0 0 1
-2  56 3 0 0 1
-2  57 19 0 0 1
-0
-
-0101000
-+468 0 -473 0 *
-Wi
-
-0101000
--467 0 -534 0 +472 0 -466 0 *
-Fa
-0  1e-07 3 0
-
-0111000
-+465 0 *
-Ve
-0.000132564434852941
-91 0.996835572811552 0.176469571545411
-0 0
-
-0101100
-*
-Ed
- 1e-07 1 1 0
-1  33 0 0 1
-2  58 4 0 0 1
-4 CN 4 0 4 0
-0
-
-0101000
--463 0 +541 0 *
-Ed
- 0.000132564434852941 1 1 0
-1  34 0 0.610636491492605 1
-2  59 4 0 0.610636491492605 1
-2  60 20 0 0.610636491492605 1
-0
-
-0101000
-+463 0 -468 0 *
-Wi
-
-0101000
--462 0 -533 0 +467 0 -461 0 *
-Fa
-0  1e-07 4 0
-
-0111000
-+460 0 *
-Ve
-0.000132564434852941
-91 2.14674389292155 0.815347438095333
-0 0
-
-0101100
-*
-Ed
- 1e-07 1 1 0
-1  35 0 0 1
-2  61 20 0 0 1
-4 CN 20 0 20 0
-0
-
-0101000
--458 0 +463 0 *
-Ve
-2.09007955177743e-05
-90.0000002382292 2.22963405825694 0.768185029009722
-0 0
-
-0101100
-*
-Ed
- 6.68176061621384e-06 1 1 0
-1  36 0 0 1
-2  62 20 0 0 1
-2  63 19 0 0 1
-0
-
-0101000
-+468 0 -456 0 *
-Ed
- 6.68208547009024e-06 1 1 0
-1  37 0 0 0.399331834520139
-2  64 20 0 0 0.399331834520139
-2  65 21 0 0 0.399331834520139
-0
-
-0101000
--458 0 +456 0 *
-Wi
-
-0101000
--457 0 +461 0 +455 0 +454 0 *
-Fa
-0  1e-07 20 0
-
-0111000
-+453 0 *
-Ve
-2.21045941097868e-05
-85.0000002117014 3.02250816140694 0.640571071790451
-0 0
-
-0101100
-*
-Ed
- 1.05642175606207e-05 1 1 0
-1  38 0 0 1
-2  66 18 0 0 1
-2  67 19 0 0 1
-0
-
-0101000
-+473 0 -451 0 *
-Ed
- 2.32481486968188e-06 1 1 0
-1  39 0 0 1
-2  68 22 0 0 1
-2  69 19 0 0 1
-0
-
-0101000
-+451 0 -456 0 *
-Wi
-
-0101000
-+466 0 +450 0 +449 0 -455 0 *
-Fa
-0  1e-07 19 0
-
-0111000
-+448 0 *
-Ve
-1.18754887159834e-05
-79.999999682118 5.07520279449278 0.595053373678229
-0 0
-
-0101100
-*
-Ed
- 1.18754887159834e-05 1 1 0
-1  40 0 0 1
-2  70 17 0 0 1
-2  71 18 0 0 1
-0
-
-0101000
-+478 0 -446 0 *
-Ed
- 7.53528706151755e-07 1 1 0
-1  41 0 0 1
-2  72 18 0 0 1
-2  73 23 0 0 1
-0
-
-0101000
-+446 0 -451 0 *
-Wi
-
-0101000
-+471 0 +445 0 +444 0 -450 0 *
-Fa
-0  1e-07 18 0
-
-0111000
-+443 0 *
-Ve
-1.38589868389421e-05
-75.0000031535417 8.28421165700312 0.550464560986389
-0 0
-
-0101100
-*
-Ed
- 7.31710163299559e-06 1 1 0
-1  42 0 0 1
-2  74 17 0 0 1
-2  75 16 0 0 1
-0
-
-0101000
-+483 0 -441 0 *
-Ed
- 1.18494166306383e-05 1 1 0
-1  43 0 0 1
-2  76 24 0 0 1
-2  77 17 0 0 1
-0
-
-0101000
-+441 0 -446 0 *
-Wi
-
-0101000
-+476 0 +440 0 +439 0 -445 0 *
-Fa
-0  1e-07 17 0
-
-0111000
-+438 0 *
-Ve
-2.48188108077455e-05
-69.9999960797917 12.1427858566979 0.515870183066493
-0 0
-
-0101100
-*
-Ed
- 2.00861778080046e-05 1 1 0
-1  44 0 0 1
-2  78 16 0 0 1
-2  79 15 0 0 1
-0
-
-0101000
-+488 0 -436 0 *
-Ed
- 4.36990101964063e-06 1 1 0
-1  45 0 0 1
-2  80 25 0 0 1
-2  81 16 0 0 1
-0
-
-0101000
-+436 0 -441 0 *
-Wi
-
-0101000
--481 0 +435 0 +434 0 -440 0 *
-Fa
-0  1e-07 16 0
-
-0111000
-+433 0 *
-Ve
-2.18191363515606e-05
-65.0000032830556 15.5205120868125 0.496451221033681
-0 0
-
-0101100
-*
-Ed
- 2.18191363515606e-05 1 1 0
-1  46 0 0 1
-2  82 14 0 0 1
-2  83 15 0 0 1
-0
-
-0101000
-+495 0 -431 0 *
-Ed
- 1.28866976312779e-05 1 1 0
-1  47 0 0 1
-2  84 15 0 0 1
-2  85 26 0 0 1
-0
-
-0101000
-+431 0 -436 0 *
-Wi
-
-0101000
-+486 0 +430 0 +429 0 -435 0 *
-Fa
-0  1e-07 15 0
-
-0111000
-+428 0 *
-Ve
-3.22309152116411e-05
-59.9999976164151 17.1397658485617 0.49425861458974
-0 0
-
-0101100
-*
-Ed
- 2.43956560058471e-05 1 1 0
-1  48 0 0 1
-2  86 14 0 0 1
-0
-
-0101000
-+493 0 -426 0 *
-Ed
- 1.35089550642776e-05 1 1 0
-1  49 0 0 1
-2  87 14 0 0 1
-2  88 27 0 0 1
-0
-
-0101000
-+426 0 -431 0 *
-Wi
-
-0101000
-+491 0 +425 0 +424 0 -430 0 *
-Fa
-0  1e-07 14 0
-
-0111000
-+423 0 *
-Ve
-2.32141810903688e-05
-59.9999977674123 18.1701431573532 1.03722297638841
-0 0
-
-0101100
-*
-Ed
- 2.02147057471086e-05 1 1 0
-1  50 0 0 1
-2  89 27 0 0 1
-0
-
-0101000
-+426 0 -421 0 *
-Ve
-1.54324786902773e-05
-65.0000025698264 17.0650296640278 1.06010102884653
-0 0
-
-0101100
-*
-Ed
- 1.54324786902773e-05 1 1 0
-1  51 0 0 1
-2  90 28 0 0 1
-2  91 27 0 0 1
-0
-
-0101000
-+421 0 -419 0 *
-Ed
- 1.46731301715077e-05 1 1 0
-1  52 0 0 1
-2  92 26 0 0 1
-2  93 27 0 0 1
-0
-
-0101000
-+431 0 -419 0 *
-Wi
-
-0101000
--424 0 +420 0 +418 0 -417 0 *
-Fa
-0  1e-07 27 0
-
-0111000
-+416 0 *
-Ve
-4.01180822282458e-05
-59.99999682 18.8951259716667 1.63324764065
-0 0
-
-0101100
-*
-Ed
- 1.74617025210469e-05 1 1 0
-1  53 0 0 1
-2  94 28 0 0 1
-0
-
-0101000
-+421 0 -414 0 *
-Ve
-1.13272157679175e-05
-65.0000025559722 18.0397955506944 1.64497035253229
-0 0
-
-0101100
-*
-Ed
- 4.90987002931649e-06 1 1 0
-1  54 0 0 1
-2  95 28 0 0 1
-2  96 29 0 0 1
-0
-
-0101000
-+414 0 -412 0 *
-Ed
- 2.40301865686349e-06 1 1 0
-1  55 0 0 1
-2  97 28 0 0 1
-2  98 30 0 0 1
-0
-
-0101000
-+419 0 -412 0 *
-Wi
-
-0101000
--418 0 +413 0 +411 0 -410 0 *
-Fa
-0  1e-07 28 0
-
-0111000
-+409 0 *
-Ve
-5.3014988390372e-05
-59.99999428 19.6022948675 2.57416473833333
-0 0
-
-0101100
-*
-Ed
- 3.58336901042791e-05 1 1 0
-1  56 0 0 1
-2  99 29 0 0 1
-0
-
-0101000
-+414 0 -407 0 *
-Ve
-2.43240941541086e-05
-65.0000039734722 19.0493349621181 2.64314961526042
-0 0
-
-0101100
-*
-Ed
- 1.10487634461322e-05 1 1 0
-1  57 0 0 1
-2  100 31 0 0 1
-2  101 29 0 0 1
-0
-
-0101000
-+407 0 -405 0 *
-Ed
- 1.13272157679175e-05 1 1 0
-1  58 0 0 1
-2  102 32 0 0 1
-2  103 29 0 0 1
-0
-
-0101000
-+412 0 -405 0 *
-Wi
-
-0101000
--411 0 +406 0 +404 0 -403 0 *
-Fa
-0  1e-07 29 0
-
-0111000
-+402 0 *
-Ve
-2.79627244241075e-05
-59.9999982019445 19.95393356 3.63946958358333
-0 0
-
-0101100
-*
-Ed
- 1.10240165612044e-05 1 1 0
-1  59 0 0 1
-2  104 31 0 0 1
-0
-
-0101000
-+407 0 -400 0 *
-Ve
-2.43240941541086e-05
-65.0000078159028 19.6447051436111 3.73591221805069
-0 0
-
-0101100
-*
-Ed
- 2.32039219872522e-05 1 1 0
-1  60 0 0 1
-2  105 33 0 0 1
-2  106 31 0 0 1
-0
-
-0101000
-+400 0 -398 0 *
-Ed
- 2.43240941541086e-05 1 1 0
-1  61 0 0 1
-2  107 31 0 0 1
-2  108 34 0 0 1
-0
-
-0101000
-+405 0 -398 0 *
-Wi
-
-0101000
--404 0 +399 0 +397 0 -396 0 *
-Fa
-0  1e-07 31 0
-
-0111000
-+395 0 *
-Ve
-4.67019248290997e-05
-59.9999983030556 20.00000106 4.30430406977778
-0 0
-
-0101100
-*
-Ed
- 1.55240150972988e-05 1 1 0
-1  62 0 0 1
-2  109 33 0 0 1
-0
-
-0101000
-+400 0 -393 0 *
-Ve
-3.19115800279182e-05
-65.000006762309 20.0000023845486 5.82328700209896
-0 0
-
-0101100
-*
-Ed
- 1.72581258522984e-05 1 1 0
-1  63 0 0 1
-2  110 35 0 0 1
-2  111 33 0 0 1
-0
-
-0101000
-+391 0 -393 0 *
-Ed
- 1.72887361708634e-05 1 1 0
-1  64 0 0 1
-2  112 36 0 0 1
-2  113 33 0 0 1
-0
-
-0101000
-+398 0 -391 0 *
-Wi
-
-0101000
--397 0 +392 0 -390 0 -389 0 *
-Fa
-0  1e-07 33 0
-
-0111000
-+388 0 *
-Ve
-4.87763637124305e-05
-65.0000015894792 20.0000008280208 9.95000056915278
-0 0
-
-0101100
-*
-Ed
- 3.19115800279182e-05 1 1 0
-1  65 0 0 1
-2  114 37 0 0 1
-2  115 35 0 0 1
-0
-
-0101000
-+391 0 -386 0 *
-Ve
-6.95746077108423e-05
-59.9999687075368 20.0000002640164 9.95000038429044
-0 0
-
-0101100
-*
-Ed
- 4.53286142350298e-05 1 1 0
-1  66 0 0 1
-2  116 35 0 0 1
-0
-
-0101000
-+393 0 -384 0 *
-Ed
- 4.87763637124305e-05 1 1 0
-1  67 0 0 1
-2  117 35 0 0 1
-2  118 38 0 0 1
-0
-
-0101000
-+386 0 -384 0 *
-Wi
-
-0101000
--385 0 +390 0 +383 0 -382 0 *
-Fa
-0  1e-07 35 0
-
-0111000
-+381 0 *
-Ve
-3.94941334346732e-05
-69.9999999213889 19.9999964361458 7.89309105981944
-0 0
-
-0101100
-*
-Ve
-6.90176164924024e-05
-69.999999151875 20.0000015980903 9.94999985564236
-0 0
-
-0101100
-*
-Ed
- 1.15837334624785e-05 1 1 0
-1  68 0 0 1
-2  119 37 0 0 1
-2  120 39 0 0 1
-0
-
-0101000
-+379 0 -378 0 *
-Ed
- 1.89918323696621e-05 1 1 0
-1  69 0 0 1
-2  121 37 0 0 1
-2  122 40 0 0 1
-0
-
-0101000
-+379 0 -391 0 *
-Ed
- 3.26020732965074e-05 1 1 0
-1  70 0 0 1
-2  123 37 0 0 1
-2  124 41 0 0 1
-0
-
-0101000
-+378 0 -386 0 *
-Wi
-
-0101000
--377 0 +376 0 +385 0 -375 0 *
-Fa
-0  1e-07 37 0
-
-0111000
-+374 0 *
-Ve
-3.22832667025462e-05
-73.89771733 19.9999987779861 9.94999986159028
-0 0
-
-0101100
-*
-Ed
- 1.48842459227615e-05 1 1 0
-1  71 0 0 1
-2  125 42 0 0 1
-2  126 39 0 0 1
-0
-
-0101000
-+372 0 -378 0 *
-Ed
- 1e-07 1 1 1
-2  127 39 0 0 1
-0
-
-0101000
-+372 0 -372 0 *
-Ed
- 3.22832667025462e-05 1 1 0
-1  72 0 0 1
-2  128 43 0 0 1
-2  129 39 0 0 1
-0
-
-0101000
-+372 0 -379 0 *
-Wi
-
-0101000
--371 0 +370 0 +369 0 +377 0 *
-Fa
-0  1e-07 39 0
-
-0111000
-+368 0 *
-Ve
-7.2444461966862e-05
-73.8976968150011 19.8921022673891 12.0000007116937
-0 0
-
-0101100
-*
-Ed
- 1.15800853239613e-05 1 1 0
-1  73 0 0 1
-2  130 42 0 0 1
-2  131 44 0 0 1
-0
-
-0101000
-+372 0 -366 0 *
-Ve
-7.2444461966862e-05
-70.0000045562153 19.8921042805903 12.0000002950417
-0 0
-
-0101100
-*
-Ed
- 6.90176164924024e-05 1 1 0
-1  74 0 0 1
-2  132 42 0 0 1
-2  133 41 0 0 1
-0
-
-0101000
-+378 0 -364 0 *
-Ed
- 7.2444461966862e-05 1 1 0
-1  75 0 0 0.779538430687208
-2  134 45 0 0 0.779538430687208
-2  135 42 0 0 0.779538430687208
-0
-
-0101000
-+364 0 -366 0 *
-Wi
-
-0101000
--365 0 +371 0 +363 0 +362 0 *
-Fa
-0  1e-07 42 0
-
-0111000
-+361 0 *
-Ve
-3.1700641280747e-05
-75.0000049276389 19.9671293044444 10.5744760476354
-0 0
-
-0101100
-*
-Ed
- 1.10879071226655e-05 1 1 0
-1  76 0 0 1
-2  136 44 0 0 1
-2  137 46 0 0 1
-0
-
-0101000
-+372 0 -359 0 *
-Ve
-5.66066587128093e-05
-75.0000071244097 19.8921038444792 11.9999987971181
-0 0
-
-0101100
-*
-Ed
- 1.49010219769183e-05 1 1 0
-1  77 0 0 1
-2  138 44 0 0 1
-2  139 45 0 0 1
-0
-
-0101000
-+366 0 -357 0 *
-Ed
- 2.4582785482178e-05 1 1 0
-1  78 0 0 1
-2  140 44 0 0 1
-2  141 47 0 0 1
-0
-
-0101000
-+359 0 -357 0 *
-Wi
-
-0101000
--358 0 +365 0 +356 0 -355 0 *
-Fa
-0  1e-07 44 0
-
-0111000
-+354 0 *
-Ve
-3.1700641280747e-05
-75.0000123452431 19.9784171585069 9.95000068319445
-0 0
-
-0101100
-*
-Ed
- 1.63232070498764e-05 1 1 0
-1  79 0 0 1
-2  142 43 0 0 1
-2  143 46 0 0 1
-0
-
-0101000
-+352 0 -372 0 *
-Ed
- 1e-07 1 1 1
-2  144 46 0 0 1
-0
-
-0101000
-+372 0 -372 0 *
-Ed
- 3.1700641280747e-05 1 1 0
-1  80 0 0 1
-2  145 48 0 0 1
-2  146 46 0 0 1
-0
-
-0101000
-+359 0 -352 0 *
-Wi
-
-0101000
-+351 0 +350 0 +358 0 +349 0 *
-Fa
-0  1e-07 46 0
-
-0111000
-+348 0 *
-Ve
-3.94941334346732e-05
-75.000002821875 19.7611716447222 8.00899722810417
-0 0
-
-0101100
-*
-Ed
- 2.30358001848527e-05 1 1 0
-1  81 0 0 1
-2  147 43 0 0 1
-2  148 49 0 0 1
-0
-
-0101000
-+352 0 -346 0 *
-Ed
- 3.94941334346732e-05 1 1 0
-1  82 0 0 1
-2  149 43 0 0 1
-2  150 50 0 0 1
-0
-
-0101000
-+346 0 -379 0 *
-Wi
-
-0101000
--351 0 +345 0 +344 0 -369 0 *
-Fa
-0  1e-07 43 0
-
-0111000
-+343 0 *
-Ve
-4.76775946310222e-05
-77.3975987834192 19.8186833961538 9.94999927017929
-0 0
-
-0101100
-*
-Ve
-4.76775946310222e-05
-80.0000093251736 19.3715868731944 9.94999500945139
-0 0
-
-0101100
-*
-Ed
- 4.76775946310222e-05 1 1 0
-1  83 0 0 1
-2  151 51 0 0 1
-2  152 49 0 0 1
-0
-
-0101000
-+341 0 -340 0 *
-Ve
-2.97994388426334e-05
-80.0000080277083 18.5019330750347 8.22177477498264
-0 0
-
-0101100
-*
-Ed
- 2.97994388426334e-05 1 1 0
-1  84 0 0 1
-2  153 49 0 0 1
-2  154 52 0 0 1
-0
-
-0101000
-+340 0 -338 0 *
-Ed
- 1.79448960215717e-05 1 1 0
-1  85 0 0 1
-2  155 49 0 0 1
-2  156 53 0 0 1
-0
-
-0101000
-+338 0 -346 0 *
-Ed
- 2.69707624111069e-05 1 1 0
-1  86 0 0.534943629729145 1
-2  157 49 0 0.534943629729145 1
-2  158 48 0 0.534943629729145 1
-0
-
-0101000
-+341 0 -352 0 *
-Wi
-
-0101100
-+339 0 +337 0 +336 0 -345 0 -335 0 *
-Fa
-0  1e-07 49 0
-
-0111000
-+334 0 *
-Ve
-3.59560100123656e-05
-77.3827360281858 19.8921034873785 12.0000003849575
-0 0
-
-0101100
-*
-Ed
- 3.59560100123656e-05 1 1 0
-1  87 0 0 1
-2  159 48 0 0 1
-2  160 51 0 0 1
-0
-
-0101000
-+332 0 -341 0 *
-Ve
-3.54548028719701e-05
-80.0000062245486 19.8000054022569 11.9999989432917
-0 0
-
-0101100
-*
-Ed
- 3.53500101981473e-05 1 1 0
-1  88 0 0 1
-2  161 54 0 0 1
-2  162 51 0 0 1
-0
-
-0101000
-+332 0 -330 0 *
-Ed
- 3.54548028719701e-05 1 1 0
-1  89 0 0 1
-2  163 55 0 0 1
-2  164 51 0 0 1
-0
-
-0101000
-+330 0 -340 0 *
-Wi
-
-0101000
--331 0 +329 0 +328 0 -339 0 *
-Fa
-0  1e-07 51 0
-
-0111000
-+327 0 *
-Ed
- 2.48860373198486e-05 1 1 0
-1  90 0 0 1
-2  165 48 0 0 1
-2  166 47 0 0 1
-0
-
-0101000
-+332 0 -359 0 *
-Wi
-
-0101000
--325 0 +331 0 +335 0 -349 0 *
-Fa
-0  1e-07 48 0
-
-0111000
-+324 0 *
-Ed
- 1.73842980181449e-05 1 1 0
-1  91 0 0 1
-2  167 56 0 0 1
-2  168 47 0 0 1
-0
-
-0101000
-+332 0 -357 0 *
-Ed
- 1e-07 1 1 1
-2  169 47 0 0 1
-0
-
-0101000
-+332 0 -332 0 *
-Wi
-
-0101000
--322 0 +321 0 +325 0 +355 0 *
-Fa
-0  1e-07 47 0
-
-0111000
-+320 0 *
-Ve
-0.000204317536346094
-77.3826580563885 19.7868475836931 14.0000019614178
-0 0
-
-0101100
-*
-Ed
- 2.21943780296004e-05 1 1 0
-1  92 0 0 1
-2  170 57 0 0 1
-2  171 56 0 0 1
-0
-
-0101000
-+332 0 -318 0 *
-Ve
-6.13208540096211e-05
-74.9999849262153 19.7868472809375 14.0000007276736
-0 0
-
-0101100
-*
-Ed
- 5.66066587128093e-05 1 1 0
-1  93 0 0 1
-2  172 45 0 0 1
-2  173 56 0 0 1
-0
-
-0101000
-+357 0 -316 0 *
-Ed
- 6.13208540096211e-05 1 1 0
-1  94 0 0 1
-2  174 56 0 0 1
-2  175 58 0 0 1
-0
-
-0101000
-+318 0 -316 0 *
-Wi
-
-0101000
--317 0 +322 0 +315 0 -314 0 *
-Fa
-0  1e-07 56 0
-
-0111000
-+313 0 *
-Ve
-0.000122316849809661
-80.0000045548611 19.8084754930556 13.5889545742014
-0 0
-
-0101100
-*
-Ed
- 2.67813180331808e-05 1 1 0
-1  95 0 0 1
-2  176 54 0 0 1
-2  177 57 0 0 1
-0
-
-0101000
-+332 0 -311 0 *
-Ve
-0.000204317536346094
-79.9999927156597 19.7868459422917 13.9999966477083
-0 0
-
-0101100
-*
-Ed
- 0.000204317536346094 1 1 0
-1  96 0 0.47652841820184 1
-2  178 58 0 0.47652841820184 1
-2  179 57 0 0.47652841820184 1
-0
-
-0101000
-+318 0 -309 0 *
-Ed
- 0.000122316849809661 1 1 0
-1  97 0 0 1
-2  180 59 0 0 1
-2  181 57 0 0 1
-0
-
-0101000
-+309 0 -311 0 *
-Wi
-
-0101000
--310 0 +317 0 +308 0 +307 0 *
-Fa
-0  1e-07 57 0
-
-0111000
-+306 0 *
-Ed
- 1e-07 1 1 1
-2  182 54 0 0 1
-0
-
-0101000
-+332 0 -332 0 *
-Ed
- 2.82961956121895e-05 1 1 0
-1  98 0 0 1
-2  183 60 0 0 1
-2  184 54 0 0 1
-0
-
-0101000
-+311 0 -330 0 *
-Wi
-
-0101000
--329 0 +304 0 +310 0 +303 0 *
-Fa
-0  1e-07 54 0
-
-0111000
-+302 0 *
-Ve
-9.29783715859558e-05
-80.6810371069271 19.786841898125 13.9999999124826
-0 0
-
-0101100
-*
-Ed
- 1.78677793822095e-05 1 1 0
-1  99 0 0 1
-2  185 60 0 0 1
-2  186 59 0 0 1
-0
-
-0101000
-+300 0 -311 0 *
-Ve
-3.67373464016864e-05
-80.6930473906734 19.7371199962327 12.0000004397261
-0 0
-
-0101100
-*
-Ed
- 7.66701148898324e-06 1 1 0
-1  100 0 0 1
-2  187 61 0 0 1
-2  188 60 0 0 1
-0
-
-0101000
-+300 0 -298 0 *
-Ed
- 2.86003810387358e-05 1 1 0
-1  101 0 0 1
-2  189 60 0 0 1
-2  190 55 0 0 1
-0
-
-0101000
-+298 0 -330 0 *
-Wi
-
-0101000
--299 0 +297 0 +296 0 -303 0 *
-Fa
-0  1e-07 60 0
-
-0111000
-+295 0 *
-Ed
- 9.29783715859558e-05 1 1 0
-1  102 0 0 1
-2  191 59 0 0 1
-2  192 62 0 0 1
-0
-
-0101000
-+300 0 -309 0 *
-Ed
- 1e-07 1 1 1
-2  193 59 0 0 1
-0
-
-0101000
-+300 0 -300 0 *
-Wi
-
-0101000
--293 0 +292 0 +299 0 -307 0 *
-Fa
-0  1e-07 59 0
-
-0111000
-+291 0 *
-Ve
-8.6147300432308e-05
-80.0000052961111 19.7000005780556 15.64999984375
-0 0
-
-0101100
-*
-Ed
- 8.6147300432308e-05 1 1 0
-1  103 0 0 1
-2  194 62 0 0 1
-2  195 58 0 0 1
-0
-
-0101000
-+289 0 -309 0 *
-Ve
-7.71663224501936e-05
-83.4215252151389 19.7000021379167 15.6500007720833
-0 0
-
-0101100
-*
-Ed
- 1e-07 1 1 0
-1  104 0 0 1
-2  196 62 0 0 1
-0
-
-0101000
-+289 0 -287 0 *
-Ed
- 7.71663224501936e-05 1 1 0
-1  105 0 0 1
-2  197 62 0 0 1
-2  198 63 0 0 1
-0
-
-0101000
-+287 0 -300 0 *
-Wi
-
-0101000
--288 0 +286 0 +285 0 +293 0 *
-Fa
-0  1e-07 62 0
-
-0111000
-+284 0 *
-Ve
-3.00013816696929e-05
-75.0000044491667 19.7000013970833 15.6499990098611
-0 0
-
-0101100
-*
-Ed
- 3.00013816696929e-05 1 1 0
-1  106 0 0 1
-2  199 64 0 0 1
-2  200 58 0 0 1
-0
-
-0101000
-+282 0 -316 0 *
-Ed
- 1e-07 1 1 0
-1  107 0 0 1
-2  201 58 0 0 1
-0
-
-0101000
-+282 0 -289 0 *
-Wi
-
-0101000
--281 0 +280 0 +288 0 -308 0 +314 0 *
-Fa
-0  1e-07 58 0
-
-0111000
-+279 0 *
-Ve
-7.56393996677992e-06
-70.0000010597222 19.7000021913889 15.6499992881944
-0 0
-
-0101100
-*
-Ve
-2.88391712116896e-05
-69.9999987018403 19.7868476105556 14.0000034781597
-0 0
-
-0101100
-*
-Ed
- 7.56393996677992e-06 1 1 0
-1  108 0 0 1
-2  202 65 0 0 1
-2  203 64 0 0 1
-0
-
-0101000
-+277 0 -276 0 *
-Ed
- 1e-07 1 1 0
-1  109 0 0 1
-2  204 64 0 0 1
-0
-
-0101000
-+277 0 -282 0 *
-Ed
- 2.88391712116896e-05 1 1 0
-1  110 0 0 1
-2  205 64 0 0 1
-2  206 45 0 0 1
-0
-
-0101000
-+276 0 -316 0 *
-Wi
-
-0101000
--275 0 +274 0 +281 0 -273 0 *
-Fa
-0  1e-07 64 0
-
-0111000
-+272 0 *
-Ve
-7.30943400232998e-06
-65.0000077358333 19.7000015044444 15.6499994345833
-0 0
-
-0101100
-*
-Ve
-2.62459975940264e-05
-65.0000021326042 19.7868430874653 14.0000034767708
-0 0
-
-0101100
-*
-Ed
- 7.30943400232998e-06 1 1 0
-1  111 0 0 1
-2  207 66 0 0 1
-2  208 65 0 0 1
-0
-
-0101000
-+270 0 -269 0 *
-Ed
- 1e-07 1 1 0
-1  112 0 0 1
-2  209 65 0 0 1
-0
-
-0101000
-+270 0 -277 0 *
-Ed
- 2.62459975940264e-05 1 1 0
-1  113 0 0 1
-2  210 67 0 0 1
-2  211 65 0 0 1
-0
-
-0101000
-+269 0 -276 0 *
-Wi
-
-0101000
--268 0 +267 0 +275 0 -266 0 *
-Fa
-0  1e-07 65 0
-
-0111000
-+265 0 *
-Ve
-2.56781214486622e-05
-59.9999998141667 19.7000017838194 15.6499982756945
-0 0
-
-0101100
-*
-Ve
-3.19090998375492e-05
-59.9999903761457 19.7868438596113 14.0000078818605
-0 0
-
-0101100
-*
-Ed
- 2.20098183765163e-05 1 1 0
-1  114 0 0 1
-2  212 66 0 0 1
-0
-
-0101000
-+263 0 -262 0 *
-Ed
- 1e-07 1 1 0
-1  115 0 0 1
-2  213 66 0 0 1
-0
-
-0101000
-+263 0 -270 0 *
-Ed
- 1.50596850834094e-05 1 1 0
-1  116 0 0 1
-2  214 66 0 0 1
-2  215 68 0 0 1
-0
-
-0101000
-+262 0 -269 0 *
-Wi
-
-0101000
--261 0 +260 0 +268 0 -259 0 *
-Fa
-0  1e-07 66 0
-
-0111000
-+258 0 *
-Ve
-1.80651891800273e-05
-65.0000032453819 19.8921035660764 12.0000008452639
-0 0
-
-0101100
-*
-Ve
-3.37990180931503e-05
-59.9999910313734 19.8921024364285 12.0000001037453
-0 0
-
-0101100
-*
-Ed
- 7.95965727164695e-06 1 1 0
-1  117 0 0 1
-2  216 38 0 0 1
-2  217 68 0 0 1
-0
-
-0101000
-+256 0 -255 0 *
-Ed
- 2.51653306919719e-05 1 1 0
-1  118 0 0 1
-2  218 68 0 0 1
-0
-
-0101000
-+255 0 -262 0 *
-Ed
- 1.28566597563753e-05 1 1 0
-1  119 0 0 1
-2  219 68 0 0 1
-2  220 67 0 0 1
-0
-
-0101000
-+256 0 -269 0 *
-Wi
-
-0101000
-+254 0 +253 0 +259 0 -252 0 *
-Fa
-0  1e-07 68 0
-
-0111000
-+251 0 *
-Ed
- 1.47713749989411e-05 1 1 0
-1  120 0 0 1
-2  221 41 0 0 1
-2  222 38 0 0 1
-0
-
-0101000
-+386 0 -256 0 *
-Ed
- 1.76367843706907e-05 1 1 0
-1  121 0 0 1
-2  223 38 0 0 1
-0
-
-0101000
-+384 0 -255 0 *
-Wi
-
-0101000
--249 0 +382 0 +248 0 -254 0 *
-Fa
-0  1e-07 38 0
-
-0111000
-+247 0 *
-Ed
- 1.80651891800273e-05 1 1 0
-1  122 0 0 1
-2  224 41 0 0 1
-2  225 67 0 0 1
-0
-
-0101000
-+364 0 -256 0 *
-Wi
-
-0101000
--363 0 +375 0 +249 0 -245 0 *
-Fa
-0  1e-07 41 0
-
-0111000
-+244 0 *
-Ed
- 2.35639928694355e-05 1 1 0
-1  123 0 0 1
-2  226 67 0 0 1
-2  227 45 0 0 1
-0
-
-0101000
-+364 0 -276 0 *
-Wi
-
-0101000
-+245 0 +252 0 +266 0 -242 0 *
-Fa
-0  1e-07 67 0
-
-0111000
-+241 0 *
-Wi
-
-0101100
--362 0 +242 0 +273 0 -315 0 -356 0 *
-Fa
-0  1e-07 45 0
-
-0111000
-+239 0 *
-Ve
-6.0913089179526e-05
-85.0000045565278 19.6384809797222 15.6500014713889
-0 0
-
-0101100
-*
-Ed
- 1e-07 1 1 0
-1  124 0 0 1
-2  228 63 0 0 1
-0
-
-0101000
-+287 0 -237 0 *
-Ve
-6.0913089179526e-05
-84.9999998422222 19.4727300962153 14.0000013576389
-0 0
-
-0101100
-*
-Ed
- 6.0913089179526e-05 1 1 0
-1  125 0 0 1
-2  229 69 0 0 1
-2  230 63 0 0 1
-0
-
-0101000
-+237 0 -235 0 *
-Ed
- 5.09194846712761e-05 1 1 0
-1  126 0 0 1
-2  231 61 0 0 1
-2  232 63 0 0 1
-0
-
-0101000
-+300 0 -235 0 *
-Wi
-
-0101000
--285 0 +236 0 +234 0 -233 0 *
-Fa
-0  1e-07 63 0
-
-0111000
-+232 0 *
-Ve
-2.46085840330547e-05
-90.0000028620833 18.5591962070833 15.6500022013889
-0 0
-
-0101100
-*
-Ed
- 1e-07 1 1 0
-1  127 0 0 1
-2  233 69 0 0 1
-0
-
-0101000
-+237 0 -230 0 *
-Ve
-3.19634782976872e-05
-89.9999991264236 17.5727300257639 14.00000199
-0 0
-
-0101100
-*
-Ed
- 2.46085840330547e-05 1 1 0
-1  128 0 0 1
-2  234 70 0 0 1
-2  235 69 0 0 1
-0
-
-0101000
-+230 0 -228 0 *
-Ed
- 2.8475441200989e-05 1 1 0
-1  129 0 0 1
-2  236 71 0 0 1
-2  237 69 0 0 1
-0
-
-0101000
-+228 0 -235 0 *
-Wi
-
-0101000
--234 0 +229 0 +227 0 +226 0 *
-Fa
-0  1e-07 69 0
-
-0111000
-+225 0 *
-Ve
-3.19634782976872e-05
-91 18.1175735317957 15.650001895175
-0 0
-
-0101100
-*
-Ve
-3.19634782976872e-05
-91 16.9412309157166 14.0000025157376
-0 0
-
-0101100
-*
-Ed
- 1e-07 1 1 0
-1  130 0 0 1
-2  238 70 0 0 1
-4 CN 70 0 70 0
-0
-
-0101000
-+223 0 -222 0 *
-Ed
- 3.19634782976872e-05 1 1 0
-1  131 0 0.615404939524226 1
-2  239 72 0 0.615404939524226 1
-2  240 70 0 0.615404939524226 1
-0
-
-0101000
-+222 0 -228 0 *
-Ed
- 1e-07 1 1 0
-1  132 0 0 0.394064939452013
-2  241 70 0 0 0.394064939452013
-0
-
-0101000
-+230 0 -223 0 *
-Wi
-
-0101000
-+221 0 +220 0 -227 0 +219 0 *
-Fa
-0  1e-07 70 0
-
-0111000
-+218 0 *
-Ve
-3.73599189451604e-05
-91 14.8099993484501 12.000000837245
-0 0
-
-0101100
-*
-Ed
- 1e-07 1 1 0
-1  133 0 0 1
-2  242 72 0 0 1
-4 CN 72 0 72 0
-0
-
-0101000
-+222 0 -216 0 *
-Ve
-3.73599189451604e-05
-89.9999968472222 15.7012992258924 12.000002151941
-0 0
-
-0101100
-*
-Ed
- 7.75352343017894e-06 1 1 0
-1  134 0 0.613942249038778 1
-2  243 73 0 0.613942249038778 1
-2  244 72 0 0.613942249038778 1
-0
-
-0101000
-+216 0 -214 0 *
-Ed
- 1.61674990849722e-05 1 1 0
-1  135 0 0 1
-2  245 72 0 0 1
-2  246 71 0 0 1
-0
-
-0101000
-+228 0 -214 0 *
-Wi
-
-0101000
-+215 0 +213 0 -212 0 -220 0 *
-Fa
-0  1e-07 72 0
-
-0111000
-+211 0 *
-Ve
-3.73599189451604e-05
-91 11.8221269530993 9.94999977942823
-0 0
-
-0101100
-*
-Ed
- 1e-07 1 1 0
-1  136 0 0 1
-2  247 73 0 0 1
-4 CN 73 0 73 0
-0
-
-0101000
-+216 0 -209 0 *
-Ve
-3.73599189451604e-05
-89.9999958398958 12.92998808925 9.95000047435764
-0 0
-
-0101100
-*
-Ed
- 3.21652491770359e-05 1 1 0
-1  137 0 0.604620186820489 1
-2  248 73 0 0.604620186820489 1
-2  249 74 0 0.604620186820489 1
-0
-
-0101000
-+209 0 -207 0 *
-Ed
- 3.73599189451604e-05 1 1 0
-1  138 0 0 1
-2  250 75 0 0 1
-2  251 73 0 0 1
-0
-
-0101000
-+214 0 -207 0 *
-Wi
-
-0101000
-+208 0 +206 0 -205 0 -213 0 *
-Fa
-0  1e-07 73 0
-
-0111000
-+204 0 *
-Ve
-3.21652491770359e-05
-91 10.2897003114331 8.9045864895427
-0 0
-
-0101100
-*
-Ed
- 1e-07 1 1 0
-1  139 0 0 1
-2  252 74 0 0 1
-4 CN 74 0 74 0
-0
-
-0101000
-+209 0 -202 0 *
-Ve
-1.74698737006962e-05
-89.9999985447917 11.3362545017222 8.84881705362153
-0 0
-
-0101100
-*
-Ed
- 1.74330203163144e-05 1 1 0
-1  140 0 0.604818885230735 1
-2  253 74 0 0.604818885230735 1
-2  254 76 0 0.604818885230735 1
-0
-
-0101000
-+202 0 -200 0 *
-Ed
- 1.37910123140874e-05 1 1 0
-1  141 0 0 1
-2  255 77 0 0 1
-2  256 74 0 0 1
-6  1 1 0
-6  2 2 0
-0
-
-0101000
-+207 0 -200 0 *
-Wi
-
-0101000
-+201 0 +199 0 -198 0 -206 0 *
-Fa
-0  1e-07 74 0
-
-0111000
-+197 0 *
-Ve
-2.54654663933075e-05
-91 8.68210536123528 7.63496833970034
-0 0
-
-0101100
-*
-Ed
- 1e-07 1 1 0
-1  142 0 0 1
-2  257 76 0 0 1
-4 CN 76 0 76 0
-0
-
-0101000
-+202 0 -195 0 *
-Ve
-2.54654663933075e-05
-89.9999984129861 9.63609133568403 7.56582537454167
-0 0
-
-0101100
-*
-Ed
- 1.92945244783143e-05 1 1 0
-1  143 0 0 0.388502706861007
-2  258 78 0 0 0.388502706861007
-2  259 76 0 0 0.388502706861007
-0
-
-0101000
--195 0 +193 0 *
-Ed
- 6.99649261397242e-06 1 1 0
-1  144 0 0 1
-2  260 76 0 0 1
-2  261 79 0 0 1
-6  3 3 0
-6  4 4 0
-0
-
-0101000
-+200 0 -193 0 *
-Wi
-
-0101000
-+194 0 -192 0 -191 0 -199 0 *
-Fa
-0  1e-07 76 0
-
-0111000
-+190 0 *
-Ve
-2.54654663933075e-05
-91 7.61636810981439 6.6169437167634
-0 0
-
-0101100
-*
-Ed
- 1e-07 1 1 0
-1  145 0 0 1
-2  262 78 0 0 1
-4 CN 78 0 78 0
-0
-
-0101000
--195 0 +188 0 *
-Ve
-2.54654663933075e-05
-90.0000024117361 8.39076750746528 6.47641750670833
-0 0
-
-0101100
-*
-Ed
- 9.0234918517165e-06 1 1 0
-1  146 0 0 0.399249306518246
-2  263 80 0 0 0.399249306518246
-2  264 78 0 0 0.399249306518246
-0
-
-0101000
--188 0 +186 0 *
-Ed
- 2.54654663933075e-05 1 1 0
-1  147 0 0 1
-2  265 78 0 0 1
-2  266 81 0 0 1
-6  5 5 0
-6  6 6 0
-0
-
-0101000
-+186 0 -193 0 *
-Wi
-
-0101000
--187 0 -185 0 +184 0 +192 0 *
-Fa
-0  1e-07 78 0
-
-0111000
-+183 0 *
-Ve
-2.03433410708813e-05
-91 6.57970659267895 5.41575932172604
-0 0
-
-0101100
-*
-Ed
- 1e-07 1 1 0
-1  148 0 0 1
-2  267 80 0 0 1
-4 CN 80 0 80 0
-0
-
-0101000
--188 0 +181 0 *
-Ve
-1.5757649955456e-05
-90.0000009007986 7.17118638575695 5.21541255123611
-0 0
-
-0101100
-*
-Ed
- 6.00726028633476e-06 1 1 0
-1  149 0 0 0.398118846455636
-2  268 80 0 0 0.398118846455636
-2  269 82 0 0 0.398118846455636
-0
-
-0101000
--181 0 +179 0 *
-Ed
- 9.17633448241955e-06 1 1 0
-1  150 0 0 1
-2  270 83 0 0 1
-2  271 80 0 0 1
-0
-
-0101000
-+179 0 -186 0 *
-Wi
-
-0101000
--180 0 -178 0 +177 0 +185 0 *
-Fa
-0  1e-07 80 0
-
-0111000
-+176 0 *
-Ve
-2.35316308917081e-05
-91 5.32717298582192 3.72906323267874
-0 0
-
-0101100
-*
-Ed
- 1.56868845174715e-07 1 1 0
-1  151 0 0 1
-2  272 82 0 0 1
-4 CN 82 0 82 0
-0
-
-0101000
--181 0 +174 0 *
-Ve
-2.35316308917081e-05
-90.0000007692361 5.73678587819097 3.56596440070625
-0 0
-
-0101100
-*
-Ed
- 2.03433410708813e-05 1 1 0
-1  152 0 0 0.400001671206947
-2  273 82 0 0 0.400001671206947
-2  274 84 0 0 0.400001671206947
-0
-
-0101000
--174 0 +172 0 *
-Ed
- 1.5757649955456e-05 1 1 0
-1  153 0 0 1
-2  275 82 0 0 1
-2  276 85 0 0 1
-0
-
-0101000
-+172 0 -179 0 *
-Wi
-
-0101000
--173 0 -171 0 +170 0 +178 0 *
-Fa
-0  1e-07 82 0
-
-0111000
-+169 0 *
-Ed
- 1e-07 1 1 1
-2  277 84 0 0 4.59100052463413e-06
-0
-
-0101000
-+174 0 -174 0 *
-Ve
-2.35316308917081e-05
-91 3.88175419089484 2.15893028178295
-0 0
-
-0101100
-*
-Ed
- 1e-07 1 1 0
-1  154 0 0 1
-2  278 84 0 0 1
-4 CN 84 0 84 0
-0
-
-0101000
--174 0 +166 0 *
-Ve
-2.35316308917081e-05
-89.9999949926389 4.05991910977778 2.02916518067958
-0 0
-
-0101100
-*
-Ed
- 7.30216200260413e-06 1 1 0
-1  155 0 0 0.391917713669959
-2  279 84 0 0 0.391917713669959
-2  280 21 0 0 0.391917713669959
-0
-
-0101000
--166 0 +164 0 *
-Ed
- 2.35316308917081e-05 1 1 0
-1  156 0 0 1
-2  281 86 0 0 1
-2  282 84 0 0 1
-0
-
-0101000
-+164 0 -172 0 *
-Wi
-
-0101100
-+167 0 -165 0 -163 0 +162 0 +171 0 *
-Fa
-0  1e-07 84 0
-
-0111000
-+161 0 *
-Ed
- 1e-07 1 1 0
-1  157 0 0 1
-2  283 21 0 0 1
-4 CN 21 0 21 0
-0
-
-0101000
--166 0 +458 0 *
-Ed
- 2.09007955177743e-05 1 1 0
-1  158 0 0 1
-2  284 22 0 0 1
-2  285 21 0 0 1
-0
-
-0101000
-+456 0 -164 0 *
-Wi
-
-0101000
--159 0 -454 0 +158 0 +163 0 *
-Fa
-0  1e-07 21 0
-
-0111000
-+157 0 *
-Ve
-2.21045941097868e-05
-85.0000059085417 5.39140496230764 1.55430342585035
-0 0
-
-0101100
-*
-Ed
- 2.21045941097868e-05 1 1 0
-1  159 0 0 1
-2  286 22 0 0 1
-2  287 23 0 0 1
-0
-
-0101000
-+451 0 -155 0 *
-Ed
- 6.47703491865084e-06 1 1 0
-1  160 0 0 1
-2  288 22 0 0 1
-2  289 86 0 0 1
-0
-
-0101000
-+155 0 -164 0 *
-Wi
-
-0101000
--449 0 +154 0 +153 0 -158 0 *
-Fa
-0  1e-07 22 0
-
-0111000
-+152 0 *
-Ve
-1.82185759613255e-05
-80.0000026235764 7.71098128564583 1.31853588231684
-0 0
-
-0101100
-*
-Ed
- 4.53162825461767e-06 1 1 0
-1  161 0 0 1
-2  290 23 0 0 1
-2  291 24 0 0 1
-0
-
-0101000
-+446 0 -150 0 *
-Ed
- 1.82185759613255e-05 1 1 0
-1  162 0 0 1
-2  292 87 0 0 1
-2  293 23 0 0 1
-0
-
-0101000
-+150 0 -155 0 *
-Wi
-
-0101000
--444 0 +149 0 +148 0 -154 0 *
-Fa
-0  1e-07 23 0
-
-0111000
-+147 0 *
-Ve
-2.37379626567361e-05
-75.0000021195833 11.0777641409687 1.19876414828403
-0 0
-
-0101100
-*
-Ed
- 1.38589868389421e-05 1 1 0
-1  163 0 0 1
-2  294 24 0 0 1
-2  295 25 0 0 1
-0
-
-0101000
-+441 0 -145 0 *
-Ed
- 6.4749767560045e-06 1 1 0
-1  164 0 0 1
-2  296 24 0 0 1
-2  297 88 0 0 1
-0
-
-0101000
-+145 0 -150 0 *
-Wi
-
-0101000
--439 0 +144 0 +143 0 -149 0 *
-Fa
-0  1e-07 24 0
-
-0111000
-+142 0 *
-Ve
-2.48188108077455e-05
-69.9999984111806 14.4611521391771 1.11259741402292
-0 0
-
-0101100
-*
-Ed
- 2.48188108077455e-05 1 1 0
-1  165 0 0 1
-2  298 26 0 0 1
-2  299 25 0 0 1
-0
-
-0101000
-+436 0 -140 0 *
-Ed
- 2.37379626567361e-05 1 1 0
-1  166 0 0 1
-2  300 89 0 0 1
-2  301 25 0 0 1
-0
-
-0101000
-+140 0 -145 0 *
-Wi
-
-0101000
--434 0 +139 0 +138 0 -144 0 *
-Fa
-0  1e-07 25 0
-
-0111000
-+137 0 *
-Ed
- 1.34416809704548e-05 1 1 0
-1  167 0 0 1
-2  302 30 0 0 1
-2  303 26 0 0 1
-0
-
-0101000
-+419 0 -140 0 *
-Wi
-
-0101000
--429 0 +417 0 +135 0 -139 0 *
-Fa
-0  1e-07 26 0
-
-0111000
-+134 0 *
-Ve
-2.11325098514603e-05
-69.9999972716667 15.9788046517604 1.70368357847222
-0 0
-
-0101100
-*
-Ed
- 1.11669713313368e-05 1 1 0
-1  168 0 0 1
-2  304 30 0 0 1
-2  305 32 0 0 1
-0
-
-0101000
-+412 0 -132 0 *
-Ed
- 1.39018724744241e-05 1 1 0
-1  169 0 0 1
-2  306 89 0 0 1
-2  307 30 0 0 1
-0
-
-0101000
-+140 0 -132 0 *
-Wi
-
-0101000
--135 0 +410 0 +131 0 -130 0 *
-Fa
-0  1e-07 30 0
-
-0111000
-+129 0 *
-Ve
-2.28562930648619e-05
-69.9999992326042 17.8061584462153 2.81623599430208
-0 0
-
-0101100
-*
-Ed
- 1.97694376017314e-05 1 1 0
-1  170 0 0 1
-2  308 34 0 0 1
-2  309 32 0 0 1
-0
-
-0101000
-+405 0 -127 0 *
-Ed
- 2.11325098514603e-05 1 1 0
-1  171 0 0 1
-2  310 32 0 0 1
-2  311 90 0 0 1
-0
-
-0101000
-+132 0 -127 0 *
-Wi
-
-0101000
--131 0 +403 0 +126 0 -125 0 *
-Fa
-0  1e-07 32 0
-
-0111000
-+124 0 *
-Ve
-2.75798085479969e-05
-70.0000003179167 18.8827865460417 3.9572551969375
-0 0
-
-0101100
-*
-Ed
- 1.81429179773202e-05 1 1 0
-1  172 0 0 1
-2  312 34 0 0 1
-2  313 36 0 0 1
-0
-
-0101000
-+398 0 -122 0 *
-Ed
- 2.28562930648619e-05 1 1 0
-1  173 0 0 1
-2  314 91 0 0 1
-2  315 34 0 0 1
-0
-
-0101000
-+127 0 -122 0 *
-Wi
-
-0101000
--126 0 +396 0 +121 0 -120 0 *
-Fa
-0  1e-07 34 0
-
-0111000
-+119 0 *
+0101101
+*
 Ve
-4.26088083540727e-05
-70.0000042119444 19.7588873306597 5.85617519342396
+0.0592514252469888
+321186.316945408 2.66453525910038e-015 23752.7064604884
 0 0
 
-0101100
+0101101
 *
 Ed
- 1.91480239722776e-05 1 1 0
-1  174 0 0 1
-2  316 36 0 0 1
-2  317 40 0 0 1
-0
-
-0101000
-+391 0 -117 0 *
-Ed
- 2.75798085479969e-05 1 1 0
-1  175 0 0 1
-2  318 36 0 0 1
-2  319 92 0 0 1
+ 0.0592514252469888 1 1 0
+1  1 0 2.03784942368079 7.15884586228625
+2  1 1 0 2.03784942368079 7.15884586228625
+6  1 1 0
 0
 
 0101000
-+122 0 -117 0 *
-Wi
-
-0101000
--121 0 +389 0 +116 0 -115 0 *
-Fa
-0  1e-07 36 0
++95 0 -94 0 *
+Ve
+0.38336583173167
+320023.238952556 0 20688
+0 0
 
-0111000
-+114 0 *
+0101101
+*
 Ed
- 1e-07 1 1 1
-2  320 40 0 0 1
+ 1e-007 1 1 0
+1  2 0 -5.17908083697672 -4.66066861626444
+2  2 1 0 -5.17908083697672 -4.66066861626444
+6  2 1 0
 0
 
 0101000
-+391 0 -391 0 *
++94 0 -92 0 *
+Ve
+0.38336583173167
+316000 -7836.69546463392 20688
+0 0
+
+0101101
+*
 Ed
3.78594793378773e-05 1 1 0
-1  176 0 0 1
-2  321 50 0 0 1
-2  322 40 0 0 1
0.38336583173167 1 1 0
+1  3 0 -12.7914006728546 0
+2  3 1 0 -12.7914006728546 0
+6  3 1 0
 0
 
 0101000
-+379 0 -117 0 *
-Wi
-
-0101000
--116 0 +112 0 -376 0 +111 0 *
-Fa
-0  1e-07 40 0
-
-0111000
-+110 0 *
++92 0 -90 0 *
 Ve
-4.26088083540727e-05
-75.0000055356597 18.9802735055208 6.14145220899653
+0.00909475804919974
+316000 -9499.97165004752 23769.5263731486
 0 0
 
-0101100
+0101101
 *
 Ed
9.24762100938299e-06 1 1 0
-1  177 0 0 1
-2  323 53 0 0 1
-2  324 50 0 0 1
1e-007 1 1 0
+1  4 0 5.24221906303494 5.94433420095506
+2  4 1 0 5.24221906303494 5.94433420095506
+6  4 1 0
 0
 
 0101000
-+346 0 -108 0 *
++90 0 -88 0 *
 Ed
4.26088083540727e-05 1 1 0
-1  178 0 0 1
-2  325 92 0 0 1
-2  326 50 0 0 1
0.00909475804919974 1 1 0
+1  5 0 0 2.03784942368079
+2  5 1 0 0 2.03784942368079
+6  5 1 0
 0
 
 0101000
-+117 0 -108 0 *
++88 0 -95 0 *
 Wi
 
-0101000
--344 0 +107 0 -106 0 -111 0 *
+0101100
++93 0 +91 0 +89 0 +87 0 +86 0 *
 Fa
-0  1e-07 50 0
-
+0  1e-007 1 0
+2  1
 0111000
-+105 0 *
++85 0 *
 Ve
-2.85755674106533e-05
-80.0000110471875 17.1951922805903 6.64013266390972
+0.132639823162747
+307925.942834271 -14604.4351423643 20688.0062560445
 0 0
 
-0101100
+0101101
+*
+Ve
+0.0395909942639706
+307964.585063061 -15409.6848904203 23788.8306509614
+0 0
+
+0101101
 *
 Ed
2.85755674106533e-05 1 1 0
-1  179 0 0 1
-2  327 93 0 0 1
-2  328 53 0 0 1
0.0395909942639706 1 1 0
+1  6 0 2.03797826722199 5.23408771278374
+2  6 2 0 2.03797826722199 5.23408771278374
+6  6 2 0
 0
 
 0101000
-+338 0 -103 0 *
++83 0 -82 0 *
+Ve
+0.0387048102312198
+312502.174784494 -12436.5747590776 23780.1401795566
+0 0
+
+0101101
+*
 Ed
1.62867018453383e-05 1 1 0
-1  180 0 0 1
-2  329 94 0 0 1
-2  330 53 0 0 1
0.0387048102312198 1 1 0
+1  7 0 10.5720735435623 15.9898717172678
+2  7 2 0 10.5720735435623 15.9898717172678
+6  7 2 0
 0
 
 0101000
-+108 0 -103 0 *
-Wi
-
-0101000
--336 0 +102 0 -101 0 -107 0 *
-Fa
-0  1e-07 53 0
-
-0111000
-+100 0 *
++82 0 -80 0 *
 Ve
-2.99042860144067e-05
-85.0000010347917 15.8033371473194 8.52449099372917
+0.000274664703637645
+316000 -9499.97165004752 23769.5263731487
 0 0
 
-0101100
+0101101
 *
 Ed
2.59629802790387e-05 1 1 0
-1  181 0 0 1
-2  331 52 0 0 1
-2  332 93 0 0 1
0.000274664703637645 1 1 0
+1  8 0 15.9898717172678 20.5382024168754
+2  8 2 0 15.9898717172678 20.5382024168754
+6  8 2 0
 0
 
 0101000
-+98 0 -338 0 *
++80 0 -78 0 *
 Ve
-2.99042860144067e-05
-84.9999961607292 14.1568349074861 7.15651154836111
+0.132639823162747
+316000 -7836.69546463392 20688
 0 0
 
-0101100
+0101101
 *
 Ed
- 2.99042860144067e-05 1 1 0
-1  182 0 0 1
-2  333 93 0 0 1
-2  334 79 0 0 1
-6  7 7 0
-6  8 4 0
+ 1e-007 1 1 0
+1  9 0 -5.94433420095506 -5.24221906303494
+2  9 2 0 -5.94433420095506 -5.24221906303494
+6  9 2 0
 0
 
 0101000
-+98 0 -96 0 *
++78 0 -76 0 *
 Ed
1.73367562838602e-05 1 1 0
-1  183 0 0 1
-2  335 95 0 0 1
-2  336 93 0 0 1
0.132639823162747 1 1 0
+1  10 0 -26.3776496137573 -10.7590479567631
+2  10 2 0 -26.3776496137573 -10.7590479567631
+6  10 2 0
 0
 
 0101000
-+103 0 -96 0 *
++76 0 -83 0 *
 Wi
 
-0101000
--97 0 +95 0 -94 0 -102 0 *
+0101100
++81 0 +79 0 +77 0 +75 0 +74 0 *
 Fa
-0  1e-07 93 0
-
+0  1e-007 2 0
+2  2
 0111000
-+93 0 *
++73 0 *
 Ve
-4.7091265613617e-05
-85.0000022795833 17.2574835275174 9.94999693511805
+0.0151646519118349
+320467.125397522 0.0410607388638593 17391.0010676384
 0 0
 
-0101100
+0101101
+*
+Ve
+0.305785196713225
+320023.233481529 0.0410607425919161 20688.0006639233
+0 0
+
+0101101
 *
 Ed
4.7091265613617e-05 1 1 0
-1  184 0 0 1
-2  337 52 0 0 1
-2  338 55 0 0 1
0.0151646519118349 1 1 0
+1  11 0 14.3334654409567 18.8569318286958
+2  11 3 0 14.3334654409567 18.8569318286958
+6  11 3 0
 0
 
 0101000
-+91 0 -340 0 *
++71 0 -70 0 *
+Ve
+0.305785196713225
+316000 7836.69546463271 20687.9999999966
+0 0
+
+0101101
+*
 Ed
- 1.71852081035584e-05 1 1 0
-1  185 0 0 1
-2  339 77 0 0 1
-2  340 52 0 0 1
-6  9 8 0
-6  10 2 0
+ 0.305785196713225 1 1 0
+1  12 0 4.106077149e-005 8.97747391972553
+2  12 3 0 4.106077149e-005 8.97747391972553
+6  12 3 0
 0
 
 0101000
-+91 0 -98 0 *
-Wi
++70 0 -68 0 *
+Ve
+0.733564849869714
+316000 7485.11428493578 17391
+0 0
 
-0101000
--90 0 +89 0 +97 0 -337 0 *
-Fa
-0  1e-07 52 0
+0101101
+*
+Ed
+ 1e-007 1 1 0
+1  13 0 -5.24221906303344 -4.55641924184057
+2  13 3 0 -5.24221906303344 -4.55641924184057
+6  13 3 0
+0
 
-0111000
-+88 0 *
+0101000
++68 0 -66 0 *
 Ve
-4.43173854888558e-05
-84.9999998679167 18.7285768529514 12.0000027354861
+0.733564849869714
+320467.122621291 3.12712100019346 17391
 0 0
 
-0101100
+0101101
 *
 Ed
3.67373464016864e-05 1 1 0
-1  186 0 0 0.872712055346906
-2  341 55 0 0 0.872712055346906
-2  342 61 0 0 0.872712055346906
0.733564849869714 1 1 0
+1  14 0 -7.06834388794866 -0.00312668309766018
+2  14 3 0 -7.06834388794866 -0.00312668309766018
+6  14 3 0
 0
 
 0101000
-+86 0 -298 0 *
++66 0 -64 0 *
 Ed
1.76363706016036e-05 1 1 0
-1  187 0 0 1
-2  343 75 0 0 1
-2  344 55 0 0 1
4.07376032254805e-007 1 1 0
+1  15 0 -0.00312668309766 -4.10606701900002e-005
+2  15 3 0 -0.00312668309766 -4.10606701900002e-005
+6  15 3 0
 0
 
 0101000
-+86 0 -91 0 *
++64 0 -71 0 *
 Wi
 
 0101100
--85 0 +84 0 +90 0 -328 0 -296 0 *
++69 0 +67 0 +65 0 +63 0 +62 0 *
 Fa
-0  1e-07 55 0
-
+0  1e-007 3 0
+2  3
 0111000
-+83 0 *
-Ed
- 4.43173854888558e-05 1 1 0
-1  188 0 0 1
-2  345 61 0 0 1
-2  346 71 0 0 1
-0
-
-0101000
-+235 0 -86 0 *
-Wi
++61 0 *
+Ve
+0.405445665159155
+307925.973440302 14604.2958348035 20688.0235446493
+0 0
 
-0101000
--297 0 +233 0 +81 0 +85 0 *
-Fa
-0  1e-07 61 0
+0101101
+*
+Ve
+0.686442521885961
+307904.948497207 14218.5045578902 17391.0000223844
+0 0
 
-0111000
-+80 0 *
+0101101
+*
 Ed
1.35937083741355e-05 1 1 0
-1  189 0 0 1
-2  347 75 0 0 1
-2  348 71 0 0 1
0.405445665159155 1 1 0
+1  16 0 -5.53302709384876 -2.51675767383655
+2  16 4 0 -5.53302709384876 -2.51675767383655
+6  16 4 0
 0
 
 0101000
-+214 0 -86 0 *
-Wi
-
-0101000
--226 0 +212 0 +78 0 -81 0 *
-Fa
-0  1e-07 71 0
++59 0 -58 0 *
+Ve
+0.686442521885961
+316000 7485.11428493578 17391
+0 0
 
-0111000
-+77 0 *
+0101101
+*
 Ed
- 1.29620323619958e-05 1 1 0
-1  190 0 0 1
-2  349 75 0 0 1
-2  350 77 0 0 1
-6  11 9 0
-6  12 2 0
+ 0.686442521885961 1 1 0
+1  17 0 -13.3857294552338 0
+2  17 4 0 -13.3857294552338 0
+6  17 4 0
 0
 
 0101000
-+207 0 -91 0 *
-Wi
-
-0101000
--78 0 +205 0 +75 0 -84 0 *
-Fa
-0  1e-07 75 0
++58 0 -56 0 *
+Ve
+0.127358194577747
+316000 7836.69546463271 20687.9999999965
+0 0
 
-0111000
-+74 0 *
+0101101
+*
 Ed
- 1.74698737006962e-05 1 1 0
-1  191 0 0 1
-2  351 79 0 0 1
-2  352 77 0 0 1
-6  13 4 0
-6  14 2 0
+ 1e-007 1 1 0
+1  18 0 4.55641924184057 5.24221906303344
+2  18 4 0 4.55641924184057 5.24221906303344
+6  18 4 0
 0
 
 0101000
-+200 0 -98 0 *
-Wi
-
-0101000
--75 0 +198 0 +72 0 -89 0 *
-Fa
-0  1e-07 77 0
-2  2
-0111000
-+71 0 *
++56 0 -54 0 *
 Ed
- 2.2872857526395e-05 1 1 0
-1  192 0 0 1
-2  353 79 0 0 1
-2  354 81 0 0 1
-6  15 6 0
-6  16 4 0
+ 0.127358194577747 1 1 0
+1  19 0 0 9.00835083877794
+2  19 4 0 0 9.00835083877794
+6  19 4 0
 0
 
 0101000
-+193 0 -96 0 *
++54 0 -59 0 *
 Wi
 
-0101000
--72 0 +191 0 +69 0 -95 0 *
+0101100
++57 0 +55 0 +53 0 +52 0 *
 Fa
-0  1e-07 79 0
+0  1e-007 4 0
 2  4
 0111000
-+68 0 *
++51 0 *
 Ve
-2.30785772976202e-05
-84.9999954447569 12.2395795864028 5.71940350527083
+0.00131099059563924
+307964.469558417 15409.7734874065 23788.9591780442
 0 0
 
-0101100
+0101101
 *
-Ed
- 2.30785772976202e-05 1 1 0
-1  193 0 0 1
-2  355 83 0 0 1
-2  356 81 0 0 1
-6  17 10 0
-6  18 6 0
-0
+Ve
+0.0976266697848563
+307964.452218325 15409.8457486113 23788.9356364923
+0 0
 
-0101000
-+66 0 -186 0 *
+0101101
+*
 Ed
- 2.10922209222994e-05 1 1 0
-1  194 0 0 1
-2  357 95 0 0 1
-2  358 81 0 0 1
-6  19 11 0
-6  20 6 0
+ 1e-005 1 1 0
+2  20 5 0 0 2.55378720422166e-005
+1  20 0 0 2.55378720422166e-005
+6  20 5 0
 0
 
 0101000
-+66 0 -96 0 *
-Wi
-
-0101000
--65 0 +64 0 -69 0 -184 0 *
-Fa
-0  1e-07 81 0
-2  6
-0111000
-+63 0 *
++49 0 -48 0 *
 Ve
-2.04346804891182e-05
-85.0000015094792 10.2013896183368 4.30949029896875
+0.127358488437697
+307925.8018293 14604.5293932801 20688.0000004931
 0 0
 
-0101100
+0101101
 *
 Ed
1.48577912160762e-05 1 1 0
-1  195 0 0 1
-2  359 83 0 0 1
-2  360 85 0 0 1
0.0976266697848563 1 1 0
+1  21 0 0.82773512582161 4.02826506163477
+2  21 5 0 0.82773512582161 4.02826506163477
+6  21 5 0
 0
 
 0101000
-+61 0 -179 0 *
++48 0 -46 0 *
+Ve
+0.127358488437697
+316000 7836.69546463271 20687.9999999966
+0 0
+
+0101101
+*
 Ed
- 1.52354307735754e-05 1 1 0
-1  196 0 0 1
-2  361 83 0 0 1
-2  362 96 0 0 1
-6  21 12 0
-6  22 10 0
+ 0.127358488437697 1 1 0
+1  22 0 -9.00848350427441 0
+2  22 5 0 -9.00848350427441 0
+6  22 5 0
 0
 
 0101000
-+61 0 -66 0 *
-Wi
-
-0101000
--60 0 +59 0 +65 0 -177 0 *
-Fa
-0  1e-07 83 0
-
-0111000
-+58 0 *
++46 0 -44 0 *
 Ve
-2.14597079346695e-05
-85.0000031003472 7.81807332889931 2.82353471511979
+0.0263721664297389
+316000 9499.9729861176 23769.528316916
 0 0
 
-0101100
+0101101
 *
 Ed
- 1.36735811051036e-05 1 1 0
-1  197 0 0 1
-2  363 85 0 0 1
-2  364 86 0 0 1
+ 1e-007 1 1 0
+1  23 0 5.24221906303344 5.94433466832183
+2  23 5 0 5.24221906303344 5.94433466832183
+6  23 5 0
 0
 
 0101000
-+56 0 -172 0 *
++44 0 -42 0 *
+Ve
+0.0263721664297389
+312502.203483842 12436.7588939963 23780.5652747058
+0 0
+
+0101101
+*
 Ed
2.04346804891182e-05 1 1 0
-1  198 0 0 1
-2  365 97 0 0 1
-2  366 85 0 0 1
0.0263721664297389 1 1 0
+1  24 0 0 4.5711852921986
+2  24 5 0 0 4.5711852921986
+6  24 5 0
 0
 
 0101000
-+56 0 -61 0 *
-Wi
-
-0101000
--55 0 +54 0 +60 0 -170 0 *
-Fa
-0  1e-07 85 0
-
-0111000
-+53 0 *
++42 0 -40 0 *
 Ed
2.14597079346695e-05 1 1 0
-1  199 0 0 1
-2  367 86 0 0 1
-2  368 87 0 0 1
0.00130969401153366 1 1 0
+1  25 0 4.5711852921986 10.0098081225668
+2  25 5 0 4.5711852921986 10.0098081225668
+6  25 5 0
 0
 
 0101000
-+155 0 -56 0 *
++40 0 -49 0 *
 Wi
 
-0101000
--153 0 +51 0 +55 0 -162 0 *
+0101100
++47 0 +45 0 +43 0 +41 0 +39 0 +38 0 *
 Fa
-0  1e-07 86 0
-
+0  1e-007 5 0
+2  5
 0111000
-+50 0 *
++37 0 *
 Ve
-2.47978857912091e-05
-80.0000038150694 10.215634021875 2.26638487928056
+0.353455953219811
+320023.238828406 0.0410607425918732 20688.000015064
 0 0
 
-0101100
+0101101
 *
-Ed
- 1.54757796018057e-05 1 1 0
-1  200 0 0 1
-2  369 88 0 0 1
-2  370 87 0 0 1
-0
+Ve
+0.353455953219811
+321186.316854091 0.0410607322220014 23752.7065407115
+0 0
 
-0101000
-+150 0 -48 0 *
+0101101
+*
 Ed
1.16963510864887e-05 1 1 0
-1  201 0 0 1
-2  371 87 0 0 1
-2  372 97 0 0 1
0.353455953219811 1 1 0
+1  26 0 0.01380223016778 4.27331312738195
+2  26 6 0 0.01380223016778 4.27331312738195
+6  26 6 0
 0
 
 0101000
-+48 0 -56 0 *
-Wi
-
-0101000
--148 0 +47 0 +46 0 -51 0 *
-Fa
-0  1e-07 87 0
-
-0111000
-+45 0 *
++35 0 -34 0 *
 Ve
-1.71567087942514e-05
-75.0000060125695 13.1491281009549 1.89228356902951
+0.0178647705348319
+318204.686108146 7327.42064239695 23761.6627563784
 0 0
 
-0101100
+0101101
 *
 Ed
1.20249028165566e-05 1 1 0
-1  202 0 0 1
-2  373 89 0 0 1
-2  374 88 0 0 1
0.0178647705348319 1 1 0
+1  27 0 4.105518993e-005 4.29014029254766
+2  27 6 0 4.105518993e-005 4.29014029254766
+6  27 6 0
 0
 
 0101000
-+145 0 -43 0 *
++34 0 -32 0 *
+Ve
+0.00783241195886688
+316092.13492912 9412.51880139814 23769.0967131488
+0 0
+
+0101101
+*
 Ed
9.56602159006149e-06 1 1 0
-1  203 0 0 1
-2  375 98 0 0 1
-2  376 88 0 0 1
0.00783241195886688 1 1 0
+1  28 0 4.29014029254766 5.72775052691179
+2  28 6 0 4.29014029254766 5.72775052691179
+6  28 6 0
 0
 
 0101000
-+43 0 -48 0 *
-Wi
-
-0101000
--143 0 +42 0 +41 0 -47 0 *
-Fa
-0  1e-07 88 0
++32 0 -30 0 *
+Ve
+5.91550565818408e-007
+316000 9499.97298611761 23769.528316916
+0 0
 
-0111000
-+40 0 *
+0101101
+*
 Ed
- 5.43747871965573e-06 1 1 0
-1  204 0 0 1
-2  377 90 0 0 1
-2  378 89 0 0 1
+ 5.91550565818408e-007 1 1 0
+1  29 0 5.72775052691179 5.85499666236443
+2  29 6 0 5.72775052691179 5.85499666236443
+6  29 6 0
 0
 
 0101000
-+132 0 -43 0 *
-Wi
-
-0101000
--138 0 +130 0 +38 0 -42 0 *
-Fa
-0  1e-07 89 0
-
-0111000
-+37 0 *
++30 0 -28 0 *
 Ve
-2.42155517324698e-05
-75.0000054565972 15.7198838016389 3.14017136301042
+0.305785196713904
+316000 7836.69546463271 20687.9999999966
 0 0
 
-0101100
+0101101
 *
 Ed
- 1.32661907584394e-05 1 1 0
-1  205 0 0 1
-2  379 90 0 0 1
-2  380 91 0 0 1
+ 1e-007 1 1 0
+1  30 0 -5.94433466832183 -5.24221906303344
+2  30 6 0 -5.94433466832183 -5.24221906303344
+6  30 6 0
 0
 
 0101000
-+127 0 -35 0 *
++28 0 -26 0 *
 Ed
1.71567087942514e-05 1 1 0
-1  206 0 0 1
-2  381 90 0 0 1
-2  382 98 0 0 1
0.305785196713904 1 1 0
+1  31 0 -8.97747391972553 -4.10607714904643e-005
+2  31 6 0 -8.97747391972553 -4.10607714904643e-005
+6  31 6 0
 0
 
 0101000
-+43 0 -35 0 *
++26 0 -35 0 *
 Wi
 
-0101000
--38 0 +125 0 +34 0 -33 0 *
+0101100
++33 0 +31 0 +29 0 +27 0 +25 0 +24 0 *
 Fa
-0  1e-07 90 0
-
+0  1e-007 6 0
+2  6
 0111000
-+32 0 *
++23 0 *
 Ve
-2.42155517324698e-05
-75.0000075494097 17.4399146915278 4.36712293003125
+0.910878697891695
+316000 -7485.11428493578 17391
 0 0
 
-0101100
+0101101
 *
-Ed
- 1.84347314616309e-05 1 1 0
-1  207 0 0 1
-2  383 92 0 0 1
-2  384 91 0 0 1
-0
+Ve
+0.910878697891695
+307905.158324757 -14218.672816369 17390.9886923472
+0 0
 
-0101000
-+122 0 -30 0 *
+0101101
+*
 Ed
2.42155517324698e-05 1 1 0
-1  208 0 0 1
-2  385 99 0 0 1
-2  386 91 0 0 1
0.910878697891695 1 1 0
+1  32 0 -10.097004591975 -0.0155100565362805
+2  32 7 0 -10.097004591975 -0.0155100565362805
+6  32 7 0
 0
 
 0101000
-+35 0 -30 0 *
-Wi
-
-0101000
--34 0 +120 0 +29 0 -28 0 *
-Fa
-0  1e-07 91 0
++21 0 -20 0 *
+Ve
+0.588930851781909
+307925.943077942 -14604.4335260146 20688.0003343276
+0 0
 
-0111000
-+27 0 *
+0101101
+*
 Ed
1.28885941553593e-05 1 1 0
-1  209 0 0 1
-2  387 92 0 0 1
-2  388 94 0 0 1
0.588930851781909 1 1 0
+1  33 0 -4.63153724787237 -1.22322291977858
+2  33 7 0 -4.63153724787237 -1.22322291977858
+6  33 7 0
 0
 
 0101000
-+30 0 -108 0 *
-Wi
-
-0101000
--29 0 +115 0 +106 0 -25 0 *
-Fa
-0  1e-07 92 0
-
-0111000
-+24 0 *
++20 0 -18 0 *
 Ve
-1.51000795432281e-05
-80.0000081317361 15.1852189208681 4.96923233313195
+0.132639881965437
+316000 -7836.69546463271 20687.9999999966
 0 0
 
-0101100
+0101101
 *
 Ed
8.26133901923663e-06 1 1 0
-1  210 0 0 1
-2  389 94 0 0 1
-2  390 99 0 0 1
0.132639881965437 1 1 0
+1  34 0 10.7590452455883 26.3776496137573
+2  34 7 0 10.7590452455883 26.3776496137573
+6  34 7 0
 0
 
 0101000
-+30 0 -22 0 *
++18 0 -16 0 *
 Ed
4.1130185571349e-06 1 1 0
-1  211 0 0 1
-2  391 95 0 0 1
-2  392 94 0 0 1
1e-007 1 1 0
+1  35 0 -5.24221906303344 -4.55641924184057
+2  35 7 0 -5.24221906303344 -4.55641924184057
+6  35 7 0
 0
 
 0101000
-+22 0 -103 0 *
++16 0 -21 0 *
 Wi
 
-0101000
--21 0 +25 0 +101 0 -20 0 *
+0101100
++19 0 +17 0 +15 0 +14 0 *
 Fa
-0  1e-07 94 0
-
+0  1e-007 7 0
+2  7
 0111000
-+19 0 *
++13 0 *
 Ve
-2.47978857912091e-05
-80.0000056430208 13.0417601688854 3.62644929854514
+0.370801968810223
+320467.125397541 0.02053036598 17391.0010676384
 0 0
 
-0101100
+0101101
 *
-Ed
- 2.32872652605422e-05 1 1 0
-1  212 0 0 1
-2  393 98 0 0 1
-2  394 99 0 0 1
-0
+Ve
+0.370801968810223
+316000 -7485.11428493578 17391
+0 0
 
-0101000
-+35 0 -17 0 *
+0101101
+*
 Ed
4.84032587064175e-06 1 1 0
-1  213 0 0 1
-2  395 99 0 0 1
-2  396 96 0 0 1
0.370801968810223 1 1 0
+1  36 0 -8.51167196569059 0
+2  36 8 0 -8.51167196569059 0
+6  36 8 0
 0
 
 0101000
-+17 0 -22 0 *
-Wi
-
-0101000
--16 0 +28 0 +21 0 -15 0 *
-Fa
-0  1e-07 99 0
++11 0 -10 0 *
+Ve
+0.383365831729802
+316000 -7836.69546463271 20687.9999999965
+0 0
 
-0111000
-+14 0 *
+0101101
+*
 Ed
2.47978857912091e-05 1 1 0
-1  214 0 0 1
-2  397 97 0 0 1
-2  398 98 0 0 1
1e-007 1 1 0
+1  37 0 4.55641924184057 5.24221906303344
+2  37 8 0 4.55641924184057 5.24221906303344
+6  37 8 0
 0
 
 0101000
-+48 0 -17 0 *
-Wi
-
-0101000
--41 0 +33 0 +16 0 -12 0 *
-Fa
-0  1e-07 98 0
++10 0 -8 0 *
+Ve
+0.383365831729802
+320023.233481511 0.02053036598 20688.0006639233
+0 0
 
-0111000
-+11 0 *
+0101101
+*
 Ed
1.4496399425563e-05 1 1 0
-1  215 0 0 1
-2  399 96 0 0 1
-2  400 97 0 0 1
0.383365831729802 1 1 0
+1  38 0 0 12.7914006728546
+2  38 8 0 0 12.7914006728546
+6  38 8 0
 0
 
 0101000
-+17 0 -61 0 *
-Wi
-
-0101000
--46 0 +12 0 +9 0 -54 0 *
-Fa
-0  1e-07 97 0
-
-0111000
-+8 0 *
++8 0 -6 0 *
 Ed
1.51000795432281e-05 1 1 0
-1  216 0 0 1
-2  401 96 0 0 1
-2  402 95 0 0 1
0.0437719439812485 1 1 0
+1  39 0 -18.8569318286958 -14.3334654409567
+2  39 8 0 -18.8569318286958 -14.3334654409567
+6  39 8 0
 0
 
 0101000
-+22 0 -66 0 *
-Wi
-
-0101000
--9 0 +15 0 +6 0 -59 0 *
-Fa
-0  1e-07 96 0
-
-0111000
-+5 0 *
++6 0 -11 0 *
 Wi
 
-0101000
--6 0 +20 0 +94 0 -64 0 *
+0101100
++9 0 +7 0 +5 0 +4 0 *
 Fa
-0  1e-07 95 0
-
+0  1e-007 8 0
+2  8
 0111000
 +3 0 *
-Sh
-
-0101000
-+531 0 +524 0 +517 0 +510 0 +503 0 +496 0 +489 0 +484 0 +479 0 +474 0 
-+469 0 +464 0 +459 0 +452 0 +447 0 +442 0 +437 0 +432 0 +427 0 +422 0 
-+415 0 +408 0 +401 0 +394 0 +387 0 +380 0 +373 0 +367 0 +360 0 +353 0 
-+347 0 +342 0 +333 0 +326 0 +323 0 +319 0 +312 0 +305 0 +301 0 +294 0 
-+290 0 +283 0 +278 0 +271 0 +264 0 +257 0 +250 0 +246 0 +243 0 +240 0 
-+238 0 +231 0 +224 0 +217 0 +210 0 +203 0 +196 0 +189 0 +182 0 +175 0 
-+168 0 +160 0 +156 0 +151 0 +146 0 +141 0 +136 0 +133 0 +128 0 +123 0 
-+118 0 +113 0 +109 0 +104 0 +99 0 +92 0 +87 0 +82 0 +79 0 +76 0 
-+73 0 +70 0 +67 0 +62 0 +57 0 +52 0 +49 0 +44 0 +39 0 +36 0 
-+31 0 +26 0 +23 0 +18 0 +13 0 +10 0 +7 0 +4 0 +2 0 *
+Co
 
-+1 0 
-0
+1100000
++84 0 +72 0 +60 0 +50 0 +36 0 +22 0 +12 0 +2 0 *
 
++1 0 
\ No newline at end of file
index e9b9f78d1f43fa24ebfa5410ac8dee161d0337d2..8ad22f9d4d4b7d0b0da027711c405ff3f67b2b72 100644 (file)
@@ -1,6 +1,6 @@
 Microsoft Visual Studio Solution File, Format Version 10.00
 # Visual Studio 2008
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "IESample", "IESample.vcproj", "{AD4DADCB-F15E-37FD-B3AA-88504FAAF4FD}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "IESample", "IESample.vcproj", "{29A31181-FF46-3DB1-827A-05ADEAD293B5}"
 EndProject
 Global
        GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -8,10 +8,10 @@ Global
                Release|Win32 = Release|Win32
        EndGlobalSection
        GlobalSection(ProjectConfigurationPlatforms) = postSolution
-               {AD4DADCB-F15E-37FD-B3AA-88504FAAF4FD}.Debug|Win32.ActiveCfg = Debug|Win32
-               {AD4DADCB-F15E-37FD-B3AA-88504FAAF4FD}.Debug|Win32.Build.0 = Debug|Win32
-               {AD4DADCB-F15E-37FD-B3AA-88504FAAF4FD}.Release|Win32.ActiveCfg = Release|Win32
-               {AD4DADCB-F15E-37FD-B3AA-88504FAAF4FD}.Release|Win32.Build.0 = Release|Win32
+               {29A31181-FF46-3DB1-827A-05ADEAD293B5}.Debug|Win32.ActiveCfg = Debug|Win32
+               {29A31181-FF46-3DB1-827A-05ADEAD293B5}.Debug|Win32.Build.0 = Debug|Win32
+               {29A31181-FF46-3DB1-827A-05ADEAD293B5}.Release|Win32.ActiveCfg = Release|Win32
+               {29A31181-FF46-3DB1-827A-05ADEAD293B5}.Release|Win32.Build.0 = Release|Win32
        EndGlobalSection
        GlobalSection(SolutionProperties) = preSolution
                HideSolutionNode = FALSE
index cef63e51f9af797858d7aab1a6e03a334aae5473..ad0c5ef1227f8d9778a0063bbbd933663fa333c8 100644 (file)
@@ -1,6 +1,6 @@
 Microsoft Visual Studio Solution File, Format Version 10.00
 # Visual Studio 2008
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Tutorial", "Tutorial.vcproj", "{28627D0B-F82A-39D5-A15D-DDAFA11059E7}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Tutorial", "Tutorial.vcproj", "{C9C6457A-5B88-3C7F-9964-9D8EE43E7414}"
 EndProject
 Global
        GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -8,10 +8,10 @@ Global
                Release|Win32 = Release|Win32
        EndGlobalSection
        GlobalSection(ProjectConfigurationPlatforms) = postSolution
-               {28627D0B-F82A-39D5-A15D-DDAFA11059E7}.Debug|Win32.ActiveCfg = Debug|Win32
-               {28627D0B-F82A-39D5-A15D-DDAFA11059E7}.Debug|Win32.Build.0 = Debug|Win32
-               {28627D0B-F82A-39D5-A15D-DDAFA11059E7}.Release|Win32.ActiveCfg = Release|Win32
-               {28627D0B-F82A-39D5-A15D-DDAFA11059E7}.Release|Win32.Build.0 = Release|Win32
+               {C9C6457A-5B88-3C7F-9964-9D8EE43E7414}.Debug|Win32.ActiveCfg = Debug|Win32
+               {C9C6457A-5B88-3C7F-9964-9D8EE43E7414}.Debug|Win32.Build.0 = Debug|Win32
+               {C9C6457A-5B88-3C7F-9964-9D8EE43E7414}.Release|Win32.ActiveCfg = Release|Win32
+               {C9C6457A-5B88-3C7F-9964-9D8EE43E7414}.Release|Win32.Build.0 = Release|Win32
        EndGlobalSection
        GlobalSection(SolutionProperties) = preSolution
                HideSolutionNode = FALSE
index 4b3be38a7b63c6b923a0a825a9031553b87550db..dadb51980f4dd327dc59573c58de6e3ab4b67c51 100644 (file)
@@ -52,6 +52,7 @@ is
       IncompatibilityOfFace, 
       OperationAborted,
       GeomAbs_C0,
+      InvalidCurveOnSurface,
       NotValid
     end CheckStatus;
 
index 47fa9f4943aaaa970442f8d0f6e30b70274f23cd..0c15f283926d708226f2511c8e98881b8958e616 100644 (file)
@@ -115,6 +115,13 @@ is
     ---Purpose: Returns (modifiable) mode that means
     --          checking of problem of continuity of the shape.
 
+    CurveOnSurfaceMode(me: in out) 
+    returns Boolean from Standard;
+    ---C++: return &
+    ---C++: inline
+    ---Purpose: Returns (modifiable) mode that means
+    --          checking of problem of invalid curve on surface.
+
     ---
     Perform(me: out);
     ---Purpose: performs analysis
@@ -154,6 +161,9 @@ is
     is protected;
 
     TestContinuity(me: out)
+    is protected; 
+     
+    TestCurveOnSurface(me: out) 
     is protected;
 
 --  TestMergeFace(me: out)
@@ -162,20 +172,20 @@ is
 
 fields
 
-    myShape1           : Shape     from TopoDS;
-    myShape2           : Shape     from TopoDS;
-    myStopOnFirst      : Boolean   from Standard;
-    myOperation        : Operation from BOPAlgo;
-    myArgumentTypeMode : Boolean   from Standard;
-    mySelfInterMode    : Boolean   from Standard;
-    mySmallEdgeMode    : Boolean   from Standard;
-    myRebuildFaceMode  : Boolean   from Standard;
-    myTangentMode      : Boolean   from Standard;
-    myMergeVertexMode  : Boolean   from Standard;
-    myMergeEdgeMode    : Boolean   from Standard;
-    myContinuityMode   : Boolean   from Standard;
-    myEmpty1,myEmpty2  : Boolean   from Standard; 
-    myResult      : ListOfCheckResult from BOPAlgo
-    
-    
+    myShape1             : Shape     from TopoDS;
+    myShape2             : Shape     from TopoDS;
+    myStopOnFirst        : Boolean   from Standard;
+    myOperation          : Operation from BOPAlgo;
+    myArgumentTypeMode   : Boolean   from Standard;
+    mySelfInterMode      : Boolean   from Standard;
+    mySmallEdgeMode      : Boolean   from Standard;
+    myRebuildFaceMode    : Boolean   from Standard;
+    myTangentMode        : Boolean   from Standard;
+    myMergeVertexMode    : Boolean   from Standard;
+    myMergeEdgeMode      : Boolean   from Standard;
+    myContinuityMode     : Boolean   from Standard; 
+    myCurveOnSurfaceMode : Boolean   from Standard; 
+    myEmpty1, myEmpty2   : Boolean   from Standard
+    myResult     : ListOfCheckResult from BOPAlgo; 
+        
 end ArgumentAnalyzer;
index 3326863a2d355bba19ffa8599a19b5b5faa666ce..c782f2ccd9adbdfab044115fae71b5edff00a446 100644 (file)
@@ -73,6 +73,7 @@ myTangentMode(Standard_False),
 myMergeVertexMode(Standard_False),
 myMergeEdgeMode(Standard_False),
 myContinuityMode(Standard_False),
+myCurveOnSurfaceMode(Standard_False),
 myEmpty1(Standard_False),
 myEmpty2(Standard_False)
 // myMergeFaceMode(Standard_False)
@@ -196,6 +197,11 @@ void BOPAlgo_ArgumentAnalyzer::Perform()
       if(!(!myResult.IsEmpty() && myStopOnFirst))
         TestContinuity();
     }
+
+    if(myCurveOnSurfaceMode) {
+      if(!(!myResult.IsEmpty() && myStopOnFirst))
+        TestCurveOnSurface();
+    }
   }
   catch(Standard_Failure) {
     BOPAlgo_CheckResult aResult;
@@ -904,6 +910,57 @@ void BOPAlgo_ArgumentAnalyzer::TestContinuity()
   }
 }
 
+// ================================================================================
+// function: TestCurveOnSurface
+// purpose:
+// ================================================================================
+void BOPAlgo_ArgumentAnalyzer::TestCurveOnSurface()
+{
+  Standard_Integer i;
+  Standard_Real aT, aD, aTolE;
+  TopExp_Explorer aExpF, aExpE;
+  //
+  for(i = 0; i < 2; i++) {
+    const TopoDS_Shape& aS = (i == 0) ? myShape1 : myShape2;
+    if(aS.IsNull()) {
+      continue;
+    }
+    //
+    aExpF.Init(aS, TopAbs_FACE);
+    for (; aExpF.More(); aExpF.Next()) {
+      const TopoDS_Face& aF = *(TopoDS_Face*)&aExpF.Current();
+      //
+      aExpE.Init(aF, TopAbs_EDGE);
+      for (; aExpE.More(); aExpE.Next()) {
+        const TopoDS_Edge& aE = *(TopoDS_Edge*)&aExpE.Current();
+        //
+        if (BOPTools_AlgoTools::ComputeTolerance(aF, aE, aD, aT)) {
+          aTolE = BRep_Tool::Tolerance(aE);
+          if (aD > aTolE) {
+            BOPAlgo_CheckResult aResult;
+            aResult.SetCheckStatus(BOPAlgo_InvalidCurveOnSurface);
+            if(i == 0) {
+              aResult.SetShape1(myShape1);
+              aResult.AddFaultyShape1(aE);
+              aResult.AddFaultyShape1(aF);
+              aResult.SetMaxDistance1(aD);
+              aResult.SetMaxParameter1(aT);
+            }
+            else {
+              aResult.SetShape2(myShape2);
+              aResult.AddFaultyShape2(aE);
+              aResult.AddFaultyShape2(aF);
+              aResult.SetMaxDistance2(aD);
+              aResult.SetMaxParameter2(aT);
+            }
+            myResult.Append(aResult);
+          }
+        }
+      }
+    }
+  }
+}
+
 // ================================================================================
 // function: TestMergeFace
 // purpose:
index e248a057cc0f58ec762838d969c3a8789b2e1414..d5102f0302856e5ae7fe7de1419ff30a5e6cc7ad 100644 (file)
@@ -57,6 +57,10 @@ inline Standard_Boolean& BOPAlgo_ArgumentAnalyzer::ContinuityMode()
   return myContinuityMode;
 }
 
+inline Standard_Boolean& BOPAlgo_ArgumentAnalyzer::CurveOnSurfaceMode() 
+{
+  return myCurveOnSurfaceMode;
+}
 // inline Standard_Boolean& BOPAlgo_ArgumentAnalyzer::MergeFaceMode() 
 // {
 //   return myMergeFaceMode;
index c733ec953cb62ced5943925383ff8cf8d2f98eff..541a91bffae1efa1acc6cbbb6d912bb149b5caf6 100644 (file)
@@ -39,7 +39,7 @@ is
     ---Purpose: sets ancestor shape (tool) for faulty sub-shapes
     
     AddFaultyShape2(me: in out; TheShape: Shape from TopoDS);
-    ---Purpose: adds faulty sub-shapes from tool to a list
+    ---Purpose: adds faulty sub-shapes from tool to a list 
     
     GetShape1(me)
     returns Shape from TopoDS;
@@ -66,7 +66,39 @@ is
     
     GetCheckStatus(me)
     returns CheckStatus from BOPAlgo;
-    ---Purpose: gets status of faulty
+    ---Purpose: gets status of faulty 
+     
+    SetMaxDistance1(me:out; 
+        theDist : Real from Standard); 
+    ---Purpose: Sets max distance for the first shape
+    SetMaxDistance2(me:out; 
+        theDist : Real from Standard); 
+    ---Purpose: Sets max distance for the second shape
+    SetMaxParameter1(me:out; 
+        thePar : Real from Standard); 
+    ---Purpose: Sets the parameter for the first shape
+    SetMaxParameter2(me:out; 
+        thePar : Real from Standard); 
+    ---Purpose: Sets the parameter for the second shape 
+     
+    GetMaxDistance1(me) 
+    returns Real from Standard; 
+    ---Purpose: Returns the distance for the first shape
+    GetMaxDistance2(me) 
+    returns Real from Standard; 
+    ---Purpose: Returns the distance for the second shape
+    GetMaxParameter1(me) 
+    returns Real from Standard; 
+    ---Purpose: Returns the parameter for the fircst shape
+    GetMaxParameter2(me) 
+    returns Real from Standard; 
+    ---Purpose: Returns the parameter for the second shape
   
 fields
 
@@ -74,6 +106,10 @@ fields
     myShape2 : Shape from TopoDS;
     myStatus : CheckStatus from BOPAlgo;
     myFaulty1 : ListOfShape from BOPCol;
-    myFaulty2 : ListOfShape from BOPCol;
+    myFaulty2 : ListOfShape from BOPCol; 
+    myMaxDist1 : Real from Standard;
+    myMaxDist2 : Real from Standard;
+    myMaxPar1  : Real from Standard;
+    myMaxPar2  : Real from Standard;
 
 end CheckResult;
index 2e0fd350134fee5bd842c3f1c4fcc72700b396a8..9a87b82ca0dae0e9ca473c97466d9badb984af58 100644 (file)
 // function:  BOPAlgo_CheckResult()
 // purpose: 
 //=======================================================================
-BOPAlgo_CheckResult::BOPAlgo_CheckResult() : myStatus(BOPAlgo_CheckUnknown)
+BOPAlgo_CheckResult::BOPAlgo_CheckResult() 
+: 
+  myStatus(BOPAlgo_CheckUnknown),
+  myMaxDist1(0.),
+  myMaxDist2(0.),
+  myMaxPar1(0.),
+  myMaxPar2(0.)
 {
 }
 
@@ -72,3 +78,43 @@ BOPAlgo_CheckStatus BOPAlgo_CheckResult::GetCheckStatus() const
 {
   return myStatus;
 }
+
+void BOPAlgo_CheckResult::SetMaxDistance1(const Standard_Real theDist)
+{
+  myMaxDist1 = theDist;
+}
+
+void BOPAlgo_CheckResult::SetMaxDistance2(const Standard_Real theDist)
+{
+  myMaxDist2 = theDist;
+}
+
+void BOPAlgo_CheckResult::SetMaxParameter1(const Standard_Real thePar)
+{
+  myMaxPar1 = thePar;
+}
+
+void BOPAlgo_CheckResult::SetMaxParameter2(const Standard_Real thePar)
+{
+  myMaxPar2 = thePar;
+}
+
+Standard_Real BOPAlgo_CheckResult::GetMaxDistance1() const
+{
+  return myMaxDist1;
+}
+
+Standard_Real BOPAlgo_CheckResult::GetMaxDistance2() const
+{
+  return myMaxDist2;
+}
+
+Standard_Real BOPAlgo_CheckResult::GetMaxParameter1() const
+{
+  return myMaxPar1;
+}
+
+Standard_Real BOPAlgo_CheckResult::GetMaxParameter2() const
+{
+  return myMaxPar2;
+}
index c93f5f8c0affbc872cc3cb26130fc42dbf17ff64..0016b2711f40109a2848c27aa3cfe111968023d2 100644 (file)
 #include <BOPTest.ixx>
 #include <TCollection_AsciiString.hxx>
 
+#include <TopExp_Explorer.hxx>
+
+#include <TopTools_MapOfShape.hxx>
+#include <TopTools_ShapeMapHasher.hxx>
+
 #include <gp_Pnt.hxx>
 
 #include <TopoDS_Shape.hxx>
 #include <BOPAlgo_ArgumentAnalyzer.hxx>
 #include <BOPAlgo_CheckResult.hxx>
 
+#include <BOPTools_AlgoTools.hxx>
+
 static 
   Standard_Integer bopcheck (Draw_Interpretor&, Standard_Integer, const char** );
 
 static 
   Standard_Integer bopargcheck (Draw_Interpretor&, Standard_Integer, const char** );
+
+static 
+  Standard_Integer xdistef(Draw_Interpretor&, Standard_Integer, const char** );
+
+static 
+  Standard_Integer checkcurveonsurf (Draw_Interpretor&, Standard_Integer, const char**);
+
+static 
+  Standard_Integer csdeviation(Draw_Interpretor&, Standard_Integer, const char** );
+
+static 
+  Standard_Integer checkcsdeviation(Draw_Interpretor&, Standard_Integer, const char** );
+
 //
 
 //=======================================================================
@@ -77,6 +97,20 @@ static
   theCommands.Add("bopargcheck" , 
                   "Use bopargcheck without parameters to get ",  
                   __FILE__, bopargcheck, g);
+  theCommands.Add ("xdistef" ,
+                   "Use xdistef edge face",
+                   __FILE__, xdistef, g);
+  theCommands.Add("checkcurveonsurf",
+                  "checkcurveonsurf shape",
+                  __FILE__, checkcurveonsurf, g);
+
+  theCommands.Add("csdeviation",
+                  "csdeviation edge face",
+                  __FILE__, csdeviation, g);
+
+  theCommands.Add("checkcsdeviation",
+                  "checkcsdeviation shape",
+                  __FILE__, checkcsdeviation, g);
 }
 
 //=======================================================================
@@ -293,7 +327,10 @@ static void MakeShapeForFullOutput
    const Standard_Integer          aIndex,
    const BOPCol_ListOfShape &    aList,
    Standard_Integer&               aCount,
-   Draw_Interpretor&               di)
+   Draw_Interpretor&               di,
+   Standard_Boolean                bCurveOnSurf = Standard_False,
+   Standard_Real                   aMaxDist = 0.,
+   Standard_Real                   aMaxParameter = 0.)
 {
   TCollection_AsciiString aNum(aIndex);
   TCollection_AsciiString aName = aBaseName + aNum;
@@ -309,7 +346,15 @@ static void MakeShapeForFullOutput
     BB.Add(cmp, aS);
     aCount++;
   }
-  di << "Made faulty shape: " << name << "\n";
+  di << "Made faulty shape: " << name;
+  //
+  if (bCurveOnSurf) {
+    di << " (MaxDist = " << aMaxDist 
+       << ", MaxPar = " << aMaxParameter << ")";
+  }
+  //
+  di << "\n";
+  //
   DBRep::Set(name, cmp);
 }
 
@@ -324,7 +369,7 @@ Standard_Integer bopargcheck
   if (n<2) {
     di << "\n";
     di << " Use >bopargcheck Shape1 [[Shape2] ";
-    di << "[-F/O/C/T/S/U] [/R|F|T|V|E|I|P]] [#BF]" << "\n" << "\n";
+    di << "[-F/O/C/T/S/U] [/R|F|T|V|E|I|P|C|S]] [#BF]" << "\n" << "\n";
     di << " -<Boolean Operation>" << "\n";
     di << " F (fuse)" << "\n";
     di << " O (common)" << "\n";
@@ -344,6 +389,7 @@ Standard_Integer bopargcheck
     di << " I (disable self-interference test)" << "\n";
     di << " P (disable shape type test)" << "\n";
     di << " C (disable test for shape continuity)" << "\n";
+    di << " S (disable curve on surface check)" << "\n";
     di << " For example: \"bopargcheck s1 s2 /RI\" disables ";
     di << "small edge detection and self-intersection detection" << "\n";
     di << " default - all options are enabled" << "\n" << "\n";
@@ -427,11 +473,12 @@ Standard_Integer bopargcheck
   aChecker.SetShape1(aS1);
 
   // set default options (always tested!) for single and couple shapes
-  aChecker.ArgumentTypeMode() = Standard_True;
-  aChecker.SelfInterMode()    = Standard_True;
-  aChecker.SmallEdgeMode()    = Standard_True;
-  aChecker.RebuildFaceMode()  = Standard_True;
-  aChecker.ContinuityMode()   = Standard_True;
+  aChecker.ArgumentTypeMode()   = Standard_True;
+  aChecker.SelfInterMode()      = Standard_True;
+  aChecker.SmallEdgeMode()      = Standard_True;
+  aChecker.RebuildFaceMode()    = Standard_True;
+  aChecker.ContinuityMode()     = Standard_True;
+  aChecker.CurveOnSurfaceMode() = Standard_True;
 
   // test & set options and operation for two shapes
   if(!aS22.IsNull()) {
@@ -499,6 +546,9 @@ Standard_Integer bopargcheck
       else if(a[indxOP][ind] == 'C' || a[indxOP][ind] == 'c') {
         aChecker.ContinuityMode() = Standard_False;
       }
+      else if(a[indxOP][ind] == 'S' || a[indxOP][ind] == 's') {
+        aChecker.CurveOnSurfaceMode() = Standard_False;
+      }
       else {
         di << "Error: invalid test option(s)!" << "\n";
         di << "Type bopargcheck without arguments for more information" << "\n";
@@ -549,6 +599,7 @@ Standard_Integer bopargcheck
       Standard_Integer S2_SelfIntAll = 0, S2_SmalEAll = 0, S2_BadFAll = 0, S2_BadVAll = 0, S2_BadEAll = 0;
       Standard_Integer S1_OpAb = 0, S2_OpAb = 0;
       Standard_Integer S1_C0 = 0, S2_C0 = 0, S1_C0All = 0, S2_C0All = 0;
+      Standard_Integer S1_COnS = 0, S2_COnS = 0, S1_COnSAll = 0, S2_COnSAll = 0;
       Standard_Boolean hasUnknown = Standard_False;
 
       TCollection_AsciiString aS1SIBaseName("s1si_");
@@ -557,12 +608,14 @@ Standard_Integer bopargcheck
       TCollection_AsciiString aS1BVBaseName("s1bv_");
       TCollection_AsciiString aS1BEBaseName("s1be_");
       TCollection_AsciiString aS1C0BaseName("s1C0_");
+      TCollection_AsciiString aS1COnSBaseName("s1COnS_");
       TCollection_AsciiString aS2SIBaseName("s2si_");
       TCollection_AsciiString aS2SEBaseName("s2se_");
       TCollection_AsciiString aS2BFBaseName("s2bf_");
       TCollection_AsciiString aS2BVBaseName("s2bv_");
       TCollection_AsciiString aS2BEBaseName("s2be_");
       TCollection_AsciiString aS2C0BaseName("s2C0_");
+      TCollection_AsciiString aS2COnSBaseName("s2COnS_");
 
       for(; anIt.More(); anIt.Next()) {
         const BOPAlgo_CheckResult& aResult = anIt.Value();
@@ -667,6 +720,27 @@ Standard_Integer bopargcheck
           }
         }
           break;
+        case BOPAlgo_InvalidCurveOnSurface: {
+          if(!aSS1.IsNull()) {
+            S1_COnS++;
+            if(isL1) {
+              Standard_Real aMaxDist = aResult.GetMaxDistance1();
+              Standard_Real aMaxParameter = aResult.GetMaxParameter1();
+              MakeShapeForFullOutput(aS1COnSBaseName, S1_COnS, aLS1, S1_COnSAll, di,
+                                     Standard_True, aMaxDist, aMaxParameter);
+            }
+          }
+          if(!aSS2.IsNull()) {
+            S2_COnS++;
+            if(isL2) {
+              Standard_Real aMaxDist = aResult.GetMaxDistance2();
+              Standard_Real aMaxParameter = aResult.GetMaxParameter2();
+              MakeShapeForFullOutput(aS2COnSBaseName, S2_COnS, aLS2, S2_COnSAll, di,
+                                     Standard_True, aMaxDist, aMaxParameter);
+            }
+          }
+        }
+          break;
         case BOPAlgo_OperationAborted: {
           if(!aSS1.IsNull()) S1_OpAb++;
           if(!aSS2.IsNull()) S2_OpAb++;
@@ -680,9 +754,9 @@ Standard_Integer bopargcheck
         } // switch
       }// faulties
 
-      Standard_Integer FS1 = S1_SelfInt + S1_SmalE + S1_BadF + S1_BadV + S1_BadE + S1_OpAb + S1_C0;
+      Standard_Integer FS1 = S1_SelfInt + S1_SmalE + S1_BadF + S1_BadV + S1_BadE + S1_OpAb + S1_C0 + S1_COnS;
       FS1 += (S1_BadType != 0) ? 1 : 0;
-      Standard_Integer FS2 = S2_SelfInt + S2_SmalE + S2_BadF + S2_BadV + S2_BadE + S2_OpAb + S2_C0;
+      Standard_Integer FS2 = S2_SelfInt + S2_SmalE + S2_BadF + S2_BadV + S2_BadE + S2_OpAb + S2_C0 + S2_COnS;
       FS2 += (S2_BadType != 0) ? 1 : 0;
       
       // output for first shape
@@ -761,6 +835,17 @@ Standard_Integer bopargcheck
           di << "  Cases(" << S1_C0 << ")  Total shapes(" << S1_C0All << ")" << "\n";
         else
           di << "\n";
+
+        Standard_CString CString17;
+        if (S1_COnS != 0)
+          CString17="YES";
+        else
+          CString17="NO";
+        di << "Invalid Curve on Surface        : " << CString17;
+        if(S1_COnS != 0)
+          di << "  Cases(" << S1_COnS << ")  Total shapes(" << S1_COnSAll << ")" << "\n";
+        else
+          di << "\n";
       }
 
       // output for second shape
@@ -842,6 +927,17 @@ Standard_Integer bopargcheck
         else
           di << "\n";
 
+        Standard_CString CString18;
+        if (S2_COnS != 0)
+          CString18="YES";
+        else
+          CString18="NO";
+        di << "Invalid Curve on Surface        : " << CString18;
+        if(S2_COnS != 0)
+          di << "  Cases(" << S2_COnS << ")  Total shapes(" << S2_COnSAll << ")" << "\n";
+        else
+          di << "\n";
+
         // warning
         di << "\n";
         if(hasUnknown)
@@ -852,3 +948,328 @@ Standard_Integer bopargcheck
 
   return 0;
 }
+
+//=======================================================================
+//function : xdistef
+//purpose  : 
+//=======================================================================
+Standard_Integer xdistef(Draw_Interpretor& di,
+                         Standard_Integer n,
+                         const char** a)
+{
+  if(n < 3) {
+    di << "Use efmaxdist edge face\n";
+    return 1;
+  }
+  //
+  const TopoDS_Shape aS1 = DBRep::Get(a[1]);
+  const TopoDS_Shape aS2 = DBRep::Get(a[2]);
+  //
+  if (aS1.IsNull() || aS2.IsNull()) {
+    di << "null shapes\n";
+    return 1;
+  }
+  //
+  if (aS1.ShapeType() != TopAbs_EDGE || 
+      aS2.ShapeType() != TopAbs_FACE) {
+    di << "type mismatch\n";
+    return 1;
+  }
+  //
+  Standard_Real aMaxDist = 0.0, aMaxPar = 0.0;
+  //
+  const TopoDS_Edge& anEdge = *(TopoDS_Edge*)&aS1;
+  const TopoDS_Face& aFace  = *(TopoDS_Face*)&aS2;
+  //
+  if(!BOPTools_AlgoTools::ComputeTolerance
+     (aFace, anEdge, aMaxDist, aMaxPar)) {
+    di << "Tolerance cannot be computed\n";
+    return 1;
+  }
+  //
+  di << "Max Distance = " << aMaxDist 
+     << "; Parameter on curve = " << aMaxPar << "\n";
+  //
+  return 0;
+}
+
+//=======================================================================
+//function : checkcurveonsurf
+//purpose  : 
+//=======================================================================
+Standard_Integer checkcurveonsurf(Draw_Interpretor& di,
+                                  Standard_Integer n, 
+                                  const char** a)
+{
+  if (n != 2) {
+    di << "use checkcurveonsurf shape\n";
+    return 1;
+  }
+  //
+  TopoDS_Shape aS =  DBRep::Get(a[1]);
+  if (aS.IsNull()) {
+    di << "null shape\n";
+    return 1;
+  }
+  //
+  Standard_Integer nE, nF, anECounter, aFCounter;
+  Standard_Real aT, aTolE, aDMax;
+  TopExp_Explorer aExpF, aExpE;
+  char buf[200], aFName[10], anEName[10];
+  NCollection_DataMap<TopoDS_Shape, Standard_Real, TopTools_ShapeMapHasher> aDMETol;
+  BOPCol_DataMapOfShapeInteger aMSI;
+  //
+  anECounter = 0;
+  aFCounter  = 0;
+  //
+  aExpF.Init(aS, TopAbs_FACE);
+  for (; aExpF.More(); aExpF.Next()) {
+    const TopoDS_Face& aF = *(TopoDS_Face*)&aExpF.Current();
+    //
+    aExpE.Init(aF, TopAbs_EDGE);
+    for (; aExpE.More(); aExpE.Next()) {
+      const TopoDS_Edge& aE = *(TopoDS_Edge*)&aExpE.Current();
+      //
+      if (!BOPTools_AlgoTools::ComputeTolerance(aF, aE, aDMax, aT)) {
+        continue;
+      }
+      //
+      aTolE = BRep_Tool::Tolerance(aE);
+      if (aDMax < aTolE) {
+        continue;
+      }
+      //
+      if (aDMETol.IsBound(aE)) {
+        Standard_Real& aD = aDMETol.ChangeFind(aE);
+        if (aDMax > aD) {
+          aD = aDMax;
+        }
+      }
+      else {
+        aDMETol.Bind(aE, aDMax);
+      }
+      //
+      if (anECounter == 0) {
+        di << "Invalid curves on surface:\n";
+      }
+      //
+      if (aMSI.IsBound(aE)) {
+        nE = aMSI.Find(aE);
+      }
+      else {
+        nE = anECounter;
+        aMSI.Bind(aE, nE);
+        ++anECounter;
+      }
+      //
+      if (aMSI.IsBound(aF)) {
+        nF = aMSI.Find(aF);
+      } else {
+        nF = aFCounter;
+        aMSI.Bind(aF, nF);
+        ++aFCounter;
+      }
+      //
+      Sprintf(anEName, "e_%d", nE);
+      Sprintf(aFName , "f_%d", nF);
+      Sprintf(buf, "edge %s on face %s (max dist: %3.16f, parameter on curve: %3.16f)\n",
+              anEName, aFName, aDMax, aT);
+      di << buf;
+      //
+      DBRep::Set(anEName, aE);
+      DBRep::Set(aFName , aF);
+    }
+  }
+  //
+  if (anECounter > 0) {
+    di << "\n\nSugestions to fix the shape:\n";
+    di << "explode " << a[1] << " e;\n";
+    //
+    TopTools_MapOfShape M;
+    aExpE.Init(aS, TopAbs_EDGE);
+    for (anECounter = 0; aExpE.More(); aExpE.Next()) {
+      const TopoDS_Shape& aE = aExpE.Current();
+      if (!M.Add(aE)) {
+        continue;
+      }
+      ++anECounter;
+      //
+      if (!aDMETol.IsBound(aE)) {
+        continue;
+      }
+      //
+      aTolE = aDMETol.Find(aE);
+      aTolE *= 1.001;
+      sprintf(buf, "settolerance %s_%d %3.16f;\n", a[1], anECounter, aTolE);
+      di << buf;
+    }
+  }
+  else {
+    di << "This shape seems to be OK.\n";
+  }
+  //
+  return 0;
+}
+
+//=======================================================================
+//function : csdeviation
+//purpose  : 
+//=======================================================================
+Standard_Integer csdeviation(Draw_Interpretor& di,
+                             Standard_Integer n,
+                             const char** a)
+{
+  if(n != 3) {
+    di << "Use csdeviation edge face\n";
+    return 1;
+  }
+  //
+  const TopoDS_Shape aS1 = DBRep::Get(a[1]);
+  const TopoDS_Shape aS2 = DBRep::Get(a[2]);
+  //
+  if (aS1.IsNull() || aS2.IsNull()) {
+    di << "null shapes\n";
+    return 1;
+  }
+  //
+  if (aS1.ShapeType() != TopAbs_EDGE || 
+      aS2.ShapeType() != TopAbs_FACE) {
+    di << "type mismatch\n";
+    return 1;
+  }
+  //
+  Standard_Real aMaxDist = 0., aMaxPar = 0.;
+  //
+  const TopoDS_Edge& anEdge = *(TopoDS_Edge*)&aS1;
+  const TopoDS_Face& aFace  = *(TopoDS_Face*)&aS2;
+  //
+  if(!BOPTools_AlgoTools::Deviation
+     (anEdge, aFace, aMaxDist, aMaxPar)) {
+    di << "Deviation cannot be computed\n";
+    return 1;
+  }
+  //
+  di << "Max Distance = " << aMaxDist 
+     << "; Parameter on curve = " << aMaxPar << "\n";
+  //
+  return 0;
+}
+
+//=======================================================================
+//function : checkcsdeviation
+//purpose  : 
+//=======================================================================
+Standard_Integer checkcsdeviation(Draw_Interpretor& di,
+                                  Standard_Integer n, 
+                                  const char** a)
+{
+  if (n != 2) {
+    di << "use checkcsdeviation shape\n";
+    return 1;
+  }
+  //
+  TopoDS_Shape aS =  DBRep::Get(a[1]);
+  if (aS.IsNull()) {
+    di << "null shape\n";
+    return 1;
+  }
+  //
+  Standard_Integer nE, nF, anECounter, aFCounter;
+  Standard_Real aT, aTolE, aDMax;
+  TopExp_Explorer aExpF, aExpE;
+  char buf[200], aFName[10], anEName[10];
+  NCollection_DataMap<TopoDS_Shape, Standard_Real, TopTools_ShapeMapHasher> aDMETol;
+  BOPCol_DataMapOfShapeInteger aMSI;
+  //
+  anECounter = 0;
+  aFCounter  = 0;
+  //
+  aExpF.Init(aS, TopAbs_FACE);
+  for (; aExpF.More(); aExpF.Next()) {
+    const TopoDS_Face& aF = *(TopoDS_Face*)&aExpF.Current();
+    //
+    aExpE.Init(aF, TopAbs_EDGE);
+    for (; aExpE.More(); aExpE.Next()) {
+      const TopoDS_Edge& aE = *(TopoDS_Edge*)&aExpE.Current();
+      //
+      if (!BOPTools_AlgoTools::Deviation(aE, aF, aDMax, aT)) {
+        continue;
+      }
+      //
+      aTolE = BRep_Tool::Tolerance(aE);
+      if (aDMax <= aTolE) {
+        continue;
+      }
+      //
+      if (aDMETol.IsBound(aE)) {
+        Standard_Real& aD = aDMETol.ChangeFind(aE);
+        if (aDMax > aD) {
+          aD = aDMax;
+        }
+      }
+      else {
+        aDMETol.Bind(aE, aDMax);
+      }
+      //
+      if (anECounter == 0) {
+        di << "Invalid curves on surface:\n";
+      }
+      //
+      if (aMSI.IsBound(aE)) {
+        nE = aMSI.Find(aE);
+      }
+      else {
+        nE = anECounter;
+        aMSI.Bind(aE, nE);
+        ++anECounter;
+      }
+      //
+      if (aMSI.IsBound(aF)) {
+        nF = aMSI.Find(aF);
+      } else {
+        nF = aFCounter;
+        aMSI.Bind(aF, nF);
+        ++aFCounter;
+      }
+      //
+      Sprintf(anEName, "e_%d", nE);
+      Sprintf(aFName , "f_%d", nF);
+      Sprintf(buf, "edge %s on face %s (max dist: %3.16f, parameter on curve: %3.16f)\n",
+              anEName, aFName, aDMax, aT);
+      di << buf;
+      //
+      DBRep::Set(anEName, aE);
+      DBRep::Set(aFName , aF);
+    }
+  }
+  //
+  if (anECounter > 0) {
+    di << "\n\nSugestions to fix the shape:\n";
+    di << "explode " << a[1] << " e;\n";
+    //
+    TopTools_MapOfShape M;
+    aExpE.Init(aS, TopAbs_EDGE);
+    for (anECounter = 0; aExpE.More(); aExpE.Next()) {
+      const TopoDS_Shape& aE = aExpE.Current();
+      if (!M.Add(aE)) {
+        continue;
+      }
+      ++anECounter;
+      //
+      if (!aDMETol.IsBound(aE)) {
+        continue;
+      }
+      //
+      aTolE = aDMETol.Find(aE);
+      aTolE *= 1.001;
+      sprintf(buf, "settolerance %s_%d %3.16f;\n", a[1], anECounter, aTolE);
+      di << buf;
+    }
+  }
+  else {
+    di << "This shape seems to be OK.\n";
+  }
+  //
+  return 0;
+}
+
index 541cd52f9a8e95b67a8a918a86bb0c4f8b7ec7a9..a20d6cf4678ae77571507e6abb06262b88090864 100644 (file)
@@ -33,6 +33,9 @@ uses
     Wire from TopoDS, 
     Shell from TopoDS,  
     Solid from TopoDS, 
+    Curve from Geom,
+    Curve from Geom2d,
+    Surface from Geom,
     --  
     BaseAllocator from BOPCol,
     ListOfShape from BOPCol,  
@@ -458,4 +461,44 @@ is
        returns Boolean from Standard;  
        ---Purpose: Returns true if the solid <theSolid> is inverted    
  
+    ComputeTolerance(myclass;
+        theCurve3D : Curve from Geom;
+        theCurve2D : Curve from Geom2d;
+        theSurf    : Surface from Geom;
+        theMaxDist : out Real from Standard; 
+        theMaxPar  : out Real from Standard)
+    returns Boolean from Standard; 
+    ---Purpose:  
+    -- Computes the max distance between points  
+    -- taken from 3D and 2D curves by the same parameter
+
+    ComputeTolerance(myclass;
+        theFace : Face from TopoDS;
+        theEdge : Edge from TopoDS;
+        theMaxDist : out Real from Standard; 
+        theMaxPar  : out Real from Standard)
+    returns Boolean from Standard;
+    ---Purpose:  
+    -- Computes the neccessary value of the tolerance for the edge
+    Deviation(myclass;
+        theEdge  : Edge from TopoDS; 
+        theFace  : Face from TopoDS;
+        theDist  : out Real from Standard;
+        theParam : out Real from Standard)
+    returns Boolean from Standard;
+    ---Purpose:  
+    -- Computes the max distance between edge and face
+    Deviation(myclass;
+        theCurve   : Curve from Geom;
+        theSurface : Surface from Geom;  
+        theFirst   : Real from Standard;
+        theLast    : Real from Standard;
+        theDist    : out Real from Standard;
+        theParam   : out Real from Standard)
+    returns Boolean from Standard;
+    ---Purpose:  
+    -- Computes the max distance between curve and surface
+
 end AlgoTools;
index b6b1087b640cfa9b9a30635977099ce6c4fce40b..0c3806f92f1dec3ac2cd5802b2459adc2aa73280 100644 (file)
@@ -547,7 +547,7 @@ void BOPTools_AlgoTools2D::Make2D (const TopoDS_Edge& aE,
   }
   
   //
-  aToler=.5*BRep_Tool::Tolerance(aE);
+  aToler = BRep_Tool::Tolerance(aE);
   BOPTools_AlgoTools2D::MakePCurveOnFace(aF, C3D2, f3d, l3d, aC2D, aToler);
   //
   aFirst = f3d; 
@@ -616,9 +616,11 @@ void BOPTools_AlgoTools2D::Make2D (const TopoDS_Edge& aE,
     }
   }
   TolReached2d=aTolR;
-  
-  BOPTools_AlgoTools2D::AdjustPCurveOnFace (aF, aFirst, aLast, aC2D, aC2DA);
-  aC2D=aC2DA;
+  //
+  if (!aC2D.IsNull()) {
+    BOPTools_AlgoTools2D::AdjustPCurveOnFace (aF, aFirst, aLast, aC2D, aC2DA);
+    aC2D=aC2DA;
+  }
 }
 
 //=======================================================================
index 97d2efb51d3e72b612438ba15bf1832461326fd7..0176fef6a4d3e23a2b8e6a0743789e3a39df7445 100644 (file)
@@ -111,6 +111,378 @@ static
 static
   void UpdateVertices(const TopoDS_Edge& aE);
 
+//=======================================================================
+//class   : BOPTools_CheckCurveOnSurface
+//purpose : it is used to check the curve on the surface
+//=======================================================================
+#include <math_GlobOptMin.hxx>
+#include <math_MultipleVarFunctionWithHessian.hxx>
+#include <math_Matrix.hxx>
+#include <Geom2d_TrimmedCurve.hxx>
+
+class BOPTools_CheckCurveOnSurface : 
+  public math_MultipleVarFunctionWithHessian
+{
+ public:
+  BOPTools_CheckCurveOnSurface(BOPTools_CheckCurveOnSurface&);
+  BOPTools_CheckCurveOnSurface(const Handle(Geom_Curve)& theC3D,
+                              const Handle(Geom2d_Curve)& theC2D,
+                              const Handle(Geom_Surface)& theSurf)
+    :
+      my3DCurve(theC3D),
+      my2DCurve(theC2D),
+      mySurf(theSurf)
+  {
+  }
+  //
+  virtual Standard_Integer NbVariables() const {
+    return 1;
+  }
+  //
+  virtual Standard_Boolean Value(const math_Vector& theX,
+                                 Standard_Real& theFVal)
+  {
+    Standard_Real u = theX(1);
+    Standard_Real aFirst = my3DCurve->FirstParameter();
+    Standard_Real aLast = my3DCurve->LastParameter();
+
+    if ((u < aFirst) || (u > aLast))
+    {
+      return Standard_False;
+    }
+
+    try {
+      const Standard_Real aPar = theX(1);
+      gp_Pnt aP1, aP2;
+      gp_Pnt2d aP2d;
+      my3DCurve->D0(aPar, aP1);
+      my2DCurve->D0(aPar, aP2d);
+      mySurf->D0(aP2d.X(), aP2d.Y(), aP2);
+      //
+      theFVal = -1.0*aP1.SquareDistance(aP2);
+    }
+    catch(...) {
+      return Standard_False;
+    }
+    //
+    return Standard_True;
+  }
+  //
+  virtual Standard_Integer GetStateNumber() {
+    return 0;
+  }
+  //
+  virtual Standard_Boolean Gradient(const math_Vector& theX,
+                                    math_Vector& theGrad) {
+
+  Standard_Real u = theX(1);
+  Standard_Real aRange = (my3DCurve->LastParameter() - my3DCurve->FirstParameter());
+  Standard_Real aFirst = my3DCurve->FirstParameter() - 0.1*aRange;
+  Standard_Real aLast = my3DCurve->LastParameter() + 0.1*aRange;
+
+  if ((u < aFirst) || (u > aLast))
+  {
+    return Standard_False;
+  }
+
+    try {
+      const Standard_Real aPar = theX(1);
+      
+      gp_Pnt aP1, aP2;
+      gp_Vec aDC3D, aDSU, aDSV;
+      gp_Pnt2d aP2d;
+      gp_Vec2d aDC2D;
+      
+      my3DCurve->D1(aPar, aP1, aDC3D);
+      my2DCurve->D1(aPar, aP2d, aDC2D);
+      mySurf->D1(aP2d.X(), aP2d.Y(), aP2, aDSU, aDSV);
+      
+      aP1.SetXYZ(aP1.XYZ() - aP2.XYZ());
+      aP2.SetXYZ(aDC3D.XYZ() - aDC2D.X()*aDSU.XYZ() - aDC2D.Y()*aDSV.XYZ());
+      
+      theGrad(1) = -2.0*aP1.XYZ().Dot(aP2.XYZ());
+    }
+    catch(...) {
+      return Standard_False;
+    }
+    
+    return Standard_True;
+  }
+  //   
+  virtual Standard_Boolean Values(const math_Vector& theX,
+                                  Standard_Real& theVal,
+                                  math_Vector& theGrad) {
+    if(!Value(theX, theVal))
+      return Standard_False;
+    
+    if(!Gradient(theX, theGrad))
+      return Standard_False;
+    
+    return Standard_True;
+  }
+  //
+  virtual Standard_Boolean Values(const math_Vector& theX,
+                                  Standard_Real& theVal,
+                                  math_Vector& theGrad,
+                                  math_Matrix& theHessian) {
+    if(!Value(theX, theVal))
+      return Standard_False;
+    
+    if(!Gradient(theX, theGrad))
+      return Standard_False;
+    
+    theHessian(1,1) = theGrad(1);
+    
+    return Standard_True;
+  }
+  //
+ private:
+  Handle(Geom_Curve) my3DCurve;
+  Handle(Geom2d_Curve) my2DCurve;
+  Handle(Geom_Surface) mySurf;
+};
+
+//=======================================================================
+//class   : BOPTools_CheckCSDistance
+//purpose : the class is used to measure the deviation between 
+//          edge and face
+//=======================================================================
+///--------------------------------------------------
+#include <Precision.hxx>
+#include <GeomAPI_ProjectPointOnSurf.hxx>
+
+#ifdef HAVE_TBB
+#include <tbb\parallel_reduce.h>
+#include <tbb\blocked_range.h>
+
+using namespace tbb;
+#endif
+
+class BOPTools_CheckCSDistance
+{
+  BOPTools_CheckCSDistance operator=(BOPTools_CheckCSDistance&);
+public:
+  BOPTools_CheckCSDistance( const Handle(Geom_Curve)& theC3D,
+                            const Handle(Geom_Surface)& theSurface,
+                            const Standard_Boolean theIsNotOptimize,
+                            const Standard_Real theFirst,
+                            const Standard_Real theLast)
+    :
+      myGoldRatio((sqrt(5.)-1.)/2.),
+      myCurve(theC3D), 
+      mySurface(theSurface),
+      myFirst(theFirst),
+      myLast(theLast),
+      myIsNotOptimize(theIsNotOptimize),
+      myMaxStep(1.e-4*(myLast - myFirst))
+  {
+    Standard_Real aUMin = 0.0, aUMax = 0.0, aVMin = 0.0, aVMax = 0.0;
+    theSurface->Bounds(aUMin, aUMax, aVMin, aVMax);
+    myProjPS.Init(theSurface, aUMin, aUMax, aVMin, aVMax);
+
+    myMaxParam = theFirst;
+    Value(myMaxParam, myMaxValue);
+  }
+
+  //
+  Standard_Boolean Value(const Standard_Real thePar,
+                         Standard_Real& theFVal)
+  {
+    if ((thePar < myFirst) || (thePar > myLast)) {
+      return Standard_False;
+    }
+    //
+    gp_Pnt aPOnC;
+    myCurve->D0(thePar, aPOnC);
+    myProjPS.Perform(aPOnC);
+    theFVal = myProjPS.IsDone() ? myProjPS.LowerDistance() : 0.;
+    //
+    return Standard_True;
+  }
+  //GoldRatio method
+  void MinimizeByGoldenRatio(const Standard_Real theFirst, 
+                             const Standard_Real theLast)
+  {
+    
+    Standard_Real aFirst, aLast, aMidPar1, aMidPar2, aMidVal1, aMidVal2;
+    //
+    aFirst = theFirst;
+    aLast  = theLast;
+    aMidPar1 = aLast - (aLast - aFirst) * myGoldRatio;
+    aMidPar2 = aFirst + (aLast - aFirst) * myGoldRatio;
+    Value(aMidPar1, aMidVal1);
+    Value(aMidPar2, aMidVal2);
+    //
+    Standard_Boolean bIsEqual = Standard_False;
+    //
+    do {
+      if (Abs(aMidVal1 - aMidVal2) <= Precision::Confusion()) {
+        bIsEqual = Standard_True;
+        break;
+      }
+      //
+      if (aMidVal1 > aMidVal2) {
+        aLast = aMidPar2;
+        aMidPar2 = aMidPar1;
+        aMidVal2 = aMidVal1;
+        aMidPar1 = aLast - (aLast - aFirst) * myGoldRatio;
+        Value(aMidPar1, aMidVal1);
+      }
+      else
+      {
+        aFirst = aMidPar1;
+        aMidPar1 = aMidPar2;
+        aMidVal1 = aMidVal2;
+        aMidPar2 = aFirst + (aLast - aFirst) * myGoldRatio;
+        Value(aMidPar2, aMidVal2);
+      }
+    }
+    while ((aMidPar2 - aMidPar1) > myMaxStep);
+
+    const Standard_Real aTMax = (aLast + aFirst)*0.5;
+
+    if(myIsNotOptimize)
+    {
+      if (bIsEqual && ((aMidPar2-aMidPar1) > myMaxStep))
+      {
+        MinimizeByGoldenRatio(aMidPar1, aMidPar2);
+        MinimizeByGoldenRatio(aFirst, aMidPar1);
+        MinimizeByGoldenRatio(aMidPar2, aLast);
+      }
+    }
+
+    //
+    Standard_Real aVal = 0.;
+    Value(aTMax, aVal);
+    //
+    if (aVal > myMaxValue) {
+      myMaxParam = aTMax;
+      myMaxValue = aVal;
+    }
+
+    //if(!myIsNotOptimize)
+    //{
+    //  if( ((aTMax - theFirst) > myMaxStep) &&
+    //      ((theLast - aTMax) > myMaxStep))
+    //  {
+    //    const Standard_Real aSt = 0.5*myMaxStep;
+    //    MinimizeByGoldenRatio(theFirst, aTMax-aSt);
+    //    MinimizeByGoldenRatio(aTMax+aSt, theLast);
+    //  }
+    //}
+  }
+
+  Handle(Geom_Curve) GetCurve() const 
+  {
+    return myCurve;
+  }
+
+  Handle(Geom_Surface) GetSurface() const 
+  {
+    return mySurface;
+  }
+
+  Standard_Real GetFirstParam() const
+  {
+    return myFirst;
+  }
+
+  Standard_Real GetLastParam() const
+  {
+    return myLast;
+  }
+
+  Standard_Boolean GetOptimizeFlag() const
+  {
+    return myIsNotOptimize;
+  }
+  //
+  Standard_Real ParameterOnCurve() const
+  {
+    return myMaxParam;
+  }
+  //
+  Standard_Real MaxDistance() const
+  {
+    return myMaxValue;
+  }
+  //
+
+
+private:
+  const Handle(Geom_Curve) myCurve;
+  const Handle(Geom_Surface) mySurface;
+
+  const Standard_Real myFirst;
+  const Standard_Real myLast;
+  const Standard_Real myMaxStep;
+  const Standard_Real myGoldRatio;
+
+  const Standard_Boolean myIsNotOptimize;
+  //
+  GeomAPI_ProjectPointOnSurf myProjPS;
+  //
+  Standard_Real myMaxValue;
+  Standard_Real myMaxParam;
+};
+
+#ifdef HAVE_TBB
+class BOPTools_CSDParallelComputing
+{
+public:
+  BOPTools_CSDParallelComputing(const BOPTools_CheckCSDistance& theCD,
+    const Standard_Real theDeltaParam): myBTCheckDist(theCD.GetCurve(), theCD.GetSurface(), theCD.GetOptimizeFlag(),theCD.GetFirstParam(), theCD.GetLastParam()), myDeltaParam(theDeltaParam){}
+//
+  BOPTools_CSDParallelComputing(BOPTools_CSDParallelComputing& theCD, split ) :
+  myBTCheckDist(theCD.myBTCheckDist.GetCurve(), theCD.myBTCheckDist.GetSurface(), theCD.myBTCheckDist.GetOptimizeFlag(), theCD.myBTCheckDist.GetFirstParam(), theCD.myBTCheckDist.GetLastParam()),
+      myMaxValue(theCD.myMaxValue),
+      myMaxParam(theCD.myMaxParam), myDeltaParam(theCD.myDeltaParam)  {}
+
+  void join(const BOPTools_CSDParallelComputing& theCD)
+  {
+    if(theCD.myMaxValue > myMaxValue)
+    {
+      myMaxValue = theCD.myMaxValue;
+      myMaxParam = theCD.myMaxParam;
+    }
+  }
+
+  void operator()(const blocked_range<Standard_Integer>& theRange)
+  {
+    for(Standard_Integer anInd = theRange.begin(); anInd != theRange.end(); anInd++)
+    {
+      const Standard_Real aStart = myBTCheckDist.GetFirstParam() + anInd*myDeltaParam;
+      myBTCheckDist.MinimizeByGoldenRatio(aStart, aStart+myDeltaParam);
+
+      if(myBTCheckDist.MaxDistance() > myMaxValue)
+      {
+        myMaxValue = myBTCheckDist.MaxDistance();
+        myMaxParam = myBTCheckDist.ParameterOnCurve();
+      }
+    }
+  }
+
+  Standard_Real ParameterOnCurve() const
+  {
+    return myMaxParam;
+  }
+  //
+  Standard_Real MaxDistance() const
+  {
+    return myMaxValue;
+  }
+
+
+private:
+  BOPTools_CheckCSDistance myBTCheckDist;
+
+  Standard_Real myMaxValue;
+  Standard_Real myMaxParam;
+
+  const Standard_Real myDeltaParam;
+};
+#endif
+
 //=======================================================================
 // Function : CorrectTolerances
 // purpose : 
@@ -812,3 +1184,350 @@ void CheckEdge (const TopoDS_Edge& Ed, const Standard_Real aMaxTol)
     }
   }
 }
+
+//=======================================================================
+// Function : MinComputing
+// purpose : 
+//=======================================================================
+static Standard_Boolean MinComputing( BOPTools_CheckCurveOnSurface& theFunction,
+                                      const Standard_Real theFirst,
+                                      const Standard_Real theLast,
+                                      const Standard_Real theEpsilon, //1.0e-3
+                                      Standard_Real & theBestValue,
+                                      Standard_Real & theBestParameter)
+{
+  //Standard_Real aPrevValue = theBestValue;
+  const Standard_Real aStepMin = 1.0e-2/**Min(1.0, theLast-theFirst)*/;
+  math_Vector aFirstV(1, 1), aLastV(1, 1), anOutputParam(1, 1);
+  aFirstV(1) = theFirst;
+  aLastV(1) = theLast;
+
+  math_GlobOptMin aFinder(&theFunction, aFirstV, aLastV);
+  aFinder.SetTol(aStepMin, theEpsilon);
+  aFinder.Perform();
+
+  const Standard_Integer aNbExtr = aFinder.NbExtrema();
+  for(Standard_Integer i = 1; i <= aNbExtr; i++)
+  {
+    Standard_Real aValue = 0.0;
+    aFinder.Points(i, anOutputParam);
+    theFunction.Value(anOutputParam, aValue);
+    
+    if(aValue < theBestValue)
+    {
+      theBestValue = aValue;
+      theBestParameter = anOutputParam(1);
+    }
+  }
+
+  return Standard_True;
+}
+
+
+//=======================================================================
+// Function : ComputeTolerance
+// purpose : 
+//=======================================================================
+Standard_Boolean BOPTools_AlgoTools::
+          ComputeTolerance( const Handle(Geom_Curve)& theCurve3D,
+                            const Handle(Geom2d_Curve)& theCurve2D,
+                            const Handle(Geom_Surface)& theSurf,
+                            Standard_Real& theMaxDist,
+                            Standard_Real& theMaxPar)
+{
+  if (theCurve3D.IsNull() ||
+      theCurve2D.IsNull() ||
+      theSurf.IsNull()) {
+    return Standard_False;
+  }
+
+  const Standard_Real anEpsilonRange = 1.0e-3, aMinDelta = 1.0e-5;
+
+  //
+  try {
+    Standard_Real aFirst = theCurve3D->FirstParameter(),
+                  aLast = theCurve3D->LastParameter();
+
+    BOPTools_CheckCurveOnSurface aFunc(theCurve3D, theCurve2D, theSurf);
+    //
+    math_Vector anOutputParam(1, 1);
+    anOutputParam(1) = theMaxPar = aFirst;
+    //
+    theMaxDist = 0.;
+    MinComputing(aFunc, aFirst, aLast, anEpsilonRange, theMaxDist, theMaxPar);
+
+    Standard_Integer aNbIteration = 100;
+    Standard_Boolean aStatus = Standard_True;
+    while((aNbIteration-- >= 0) && aStatus)
+    {
+      Standard_Real aValue = theMaxDist, aParam = theMaxPar;
+      Standard_Real aBP = theMaxPar - aMinDelta;
+      MinComputing(aFunc, aFirst, aBP, anEpsilonRange, theMaxDist, theMaxPar);
+
+      if(theMaxDist < aValue)
+      {
+        aLast = aBP;
+        aStatus = Standard_True;
+      }
+      else 
+      {
+        theMaxDist = aValue;
+        theMaxPar = aParam;
+        aStatus = Standard_False;
+      }
+
+      if(!aStatus)
+      {
+        aBP = theMaxPar + aMinDelta;
+        MinComputing(aFunc, aBP, aLast, 1.0e-3, theMaxDist, theMaxPar);
+
+        if(theMaxDist < aValue)
+        {
+          aFirst = aBP;
+          aStatus = Standard_True;
+        }
+        else
+        {
+          theMaxDist = aValue;
+          theMaxPar = aParam;
+          aStatus = Standard_False;
+        }
+      }
+    }
+
+    theMaxDist = sqrt(Abs(theMaxDist));
+  }
+  catch (...) {
+    return Standard_False;
+  }
+  //
+  return Standard_True;
+}
+
+//=======================================================================
+// Function : ComputeTolerance
+// purpose : 
+//=======================================================================
+Standard_Boolean BOPTools_AlgoTools::ComputeTolerance
+  (const TopoDS_Face& theFace,
+   const TopoDS_Edge& theEdge,
+   Standard_Real& theMaxDist,
+   Standard_Real& theParameter)
+{
+  Standard_Boolean bRet;
+  Standard_Real aT, aD, aFirst, aLast;
+  TopLoc_Location aLocC, aLocS;
+  //
+  theMaxDist = 0.;
+  theParameter = 0.;
+  bRet = Standard_False;
+  //
+  const Handle(BRep_TEdge)& aTE = *((Handle(BRep_TEdge)*)&theEdge.TShape());
+  //The edge is considered to be same range and not degenerated
+  if ((!aTE->SameRange() && aTE->SameParameter()) ||
+      aTE->Degenerated()) {
+    return bRet;
+  }
+  //
+  Handle(Geom_Curve) aC = Handle(Geom_Curve)::
+    DownCast(BRep_Tool::Curve(theEdge, aLocC, aFirst, aLast)->Copy());
+  aC = new Geom_TrimmedCurve(aC, aFirst, aLast);
+  aC->Transform(aLocC.Transformation());
+  //
+  const Handle(Geom_Surface)& aSurfF = BRep_Tool::Surface(theFace, aLocS);
+  const Handle(Geom_Surface)& aSurf = Handle(Geom_Surface)::
+    DownCast(aSurfF->Copy()->Transformed(aLocS.Transformation()));
+  //
+  Standard_Boolean isPCurveFound = Standard_False;
+  BRep_ListIteratorOfListOfCurveRepresentation itcr(aTE->Curves());
+  for (; itcr.More(); itcr.Next()) {
+    const Handle(BRep_CurveRepresentation)& cr = itcr.Value();
+    if (!(cr->IsCurveOnSurface(aSurfF, aLocS.Predivided(theEdge.Location())))) {
+      continue;
+    }
+    isPCurveFound = Standard_True;
+    //
+    Handle(Geom2d_Curve) aC2d = Handle(Geom2d_Curve)::
+      DownCast(cr->PCurve()->Copy());
+    aC2d = new Geom2d_TrimmedCurve(aC2d, aFirst, aLast);
+      //
+    if(BOPTools_AlgoTools::ComputeTolerance
+       (aC, aC2d, aSurf, aD, aT)) {
+      bRet = Standard_True;
+      if (aD > theMaxDist) {
+        theMaxDist = aD;
+        theParameter = aT;
+      }
+    }
+    //
+    if (cr->IsCurveOnClosedSurface()) {
+      Handle(Geom2d_Curve) aC2d = Handle(Geom2d_Curve)::
+        DownCast(cr->PCurve2()->Copy());
+      aC2d = new Geom2d_TrimmedCurve(aC2d, aFirst, aLast);
+      //
+      if(BOPTools_AlgoTools::ComputeTolerance
+         (aC, aC2d, aSurf, aD, aT)) {
+        bRet = Standard_True;
+        if (aD > theMaxDist) {
+          theMaxDist = aD;
+          theParameter = aT;
+        }
+      }
+    }
+  }
+  //
+  if (isPCurveFound) {
+    return bRet;
+  }
+  //
+  Handle(Geom_Plane) aPlane;
+  Handle(Standard_Type) dtyp = aSurf->DynamicType();
+  //
+  if (dtyp == STANDARD_TYPE(Geom_RectangularTrimmedSurface)) {
+    aPlane = Handle(Geom_Plane)::
+      DownCast(Handle(Geom_RectangularTrimmedSurface)::
+               DownCast(aSurf)->BasisSurface()->Copy());
+  }
+  else {
+    aPlane = Handle(Geom_Plane)::DownCast(aSurf->Copy());
+  }
+  //
+  if (aPlane.IsNull()) { // not a plane
+    return bRet;
+  }
+  //
+  aPlane = Handle(Geom_Plane)::DownCast(aPlane);//
+  //
+  Handle(GeomAdaptor_HSurface) GAHS = new GeomAdaptor_HSurface(aPlane);
+  Handle(Geom_Curve) ProjOnPlane = 
+    GeomProjLib::ProjectOnPlane (new Geom_TrimmedCurve(aC, aFirst, aLast), 
+                                 aPlane, aPlane->Position().Direction(), 
+                                 Standard_True);
+  Handle(GeomAdaptor_HCurve) aHCurve = new GeomAdaptor_HCurve(ProjOnPlane);
+  //
+  ProjLib_ProjectedCurve proj(GAHS,aHCurve);
+  Handle(Geom2d_Curve) aC2d = Geom2dAdaptor::MakeCurve(proj);
+  aC2d = new Geom2d_TrimmedCurve(aC2d, aFirst, aLast);
+  //
+  if(BOPTools_AlgoTools::ComputeTolerance
+     (aC, aC2d, aPlane, aD, aT)) {
+    bRet = Standard_True;
+    if (aD > theMaxDist) {
+      theMaxDist = aD;
+      theParameter = aT;
+    }
+  }
+  //
+  return bRet;
+}
+
+//=======================================================================
+// Function : Deviation
+// purpose : 
+//=======================================================================
+Standard_Boolean BOPTools_AlgoTools::Deviation
+  (const TopoDS_Edge& theEdge,
+   const TopoDS_Face& theFace,
+   Standard_Real& theMaxDist,
+   Standard_Real& theParam)
+{
+  Standard_Boolean bFound = Standard_False;
+  //
+  if (theEdge.IsNull() || theFace.IsNull()) {
+    return bFound;
+  }
+  //
+  if (BRep_Tool::Degenerated(theEdge) ||
+      !BRep_Tool::IsGeometric(theEdge)) {
+    return bFound;
+  }
+  //
+  Standard_Real aFirst, aLast;
+  const Handle(Geom_Curve)& aC = BRep_Tool::Curve(theEdge, aFirst, aLast);
+  const Handle(Geom_Surface)& aS = BRep_Tool::Surface(theFace);
+  //
+  bFound = BOPTools_AlgoTools::Deviation
+    (aC, aS, aFirst, aLast, theMaxDist, theParam);
+  //
+  return bFound;
+}
+
+//=======================================================================
+// Function : Deviation
+// purpose : 
+//=======================================================================
+
+
+
+Standard_Boolean BOPTools_AlgoTools::Deviation
+  (const Handle(Geom_Curve)& theCurve,
+   const Handle(Geom_Surface)& theSurface,
+   const Standard_Real theFirst,
+   const Standard_Real theLast,
+   Standard_Real& theMaxDist,
+   Standard_Real& theParam)
+{
+  if (theCurve.IsNull() || theSurface.IsNull()) {
+    return Standard_False;
+  }
+  //
+  const Standard_Integer aNbParts = 10;
+  const Standard_Real aDeltaPar = (theLast - theFirst) / aNbParts;
+  theMaxDist = 0.;
+  theParam = theFirst;
+
+  const Standard_Boolean isNotOptimize =  ((theCurve->Continuity() == GeomAbs_C0) || 
+                                          (theSurface->Continuity() == GeomAbs_C0));
+
+
+  BOPTools_CheckCSDistance aFunc(theCurve, theSurface, isNotOptimize, theFirst, theLast);
+
+
+  if(isNotOptimize)
+  {
+#ifdef HAVE_TBB
+    BOPTools_CSDParallelComputing aParall(aFunc, aDeltaPar);
+    parallel_reduce(blocked_range<Standard_Integer>(0,aNbParts-2), aParall);
+    const Standard_Real aDist = aParall.MaxDistance();
+
+    if (aDist > theMaxDist)
+    {
+      theMaxDist = aDist;
+      theParam = aParall.ParameterOnCurve();
+    }
+#else
+    Standard_Real aT1, aT2 = theFirst;
+    for (;;)
+    {
+      aT1 = aT2;
+      aT2 += aDeltaPar;
+
+      if (aT2 > theLast)
+      {
+        break;
+      }
+
+      aFunc.MinimizeByGoldenRatio(aT1, aT2);
+      
+      const Standard_Real aDist = aFunc.MaxDistance();
+      if (aDist > theMaxDist)
+      {
+        theMaxDist = aDist;
+        theParam = aFunc.ParameterOnCurve();
+      }
+    }
+#endif
+  }
+  else
+  {
+    aFunc.MinimizeByGoldenRatio(theFirst, theLast);
+    const Standard_Real aDist = aFunc.MaxDistance();
+    if (aDist > theMaxDist)
+    {
+      theMaxDist = aDist;
+      theParam = aFunc.ParameterOnCurve();
+    }
+  }
+
+  return Standard_True;
+}
\ No newline at end of file
index 8b33d0a0443466eac1226817f0d388620daed2a7..8334fb2b5d6d104c461d410d65388787ea824bb0 100644 (file)
@@ -33,6 +33,8 @@
 #include <math_RealRandom.hxx>
 #include <BRepTopAdaptor_FClass2d.hxx>
 
+#include <vector>
+
 static
   Standard_Boolean FaceNormal (const TopoDS_Face& aF,
                                const Standard_Real U,
@@ -98,76 +100,80 @@ void BRepClass3d_SClassifier::PerformInfinitePoint(BRepClass3d_SolidExplorer& aS
   gp_Pnt aPoint;
   gp_Dir aDN;
 
-  math_RealRandom RandomGenerator(0.1, 0.9);
+  math_RealRandom aRandomGenerator(0.1, 0.9);
   myFace.Nullify();
   myState=2;
 
-  aSE.InitShell();
-  if (aSE.MoreShell())
+  // Collect faces in sequence to iterate
+  std::vector<TopoDS_Face> aFaces;
+  for (aSE.InitShell(); aSE.MoreShell(); aSE.NextShell())
+  {
+    for (aSE.InitFace(); aSE.MoreFace(); aSE.NextFace())
+    {
+      aFaces.push_back (aSE.CurrentFace());
+    }
+  }
+
+  // iteratively try up to 10 probing points from each face
+  const int NB_MAX_POINTS_PER_FACE = 10;
+  for (int itry = 0; itry < NB_MAX_POINTS_PER_FACE; itry++)
   {
-    aSE.InitFace();
-    if (aSE.MoreFace())
+    for (std::vector<TopoDS_Face>::iterator iFace = aFaces.begin(); iFace != aFaces.end(); ++iFace)
     {
-      TopoDS_Face aF = aSE.CurrentFace();
+      TopoDS_Face aF = *iFace;
+
       TopAbs_State aState = TopAbs_OUT;
       IntCurveSurface_TransitionOnCurve aTransition = IntCurveSurface_Tangent;
-      TopoDS_Face MinFace = aF;
-      for (;;)
-      {
-        aParam = RandomGenerator.Next();
-       bFound = aSE.FindAPointInTheFace(aF, aPoint, aU, aV, aParam);
-       if (!bFound)
-         return;
-
-        if (!FaceNormal(aF, aU, aV, aDN))
-          continue;
-        gp_Lin aLin(aPoint, -aDN);
-        Standard_Real parmin = RealLast();
-        for (aSE.InitShell();aSE.MoreShell();aSE.NextShell()) { 
-          if (aSE.RejectShell(aLin) == Standard_False) { 
-            for (aSE.InitFace();aSE.MoreFace(); aSE.NextFace()) {
-              if (aSE.RejectFace(aLin) == Standard_False) { 
-                TopoDS_Shape aLocalShape = aSE.CurrentFace();
-                TopoDS_Face CurFace = TopoDS::Face(aLocalShape);
-                IntCurvesFace_Intersector& Intersector3d = aSE.Intersector(CurFace);
-                Intersector3d.Perform(aLin,-RealLast(),parmin); 
-                
-                if(Intersector3d.IsDone()) {
-                  if(Intersector3d.NbPnt()) { 
-                    Standard_Integer imin = 1;
-                    for (Standard_Integer i = 2; i <= Intersector3d.NbPnt(); i++)
-                      if (Intersector3d.WParameter(i) < Intersector3d.WParameter(imin))
-                        imin = i;
-                    parmin = Intersector3d.WParameter(imin);
-                    aState = Intersector3d.State(imin);
-                    aTransition = Intersector3d.Transition(imin);
-                    MinFace = CurFace;
-                  }
+
+      aParam = 0.1 + 0.8 * aRandomGenerator.Next(); // random number in range [0.1, 0.9]
+      bFound = aSE.FindAPointInTheFace(aF, aPoint, aU, aV, aParam);
+      if (!bFound || !FaceNormal(aF, aU, aV, aDN))
+        continue;
+
+      gp_Lin aLin(aPoint, -aDN);
+      Standard_Real parmin = RealLast();
+      for (aSE.InitShell();aSE.MoreShell();aSE.NextShell()) { 
+        if (aSE.RejectShell(aLin) == Standard_False) { 
+          for (aSE.InitFace();aSE.MoreFace(); aSE.NextFace()) {
+            if (aSE.RejectFace(aLin) == Standard_False) { 
+              TopoDS_Shape aLocalShape = aSE.CurrentFace();
+              TopoDS_Face CurFace = TopoDS::Face(aLocalShape);
+              IntCurvesFace_Intersector& Intersector3d = aSE.Intersector(CurFace);
+              Intersector3d.Perform(aLin,-RealLast(),parmin); 
+
+              if(Intersector3d.IsDone()) {
+                if(Intersector3d.NbPnt()) { 
+                  Standard_Integer imin = 1;
+                  for (Standard_Integer i = 2; i <= Intersector3d.NbPnt(); i++)
+                    if (Intersector3d.WParameter(i) < Intersector3d.WParameter(imin))
+                      imin = i;
+                  parmin = Intersector3d.WParameter(imin);
+                  aState = Intersector3d.State(imin);
+                  aTransition = Intersector3d.Transition(imin);
                 }
               }
             }
           }
-          else
-            myState = 1;
-        } //end of loop on the whole solid
+        }
+        else
+          myState = 1;
+      } //end of loop on the whole solid
         
-        if (aState == TopAbs_IN)
-        {
-          if (aTransition == IntCurveSurface_Out) { 
-            //-- The line is going from inside the solid to outside 
-            //-- the solid.
-            myState = 3; //-- IN --
-            return;
-          }
-          else if (aTransition == IntCurveSurface_In) { 
-            myState = 4; //-- OUT --
-            return;
-          }
+      if (aState == TopAbs_IN)
+      {
+        if (aTransition == IntCurveSurface_Out) { 
+          //-- The line is going from inside the solid to outside 
+          //-- the solid.
+          myState = 3; //-- IN --
+          return;
+        }
+        else if (aTransition == IntCurveSurface_In) { 
+          myState = 4; //-- OUT --
+          return;
         }
-        aF = MinFace;
       }
-    } //if (aSE.MoreFace())
-  } //if (aSE.MoreShell())
+    } // iteration by faces
+  } // iteration by points
 }
 
 //=======================================================================
index 67be385641b39114a2c06aeb93da18068f979f0a..d62b8cd94dd4e0dc10c10610012275c04d1502e7 100644 (file)
 #include <gp_Vec2d.hxx>
 #include <gp_XYZ.hxx>
 #include <Precision.hxx>
+#include <TColStd_Array1OfReal.hxx>
+#include <math_Function.hxx>
+#include <gp_Lin.hxx>
+#include <gp_Lin2d.hxx>
+//
+class GCPnts_DistFunction : public math_Function
+{
+public:
+  Standard_EXPORT GCPnts_DistFunction(const Adaptor3d_Curve& theCurve,
+                                      const Standard_Real U1, const Standard_Real U2)
+  : myCurve(theCurve),
+    myU1(U1), myU2(U2)
+  {
+    gp_Pnt P1 = theCurve.Value(U1), P2 = theCurve.Value(U2);
+    myLin = gp_Lin(P1, P2.XYZ() - P1.XYZ());
+  }
+
+  //
+  Standard_EXPORT GCPnts_DistFunction(const GCPnts_DistFunction& theOther);
+
+
+  Standard_EXPORT virtual Standard_Boolean Value (const Standard_Real X,
+                                                        Standard_Real& F)
+  {
+    if (X < myU1 || X > myU2)
+      return Standard_False;
+    //
+    F = -myLin.SquareDistance(myCurve.Value(X));
+    return Standard_True;
+  }
+
+private:
+  GCPnts_DistFunction & operator = (const GCPnts_DistFunction & theOther);
+
+  const Adaptor3d_Curve& myCurve;
+  gp_Lin myLin;
+  Standard_Real myU1;
+  Standard_Real myU2;
+};
+//
+class GCPnts_DistFunction2d : public math_Function
+{
+public:
+  Standard_EXPORT GCPnts_DistFunction2d(const Adaptor2d_Curve2d& theCurve,
+                                        const Standard_Real U1, const Standard_Real U2)
+  : myCurve(theCurve),
+    myU1(U1), myU2(U2)
+  {
+    gp_Pnt2d P2d1 = theCurve.Value(U1), P2d2 = theCurve.Value(U2);
+    myLin = gp_Lin2d(P2d1, P2d2.XY() - P2d1.XY());
+  }
+  //
+  Standard_EXPORT GCPnts_DistFunction2d(const GCPnts_DistFunction2d& theOther);
+
+  Standard_EXPORT virtual Standard_Boolean Value (const Standard_Real X,
+                                                        Standard_Real& F)
+  {
+    if (X < myU1 || X > myU2)
+      return Standard_False;
+    //
+    gp_Pnt2d aP2d = myCurve.Value(X);
+    F = -myLin.SquareDistance(aP2d);
+    return Standard_True;
+  }
+
+private:
+  GCPnts_DistFunction2d & operator = (const GCPnts_DistFunction2d & theOther);
 
+  const Adaptor2d_Curve2d& myCurve;
+  gp_Lin2d myLin;
+  Standard_Real myU1;
+  Standard_Real myU2;
+};
+//
 inline static void D0 (const Adaptor3d_Curve& C, const Standard_Real U, gp_Pnt& P)
 {
   C.D0 (U, P);
@@ -58,6 +131,37 @@ static void D2 (const Adaptor2d_Curve2d& C, const Standard_Real U,
   VV2.SetCoord (X, Y, 0.0);
 }
 
+static Standard_Real EstimAngl(const gp_Pnt& P1, const gp_Pnt& Pm, const gp_Pnt& P2)
+{
+  gp_Vec V1(P1, Pm), V2(Pm, P2);
+  Standard_Real L = V1.Magnitude() * V2.Magnitude();
+  //
+  if(L > gp::Resolution())
+  {
+    return V1.CrossMagnitude(V2)/L;
+  }
+  else
+  {
+    return 0.;
+  }
+}
+// Return number of interval of continuity on which theParam is located.
+// Last parameter is used to increase search speed.
+static Standard_Integer getIntervalIdx(const Standard_Real theParam, 
+                                       TColStd_Array1OfReal& theIntervs,
+                                       const Standard_Integer thePreviousIdx)
+{
+  Standard_Integer anIdx;
+  for(anIdx = thePreviousIdx; anIdx < theIntervs.Upper(); anIdx++)
+  {
+    if (theParam >= theIntervs(anIdx) && 
+        theParam <= theIntervs(anIdx + 1)) // Inside of anIdx interval.
+    {
+      break;
+    }
+  }
+  return anIdx;
+}
 
 //=======================================================================
 //function : CPnts_TangentialDeflection
@@ -114,10 +218,13 @@ Standard_Integer GCPnts_TangentialDeflection::AddPoint
 #define TheCurve Adaptor3d_Curve
 #define Handle_TheBezierCurve   Handle(Geom_BezierCurve)
 #define Handle_TheBSplineCurve  Handle(Geom_BSplineCurve)
+#define TheMaxCurvLinDist GCPnts_DistFunction
 #include <GCPnts_TangentialDeflection.gxx>
 #undef Handle_TheBezierCurve
 #undef Handle_TheBSplineCurve
 #undef TheCurve
+#undef TheMaxCurvLinDist
+
 
 
 #include <Geom2d_BezierCurve.hxx>
@@ -126,10 +233,13 @@ Standard_Integer GCPnts_TangentialDeflection::AddPoint
 #define TheCurve Adaptor2d_Curve2d
 #define Handle_TheBezierCurve   Handle(Geom2d_BezierCurve)
 #define Handle_TheBSplineCurve  Handle(Geom2d_BSplineCurve)
+#define TheMaxCurvLinDist GCPnts_DistFunction2d
 #include <GCPnts_TangentialDeflection.gxx>
 #undef Handle_TheBezierCurve
 #undef Handle_TheBSplineCurve
 #undef TheCurve
+#undef TheMaxCurvLinDist
+
 
 
 
index ac00191d2f7fd3983ef116add8bf4e6cd5fcb09f..8567d9350b53d8a30db8a5c15454fd9e0ffaa849 100644 (file)
 #include <gp_Pnt.hxx>
 #include <gp_Vec.hxx>
 #include <gp.hxx>
-
+#include <TColStd_Array1OfReal.hxx>
+#include <math_BrentMinimum.hxx>
+//
 #define Us3 0.3333333333333333333333333333
+//=======================================================================
+//function : EstimDefl
+//purpose  : Estimation of maximal deflection for interval [U1, U2]
+//           
+//=======================================================================
+static void EstimDefl (const TheCurve& C,
+                       const Standard_Real U1, const Standard_Real U2,
+                       const Standard_Real Tol, 
+                       Standard_Real& MaxDefl, Standard_Real& UMax)
+{
+  //
+  TheMaxCurvLinDist aFunc(C, U1, U2);
+ //
+  math_BrentMinimum anOptLoc(Tol);
+  anOptLoc.Perform(aFunc, U1, (U1+U2)/2., U2);
+  if(anOptLoc.IsDone())
+  {
+    MaxDefl = Sqrt(-anOptLoc.Minimum());
+    UMax = anOptLoc.Location();
+    return;
+  }
+  //
+  Standard_Real Du = (C.LastParameter() - C.FirstParameter());
+  Standard_Integer aNbInt = Max(16, RealToInt(64 * (U2 - U1) / Du));
+  Standard_Real du = (U2 - U1) / aNbInt;
+  Standard_Real umax = (U1 + U2) / 2.;
+  Standard_Real dmax = 0., d = 0.;
+  aFunc.Value(umax, dmax);
+  //
+  Standard_Real u;
+  for(u = U1 + du; u <= U2 - du; u += du)
+  {
+    aFunc.Value(u, d);
+    if(d < dmax) //d, dmax are negative values
+    {
+      dmax = d;
+      umax = u;
+    }
+  }
+  //
+  //math_BrentMinimum anOptLoc(Tol);
+  anOptLoc.Perform(aFunc, umax - du, umax, umax + du);
+  if(anOptLoc.IsDone())
+  {
+    MaxDefl = Sqrt(-anOptLoc.Minimum());
+    UMax = anOptLoc.Location();
+  }
+  else
+  {
+    MaxDefl = Sqrt(-dmax);
+    UMax = umax;
+  }
+
+}
 
 void GCPnts_TangentialDeflection::EvaluateDu (
   const TheCurve& C,
@@ -244,7 +300,7 @@ void GCPnts_TangentialDeflection::PerformCircular (const TheCurve& C)
 void GCPnts_TangentialDeflection::PerformCurve (const TheCurve& C)
 
 {
-  Standard_Integer i;       
+  Standard_Integer i, j;       
   gp_XYZ V1, V2;
   gp_Pnt MiddlePoint, CurrentPoint, LastPoint;   
   Standard_Real Du, Dusave, MiddleU, L1, L2;
@@ -264,62 +320,82 @@ void GCPnts_TangentialDeflection::PerformCurve (const TheCurve& C)
   parameters.Append (U1);
   points    .Append (CurrentPoint);
 
+  // Used to detect "isLine" current bspline and in Du computation in general handling.
+  TheCurve* CPtr = const_cast<TheCurve*>(&C);
+  Standard_Integer NbInterv = CPtr->NbIntervals(GeomAbs_CN);
+  TColStd_Array1OfReal Intervs(1, NbInterv+1);
+  CPtr->Intervals(Intervs, GeomAbs_CN);
+
   if (NotDone) {
     //C'est soit une droite, soit une singularite :
-    V1 = LastPoint.XYZ ();
-    V1.Subtract (CurrentPoint.XYZ());
+    V1 = (LastPoint.XYZ() - CurrentPoint.XYZ());
     L1 = V1.Modulus ();
-    if (L1 > LTol) {
+    if (L1 > LTol)
+    {
       //Si c'est une droite on verifie en calculant minNbPoints :
       Standard_Boolean IsLine   = Standard_True;
-      Standard_Integer NbPoints = 3;
-      if (minNbPnts > 3) NbPoints = minNbPnts;
-      Du = (lastu-firstu)/NbPoints;
-      MiddleU = firstu + Du;
-      for (i = 2; i < NbPoints; i++) {
-        D0 (C, MiddleU, MiddlePoint);
-        V2 = MiddlePoint.XYZ();
-        V2.Subtract (CurrentPoint.XYZ());
-        L2 = V2.Modulus ();
-        if (L2 > LTol) {
-          if (((V2.CrossMagnitude (V1))/(L1*L2)) >= ATol) {
-            //C'etait une singularite
-            IsLine = Standard_False;
-            break;
-          }
-          if (minNbPnts > 2) {
-            parameters.Append (MiddleU);
-            points    .Append (MiddlePoint);
+      Standard_Integer NbPoints = (minNbPnts > 3) ? minNbPnts : 3;
+      ////
+      Standard_Real param = 0.;
+      for (i = 1; i <= NbInterv && IsLine; ++i)
+      {
+        // Avoid usage intervals out of [firstu, lastu].
+        if ((Intervs(i+1) < firstu) ||
+            (Intervs(i)   > lastu))
+        {
+          continue;
+        }
+        // Fix border points in applicable intervals, to avoid be out of target interval.
+        if ((Intervs(i)   < firstu) &&
+            (Intervs(i+1) > firstu))
+        {
+          Intervs(i) = firstu;
+        }
+        if ((Intervs(i)   < lastu) &&
+            (Intervs(i+1) > lastu))
+        {
+          Intervs(i + 1) = lastu;
+        }
+
+        Standard_Real delta = (Intervs(i+1) - Intervs(i))/NbPoints;
+        for (j = 1; j <= NbPoints && IsLine; ++j)
+        {
+          param = Intervs(i) + j*delta;
+          D0 (C, param, MiddlePoint);
+          V2 = (MiddlePoint.XYZ() - CurrentPoint.XYZ());
+          L2 = V2.Modulus ();
+          if (L2 > LTol)
+          {
+            const Standard_Real aAngle = V2.CrossMagnitude(V1)/(L1*L2);
+            IsLine = (aAngle < ATol);
           }
         }
-        MiddleU += Du;
       }
-      if (IsLine) {
-        //C'etait une droite (plusieurs poles alignes), Calcul termine :
-        parameters.Append (lastu);
-        points    .Append (LastPoint);
+
+      if (IsLine)
+      {
+        parameters.Clear();
+        points    .Clear();
+
+        PerformLinear(C);
         return;
       }
-      else {
+      else
+      {
         //c'etait une singularite on continue :
-        Standard_Integer pointsLength=points.Length ();
-        for (i = 2; i <= pointsLength; i++) {
-          points    .Remove (i);
-          parameters.Remove (i);
-          pointsLength--;
-        }
-        Du = Dusave;
+        //Du = Dusave;
+        EvaluateDu (C, param, MiddlePoint, Du, NotDone);
       }
     }
-    else  {
-      
+    else
+    {
       Du = (lastu-firstu)/2.1;
       MiddleU = firstu + Du;
       D0 (C, MiddleU, MiddlePoint);
-      V1 = MiddlePoint.XYZ ();
-      V1.Subtract (CurrentPoint.XYZ());
+      V1 = (MiddlePoint.XYZ() - CurrentPoint.XYZ());
       L1 = V1.Modulus ();
-      if (L1 < LTol) {
+      if (L1 < LTol)
+      {
         // L1 < LTol C'est une courbe de longueur nulle, calcul termine :
         // on renvoi un segment de 2 points   (protection)
         parameters.Append (lastu);
@@ -345,12 +421,14 @@ void GCPnts_TangentialDeflection::PerformCurve (const TheCurve& C)
   Standard_Boolean MorePoints = Standard_True;
   Standard_Real U2            = firstu;   
   Standard_Real AngleMax      = angularDeflection * 0.5;  //car on prend le point milieu
-
+  Standard_Integer aIdx[2] = {Intervs.Lower(), Intervs.Lower()}; // Indexes of intervals of U1 and U2, used to handle non-uniform case.
+  Standard_Boolean isNeedToCheck = Standard_False;
   gp_Pnt aPrevPoint = points.Last();
+  Standard_Integer MaxNbCorr = 100;
 
   while (MorePoints) {
-
-    U2 += Du;                             
+    aIdx[0] = getIntervalIdx(U1, Intervs, aIdx[0]);
+    U2 += Du;
 
     if (U2 >= lastu) {                       //Bout de courbe
       U2 = lastu;
@@ -360,35 +438,62 @@ void GCPnts_TangentialDeflection::PerformCurve (const TheCurve& C)
     }
     else D0 (C, U2, CurrentPoint);           //Point suivant
 
-    Standard_Real Coef, ACoef = 0., FCoef = 0.;
-    Standard_Boolean Correction, TooLarge, TooSmall;
+    Standard_Real Coef = 0.0, ACoef = 0., FCoef = 0.;
+    Standard_Boolean Correction, TooLarge;
     TooLarge   = Standard_False;
-    TooSmall   = Standard_False;
     Correction = Standard_True;
-
-    while (Correction) {                     //Ajustement Du
+    Standard_Integer nbcorr = 0;
+
+    while (Correction && (++nbcorr <= MaxNbCorr)) {                     //Ajustement Du
+      if (isNeedToCheck)
+      {
+        aIdx[1] = getIntervalIdx(U2, Intervs, aIdx[0]);
+        if (aIdx[1] > aIdx[0]) // Jump to another polynom.
+        {
+          if (Du > (Intervs(aIdx[0] + 1) - Intervs(aIdx[0]) ) * Us3) // Set Du to the smallest value and check deflection on it.
+          {
+            Du = (Intervs(aIdx[0] + 1) - Intervs(aIdx[0]) ) * Us3;
+            U2 = U1 + Du;
+            if (U2 > lastu)
+              U2 = lastu;
+            D0 (C, U2, CurrentPoint);
+          }
+        }
+      }
       MiddleU = (U1+U2)*0.5;                 //Verif / au point milieu
       D0 (C, MiddleU, MiddlePoint);
 
-      V1 = CurrentPoint.XYZ ();              //Critere de fleche
-      V1.Subtract (aPrevPoint.XYZ());
-      V2 = MiddlePoint.XYZ ();
-      V2.Subtract (aPrevPoint.XYZ());
+      V1 = (CurrentPoint.XYZ() - aPrevPoint.XYZ()); //Critere de fleche
+      V2 = (MiddlePoint.XYZ()  - aPrevPoint.XYZ());
       L1 = V1.Modulus ();
-      if (L1 > LTol) FCoef = V1.CrossMagnitude(V2)/(L1*curvatureDeflection);
-      else           FCoef = 0.0;
 
-      V1 = CurrentPoint.XYZ ();              //Critere d'angle
-      V1.Subtract (MiddlePoint.XYZ ());
+      FCoef = (L1 > LTol) ? 
+        V1.CrossMagnitude(V2)/(L1*curvatureDeflection) : 0.0;
+
+      V1 = (CurrentPoint.XYZ() - MiddlePoint.XYZ()); //Critere d'angle
       L1 = V1.Modulus ();
       L2 = V2.Modulus ();
-      Standard_Real angg = V1.CrossMagnitude(V2)/(L1*L2);
-      if (L1 > LTol && L2 > LTol) ACoef = angg/AngleMax;
-      else                        ACoef = 0.0;
+      if (L1 > LTol && L2 > LTol)
+      {
+        Standard_Real angg = V1.CrossMagnitude(V2) / (L1 * L2);
+        ACoef = angg / AngleMax;
+      }
+      else
+        ACoef = 0.0;
 
-      if (ACoef >= FCoef) Coef = ACoef;      //On retient le plus penalisant
-      else                Coef = FCoef;
+      //On retient le plus penalisant
+      Coef = Max(ACoef, FCoef);
 
+      if (isNeedToCheck && Coef < 0.55)
+      {
+        isNeedToCheck = Standard_False;
+        Du = Dusave;
+        U2 = U1 + Du;
+        if (U2 > lastu)
+          U2 = lastu;
+        D0 (C, U2, CurrentPoint);
+        continue;
+      }
 
       if (Coef <= 1.0) {
         if (Abs (lastu-U2) < uTol) {
@@ -398,39 +503,35 @@ void GCPnts_TangentialDeflection::PerformCurve (const TheCurve& C)
           Correction = Standard_False;
         }
         else {
-          if (Coef >= 0.55 || TooLarge) { 
+          if (Coef >= 0.55 || TooLarge || nbcorr == MaxNbCorr) { 
             parameters.Append (U2);
             points    .Append (CurrentPoint);
             aPrevPoint = CurrentPoint;
             Correction = Standard_False;
-          }
-          else if (TooSmall) {
-            Correction = Standard_False;
-            aPrevPoint = CurrentPoint;
+            isNeedToCheck = Standard_True;
           }
           else {
-            TooSmall = Standard_True;
             //Standard_Real UUU2 = U2;
             Du += Min((U2-U1)*(1.-Coef), Du*Us3);
 
             U2 = U1 + Du;
-            //if (U2 >= lastu) U2 = UUU2;
-            if (U2 >= lastu) {
-              parameters.Append (lastu);
-              points    .Append (LastPoint);
-              MorePoints = Standard_False;
-              Correction = Standard_False;
-            }
-            else D0 (C, U2, CurrentPoint);
+            if (U2 > lastu)
+              U2 = lastu;
+            D0 (C, U2, CurrentPoint);
           }
         }
       }
       else {
 
         if (Coef >= 1.5) {
-          U2 = MiddleU;
+          if (!aPrevPoint.IsEqual(points.Last(), Precision::Confusion()))
+          {
+            parameters.Append (U1);
+            points    .Append (aPrevPoint);
+          }
+          U2 = 0.9*MiddleU + 0.1*U2;
           Du  = U2-U1;
-          CurrentPoint = MiddlePoint;
+          D0 (C, U2, CurrentPoint);
         }
         else {
           Du*=0.9;
@@ -485,7 +586,6 @@ void GCPnts_TangentialDeflection::PerformCurve (const TheCurve& C)
 //    points.Remove (i+1);
 //    i--;
 //  }
-  
   if (i >= 2) {
     MiddleU = parameters (i-1);
     MiddleU = (lastu + MiddleU)*0.5;
@@ -513,4 +613,39 @@ void GCPnts_TangentialDeflection::PerformCurve (const TheCurve& C)
       i++;
     }
   }
+  //Additional check for intervals
+  Standard_Real LTol2 = LTol * LTol;
+  Standard_Integer MaxNbp = 10 * Nbp;
+  for(i = 1; i < Nbp; ++i)
+  {
+    U1 = parameters(i);
+    U2 = parameters(i + 1);
+    // Check maximal deflection on interval;
+    Standard_Real dmax = 0.;
+    Standard_Real umax = 0.;
+    Standard_Real amax = 0.;
+    EstimDefl(C, U1, U2, uTol, dmax, umax);
+    const gp_Pnt& P1 = points(i);
+    const gp_Pnt& P2 = points(i+1);
+    D0(C, umax, MiddlePoint);
+    amax = EstimAngl(P1, MiddlePoint, P2);
+    if(dmax > curvatureDeflection || amax > AngleMax)
+    {
+      if(umax - U1 > uTol && U2 - umax > uTol)
+      {
+        if (P1.SquareDistance(MiddlePoint) > LTol2 && P2.SquareDistance(MiddlePoint) > LTol2)
+        {
+          parameters.InsertAfter(i, umax);
+          points.InsertAfter(i, MiddlePoint);
+          ++Nbp;
+          --i; //To compensate ++i in loop header: i must point to first part of splitted interval
+          if(Nbp > MaxNbp)
+          {
+            break;
+          }
+        }
+      }
+    }
+  }
+  // 
 }
index 4a345176242f65420dc2266756ac8009741f8d42..0a36b6d1f7c9b1da809db2014d600d7a1a3d6a4d 100644 (file)
@@ -925,7 +925,7 @@ static Standard_Integer crvpoints (Draw_Interpretor& di, Standard_Integer /*n*/,
 
   //check deviation
   ComputeDeviation(C,aPnts,dmax,ufmax,ulmax,imax);
-  di << "Max defl: " << dmax << " " << ufmax << " " << ulmax << " " << i << "\n"; 
+  di << "Max defl: " << dmax << " " << ufmax << " " << ulmax << " " << imax << "\n"; 
 
   return 0;
 } 
@@ -980,7 +980,7 @@ static Standard_Integer crvtpoints (Draw_Interpretor& di, Standard_Integer n, co
 
   //check deviation
   ComputeDeviation(C,aPnts,dmax,ufmax,ulmax,imax);
-  di << "Max defl: " << dmax << " " << ufmax << " " << ulmax << " " << i << "\n"; 
+  di << "Max defl: " << dmax << " " << ufmax << " " << ulmax << " " << imax << "\n"; 
 
   return 0;
 } 
index 0f93db935f5cb5a98cc85515dee82a5e40d5e4ec..91cf0e1ee8701481e2daac69065fc682092b3647 100644 (file)
 
 #define OPTIMISATION 1 
 
-
 #include <IntCurvesFace_Intersector.ixx>
-
-#include <IntCurveSurface_ThePolyhedronToolOfHInter.hxx>
+#include <Adaptor3d_HCurve.hxx>
+#include <Adaptor3d_HSurfaceTool.hxx>
 #include <Bnd_BoundSortBox.hxx>
-
-#include <IntCurveSurface_IntersectionPoint.hxx>
-#include <gp_Lin.hxx>
-#include <TopoDS_Face.hxx>
-#include <TopAbs.hxx>
-
-
-#include <IntCurveSurface_HInter.hxx>
+#include <Bnd_Box.hxx>
 #include <BRepAdaptor_HSurface.hxx>
-#include <Geom_Line.hxx>
-#include <gp_Pnt2d.hxx>
 #include <BRepClass_FaceClassifier.hxx>
-
+#include <BRepTopAdaptor_TopolTool.hxx>
+#include <Geom_Line.hxx>
 #include <GeomAdaptor_Curve.hxx>
-
 #include <GeomAdaptor_HCurve.hxx>
-#include <BRepAdaptor_HSurface.hxx>
-
-
-
-#include <Adaptor3d_HSurfaceTool.hxx>
+#include <gp_Lin.hxx>
+#include <gp_Pnt.hxx>
+#include <gp_Pnt2d.hxx>
+#include <IntCurvesFace_Intersector.hxx>
+#include <IntCurveSurface_HInter.hxx>
+#include <IntCurveSurface_IntersectionPoint.hxx>
+#include <IntCurveSurface_SequenceOfPnt.hxx>
 #include <IntCurveSurface_TheHCurveTool.hxx>
-#include <Adaptor3d_HCurve.hxx>
-#include <Bnd_Box.hxx>
-#include <Intf_Tool.hxx>
-#include <IntCurveSurface_ThePolyhedronOfHInter.hxx>
 #include <IntCurveSurface_ThePolygonOfHInter.hxx>
-#include <IntCurveSurface_SequenceOfPnt.hxx>
-
-
-
+#include <IntCurveSurface_ThePolyhedronOfHInter.hxx>
+#include <IntCurveSurface_ThePolyhedronToolOfHInter.hxx>
+#include <Intf_Tool.hxx>
+#include <TopAbs.hxx>
+#include <TopoDS_Face.hxx>
+#include <BRep_Tool.hxx>
+#include <TopoDS.hxx>
+#include <Geom2dAPI_ProjectPointOnCurve.hxx>
 //=======================================================================
 //function : SurfaceType
 //purpose  : 
@@ -65,7 +57,7 @@ GeomAbs_SurfaceType IntCurvesFace_Intersector::SurfaceType() const
 //purpose  : 
 //=======================================================================
 IntCurvesFace_Intersector::IntCurvesFace_Intersector(const TopoDS_Face& Face,
-                                                    const Standard_Real aTol)
+                                                     const Standard_Real aTol)
 : 
   Tol(aTol),
   done(Standard_False),
@@ -74,8 +66,9 @@ IntCurvesFace_Intersector::IntCurvesFace_Intersector(const TopoDS_Face& Face,
   PtrOnBndBounding(NULL)
 { 
   BRepAdaptor_Surface surface;
+  const Standard_Boolean aRestr = Standard_True;
   face = Face;
-  surface.Initialize(Face,Standard_True);
+  surface.Initialize(Face, aRestr);
   Hsurface = new BRepAdaptor_HSurface(surface);
   myTopolTool = new BRepTopAdaptor_TopolTool(Hsurface);
   
@@ -91,47 +84,35 @@ IntCurvesFace_Intersector::IntCurvesFace_Intersector(const TopoDS_Face& Face,
     U1 = Hsurface->LastUParameter();
     V0 = Hsurface->FirstVParameter();
     V1 = Hsurface->LastVParameter();
-    //modified by NIZNHY-PKV Fri Apr 06 07:30:47 2012f
-    Standard_Boolean bFlag;
-    //
+
+    Standard_Real aURes = Hsurface->UResolution(1.0);
+    Standard_Real aVRes = Hsurface->VResolution(1.0);
+
+    // Checking correlation between number of samples and length of the face along each axis
+    const Standard_Real aTresh = 100.0;
+    const Standard_Integer aMinSamples = 10;
+    const Standard_Integer aMaxSamples = 40;
+    const Standard_Integer aMaxSamples2 = aMaxSamples * aMaxSamples;
+    Standard_Real dU = (U1 - U0) / aURes;
+    Standard_Real dV = (V1 - V0) / aVRes;
+    nbsu = myTopolTool->NbSamplesU();
+    nbsv = myTopolTool->NbSamplesV();
+    if (nbsu > aMaxSamples) nbsu = aMaxSamples;
+    if (nbsv > aMaxSamples) nbsv = aMaxSamples;
+
+    if (Max(dU, dV) > Min(dU, dV) * aTresh)
     {
-      Standard_Real dU, dV, dA, dB, aTresh; 
-      bFlag=Standard_True;
-      //
-      aTresh=100.;
-      dU=U1-U0;
-      dV=V1-V0;
-      dA=dU;
-      dB=dV;
-      if (dV>dU) {
-       dA=dV;
-       dB=dU;
+      nbsu = (Standard_Integer)(Sqrt(dU / dV) * aMaxSamples);
+      if (nbsu < aMinSamples) nbsu = aMinSamples;
+      nbsv = aMaxSamples2 / nbsu;
+      if (nbsv < aMinSamples)
+      {
+        nbsv = aMinSamples;
+        nbsu = aMaxSamples2 / aMinSamples;
       }
-      //
-      if (dB < Precision::PConfusion() || dA > dB * aTresh) {
-       bFlag=!bFlag;
-      }
-    }
-    //
-    if (bFlag) {
-      nbsu = myTopolTool->NbSamplesU();
-      nbsv = myTopolTool->NbSamplesV();
-      if(nbsu>40) nbsu = 40;
-      if(nbsv>40) nbsv = 40;
-      PtrOnPolyhedron = (IntCurveSurface_ThePolyhedronOfHInter *) 
-       new IntCurveSurface_ThePolyhedronOfHInter(Hsurface,nbsu,nbsv,U0,V0,U1,V1);
     }
-    //
-    /*
-    nbsu = myTopolTool->NbSamplesU();
-    nbsv = myTopolTool->NbSamplesV();
-    if(nbsu>40) nbsu = 40;
-    if(nbsv>40) nbsv = 40;
-    PtrOnPolyhedron = (IntCurveSurface_ThePolyhedronOfHInter *) 
-      new IntCurveSurface_ThePolyhedronOfHInter(Hsurface,nbsu,nbsv,U0,V0,U1,V1);
-      */
-    
-    //modified by NIZNHY-PKV Fri Apr 06 07:30:49 2012t
+    PtrOnPolyhedron = (IntCurveSurface_ThePolyhedronOfHInter *)
+        new IntCurveSurface_ThePolyhedronOfHInter(Hsurface,nbsu,nbsv,U0,V0,U1,V1);
   }
 }
 //=======================================================================
@@ -142,65 +123,125 @@ void IntCurvesFace_Intersector::InternalCall(const IntCurveSurface_HInter &HICS,
                                             const Standard_Real parinf,
                                             const Standard_Real parsup) 
 {
-  if(HICS.IsDone()) {
+  if(HICS.IsDone() && HICS.NbPoints() > 0) {
+    //Calculate tolerance for 2d classifier
+    Standard_Real mintol3d = BRep_Tool::Tolerance(face);
+    Standard_Real maxtol3d = mintol3d;
+    Standard_Real mintol2d = Tol, maxtol2d = Tol;
+    TopExp_Explorer anExp(face, TopAbs_EDGE);
+    for(; anExp.More(); anExp.Next())
+    {
+      Standard_Real curtol = BRep_Tool::Tolerance(TopoDS::Edge(anExp.Current()));
+      mintol3d = Min(mintol3d, curtol);
+      maxtol3d = Max(maxtol3d, curtol);
+    }
+    Standard_Real minres = Max(Hsurface->UResolution(mintol3d), Hsurface->VResolution(mintol3d));
+    Standard_Real maxres = Max(Hsurface->UResolution(maxtol3d), Hsurface->VResolution(maxtol3d));
+    mintol2d = Max(minres, Tol); 
+    maxtol2d = Max(maxres, Tol);
+    //
+    Handle(BRepTopAdaptor_TopolTool) anAdditionalTool;
     for(Standard_Integer index=HICS.NbPoints(); index>=1; index--) {  
       const IntCurveSurface_IntersectionPoint& HICSPointindex = HICS.Point(index);
       gp_Pnt2d Puv(HICSPointindex.U(),HICSPointindex.V());
-      
-      TopAbs_State currentstate = myTopolTool->Classify(Puv,Tol);
+
+      //TopAbs_State currentstate = myTopolTool->Classify(Puv,Tol);
+      TopAbs_State currentstate = myTopolTool->Classify(Puv, mintol2d);
+      if(currentstate == TopAbs_OUT && maxtol2d > mintol2d) {
+        if(anAdditionalTool.IsNull())
+        {
+          anAdditionalTool = new BRepTopAdaptor_TopolTool(Hsurface);
+        }
+        currentstate = anAdditionalTool->Classify(Puv,maxtol2d);
+        if(currentstate == TopAbs_ON)
+        {
+          //Find out nearest edge and it's tolerance
+          anExp.Init(face, TopAbs_EDGE);
+          Standard_Real mindist = RealLast();
+          mintol2d = -1.;
+          for(; anExp.More(); anExp.Next())
+          {
+            TopoDS_Edge anE = TopoDS::Edge(anExp.Current());
+            Standard_Real curtol = BRep_Tool::Tolerance(anE);
+            Standard_Real tol2d = Max(Hsurface->UResolution(curtol), Hsurface->VResolution(curtol));
+            tol2d = Max(tol2d, Tol);
+            Standard_Real f, l;
+            Handle(Geom2d_Curve) aPC = BRep_Tool::CurveOnSurface(anE, face, f, l);
+            Geom2dAPI_ProjectPointOnCurve aProj(Puv, aPC, f, l);
+            if(aProj.NbPoints() > 0)
+            {
+              Standard_Real d = aProj.LowerDistance();
+              if(d <= tol2d)
+              {
+                //Nearest edge is found, state is really ON
+                break;
+              }
+              if(d < mindist && d <= maxtol2d)
+              {
+                mindist = d;
+                mintol2d = tol2d;
+              }
+            }
+          }
+          if(mintol2d > 0. && mindist > mintol2d)
+          {
+            currentstate = TopAbs_OUT; 
+          }
+        }
+      }
       if(currentstate==TopAbs_IN || currentstate==TopAbs_ON) { 
-       Standard_Real HICSW = HICSPointindex.W();
-       if(HICSW >= parinf && HICSW <= parsup ) { 
-         Standard_Real U          = HICSPointindex.U();
-         Standard_Real V          = HICSPointindex.V();
-         Standard_Real W          = HICSW; 
-         IntCurveSurface_TransitionOnCurve transition = HICSPointindex.Transition();
-         gp_Pnt pnt        = HICSPointindex.Pnt();
-         //      state      = currentstate;
-         //  Modified by skv - Wed Sep  3 16:14:10 2003 OCC578 Begin
-         Standard_Integer anIntState = (currentstate == TopAbs_IN) ? 0 : 1;
-         //  Modified by skv - Wed Sep  3 16:14:11 2003 OCC578 End
+        Standard_Real HICSW = HICSPointindex.W();
+        if(HICSW >= parinf && HICSW <= parsup ) { 
+          Standard_Real U          = HICSPointindex.U();
+          Standard_Real V          = HICSPointindex.V();
+          Standard_Real W          = HICSW; 
+          IntCurveSurface_TransitionOnCurve transition = HICSPointindex.Transition();
+          gp_Pnt pnt        = HICSPointindex.Pnt();
+          //     state      = currentstate;
+          //  Modified by skv - Wed Sep  3 16:14:10 2003 OCC578 Begin
+          Standard_Integer anIntState = (currentstate == TopAbs_IN) ? 0 : 1;
+          //  Modified by skv - Wed Sep  3 16:14:11 2003 OCC578 End
+
+          if(transition != IntCurveSurface_Tangent && face.Orientation()==TopAbs_REVERSED) { 
+            if(transition == IntCurveSurface_In) 
+              transition = IntCurveSurface_Out;
+            else 
+              transition = IntCurveSurface_In;
+          }
+          //----- Insertion du point 
+          if(nbpnt==0) { 
+            IntCurveSurface_IntersectionPoint PPP(pnt,U,V,W,transition);
+            SeqPnt.Append(PPP);
+            //  Modified by skv - Wed Sep  3 16:14:10 2003 OCC578 Begin
+            mySeqState.Append(anIntState);
+            //  Modified by skv - Wed Sep  3 16:14:11 2003 OCC578 End
+          }
+          else { 
+            Standard_Integer i = 1;
+            Standard_Integer b = nbpnt+1;                    
+            while(i<=nbpnt) {
+              const IntCurveSurface_IntersectionPoint& Pnti=SeqPnt.Value(i);
+              Standard_Real wi = Pnti.W();
+              if(wi >= W) { b=i; i=nbpnt; }
+              i++;
+            }
+            IntCurveSurface_IntersectionPoint PPP(pnt,U,V,W,transition);
+            //  Modified by skv - Wed Sep  3 16:14:10 2003 OCC578 Begin
+            //             if(b>nbpnt)          { SeqPnt.Append(PPP); } 
+            //             else if(b>0)             { SeqPnt.InsertBefore(b,PPP); } 
+            if(b>nbpnt) {
+              SeqPnt.Append(PPP);
+              mySeqState.Append(anIntState);
+            } else if(b>0) {
+              SeqPnt.InsertBefore(b,PPP);
+              mySeqState.InsertBefore(b, anIntState);
+            }
+            //  Modified by skv - Wed Sep  3 16:14:11 2003 OCC578 End
+          }
 
-         if(transition != IntCurveSurface_Tangent && face.Orientation()==TopAbs_REVERSED) { 
-           if(transition == IntCurveSurface_In) 
-             transition = IntCurveSurface_Out;
-           else 
-             transition = IntCurveSurface_In;
-         }
-         //----- Insertion du point 
-         if(nbpnt==0) { 
-           IntCurveSurface_IntersectionPoint PPP(pnt,U,V,W,transition);
-           SeqPnt.Append(PPP);
-           //  Modified by skv - Wed Sep  3 16:14:10 2003 OCC578 Begin
-           mySeqState.Append(anIntState);
-           //  Modified by skv - Wed Sep  3 16:14:11 2003 OCC578 End
-         }
-         else { 
-           Standard_Integer i = 1;
-           Standard_Integer b = nbpnt+1;                    
-           while(i<=nbpnt) {
-             const IntCurveSurface_IntersectionPoint& Pnti=SeqPnt.Value(i);
-             Standard_Real wi = Pnti.W();
-             if(wi >= W) { b=i; i=nbpnt; }
-             i++;
-           }
-           IntCurveSurface_IntersectionPoint PPP(pnt,U,V,W,transition);
-           //  Modified by skv - Wed Sep  3 16:14:10 2003 OCC578 Begin
-//         if(b>nbpnt)          { SeqPnt.Append(PPP); } 
-//         else if(b>0)             { SeqPnt.InsertBefore(b,PPP); } 
-           if(b>nbpnt) {
-             SeqPnt.Append(PPP);
-             mySeqState.Append(anIntState);
-           } else if(b>0) {
-             SeqPnt.InsertBefore(b,PPP);
-             mySeqState.InsertBefore(b, anIntState);
-           }
-           //  Modified by skv - Wed Sep  3 16:14:11 2003 OCC578 End
-         }
 
-         nbpnt++;
-       } 
+          nbpnt++;
+        } 
       } //-- classifier state is IN or ON
     } //-- Loop on Intersection points.
   } //-- HICS.IsDone()
index 3bff4507e6f011a45c65e3ee352e8b0ac30398d1..303b7a8caf49113859a48d7fb94f38525d7ddb8c 100644 (file)
@@ -125,27 +125,39 @@ is
     ---Purpose:
     -- Computes Line/Line intersection.  
 
+    FindSolutions(me:out;  
+        theRanges1 : out SequenceOfRanges from IntTools;
+        theRanges2 : out SequenceOfRanges from IntTools;
+        bSplit2    : out Boolean from Standard)
+    is protected;
+    ---Purpose:
+    -- Intermediate function
     FindSolutions(me:out;  
         theR1, theR2 : Range from IntTools;
+        theBox2      : Box from Bnd;
         theRanges1   : out SequenceOfRanges from IntTools;
         theRanges2   : out SequenceOfRanges from IntTools)
-    is protected; 
+    is protected;
     ---Purpose:
     -- Looking for the exact intersection ranges
     
     MergeSolutions(me:out; 
-        theRanges1, theRanges2 : SequenceOfRanges from IntTools)
+        theRanges1 : SequenceOfRanges from IntTools;
+        theRanges2 : SequenceOfRanges from IntTools;
+        bSplit2    : Boolean from Standard)
     is protected; 
     ---Purpose:
     -- Merges found solutions
 
     FindParameters(myclass; 
-        theBAC  : Curve from BRepAdaptor;  
-        aT1,aT2 : Real from Standard;  
-        theRes  : Real from Standard;
-        thePTol : Real from Standard;
-        theCBox : Box from Bnd; 
-        aTB1,aTB2 : out Real from Standard)
+        theBAC      : Curve from BRepAdaptor;
+        aT1, aT2    : Real  from Standard;  
+        theRes      : Real  from Standard;
+        thePTol     : Real  from Standard; 
+        theResCoeff : Real  from Standard;
+        theCBox     : Box   from Bnd; 
+        aTB1, aTB2  : out Real from Standard)
     returns Boolean from Standard 
     is protected; 
     ---Purpose:
@@ -213,7 +225,10 @@ fields
     myTol    : Real  from Standard is protected;   
     
     myRes1   : Real  from Standard is protected;  
-    myRes2   : Real  from Standard is protected;  
+    myRes2   : Real  from Standard is protected;   
+     
+    myResCoeff1 : Real  from Standard is protected;
+    myResCoeff2 : Real  from Standard is protected;
      
     myPTol1  : Real  from Standard is protected; 
     myPTol2  : Real  from Standard is protected; 
index daf05099cefb18122fcaa43bd8b366a68c51e9fe..580a27173652246b695284d1301572984a09620e 100644 (file)
 #include <Bnd_Box.hxx>
 #include <BndLib_Add3dCurve.hxx>
 
+#include <Geom_Circle.hxx>
+#include <Geom_Ellipse.hxx>
+#include <Geom_BezierCurve.hxx>
+#include <Geom_BSplineCurve.hxx>
+
 #include <GeomAPI_ProjectPointOnCurve.hxx>
 
 #include <BRep_Tool.hxx>
 #include <BRepAdaptor_Curve.hxx>
 
-#include <IntTools_Tools.hxx>
 #include <IntTools_CommonPrt.hxx>
 
+#include <BOPCol_MapOfInteger.hxx>
 
 static 
   void BndBuildBox(const BRepAdaptor_Curve& theBAC,
@@ -43,11 +48,11 @@ static
   Standard_Real PointBoxDistance(const Bnd_Box& aB,
                                  const gp_Pnt& aP);
 static 
-  void SplitRangeOnSegments(const Standard_Real aT1, 
-                            const Standard_Real aT2,
-                            const Standard_Real theResolution,
-                            const Standard_Integer theNbSeg,
-                            IntTools_SequenceOfRanges& theSegments);
+  Standard_Integer SplitRangeOnSegments(const Standard_Real aT1, 
+                                        const Standard_Real aT2,
+                                        const Standard_Real theResolution,
+                                        const Standard_Integer theNbSeg,
+                                        IntTools_SequenceOfRanges& theSegments);
 static
  Standard_Integer DistPC(const Standard_Real aT1, 
                          const Handle(Geom_Curve)& theC1,
@@ -78,6 +83,23 @@ static
                               Standard_Real& aT1max,
                               Standard_Real& aT2max,
                               const Standard_Boolean bMaxDist = Standard_True);
+static
+  Standard_Real ResolutionCoeff(const BRepAdaptor_Curve& theBAC,
+                                const IntTools_Range& theRange);
+static
+  Standard_Real Resolution(const Handle(Geom_Curve)& theCurve,
+                           const GeomAbs_CurveType theCurveType,
+                           const Standard_Real theResCoeff,
+                           const Standard_Real theR3D);
+static
+  Standard_Real CurveDeflection(const BRepAdaptor_Curve& theBAC,
+                                const IntTools_Range& theRange);
+static 
+  Standard_Integer IsClosed(const Handle(Geom_Curve)& theCurve,
+                            const Standard_Real aT1,
+                            const Standard_Real aT2,
+                            const Standard_Real theTol,
+                            const Standard_Real theRes);
 static 
   Standard_Integer TypeToInteger(const GeomAbs_CurveType theCType);
 
@@ -112,36 +134,11 @@ void IntTools_EdgeEdge::Prepare()
   if (iCT1 == iCT2) {
     if (iCT1 != 0) {
       //compute deflection
-      Standard_Integer i;
-      Standard_Real aDt, aT, aT1, aT2;
-      gp_Vec aV1, aV2;
-      gp_Pnt aP;
+      Standard_Real aC1, aC2;
       //
-      Standard_Real aC1(10.), aC2(10.);
-      for (i = 0; i < 2; ++i) {
-        Standard_Real &aC = !i ? aC2 : aC1;
-        aC = 0;
-        IntTools_Range aR = !i ? myRange2 : myRange1;
-        const BRepAdaptor_Curve& aBAC = !i ? myCurve2 : myCurve1;
-        aR.Range(aT1, aT2);
-        aDt = (aT2 - aT1) / 10.;
-        aT = aT1;
-        aBAC.D1(aT, aP, aV1);
-        while (aT < aT2) {
-          aT += aDt;
-          aBAC.D1(aT, aP, aV2);
-          if (aV1.Magnitude() > gp::Resolution() &&
-              aV2.Magnitude() > gp::Resolution()) {
-            gp_Dir aD1(aV1), aD2(aV2);
-            aC += aD1.Angle(aD2);
-          }
-          aV1 = aV2;
-        }
-        //
-        if (aC < Precision::Confusion()) {
-          break;
-        }
-      }
+      aC2 = CurveDeflection(myCurve2, myRange2);
+      aC1 = (aC2 > Precision::Confusion()) ? 
+        CurveDeflection(myCurve1, myRange1) : 1.;
       //
       if (aC1 < aC2) {
         --iCT1;
@@ -169,15 +166,18 @@ void IntTools_EdgeEdge::Prepare()
   myTol2 = myCurve2.Tolerance();
   myTol = myTol1 + myTol2;
   //
-  myRes1 = myCurve1.Resolution(myTol);
-  myRes2 = myCurve2.Resolution(myTol);
-  //
   if (iCT1 != 0 || iCT2 != 0) {
     Standard_Real f, l, aTM;
     //
     myGeom1 = BRep_Tool::Curve(myEdge1, f, l);
     myGeom2 = BRep_Tool::Curve(myEdge2, f, l);
     //
+    myResCoeff1 = ResolutionCoeff(myCurve1, myRange1);
+    myResCoeff2 = ResolutionCoeff(myCurve2, myRange2);
+    //
+    myRes1 = Resolution(myCurve1.Curve().Curve(), myCurve1.GetType(), myResCoeff1, myTol1);
+    myRes2 = Resolution(myCurve2.Curve().Curve(), myCurve2.GetType(), myResCoeff2, myTol2);
+    //
     myPTol1 = 5.e-13;
     aTM = Max(fabs(myRange1.First()), fabs(myRange1.Last()));
     if (aTM > 999.) {
@@ -217,10 +217,70 @@ void IntTools_EdgeEdge::Perform()
   IntTools_SequenceOfRanges aRanges1, aRanges2;
   //
   //3.2. Find ranges containig solutions
-  FindSolutions(myRange1, myRange2, aRanges1, aRanges2);
+  Standard_Boolean bSplit2;
+  FindSolutions(aRanges1, aRanges2, bSplit2);
   //
   //4. Merge solutions and save common parts
-  MergeSolutions(aRanges1, aRanges2);
+  MergeSolutions(aRanges1, aRanges2, bSplit2);
+}
+
+//=======================================================================
+//function : FindSolutions
+//purpose  : 
+//=======================================================================
+void IntTools_EdgeEdge::FindSolutions(IntTools_SequenceOfRanges& theRanges1,
+                                      IntTools_SequenceOfRanges& theRanges2,
+                                      Standard_Boolean& bSplit2)
+{
+  Standard_Boolean bIsClosed2;
+  Standard_Real aT11, aT12, aT21, aT22;
+  Bnd_Box aB2;
+  //
+  bSplit2 = Standard_False;
+  myRange1.Range(aT11, aT12);
+  myRange2.Range(aT21, aT22);
+  //
+  bIsClosed2 = IsClosed(myGeom2, aT21, aT22, myTol2, myRes2);
+  //
+  if (bIsClosed2) {
+    Bnd_Box aB1;
+    BndBuildBox(myCurve1, aT11, aT12, myTol1, aB1);
+    //
+    gp_Pnt aP = myGeom2->Value(aT21);
+    bIsClosed2 = !aB1.IsOut(aP);
+  }
+  //
+  if (!bIsClosed2) {
+    BndBuildBox(myCurve2, aT21, aT22, myTol2, aB2);
+    FindSolutions(myRange1, myRange2, aB2, theRanges1, theRanges2);
+    return;
+  }
+  //
+  if (!CheckCoincidence(aT11, aT12, aT21, aT22, myTol, myRes1)) {
+    theRanges1.Append(myRange1);
+    theRanges2.Append(myRange2);
+    return;
+  }
+  //
+  Standard_Integer i, j, aNb1, aNb2;
+  IntTools_SequenceOfRanges aSegments1, aSegments2;
+  //
+  aNb1 = IsClosed(myGeom1, aT11, aT12, myTol1, myRes1) ? 2 : 1;
+  aNb2 = 2;
+  //
+  aNb1 = SplitRangeOnSegments(aT11, aT12, myRes1, aNb1, aSegments1);
+  aNb2 = SplitRangeOnSegments(aT21, aT22, myRes2, aNb2, aSegments2);
+  //
+  for (i = 1; i <= aNb1; ++i) {
+    const IntTools_Range& aR1 = aSegments1(i);
+    for (j = 1; j <= aNb2; ++j) {
+      const IntTools_Range& aR2 = aSegments2(j);
+      BndBuildBox(myCurve2, aR2.First(), aR2.Last(), myTol2, aB2);
+      FindSolutions(aR1, aR2, aB2, theRanges1, theRanges2);
+    }
+  }
+  //
+  bSplit2 = aNb2 > 1;
 }
 
 //=======================================================================
@@ -229,82 +289,84 @@ void IntTools_EdgeEdge::Perform()
 //=======================================================================
 void IntTools_EdgeEdge::FindSolutions(const IntTools_Range& theR1,
                                       const IntTools_Range& theR2,
-                                      IntTools_SequenceOfRanges& theRanges1, 
+                                      const Bnd_Box& theBox2,
+                                      IntTools_SequenceOfRanges& theRanges1,
                                       IntTools_SequenceOfRanges& theRanges2)
 {
   Standard_Boolean bOut, bStop, bThin;
   Standard_Real aT11, aT12, aT21, aT22;
   Standard_Real aTB11, aTB12, aTB21, aTB22;
-  Standard_Real aTol, aSmallStep1, aSmallStep2;
+  Standard_Real aSmallStep1, aSmallStep2;
   Standard_Integer iCom;
   Bnd_Box aB1, aB2;
   //
   theR1.Range(aT11, aT12);
   theR2.Range(aT21, aT22);
   //
-  BndBuildBox(myCurve1, aT11, aT12, myTol1, aB1);
-  BndBuildBox(myCurve2, aT21, aT22, myTol2, aB2);
-  if (aB1.IsOut(aB2)) {
-    //no intersection;
-    return;
-  }
+  aB2 = theBox2;
   //
-  bOut  = Standard_False;
   bThin = Standard_False;
   bStop = Standard_False;
-  aTol  = 2*myTol;
   iCom  = 1;
   //
   do {
-    bOut = !FindParameters(myCurve2, aT21, aT22, myRes2, myPTol2, aB1, aTB21, aTB22);
+    aTB11 = aT11;
+    aTB12 = aT12;
+    aTB21 = aT21;
+    aTB22 = aT22;
+    //
+    //1. Build box for first edge and find parameters 
+    //   of the second one in that box
+    BndBuildBox(myCurve1, aT11, aT12, myTol1, aB1);
+    bOut = aB1.IsOut(aB2);
     if (bOut) {
       break;
     }
     //
-    bThin = (aTB22 - aTB21) < myRes2;
-    if (bThin) {
-      bOut = !FindParameters(myCurve1, aT11, aT12, myRes1, myPTol1, aB1, aTB11, aTB12);
+    bThin = ((aT12 - aT11) < myRes1) ||
+      (aB1.IsXThin(myTol) && aB1.IsYThin(myTol) && aB1.IsZThin(myTol));
+    //
+    bOut = !FindParameters(myCurve2, aTB21, aTB22, myRes2, myPTol2, 
+                           myResCoeff2, aB1, aT21, aT22);
+    if (bOut || bThin) {
       break;
     }
     //
-    BndBuildBox(myCurve2, aTB21, aTB22, myTol2, aB2);
-    //
-    bOut = !FindParameters(myCurve1, aT11, aT12, myRes1, myPTol1, aB2, aTB11, aTB12);
+    //2. Build box for second edge and find parameters 
+    //   of the first one in that box
+    BndBuildBox(myCurve2, aT21, aT22, myTol2, aB2);
+    bOut = aB1.IsOut(aB2);
     if (bOut) {
       break;
     }
     //
-    bThin = ((aTB12 - aTB11) < myRes1) ||
-      (aB2.IsXThin(aTol) && aB2.IsYThin(aTol) && aB2.IsZThin(aTol));
+    bThin = ((aT22 - aT21) < myRes2) ||
+      (aB2.IsXThin(myTol) && aB2.IsYThin(myTol) && aB2.IsZThin(myTol));
     //
-    if (!bThin) {
-      aSmallStep1 = (aT12 - aT11) / 250.;
-      aSmallStep2 = (aT22 - aT21) / 250.;
-      //
-      if (aSmallStep1 < myRes1) {
-        aSmallStep1 = myRes1;
-      }
-      if (aSmallStep2 < myRes2) {
-        aSmallStep2 = myRes2;
-      }
-      //
-      if (((aTB11 - aT11) < aSmallStep1) && ((aT12 - aTB12) < aSmallStep1) &&
-          ((aTB21 - aT21) < aSmallStep2) && ((aT22 - aTB22) < aSmallStep2)) {
-        bStop = Standard_True;
-      } else {
-        BndBuildBox(myCurve1, aTB11, aTB12, myTol1, aB1);
-        bOut = aB1.IsOut(aB2);
-        if (bOut) {
-          break;
-        }
-      }
+    bOut = !FindParameters(myCurve1, aTB11, aTB12, myRes1, myPTol1, 
+                           myResCoeff1, aB2, aT11, aT12);
+    //
+    if (bOut || bThin) {
+      break;
+    }
+    //
+    //3. Check if it makes sense to continue
+    aSmallStep1 = (aTB12 - aTB11) / 250.;
+    aSmallStep2 = (aTB22 - aTB21) / 250.;
+    //
+    if (aSmallStep1 < myRes1) {
+      aSmallStep1 = myRes1;
+    }
+    if (aSmallStep2 < myRes2) {
+      aSmallStep2 = myRes2;
+    }
+    //
+    if (((aT11 - aTB11) < aSmallStep1) && ((aTB12 - aT12) < aSmallStep1) &&
+        ((aT21 - aTB21) < aSmallStep2) && ((aTB22 - aT22) < aSmallStep2)) {
+      bStop = Standard_True;
     }
     //
-    aT11 = aTB11;
-    aT12 = aTB12;
-    aT21 = aTB21;
-    aT22 = aTB22;
-  } while (!bThin && !bStop);
+  } while (!bStop);
   //
   if (bOut) {
     //no intersection;
@@ -316,23 +378,37 @@ void IntTools_EdgeEdge::FindSolutions(const IntTools_Range& theR1,
     iCom = CheckCoincidence(aT11, aT12, aT21, aT22, myTol, myRes1);
     if (!iCom) {
       bThin = Standard_True;
-    } 
+    }
   }
   //
   if (bThin) {
     if (iCom != 0) {
       //check intermediate points
-      Standard_Real aT1, aT2, aDist;
-      gp_Pnt aP1, aP2;
-      //
-      aT1 = IntTools_Tools::IntermediatePoint(aT11, aT12);
-      aT2 = IntTools_Tools::IntermediatePoint(aT21, aT22);
+      Standard_Boolean bSol;
+      Standard_Real aT1;
+      gp_Pnt aP1;
+      GeomAPI_ProjectPointOnCurve aProjPC;
       //
+      aT1 = (aT11 + aT12) * .5;
       myGeom1->D0(aT1, aP1);
-      myGeom2->D0(aT2, aP2);
       //
-      aDist = aP1.Distance(aP2);
-      if (aDist > myTol) {
+      aProjPC.Init(myGeom2, aT21, aT22);
+      aProjPC.Perform(aP1);
+      //
+      if (aProjPC.NbPoints()) {
+        bSol = aProjPC.LowerDistance() <= myTol;
+      }
+      else {
+        Standard_Real aT2;
+        gp_Pnt aP2;
+        //
+        aT2 = (aT21 + aT22) * .5;
+        myGeom2->D0(aT2, aP2);
+        //
+        bSol = aP1.IsEqual(aP2, myTol);
+      }
+      //
+      if (!bSol) {
         return;
       }
     }
@@ -353,12 +429,12 @@ void IntTools_EdgeEdge::FindSolutions(const IntTools_Range& theR1,
   IntTools_SequenceOfRanges aSegments1;
   //
   IntTools_Range aR2(aT21, aT22);
+  BndBuildBox(myCurve2, aT21, aT22, myTol2, aB2);
   //
-  SplitRangeOnSegments(aT11, aT12, myRes1, 3, aSegments1);
-  aNb1 = aSegments1.Length();
+  aNb1 = SplitRangeOnSegments(aT11, aT12, myRes1, 3, aSegments1);
   for (i = 1; i <= aNb1; ++i) {
     const IntTools_Range& aR1 = aSegments1(i);
-    FindSolutions(aR1, aR2, theRanges1, theRanges2);
+    FindSolutions(aR1, aR2, aB2, theRanges1, theRanges2);
   }
 }
 
@@ -371,6 +447,7 @@ Standard_Boolean IntTools_EdgeEdge::FindParameters(const BRepAdaptor_Curve& theB
                                                    const Standard_Real aT2, 
                                                    const Standard_Real theRes,
                                                    const Standard_Real thePTol,
+                                                   const Standard_Real theResCoeff,
                                                    const Bnd_Box& theCBox,
                                                    Standard_Real& aTB1, 
                                                    Standard_Real& aTB2)
@@ -391,6 +468,9 @@ Standard_Boolean IntTools_EdgeEdge::FindParameters(const BRepAdaptor_Curve& theB
   aCBx = theCBox;
   aCBx.Enlarge(aTol);
   //
+  const Handle(Geom_Curve)& aCurve = theBAC.Curve().Curve();
+  const GeomAbs_CurveType aCurveType = theBAC.GetType();
+  //
   for (i = 0; i < 2; ++i) {
     aTB = !i ? aT1 : aT2;
     aT = !i ? aT2 : aTB1;
@@ -403,10 +483,10 @@ Standard_Boolean IntTools_EdgeEdge::FindParameters(const BRepAdaptor_Curve& theB
       aDist = PointBoxDistance(theCBox, aP);
       if (aDist > aTol) {
         if (fabs(aDist - aDistP) < aDistTol) {
-          aDt = theBAC.Resolution((++k)*aDist);
+          aDt = Resolution(aCurve, aCurveType, theResCoeff, (++k)*aDist);
         } else {
           k = 0;
-          aDt = theBAC.Resolution(aDist);
+          aDt = Resolution(aCurve, aCurveType, theResCoeff, aDist);
         }
         aTB += aC*aDt;
       } else {
@@ -458,48 +538,94 @@ Standard_Boolean IntTools_EdgeEdge::FindParameters(const BRepAdaptor_Curve& theB
 //purpose  : 
 //=======================================================================
 void IntTools_EdgeEdge::MergeSolutions(const IntTools_SequenceOfRanges& theRanges1, 
-                                       const IntTools_SequenceOfRanges& theRanges2)
+                                       const IntTools_SequenceOfRanges& theRanges2,
+                                       const Standard_Boolean bSplit2)
 {
+  Standard_Integer aNbCP = theRanges1.Length();
+  if (aNbCP == 0) {
+    return;
+  }
+  //
   IntTools_Range aRi1, aRi2, aRj1, aRj2;
-  Standard_Integer aNbCP, i, j;
+  Standard_Boolean bCond;
+  Standard_Integer i, j;
   TopAbs_ShapeEnum aType;
-  Standard_Real aTi11, aTi12, aTi21, aTi22,
-                aTj11, aTj12, aTj21, aTj22;
+  Standard_Real aT11, aT12, aT21, aT22;
+  Standard_Real aTi11, aTi12, aTi21, aTi22;
+  Standard_Real aTj11, aTj12, aTj21, aTj22;
+  Standard_Real aRes1, aRes2, dTR1, dTR2;
+  BOPCol_MapOfInteger aMI;
+  //
+  aRes1 = Resolution(myCurve1.Curve().Curve(), 
+                     myCurve1.GetType(), myResCoeff1, myTol);
+  aRes2 = Resolution(myCurve2.Curve().Curve(), 
+                     myCurve2.GetType(), myResCoeff2, myTol);
   //
-  aNbCP = theRanges1.Length();
+  myRange1.Range(aT11, aT12);
+  myRange2.Range(aT21, aT22);
+  dTR1 = 20*aRes1;
+  dTR2 = 20*aRes2;
   aType = TopAbs_VERTEX;
   //
-  for (i = 1; i <= aNbCP; ) {
+  for (i = 1; i <= aNbCP;) {
+    if (aMI.Contains(i)) {
+      ++i;
+      continue;
+    }
+    //
     aRi1 = theRanges1(i);
     aRi2 = theRanges2(i);
     //
     aRi1.Range(aTi11, aTi12);
     aRi2.Range(aTi21, aTi22);
     //
+    aMI.Add(i);
+    //
     for (j = i+1; j <= aNbCP; ++j) {
+      if (aMI.Contains(j)) {
+        continue;
+      }
+      //
       aRj1 = theRanges1(j);
       aRj2 = theRanges2(j);
       //
       aRj1.Range(aTj11, aTj12);
       aRj2.Range(aTj21, aTj22);
-      if (fabs(aTi12 - aTj11) < 10*myRes1 ||
-          fabs(aTi22 - aTj21) < 10*myRes2) {
+      //
+      bCond = (fabs(aTi12 - aTj11) < dTR1) ||
+        (bSplit2 && (fabs(aTj12 - aTi11) < dTR1));
+      if (bCond && bSplit2) {
+        bCond = (fabs((Max(aTi22, aTj22) - Min(aTi21, aTj21)) - 
+                      ((aTi22 - aTi21) + (aTj22 - aTj21))) < dTR2);
+      }
+      //
+      if (bCond) {
         aTi11 = Min(aTi11, aTj11);
         aTi12 = Max(aTi12, aTj12);
         aTi21 = Min(aTi21, aTj21);
         aTi22 = Max(aTi22, aTj22);
-      } else {
+        aMI.Add(j);
+      }
+      else if (!bSplit2) {
+        i = j;
         break;
       }
     }
-    i = j;
     //
-    if (aTi11 == myRange1.First() && aTi12 == myRange1.Last() &&
-        aTi21 == myRange2.First() && aTi22 == myRange2.Last()) {
+    if (((fabs(aT11 - aTi11) < myRes1) && (fabs(aT12 - aTi12) < myRes1)) ||
+        ((fabs(aT21 - aTi21) < myRes2) && (fabs(aT22 - aTi22) < myRes2))) {
       aType = TopAbs_EDGE;
+      myCommonParts.Clear();
     }
     //
     AddSolution(aTi11, aTi12, aTi21, aTi22, aType);
+    if (aType == TopAbs_EDGE) {
+      break;
+    }
+    //
+    if (bSplit2) {
+      ++i;
+    }
   }
 }
 
@@ -556,35 +682,64 @@ void IntTools_EdgeEdge::FindBestSolution(const Standard_Real aT11,
                                          Standard_Real& aT2)
 {
   Standard_Integer i, aNbS, iErr;
-  Standard_Real aDMin, aD, aCrit;
-  Standard_Real aT1x, aT2x, aT1p, aT2p;
-  GeomAPI_ProjectPointOnCurve aProj;
-  IntTools_SequenceOfRanges aSeg1;
-  //
-  aT1 = IntTools_Tools::IntermediatePoint(aT11, aT12);
-  aT2 = IntTools_Tools::IntermediatePoint(aT21, aT22);
+  Standard_Real aDMin, aD, aRes1, aSolCriteria, aTouchCriteria;
+  Standard_Real aT1A, aT1B, aT1Min, aT2Min;
+  Standard_Real aT1Im, aT2Im, aT1Touch;
+  GeomAPI_ProjectPointOnCurve aProjPC;
+  IntTools_SequenceOfRanges aRanges;
+  Standard_Boolean bTouch;
   //
-  aDMin = 100.;
-  aD = 100.;
-  aCrit = 0.;//1.e-16;
+  aDMin = Precision::Infinite();
+  aSolCriteria   = 5.e-16;
+  aTouchCriteria = 5.e-13;
+  bTouch = Standard_False;
+  aT1Touch = aT11;
   //
+  aRes1 = Resolution(myCurve1.Curve().Curve(), 
+                     myCurve1.GetType(), myResCoeff1, myTol);
   aNbS = 10;
-  SplitRangeOnSegments(aT11, aT12, 3*myRes1, aNbS, aSeg1);
-  aNbS = aSeg1.Length();
+  aNbS = SplitRangeOnSegments(aT11, aT12, 3*aRes1, aNbS, aRanges);
+  //
+  aProjPC.Init(myGeom2, aT21, aT22);
+  //
+  aT1 = (aT11 + aT12) * 0.5;
+  iErr = DistPC(aT1, myGeom1, aSolCriteria, aProjPC, aD, aT2, -1);
+  if (iErr == 1) {
+    aT2 = (aT21 + aT22) * 0.5;
+  }
+  //
+  aT1Im = aT1;
+  aT2Im = aT2;
   //
-  aProj.Init(myGeom2, aT21, aT22);
   for (i = 1; i <= aNbS; ++i) {
-    const IntTools_Range& aR1 = aSeg1(i);
-    aR1.Range(aT1x, aT2x);
+    const IntTools_Range& aR1 = aRanges(i);
+    aR1.Range(aT1A, aT1B);
     //
-    iErr = FindDistPC(aT1x, aT2x, myGeom1, aCrit, myPTol1,
-                      aProj, aD, aT1p, aT2p, Standard_False);
-    if (iErr != 1 && aD < aDMin) {
-      aT1 = aT1p;
-      aT2 = aT2p;
-      aDMin = aD;
-      if (aDMin <= aCrit) {
-        break;
+    aD = myTol;
+    iErr = FindDistPC(aT1A, aT1B, myGeom1, aSolCriteria, myPTol1,
+                      aProjPC, aD, aT1Min, aT2Min, Standard_False);
+    if (iErr != 1) {
+      if (aD < aDMin) {
+        aT1 = aT1Min;
+        aT2 = aT2Min;
+        aDMin = aD;
+      }
+      //
+      if (aD < aTouchCriteria) {
+        if (bTouch) {
+          aT1A = (aT1Touch + aT1Min) * 0.5;
+          iErr = DistPC(aT1A, myGeom1, aTouchCriteria, 
+                        aProjPC, aD, aT2Min, -1);
+          if (aD > aTouchCriteria) {
+            aT1 = aT1Im;
+            aT2 = aT2Im;
+            break;
+          }
+        }
+        else {
+          aT1Touch = aT1Min;
+          bTouch = Standard_True;
+        }
       }
     }
   }
@@ -789,13 +944,14 @@ Standard_Boolean IntTools_EdgeEdge::IsIntersection(const Standard_Real aT11,
     //
     if (((anAngle1 < anAngleCriteria) || ((M_PI - anAngle1) < anAngleCriteria)) ||
         ((anAngle2 < anAngleCriteria) || ((M_PI - anAngle2) < anAngleCriteria))) {
-      GeomAPI_ProjectPointOnCurve aProj;
+      GeomAPI_ProjectPointOnCurve aProjPC;
       Standard_Integer iErr;
-      Standard_Real aD, aT1p, aT2p;
+      Standard_Real aD, aT1Min, aT2Min;
       //
-      aD = 100.;
-      aProj.Init(myGeom2, aT21, aT22);
-      iErr = FindDistPC(aT11, aT12, myGeom1, myTol, myRes1, aProj, aD, aT1p, aT2p, Standard_False);
+      aD = Precision::Infinite();
+      aProjPC.Init(myGeom2, aT21, aT22);
+      iErr = FindDistPC(aT11, aT12, myGeom1, myTol, myRes1, 
+                        aProjPC, aD, aT1Min, aT2Min, Standard_False);
       bRet = (iErr == 2);
     }
   }
@@ -816,7 +972,7 @@ Standard_Integer IntTools_EdgeEdge::CheckCoincidence(const Standard_Real aT11,
   Standard_Integer iErr, aNb, aNb1, i;
   Standard_Real aT1A, aT1B, aT1max, aT2max, aDmax;
   GeomAPI_ProjectPointOnCurve aProjPC;
-  IntTools_SequenceOfRanges aSeg1;
+  IntTools_SequenceOfRanges aRanges;
   //
   iErr  = 0;
   aDmax = -1.;
@@ -824,10 +980,9 @@ Standard_Integer IntTools_EdgeEdge::CheckCoincidence(const Standard_Real aT11,
   //
   // 1. Express evaluation
   aNb = 10; // Number of intervals on the curve #1
-  SplitRangeOnSegments(aT11, aT12, theCurveRes1, aNb, aSeg1);
-  aNb1 = aSeg1.Length();
+  aNb1 = SplitRangeOnSegments(aT11, aT12, theCurveRes1, aNb, aRanges);
   for (i = 1; i < aNb1; ++i) {
-    const IntTools_Range& aR1 = aSeg1(i);
+    const IntTools_Range& aR1 = aRanges(i);
     aR1.Range(aT1A, aT1B);
     //
     iErr = DistPC(aT1B, myGeom1, theCriteria, aProjPC, aDmax, aT2max);
@@ -836,7 +991,7 @@ Standard_Integer IntTools_EdgeEdge::CheckCoincidence(const Standard_Real aT11,
     }
   }
   //
-  // if the ranges in aSeg1 are less than theCurveRes1,
+  // if the ranges in aRanges are less than theCurveRes1,
   // there is no need to do step 2 (deep evaluation)
   if (aNb1 < aNb) {
     return iErr;
@@ -844,7 +999,7 @@ Standard_Integer IntTools_EdgeEdge::CheckCoincidence(const Standard_Real aT11,
   //
   // 2. Deep evaluation
   for (i = 2; i < aNb1; ++i) {
-    const IntTools_Range& aR1 = aSeg1(i);
+    const IntTools_Range& aR1 = aRanges(i);
     aR1.Range(aT1A, aT1B);
     //
     iErr = FindDistPC(aT1A, aT1B, myGeom1, theCriteria, theCurveRes1, 
@@ -886,12 +1041,14 @@ Standard_Integer FindDistPC(const Standard_Real aT1A,
   aB = aT1B;
   //
   // check bounds
-  iErr = DistPC(aA, theC1, theCriteria, theProjPC, aYP, aT2P, aDmax, aT1max, aT2max, iC);
+  iErr = DistPC(aA, theC1, theCriteria, theProjPC, 
+                aYP, aT2P, aDmax, aT1max, aT2max, iC);
   if (iErr == 2) {
     return iErr;
   }
   //
-  iErr = DistPC(aB, theC1, theCriteria, theProjPC, aYL, aT2L, aDmax, aT1max, aT2max, iC);
+  iErr = DistPC(aB, theC1, theCriteria, theProjPC, 
+                aYL, aT2L, aDmax, aT1max, aT2max, iC);
   if (iErr == 2) {
     return iErr;
   }
@@ -899,12 +1056,14 @@ Standard_Integer FindDistPC(const Standard_Real aT1A,
   aXP = aA + (aB - aA)*aGS;
   aXL = aB - (aB - aA)*aGS;
   //
-  iErr = DistPC(aXP, theC1, theCriteria, theProjPC, aYP, aT2P, aDmax, aT1max, aT2max, iC);
+  iErr = DistPC(aXP, theC1, theCriteria, theProjPC, 
+                aYP, aT2P, aDmax, aT1max, aT2max, iC);
   if (iErr) {
     return iErr;
   }
   //
-  iErr = DistPC(aXL, theC1, theCriteria, theProjPC, aYL, aT2L, aDmax, aT1max, aT2max, iC);
+  iErr = DistPC(aXL, theC1, theCriteria, theProjPC, 
+                aYL, aT2L, aDmax, aT1max, aT2max, iC);
   if (iErr) {
     return iErr;
   }
@@ -915,20 +1074,25 @@ Standard_Integer FindDistPC(const Standard_Real aT1A,
       aXL = aXP;
       aYL = aYP;
       aXP = aA + (aB - aA)*aGS;
-      iErr = DistPC(aXP, theC1, theCriteria, theProjPC, aYP, aT2P, aDmax, aT1max, aT2max, iC);
-      if (iErr) {
-        return iErr;
-      }
+      iErr = DistPC(aXP, theC1, theCriteria, theProjPC, 
+                    aYP, aT2P, aDmax, aT1max, aT2max, iC);
     }
     else {
       aB = aXP;
       aXP = aXL;
       aYP = aYL;
       aXL = aB - (aB - aA)*aGS;
-      iErr = DistPC(aXL, theC1, theCriteria, theProjPC, aYL, aT2L, aDmax, aT1max, aT2max, iC);
-      if (iErr) {
-        return iErr;
+      iErr = DistPC(aXL, theC1, theCriteria, theProjPC, 
+                    aYL, aT2L, aDmax, aT1max, aT2max, iC);
+    }
+    //
+    if (iErr) {
+      if ((iErr == 2) && !bMaxDist) {
+        aXP = (aA + aB) * 0.5;
+        DistPC(aXP, theC1, theCriteria, theProjPC, 
+               aYP, aT2P, aDmax, aT1max, aT2max, iC);
       }
+      return iErr;
     }
     //
     if ((aB - aA) < theEps) {
@@ -956,7 +1120,7 @@ Standard_Integer DistPC(const Standard_Real aT1,
   Standard_Integer iErr;
   //
   iErr = DistPC(aT1, theC1, theCriteria, theProjPC, aD, aT2, iC);
-  if (iErr) {
+  if (iErr == 1) {
     return iErr;
   }
   //
@@ -1006,16 +1170,16 @@ Standard_Integer DistPC(const Standard_Real aT1,
 //function : SplitRangeOnSegments
 //purpose  : 
 //=======================================================================
-void SplitRangeOnSegments(const Standard_Real aT1, 
-                          const Standard_Real aT2,
-                          const Standard_Real theResolution,
-                          const Standard_Integer theNbSeg,
-                          IntTools_SequenceOfRanges& theSegments)
+Standard_Integer SplitRangeOnSegments(const Standard_Real aT1, 
+                                      const Standard_Real aT2,
+                                      const Standard_Real theResolution,
+                                      const Standard_Integer theNbSeg,
+                                      IntTools_SequenceOfRanges& theSegments)
 {
   Standard_Real aDiff = aT2 - aT1;
-  if (aDiff < theResolution) {
+  if (aDiff < theResolution || theNbSeg == 1) {
     theSegments.Append(IntTools_Range(aT1, aT2));
-    return;
+    return 1;
   }
   //
   Standard_Real aDt, aT1x, aT2x, aSeg;
@@ -1041,6 +1205,8 @@ void SplitRangeOnSegments(const Standard_Real aT1,
   //
   IntTools_Range aR(aT1x, aT2);
   theSegments.Append(aR);
+  //
+  return aNbSegments;
 }
 
 //=======================================================================
@@ -1104,12 +1270,12 @@ Standard_Integer TypeToInteger(const GeomAbs_CurveType theCType)
   case GeomAbs_Line:
     iRet=0;
     break;
-  case GeomAbs_Circle:
+  case GeomAbs_Hyperbola:
+  case GeomAbs_Parabola:
     iRet=1;
     break;
+  case GeomAbs_Circle:
   case GeomAbs_Ellipse:
-  case GeomAbs_Hyperbola:
-  case GeomAbs_Parabola:
     iRet=2;
     break;
   case GeomAbs_BezierCurve:
@@ -1123,3 +1289,152 @@ Standard_Integer TypeToInteger(const GeomAbs_CurveType theCType)
   return iRet;
 }
 
+//=======================================================================
+//function : ResolutionCoeff
+//purpose  : 
+//=======================================================================
+Standard_Real ResolutionCoeff(const BRepAdaptor_Curve& theBAC,
+                              const IntTools_Range& theRange)
+{
+  Standard_Real aResCoeff;
+  //
+  const Handle(Geom_Curve)& aCurve = theBAC.Curve().Curve();
+  const GeomAbs_CurveType aCurveType = theBAC.GetType();
+  //
+  switch (aCurveType) {
+  case GeomAbs_Circle :
+    aResCoeff = 1. / (2 * (*((Handle(Geom_Circle)*)&aCurve))->Circ().Radius());
+    break;
+  case GeomAbs_Ellipse :
+    aResCoeff =  1. / (*((Handle(Geom_Ellipse)*)&aCurve))->MajorRadius();
+    break;
+  case GeomAbs_Hyperbola :
+  case GeomAbs_Parabola : 
+  case GeomAbs_OtherCurve :{
+    Standard_Real k, kMin, aDist, aDt, aT1, aT2, aT;
+    Standard_Integer aNbP, i;
+    gp_Pnt aP1, aP2;
+    //
+    aNbP = 30;
+    theRange.Range(aT1, aT2);
+    aDt = (aT2 - aT1) / aNbP;
+    aT = aT1;
+    kMin = 10.;
+    //
+    theBAC.D0(aT1, aP1);
+    for (i = 1; i <= aNbP; ++i) {
+      aT += aDt;
+      theBAC.D0(aT, aP2);
+      aDist = aP1.Distance(aP2);
+      k = aDt / aDist;
+      if (k < kMin) {
+        kMin = k;
+      }
+      aP1 = aP2;
+    }
+    //
+    aResCoeff = kMin;
+    break;
+  }
+  default:
+    aResCoeff = 0.;
+    break;
+  }
+  //
+  return aResCoeff;
+}
+
+//=======================================================================
+//function : Resolution
+//purpose  : 
+//=======================================================================
+Standard_Real Resolution(const Handle(Geom_Curve)& theCurve,
+                         const GeomAbs_CurveType theCurveType,
+                         const Standard_Real theResCoeff,
+                         const Standard_Real theR3D)
+{
+  Standard_Real aRes;
+  //
+  switch (theCurveType) {
+  case GeomAbs_Line :
+    aRes = theR3D;
+    break;
+  case GeomAbs_Circle: {
+    Standard_Real aDt = theResCoeff * theR3D;
+    aRes = (aDt <= 1.) ? 2*ASin(aDt) : 2*M_PI;
+    break;
+  }
+  case GeomAbs_BezierCurve:
+    (*((Handle(Geom_BezierCurve)*)&theCurve))->Resolution(theR3D, aRes);
+    break;
+  case GeomAbs_BSplineCurve:
+    (*((Handle(Geom_BSplineCurve)*)&theCurve))->Resolution(theR3D, aRes);
+    break;
+  default:
+    aRes = theResCoeff * theR3D;
+    break;
+  }
+  //
+  return aRes;
+}
+
+//=======================================================================
+//function : CurveDeflection
+//purpose  : 
+//=======================================================================
+Standard_Real CurveDeflection(const BRepAdaptor_Curve& theBAC,
+                              const IntTools_Range& theRange)
+{
+  Standard_Real aDt, aT, aT1, aT2, aDefl;
+  Standard_Integer i, aNbP;
+  gp_Vec aV1, aV2;
+  gp_Pnt aP;
+  //
+  aDefl = 0;
+  aNbP = 10;
+  theRange.Range(aT1, aT2);
+  aDt = (aT2 - aT1) / aNbP;
+  aT = aT1;
+  //
+  theBAC.D1(aT1, aP, aV1);
+  for (i = 1; i <= aNbP; ++i) {
+    aT += aDt;
+    theBAC.D1(aT, aP, aV2);
+    if (aV1.Magnitude() > gp::Resolution() &&
+        aV2.Magnitude() > gp::Resolution()) {
+      gp_Dir aD1(aV1), aD2(aV2);
+      aDefl += aD1.Angle(aD2);
+    }
+    aV1 = aV2;
+  }
+  //
+  return aDefl;
+}
+
+//=======================================================================
+//function : IsClosed
+//purpose  : 
+//=======================================================================
+Standard_Integer IsClosed(const Handle(Geom_Curve)& theCurve,
+                          const Standard_Real aT1,
+                          const Standard_Real aT2,
+                          const Standard_Real theTol,
+                          const Standard_Real theRes)
+{
+  Standard_Boolean bClosed;
+  Standard_Real aD;
+  gp_Pnt aP1, aP2;
+  //
+  bClosed = Standard_False;
+  if (Abs(aT1 - aT2) < theRes) {
+    return bClosed;
+  }
+  //
+  theCurve->D0(aT1, aP1);
+  theCurve->D0(aT2, aP2);
+  //
+  aD = aP1.Distance(aP2);
+  bClosed = aD < theTol;
+  //
+  return bClosed;
+}
index c10432f86b990e4f7db3bc0bcf627eb3fa50477c..2508d533bd46d72db21c2d96252438a479f96abc 100644 (file)
@@ -26,6 +26,8 @@ inline IntTools_EdgeEdge::IntTools_EdgeEdge()
   myTol(0.),
   myRes1(0.),
   myRes2(0.),
+  myResCoeff1(0.),
+  myResCoeff2(0.),
   myPTol1(0.),
   myPTol2(0.),
   myRange1(0., 0.),
@@ -48,6 +50,8 @@ inline IntTools_EdgeEdge::IntTools_EdgeEdge(const TopoDS_Edge&  theEdge1,
   myTol(0.),
   myRes1(0.),
   myRes2(0.),
+  myResCoeff1(0.),
+  myResCoeff2(0.),
   myPTol1(0.),
   myPTol2(0.),
   myRange1(0., 0.),
@@ -74,6 +78,8 @@ inline IntTools_EdgeEdge::IntTools_EdgeEdge(const TopoDS_Edge&  theEdge1,
   myTol(0.),
   myRes1(0.),
   myRes2(0.),
+  myResCoeff1(0.),
+  myResCoeff2(0.),
   myPTol1(0.),
   myPTol2(0.),
   myRange1(aT11, aT12),
index 24d1a6fb48413b59ed03efed6c874674d7184c3a..a8322021e6c07a2ce4c8d0f998b66efae864f1d7 100644 (file)
@@ -92,13 +92,13 @@ ProjLib_PrjResolve::ProjLib_PrjResolve(const Adaptor3d_Curve& C,const Adaptor3d_
     ExtraU = Tol2d.X();
     ExtraV = Tol2d.Y();
 //  }
-  if (Abs(mySolution.X()-Inf.X()) < Tol2d.X()) mySolution.SetX(Inf.X());
-  if (Abs(mySolution.X()-Sup.X()) < Tol2d.X()) mySolution.SetX(Sup.X()); 
-  if (Abs(mySolution.Y()-Inf.Y()) < Tol2d.Y()) mySolution.SetY(Inf.Y());
-  if (Abs(mySolution.Y()-Sup.Y()) < Tol2d.Y()) mySolution.SetY(Sup.Y()); 
-  if (mySolution.X() < Inf.X() - ExtraU || 
+  if (mySolution.X() > Inf.X() - Tol2d.X() && mySolution.X() < Inf.X()) mySolution.SetX(Inf.X());
+  if (mySolution.X() > Sup.X() && mySolution.X() < Sup.X() + Tol2d.X()) mySolution.SetX(Sup.X()); 
+  if (mySolution.Y() > Inf.Y() - Tol2d.Y() && mySolution.Y() < Inf.Y()) mySolution.SetY(Inf.Y());
+  if (mySolution.Y() > Sup.Y() && mySolution.Y() < Sup.Y() + Tol2d.Y()) mySolution.SetY(Sup.Y()); 
+  if (mySolution.X() < Inf.X() - ExtraU ||
       mySolution.X() > Sup.X() + ExtraU ||
-      mySolution.Y() < Inf.Y() - ExtraV || 
+      mySolution.Y() < Inf.Y() - ExtraV ||
       mySolution.Y() > Sup.Y() + ExtraV) myDone = Standard_False;
   else if (FuncTol > 0) {
     math_Vector X(1,2,0.), FVal(1,2,0.);
index 82837b0032af506dc761063a8dda2e5f50cdd3f6..7a593f4323f57ed70c8e5aca1e1174bbefe6f002 100644 (file)
@@ -223,19 +223,19 @@ static  Standard_Boolean GetShells(TopTools_SequenceOfShape& Lface,
         continue;
       
       if((edge.Orientation() == TopAbs_FORWARD && dire.Contains(edge))
-        || (edge.Orientation() == TopAbs_REVERSED && reve.Contains(edge))) 
-       nbbe++;
+        || (edge.Orientation() == TopAbs_REVERSED && reve.Contains(edge))) 
+        nbbe++;
       else if((edge.Orientation() == TopAbs_FORWARD && reve.Contains(edge))
-             || (edge.Orientation() == TopAbs_REVERSED && dire.Contains(edge)))   
-       nbe++;
+        || (edge.Orientation() == TopAbs_REVERSED && dire.Contains(edge)))   
+        nbe++;
       
       if(dire.Contains(edge)) dire.Remove(edge);
       else 
-       if(reve.Contains(edge)) reve.Remove(edge);
-       else {
-         if(edge.Orientation() == TopAbs_FORWARD) dtemp.Add(edge);
-         if(edge.Orientation() == TopAbs_REVERSED) rtemp.Add(edge);
-       }
+        if(reve.Contains(edge)) reve.Remove(edge);
+        else {
+          if(edge.Orientation() == TopAbs_FORWARD) dtemp.Add(edge);
+          if(edge.Orientation() == TopAbs_REVERSED) rtemp.Add(edge);
+        }
     }
     if(!nbbe && !nbe && dtemp.IsEmpty() && rtemp.IsEmpty()) 
       continue;
@@ -251,21 +251,21 @@ static  Standard_Boolean GetShells(TopTools_SequenceOfShape& Lface,
     
     // Addition of face to shell. In the dependance of orientation faces in the shell 
     //  added face can be reversed.
-    
+
     if((nbe != 0 || nbbe != 0) || j == 1) {
       if(nbbe != 0) {
-       F1.Reverse();
-       for(TopTools_MapIteratorOfMapOfShape ite(dtemp); ite.More(); ite.Next()) 
-         reve.Add(ite.Key());
-       for(TopTools_MapIteratorOfMapOfShape ite1(rtemp); ite1.More(); ite1.Next())
-         dire.Add(ite1.Key());
-       done = Standard_True;
+        F1.Reverse();
+        for(TopTools_MapIteratorOfMapOfShape ite(dtemp); ite.More(); ite.Next()) 
+          reve.Add(ite.Key());
+        for(TopTools_MapIteratorOfMapOfShape ite1(rtemp); ite1.More(); ite1.Next())
+          dire.Add(ite1.Key());
+        done = Standard_True;
       }
       else {
-       for(TopTools_MapIteratorOfMapOfShape ite(dtemp); ite.More(); ite.Next()) 
-         dire.Add(ite.Key());
-       for(TopTools_MapIteratorOfMapOfShape ite1(rtemp); ite1.More(); ite1.Next())
-         reve.Add(ite1.Key());
+        for(TopTools_MapIteratorOfMapOfShape ite(dtemp); ite.More(); ite.Next()) 
+          dire.Add(ite.Key());
+        for(TopTools_MapIteratorOfMapOfShape ite1(rtemp); ite1.More(); ite1.Next())
+          reve.Add(ite1.Key());
       }
       j++;
       B.Add(nshell,F1);
@@ -273,7 +273,7 @@ static  Standard_Boolean GetShells(TopTools_SequenceOfShape& Lface,
       Lface.Remove(i);
       
       // if closed shell is obtained it adds to sequence of shells and new shell begin to construct.
-      if(isMultiConnex && BRep_Tool::IsClosed(nshell)) {
+      if(isMultiConnex && BRep_Tool::IsClosed (nshell)) {
         aSeqShells.Append(nshell);
         TopoDS_Shell nshellnext;
         B.MakeShell(nshellnext);
@@ -862,8 +862,16 @@ Standard_Boolean ShapeFix_Shell::FixFaceOrientation(const TopoDS_Shell& shell,co
   myShell = shell;
   myShape = shell;
   Standard_Integer aNumMultShell =0;
-  for (TopoDS_Iterator iter(shell); iter.More(); iter.Next()) 
-    Lface.Append(iter.Value());
+  Standard_Integer nbF = 0;
+  TopTools_MapOfShape aMapAdded;
+  for (TopoDS_Iterator iter(shell); iter.More(); iter.Next(),nbF++) 
+  {
+    if(aMapAdded.Add(iter.Value()))
+      Lface.Append(iter.Value());
+  }
+  if(Lface.Length() < nbF)
+    done = Standard_True;
+
   TopTools_IndexedDataMapOfShapeListOfShape aMapEdgeFaces;
   TopExp::MapShapesAndAncestors(myShell,TopAbs_EDGE,TopAbs_FACE,aMapEdgeFaces);
   TopTools_MapOfShape aMapMultiConnectEdges;
index 2a5073228cea95daad8054c592f3cbcad309385b..2b3bf0a8913abdf4958289e471a79c5cc420ff43 100644 (file)
@@ -20,7 +20,7 @@
 #include <BRepClass3d_SolidClassifier.hxx>
 #include <Precision.hxx>
 #include <TopoDS_Shape.hxx>
-#include <ShapeBuild_ReShape.hxx> 
+#include <ShapeBuild_ReShape.hxx>
 #include <TopoDS_Iterator.hxx>
 #include <TopoDS.hxx>
 #include <ShapeExtend.hxx>
@@ -244,9 +244,9 @@ static void CollectSolids(const TopTools_SequenceOfShape& aSeqShells ,
     }
   }
   for(TopTools_MapIteratorOfMapOfShape aIterHoles(aMapHoles);aIterHoles.More(); aIterHoles.Next())
-    aMapShellHoles.UnBind(aIterHoles.Key());
-    
-}
+    aMapShellHoles.UnBind (aIterHoles.Key());
+
+    }
 //=======================================================================
 //function : CreateSolids
 //purpose  : 
@@ -343,13 +343,30 @@ static Standard_Boolean CreateSolids(const TopoDS_Shape aShape,TopTools_IndexedM
     BRep_Builder aB;
     aB.MakeCompSolid(aCompSolid);
     isDone = (aShape.ShapeType() != TopAbs_COMPSOLID || isDone);
+    Standard_Integer nbSol = 0;
+
     for(TopTools_ListIteratorOfListOfShape lItSh(lshells);lItSh.More(); lItSh.Next()) {
       if(ShellSolid.Contains(lItSh.Value())) {
-        for(TopExp_Explorer aExpSol(ShellSolid.FindFromKey(lItSh.Value()),TopAbs_SOLID);aExpSol.More(); aExpSol.Next())
+        const TopoDS_Shape& aShape = ShellSolid.FindFromKey(lItSh.Value());
+        TopExp_Explorer aExpSol(aShape, TopAbs_SOLID);
+       
+        for(;aExpSol.More(); aExpSol.Next())
+        {
           aB.Add(aCompSolid,aExpSol.Current());
-        ShellSolid.ChangeFromKey(lItSh.Value()) = aCompSolid;
+          nbSol++;
+        }
+      
+      }
+    }
+    if(nbSol >1)
+    {
+      for(TopTools_ListIteratorOfListOfShape lItSh1(lshells);lItSh1.More(); lItSh1.Next()) 
+      {
+        if(ShellSolid.Contains(lItSh1.Value())) 
+          ShellSolid.ChangeFromKey(lItSh1.Value()) = aCompSolid;
       }
     }
+    
   }
   for(Standard_Integer kk =1 ; kk <= ShellSolid.Extent();kk++)
     if(!aMapSolids.Contains(ShellSolid.FindFromIndex(kk)))
@@ -433,22 +450,24 @@ Standard_Boolean ShapeFix_Solid::Perform(const Handle(Message_ProgressIndicator)
       
     if(isClosed || myCreateOpenSolidMode) {
       if(BRep_Tool::IsClosed(tmpShape)) {
-        TopoDS_Iterator itersh(tmpShape);
-        TopoDS_Shell aShell;
-        if(itersh.More() && itersh.Value().ShapeType() == TopAbs_SHELL)
-          aShell = TopoDS::Shell(itersh.Value());
-        if(!aShell.IsNull()) {
-          TopoDS_Solid aSol = SolidFromShell(aShell);
-          if(ShapeExtend::DecodeStatus(myStatus,ShapeExtend_DONE2)) {
-            SendWarning (Message_Msg ("FixAdvSolid.FixOrientation.MSG20"));// Orientaion of shell was corrected.
-            Context()->Replace(tmpShape,aSol);
-            tmpShape = aSol;
-          }
+      TopoDS_Iterator itersh(tmpShape);
+      TopoDS_Shell aShell;
+      if(itersh.More() && itersh.Value().ShapeType() == TopAbs_SHELL)
+        aShell = TopoDS::Shell(itersh.Value());
+      if(!aShell.IsNull()) {
+        TopoDS_Solid aSol = SolidFromShell(aShell);
+        if(ShapeExtend::DecodeStatus(myStatus,ShapeExtend_DONE2)) {
+          SendWarning (Message_Msg ("FixAdvSolid.FixOrientation.MSG20"));// Orientaion of shell was corrected.
+          Context()->Replace(tmpShape,aSol);
+          tmpShape = aSol;
         }
       }
+      }
       mySolid  = TopoDS::Solid(tmpShape);
     }
     else {
+      status = Standard_True;
+      myStatus |= ShapeExtend::EncodeStatus ( ShapeExtend_DONE3 );
       TopoDS_Iterator aIt(tmpShape,Standard_False);
       Context()->Replace(tmpShape,aIt.Value());
       SendFail (Message_Msg ("FixAdvSolid.FixShell.MSG10")); // Solid can not be created from open shell. 
index 7988203b0ef50f951bcc3cbe992d569c9479ec8f..dc3df00e7e2ac5d80edb6e20e74ef7f3c6e690b9 100755 (executable)
@@ -4,3 +4,10 @@ math_Memory.hxx
 math_Recipes.hxx
 math_GaussPoints.hxx
 math_Kronrod.cxx
+math_Vector.hxx
+math_Vector.cxx
+math_IntegerVector.hxx
+math_IntegerVector.cxx
+math_SingleTab.hxx
+math_GlobOptMin.hxx
+math_GlobOptMin.cxx
index 20eb358cfb627f1625d2025687539965049384ef..ea190ffe9d196cdfa99c3fd077eb19af9be4ffe2 100644 (file)
@@ -41,8 +41,8 @@ is
     exception SingularMatrix inherits Failure;
     
 
-    class Vector;
-    class IntegerVector;
+    imported Vector;
+    imported IntegerVector;
     class Matrix;
     deferred class Function;
     deferred class FunctionWithDerivative;
@@ -51,6 +51,7 @@ is
     deferred class MultipleVarFunctionWithHessian;
     deferred class FunctionSet;
     deferred class FunctionSetWithDerivatives;
+    imported GlobOptMin;
     class IntegerRandom;
     class Gauss;
     class GaussLeastSquare;
@@ -93,13 +94,7 @@ is
                                               Array1OfValueAndWeight from math,
                                               CompareOfValueAndWeight from math);
 
-  generic class SingleTab;
-  generic class DoubleTab;
-
-    --- Instantiate classes:
-    class SingleTabOfReal instantiates SingleTab(Real);
-    class SingleTabOfInteger instantiates SingleTab(Integer);
-    class DoubleTabOfReal instantiates DoubleTab(Real);
+       class DoubleTab;
 
     --- Gauss Points
 
index a71a003c1557a729325f519c9b284d8e486ab51e..f534559ad948dc9ed4a5daea52cd67b2fcedf14f 100644 (file)
 -- Alternatively, this file may be used under the terms of Open CASCADE
 -- commercial license or contractual agreement.
 
-generic class DoubleTab from math (Item as any)
+class DoubleTab from math
 uses Address from Standard
 is
 
     Create(LowerRow, UpperRow, LowerCol, UpperCol: Integer)
        returns DoubleTab;
 
-    Create(Tab : Item; LowerRow, UpperRow, LowerCol, UpperCol: Integer)
+    Create(Tab : Address; LowerRow, UpperRow, LowerCol, UpperCol: Integer)
        returns DoubleTab;
 
-    Init(me : in out; InitValue: Item) is static;
+    Init(me : in out; InitValue: Real) is static;
 
     Create(Other: DoubleTab)
        returns DoubleTab;
@@ -48,7 +48,7 @@ is
        ---C++: alias operator()
        ---C++: return &
        ---C++: inline
-      returns Item
+      returns Real
       is static;               
        
        
@@ -62,7 +62,7 @@ fields
 
 Addr        : Address;
 AddrBuf     : Address[32];
-Buf         : Item[512];
+Buf         : Real[512];
 isAddrAllocated: Boolean;
 isAllocated : Boolean;
 LowR        : Integer;
diff --git a/src/math/math_DoubleTab.cxx b/src/math/math_DoubleTab.cxx
new file mode 100644 (file)
index 0000000..670f4b1
--- /dev/null
@@ -0,0 +1,142 @@
+// Copyright (c) 1997-1999 Matra Datavision
+// Copyright (c) 1999-2014 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+// Lpa, le 7/02/92
+#include <math_DoubleTab.ixx>
+
+#include <math_Memory.hxx>
+#include <Standard_OutOfRange.hxx>
+#include <Standard_Failure.hxx>
+#include <Standard_Integer.hxx>
+
+// macro to get size of C array
+#define CARRAY_LENGTH(arr) (int)(sizeof(arr)/sizeof(arr[0]))
+
+void math_DoubleTab::Allocate()
+{
+  Standard_Integer RowNumber = UppR - LowR + 1;
+  Standard_Integer ColNumber = UppC - LowC + 1;
+
+  Standard_Real** TheAddr = !isAddrAllocated? (Standard_Real**)&AddrBuf : 
+    (Standard_Real**) Standard::Allocate(RowNumber * sizeof(Standard_Real*));
+  Standard_Real* Address;
+  if(isAllocated) 
+    Address = (Standard_Real*) Standard::Allocate(RowNumber * ColNumber * sizeof(Standard_Real));
+  else
+    Address = (Standard_Real*) Addr;
+  Address -= LowC;
+  
+  for (Standard_Integer Index = 0; Index < RowNumber; Index++) {
+    TheAddr[Index] = Address;
+    Address += ColNumber;
+  }
+  
+  TheAddr -= LowR;
+  Addr = (Standard_Address) TheAddr;
+}
+
+math_DoubleTab::math_DoubleTab(const Standard_Integer LowerRow,
+                              const Standard_Integer UpperRow,
+                              const Standard_Integer LowerCol,
+                              const Standard_Integer UpperCol) :
+  Addr(Buf),
+  isAddrAllocated(UpperRow - LowerRow + 1 > CARRAY_LENGTH(AddrBuf)),
+  isAllocated((UpperRow - LowerRow + 1) * (UpperCol - LowerCol + 1) > CARRAY_LENGTH(Buf)),
+  LowR(LowerRow),
+  UppR(UpperRow),
+  LowC(LowerCol),
+  UppC(UpperCol)
+{
+  Allocate();
+}
+
+math_DoubleTab::math_DoubleTab(const Standard_Address Tab,
+                              const Standard_Integer LowerRow,
+                              const Standard_Integer UpperRow,
+                              const Standard_Integer LowerCol,
+                              const Standard_Integer UpperCol) :
+  Addr(Tab),
+  isAddrAllocated(UpperRow - LowerRow + 1 > CARRAY_LENGTH(AddrBuf)),
+  isAllocated(Standard_False),
+  LowR(LowerRow),
+  UppR(UpperRow),
+  LowC(LowerCol),
+  UppC(UpperCol)
+{
+  Allocate();
+}
+
+void math_DoubleTab::Init(const Standard_Real InitValue) 
+{
+  for (Standard_Integer i = LowR; i <= UppR; i++) {
+    for (Standard_Integer j = LowC; j <= UppC; j++) {
+      ((Standard_Real**) Addr)[i][j] = InitValue;
+    }
+  }
+}
+
+math_DoubleTab::math_DoubleTab(const math_DoubleTab& Other) :
+  Addr(Buf),
+  isAddrAllocated(Other.UppR - Other.LowR + 1 > CARRAY_LENGTH(AddrBuf)),
+  isAllocated((Other.UppR - Other.LowR + 1) * 
+              (Other.UppC - Other.LowC + 1) > CARRAY_LENGTH(Buf)),
+  LowR(Other.LowR),
+  UppR(Other.UppR),
+  LowC(Other.LowC),
+  UppC(Other.UppC)
+{
+  Allocate();
+
+  Standard_Address target = (Standard_Address) &Value(LowR,LowC);
+  Standard_Address source = (Standard_Address) &Other.Value(LowR,LowC);
+
+  memmove(target,source,
+         (int)((UppR - LowR + 1) * (UppC - LowC + 1) * sizeof(Standard_Real)));
+
+}
+
+void math_DoubleTab::Free()
+{
+  // free the data
+  if(isAllocated) {
+    Standard_Address it = (Standard_Address)&Value(LowR,LowC);
+    Standard::Free(it);
+  }
+  // free the pointers
+  if(isAddrAllocated) {
+    Standard_Address it = (Standard_Address)(((Standard_Real**)Addr) + LowR);
+    Standard::Free (it);
+  }
+  Addr = 0;
+}
+
+void math_DoubleTab::SetLowerRow(const Standard_Integer LowerRow)
+{
+  Standard_Real** TheAddr = (Standard_Real**)Addr;
+  Addr = (Standard_Address) (TheAddr + LowR - LowerRow);
+  UppR = UppR - LowR + LowerRow;
+  LowR = LowerRow;
+}
+
+void math_DoubleTab::SetLowerCol(const Standard_Integer LowerCol)
+{
+  Standard_Real** TheAddr = (Standard_Real**) Addr;
+  for (Standard_Integer Index = LowR; Index <= UppR; Index++) {
+    TheAddr[Index] = TheAddr[Index] + LowC - LowerCol;
+  }
+
+  UppC = UppC - LowC + LowerCol;
+  LowC = LowerCol;
+}
+
index 89782feea4716d80fd54df7df1e215026bf4ce43..1a467bc56831516cfb5eb57016725e5a059f00ab 100644 (file)
 #include <math_Memory.hxx>
 #include <Standard_OutOfRange.hxx>
 
-inline Item& math_DoubleTab::Value (const Standard_Integer RowIndex,
+inline Standard_Real& math_DoubleTab::Value (const Standard_Integer RowIndex,
                                    const Standard_Integer ColIndex) const
 {
-  return ((Item**)Addr)[RowIndex][ColIndex];
+  return ((Standard_Real**)Addr)[RowIndex][ColIndex];
 }
 
 
@@ -29,7 +29,7 @@ inline void math_DoubleTab::Copy(math_DoubleTab& Other)const
 {
   memmove((void*)(& Other.Value(Other.LowR,Other.LowC)),
          (void*) (& Value(LowR,LowC)),
-         (int)((UppR - LowR + 1) * (UppC - LowC + 1) * sizeof(Item)));
+         (int)((UppR - LowR + 1) * (UppC - LowC + 1) * sizeof(Standard_Real)));
 }
 
 
diff --git a/src/math/math_GlobOptMin.cxx b/src/math/math_GlobOptMin.cxx
new file mode 100644 (file)
index 0000000..9c7e799
--- /dev/null
@@ -0,0 +1,543 @@
+// Created on: 2014-01-20
+// Created by: Alexaner Malyshev
+// Copyright (c) 2014-2014 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement
+
+#include <math_GlobOptMin.hxx>
+
+#include <math_BFGS.hxx>
+#include <math_Matrix.hxx>
+#include <math_MultipleVarFunctionWithGradient.hxx>
+#include <math_MultipleVarFunctionWithHessian.hxx>
+#include <math_NewtonMinimum.hxx>
+#include <math_Powell.hxx>
+#include <Standard_Integer.hxx>
+#include <Standard_Real.hxx>
+#include <Precision.hxx>
+
+
+//=======================================================================
+//function : math_GlobOptMin
+//purpose  : Constructor
+//=======================================================================
+math_GlobOptMin::math_GlobOptMin(math_MultipleVarFunction* theFunc,
+                                 const math_Vector& theA,
+                                 const math_Vector& theB,
+                                 const Standard_Real theC,
+                                 const Standard_Real theDiscretizationTol,
+                                 const Standard_Real theSameTol)
+: myN(theFunc->NbVariables()),
+  myA(1, myN),
+  myB(1, myN),
+  myGlobA(1, myN),
+  myGlobB(1, myN),
+  myX(1, myN),
+  myTmp(1, myN),
+  myV(1, myN),
+  myMaxV(1, myN),
+  myExpandCoeff(1, myN)
+{
+  Standard_Integer i;
+
+  myFunc = theFunc;
+  myC = theC;
+  myZ = -1;
+  mySolCount = 0;
+
+  for(i = 1; i <= myN; i++)
+  {
+    myGlobA(i) = theA(i);
+    myGlobB(i) = theB(i);
+
+    myA(i) = theA(i);
+    myB(i) = theB(i);
+  }
+
+  for(i = 1; i <= myN; i++)
+  {
+    myMaxV(i) = (myB(i) - myA(i)) / 3.0;
+  }
+
+  myExpandCoeff(1) = 1.0;
+  for(i = 2; i <= myN; i++)
+  {
+    myExpandCoeff(i) = (myB(i) - myA(i)) / (myB(i - 1) - myA(i - 1));
+  }
+
+  myTol = theDiscretizationTol;
+  mySameTol = theSameTol;
+
+  myDone = Standard_False;
+}
+
+//=======================================================================
+//function : SetGlobalParams
+//purpose  : Set params without memory allocation.
+//=======================================================================
+void math_GlobOptMin::SetGlobalParams(math_MultipleVarFunction* theFunc,
+                                      const math_Vector& theA,
+                                      const math_Vector& theB,
+                                      const Standard_Real theC,
+                                      const Standard_Real theDiscretizationTol,
+                                      const Standard_Real theSameTol)
+{
+  Standard_Integer i;
+
+  myFunc = theFunc;
+  myC = theC;
+  myZ = -1;
+  mySolCount = 0;
+
+  for(i = 1; i <= myN; i++)
+  {
+    myGlobA(i) = theA(i);
+    myGlobB(i) = theB(i);
+
+    myA(i) = theA(i);
+    myB(i) = theB(i);
+  }
+
+  for(i = 1; i <= myN; i++)
+  {
+    myMaxV(i) = (myB(i) - myA(i)) / 3.0;
+  }
+
+  myExpandCoeff(1) = 1.0;
+  for(i = 2; i <= myN; i++)
+  {
+    myExpandCoeff(i) = (myB(i) - myA(i)) / (myB(i - 1) - myA(i - 1));
+  }
+
+  myTol = theDiscretizationTol;
+  mySameTol = theSameTol;
+
+  myDone = Standard_False;
+}
+
+//=======================================================================
+//function : SetLocalParams
+//purpose  : Set params without memory allocation.
+//=======================================================================
+void math_GlobOptMin::SetLocalParams(const math_Vector& theLocalA,
+                                     const math_Vector& theLocalB)
+{
+  Standard_Integer i;
+
+  myZ = -1;
+  mySolCount = 0;
+
+  for(i = 1; i <= myN; i++)
+  {
+    myA(i) = theLocalA(i);
+    myB(i) = theLocalB(i);
+  }
+
+  for(i = 1; i <= myN; i++)
+  {
+    myMaxV(i) = (myB(i) - myA(i)) / 3.0;
+  }
+
+  myExpandCoeff(1) = 1.0;
+  for(i = 2; i <= myN; i++)
+  {
+    myExpandCoeff(i) = (myB(i) - myA(i)) / (myB(i - 1) - myA(i - 1));
+  }
+
+  myDone = Standard_False;
+}
+
+//=======================================================================
+//function : SetTol
+//purpose  : Set algorithm tolerances.
+//=======================================================================
+void math_GlobOptMin::SetTol(const Standard_Real theDiscretizationTol,
+                             const Standard_Real theSameTol)
+{
+  myTol = theDiscretizationTol;
+  mySameTol = theSameTol;
+}
+
+//=======================================================================
+//function : GetTol
+//purpose  : Get algorithm tolerances.
+//=======================================================================
+void math_GlobOptMin::GetTol(Standard_Real& theDiscretizationTol,
+                             Standard_Real& theSameTol)
+{
+  theDiscretizationTol = myTol;
+  theSameTol = mySameTol;
+}
+
+//=======================================================================
+//function : ~math_GlobOptMin
+//purpose  : 
+//=======================================================================
+math_GlobOptMin::~math_GlobOptMin()
+{
+}
+
+//=======================================================================
+//function : Perform
+//purpose  : Compute Global extremum point
+//=======================================================================
+// In this algo indexes started from 1, not from 0.
+void math_GlobOptMin::Perform()
+{
+  Standard_Integer i;
+
+  // Compute parameters range
+  Standard_Real minLength = RealLast();
+  Standard_Real maxLength = RealFirst();
+  for(i = 1; i <= myN; i++)
+  {
+    Standard_Real currentLength = myB(i) - myA(i);
+    if (currentLength < minLength)
+      minLength = currentLength;
+    if (currentLength > maxLength)
+      maxLength = currentLength;
+  }
+
+  if (minLength < Precision::PConfusion())
+  {
+    #ifdef OCCT_DEBUG
+    cout << "math_GlobOptMin::Perform(): Degenerated parameters space" << endl;
+    #endif
+
+    return;
+  }
+
+  // Compute initial values for myF, myY, myC.
+  computeInitialValues();
+
+  myE1 = minLength * myTol;
+  myE2 = maxLength * myTol;
+    if (myC > 1.0)
+      myE3 = - maxLength * myTol / 4.0;
+    else
+      myE3 = - maxLength * myTol * myC / 4.0;
+
+  computeGlobalExtremum(myN);
+
+  myDone = Standard_True;
+}
+
+//=======================================================================
+//function : computeLocalExtremum
+//purpose  :
+//=======================================================================
+Standard_Boolean math_GlobOptMin::computeLocalExtremum(const math_Vector& thePnt,
+                                                       Standard_Real& theVal,
+                                                       math_Vector& theOutPnt)
+{
+  Standard_Integer i;
+
+  //Newton method
+  if (dynamic_cast<math_MultipleVarFunctionWithHessian*>(myFunc))
+  {
+    math_MultipleVarFunctionWithHessian* myTmp = 
+      dynamic_cast<math_MultipleVarFunctionWithHessian*> (myFunc);
+    
+    math_NewtonMinimum newtonMinimum(*myTmp);
+    newtonMinimum.Perform(*myTmp, thePnt);
+
+    if (newtonMinimum.IsDone())
+    {
+      newtonMinimum.Location(theOutPnt);
+      theVal = newtonMinimum.Minimum();
+    }
+    else return Standard_False;
+  } else
+
+  // BFGS method used.
+  if (dynamic_cast<math_MultipleVarFunctionWithGradient*>(myFunc))
+  {
+    math_MultipleVarFunctionWithGradient* myTmp = 
+      dynamic_cast<math_MultipleVarFunctionWithGradient*> (myFunc);
+    math_BFGS bfgs(*myTmp);
+    bfgs.Perform(*myTmp, thePnt);
+    if (bfgs.IsDone())
+    {
+      bfgs.Location(theOutPnt);
+      theVal = bfgs.Minimum();
+    }
+    else return Standard_False;
+  } else
+
+  // Powell method used.
+  if (dynamic_cast<math_MultipleVarFunction*>(myFunc))
+  {
+    math_Matrix m(1, myN, 1, myN, 0.0);
+    for(i = 1; i <= myN; i++)
+      m(1, 1) = 1.0;
+
+    math_Powell powell(*myFunc, 1e-10);
+    powell.Perform(*myFunc, thePnt, m);
+
+    if (powell.IsDone())
+    {
+      powell.Location(theOutPnt);
+      theVal = powell.Minimum();
+    }
+    else return Standard_False;
+  }
+
+  if (isInside(theOutPnt))
+    return Standard_True;
+  else
+    return Standard_False;
+}
+
+//=======================================================================
+//function : computeInitialValues
+//purpose  : 
+//=======================================================================
+void math_GlobOptMin::computeInitialValues()
+{
+  Standard_Integer i;
+  math_Vector aCurrPnt(1, myN);
+  math_Vector aBestPnt(1, myN);
+  math_Vector aParamStep(1, myN);
+  Standard_Real aCurrVal = RealLast();
+  Standard_Real aBestVal = RealLast();
+
+  // Check functional value in midpoint, low and upp point border and
+  // in each point try to perform local optimization.
+  aBestPnt = (myA + myB) * 0.5;
+  myFunc->Value(aBestPnt, aBestVal);
+
+  for(i = 1; i <= 3; i++)
+  {
+    aCurrPnt = myA + (myB - myA) * (i - 1) / 2.0;
+
+    if(computeLocalExtremum(aCurrPnt, aCurrVal, aCurrPnt))
+    {
+      // Local Extremum finds better solution than current point.
+      if (aCurrVal < aBestVal)
+      {
+        aBestVal = aCurrVal;
+        aBestPnt = aCurrPnt;
+      }
+    }
+  }
+
+  myF = aBestVal;
+  myY.Clear();
+  for(i = 1; i <= myN; i++)
+    myY.Append(aBestPnt(i));
+  mySolCount++;
+
+  // Lipschitz const approximation
+  Standard_Real aLipConst = 0.0, aPrevValDiag, aPrevValProj;
+  Standard_Integer aPntNb = 13;
+  myFunc->Value(myA, aPrevValDiag);
+  aPrevValProj = aPrevValDiag;
+  Standard_Real aStep = (myB - myA).Norm() / aPntNb;
+  aParamStep = (myB - myA) / aPntNb;
+  for(i = 1; i <= aPntNb; i++)
+  {
+    aCurrPnt = myA + aParamStep * i;
+
+    // Walk over diagonal.
+    myFunc->Value(aCurrPnt, aCurrVal);
+    aLipConst = Max (Abs(aCurrVal - aPrevValDiag), aLipConst);
+    aPrevValDiag = aCurrVal;
+
+    // Walk over diag in projected space aPnt(1) = myA(1) = const.
+    aCurrPnt(1) = myA(1);
+    myFunc->Value(aCurrPnt, aCurrVal);
+    aLipConst = Max (Abs(aCurrVal - aPrevValProj), aLipConst);
+    aPrevValProj = aCurrVal;
+  }
+
+  aLipConst *= Sqrt(myN) / aStep;
+
+  if (aLipConst < myC * 0.1)
+  {
+    myC = Max(aLipConst * 0.1, 0.01);
+  }
+  else if (aLipConst > myC * 10)
+  {
+    myC = Min(myC * 2, 30.0);
+  }
+}
+
+//=======================================================================
+//function : ComputeGlobalExtremum
+//purpose  :
+//=======================================================================
+void math_GlobOptMin::computeGlobalExtremum(Standard_Integer j)
+{
+  Standard_Integer i;
+  Standard_Real d; // Functional in moved point.
+  Standard_Real val = RealLast(); // Local extrema computed in moved point.
+  Standard_Real aStepBestValue = RealLast();
+  Standard_Real aRealStep = 0.0;
+  math_Vector aStepBestPoint(1, myN);
+  Standard_Boolean isInside = Standard_False;
+  Standard_Boolean isReached = Standard_False;
+  Standard_Real r;
+
+  for(myX(j) = myA(j) + myE1; 
+     (myX(j) < myB(j) + myE1) && (!isReached);
+      myX(j) += myV(j))
+  {
+    if (myX(j) > myB(j))
+    {
+      myX(j) = myB(j);
+      isReached = Standard_True;
+    }
+
+    if (j == 1)
+    {
+      isInside = Standard_False;
+      myFunc->Value(myX, d);
+      r = (d + myZ * myC * aRealStep - myF) * myZ;
+      if(r > myE3)
+      {
+        isInside = computeLocalExtremum(myX, val, myTmp);
+      }
+      aStepBestValue = (isInside && (val < d))? val : d;
+      aStepBestPoint = (isInside && (val < d))? myTmp : myX;
+
+      // Solutions are close to each other.
+      if (Abs(aStepBestValue - myF) < mySameTol * 0.01)
+      {
+        if (!isStored(aStepBestPoint))
+        {
+          if ((aStepBestValue - myF) * myZ > 0.0)
+            myF = aStepBestValue;
+          for(i = 1; i <= myN; i++)
+            myY.Append(aStepBestPoint(i));
+          mySolCount++;
+        }
+      }
+
+      // New best solution.
+      if ((aStepBestValue - myF) * myZ > mySameTol * 0.01)
+      {
+        mySolCount = 0;
+        myF = aStepBestValue;
+        myY.Clear();
+        for(i = 1; i <= myN; i++)
+          myY.Append(aStepBestPoint(i));
+        mySolCount++;
+      }
+
+      aRealStep = myE2 + Abs(myF - d) / myC;
+      myV(1) = Min(aRealStep, myMaxV(1));
+    }
+    else
+    {
+      myV(j) = RealLast() / 2.0;
+      computeGlobalExtremum(j - 1);
+
+      // Nullify steps on lower dimensions.
+      for(i = 1; i < j; i++)
+        myV(i) = 0.0;
+    }
+    // Compute step in (j + 1) dimension according to scale.
+    if (j < myN)
+    {
+      Standard_Real aUpperDimStep =  myV(j) * myExpandCoeff(j + 1);
+      if (myV(j + 1) > aUpperDimStep)
+      {
+        if (aUpperDimStep > myMaxV(j + 1)) // Case of too big step.
+          myV(j + 1) = myMaxV(j + 1); 
+        else
+          myV(j + 1) = aUpperDimStep;
+      }
+    }
+  }
+}
+
+//=======================================================================
+//function : IsInside
+//purpose  :
+//=======================================================================
+Standard_Boolean math_GlobOptMin::isInside(const math_Vector& thePnt)
+{
+  Standard_Integer i;
+
+ for(i = 1; i <= myN; i++)
+ {
+   if (thePnt(i) < myGlobA(i) || thePnt(i) > myGlobB(i))
+     return Standard_False;
+ }
+
+ return Standard_True;
+}
+//=======================================================================
+//function : IsStored
+//purpose  :
+//=======================================================================
+Standard_Boolean math_GlobOptMin::isStored(const math_Vector& thePnt)
+{
+  Standard_Integer i,j;
+  Standard_Boolean isSame = Standard_True;
+
+    for(i = 0; i < mySolCount; i++)
+    {
+      isSame = Standard_True;
+      for(j = 1; j <= myN; j++)
+      {
+      if ((Abs(thePnt(j) - myY(i * myN + j))) > (myB(j) -  myA(j)) * mySameTol)
+        {
+          isSame = Standard_False;
+          break;
+        }
+      }
+      if (isSame == Standard_True)
+        return Standard_True;
+
+      }
+  return Standard_False;
+}
+
+//=======================================================================
+//function : NbExtrema
+//purpose  :
+//=======================================================================
+Standard_Integer math_GlobOptMin::NbExtrema()
+{
+  return mySolCount;
+}
+
+//=======================================================================
+//function : GetF
+//purpose  :
+//=======================================================================
+Standard_Real math_GlobOptMin::GetF()
+{
+  return myF;
+}
+
+//=======================================================================
+//function : IsDone
+//purpose  :
+//=======================================================================
+Standard_Boolean math_GlobOptMin::isDone()
+{
+  return myDone;
+}
+
+//=======================================================================
+//function : Points
+//purpose  :
+//=======================================================================
+void math_GlobOptMin::Points(const Standard_Integer theIndex, math_Vector& theSol)
+{
+  Standard_Integer j;
+
+  for(j = 1; j <= myN; j++)
+    theSol(j) = myY((theIndex - 1) * myN + j);
+}
diff --git a/src/math/math_GlobOptMin.hxx b/src/math/math_GlobOptMin.hxx
new file mode 100644 (file)
index 0000000..6dbc0c4
--- /dev/null
@@ -0,0 +1,123 @@
+// Created on: 2014-01-20
+// Created by: Alexaner Malyshev
+// Copyright (c) 2014-2014 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef _math_GlobOptMin_HeaderFile
+#define _math_GlobOptMin_HeaderFile
+
+#include <math_MultipleVarFunction.hxx>
+#include <NCollection_Sequence.hxx>
+#include <Standard_Type.hxx>
+
+//! This class represents Evtushenko's algorithm of global optimization based on nonuniform mesh.<br>
+//! Article: Yu. Evtushenko. Numerical methods for finding global extreme (case of a non-uniform mesh). <br>
+//! U.S.S.R. Comput. Maths. Math. Phys., Vol. 11, N 6, pp. 38-54.
+
+class math_GlobOptMin
+{
+public:
+
+  Standard_EXPORT math_GlobOptMin(math_MultipleVarFunction* theFunc,
+                                 const math_Vector& theA,
+                                 const math_Vector& theB,
+                                 const Standard_Real theC = 9,
+                                 const Standard_Real theDiscretizationTol = 1.0e-2,
+                                 const Standard_Real theSameTol = 1.0e-7);
+
+  Standard_EXPORT void SetGlobalParams(math_MultipleVarFunction* theFunc,
+                                       const math_Vector& theA,
+                                       const math_Vector& theB,
+                                       const Standard_Real theC = 9,
+                                       const Standard_Real theDiscretizationTol = 1.0e-2,
+                                       const Standard_Real theSameTol = 1.0e-7);
+
+  Standard_EXPORT void SetLocalParams(const math_Vector& theLocalA,
+                                      const math_Vector& theLocalB);
+
+  Standard_EXPORT void SetTol(const Standard_Real theDiscretizationTol,
+                              const Standard_Real theSameTol);
+
+  Standard_EXPORT void GetTol(Standard_Real& theDiscretizationTol,
+                              Standard_Real& theSameTol);
+
+  Standard_EXPORT ~math_GlobOptMin();
+
+  Standard_EXPORT void Perform();
+
+  //! Get best functional value.
+  Standard_EXPORT Standard_Real GetF();
+
+  //! Return count of global extremas.
+  Standard_EXPORT Standard_Integer NbExtrema();
+
+  //! Return solution i, 1 <= i <= NbExtrema.
+  Standard_EXPORT void Points(const Standard_Integer theIndex, math_Vector& theSol);
+
+  Standard_Boolean isDone();
+
+private:
+
+  math_GlobOptMin & operator = (const math_GlobOptMin & theOther);
+
+  Standard_Boolean computeLocalExtremum(const math_Vector& thePnt, Standard_Real& theVal, math_Vector& theOutPnt);
+
+  void computeGlobalExtremum(Standard_Integer theIndex);
+
+  //! Computes starting value / approximation:
+  // myF - initial best value.
+  // myY - initial best point.
+  // myC - approximation of Lipschitz constant.
+  // to imporve convergence speed.
+  void computeInitialValues();
+
+  //! Check that myA <= pnt <= myB
+  Standard_Boolean isInside(const math_Vector& thePnt);
+
+  Standard_Boolean isStored(const math_Vector &thePnt);
+
+  // Input.
+  math_MultipleVarFunction* myFunc;
+  Standard_Integer myN;
+  math_Vector myA; // Left border on current C2 interval.
+  math_Vector myB; // Right border on current C2 interval.
+  math_Vector myGlobA; // Global left border.
+  math_Vector myGlobB; // Global right border.
+  Standard_Real myTol; // Discretization tolerance, default 1.0e-2.
+  Standard_Real mySameTol; // points with ||p1 - p2|| < mySameTol is equal,
+                           // function values |val1 - val2| * 0.01 < mySameTol is equal,
+                           // default value is 1.0e-7.
+  Standard_Real myC; //Lipschitz constant, default 9
+
+  // Output.
+  Standard_Boolean myDone;
+  NCollection_Sequence<Standard_Real> myY;// Current solutions.
+  Standard_Integer mySolCount; // Count of solutions.
+
+  // Algorithm data.
+  Standard_Real myZ;
+  Standard_Real myE1; // Border coeff.
+  Standard_Real myE2; // Minimum step size.
+  Standard_Real myE3; // Local extrema starting parameter.
+
+  math_Vector myX; // Current modified solution.
+  math_Vector myTmp; // Current modified solution.
+  math_Vector myV; // Steps array.
+  math_Vector myMaxV; // Max Steps array.
+  math_Vector myExpandCoeff; // Define expand coefficient between neighboring indiced dimensions.
+  Standard_Real myF; // Current value of Global optimum.
+};
+
+const Handle(Standard_Type)& TYPE(math_GlobOptMin);
+
+#endif
index 7ef36981ae9dd4b8b15657f01df24493599ed3f7..ae3b192965934b7910337120961708d504ed4a0d 100644 (file)
 // Alternatively, this file may be used under the terms of Open CASCADE
 // commercial license or contractual agreement.
 
-//#ifndef DEB
 #define No_Standard_RangeError
 #define No_Standard_OutOfRange
 #define No_Standard_DimensionError
-//#endif
 
-#include <math_IntegerVector.ixx>
+#include <math_IntegerVector.hxx>
 
 #include <Standard_DimensionError.hxx>
 #include <Standard_RangeError.hxx>
 
-
-
-math_IntegerVector::math_IntegerVector(const Standard_Integer First,
-                                      const Standard_Integer Last): 
-                                      FirstIndex(First),
-                                      LastIndex(Last),
-                                       Array(First, Last) {
-
-  Standard_RangeError_Raise_if(First > Last, " ");
+math_IntegerVector::math_IntegerVector(const Standard_Integer theFirst, const Standard_Integer theLast) :
+  FirstIndex(theFirst),
+  LastIndex(theLast),
+  Array(theFirst, theLast)
+{
+  Standard_RangeError_Raise_if(theFirst > theLast, " ");
 }
 
-math_IntegerVector::math_IntegerVector(const Standard_Integer First,
-                                      const Standard_Integer Last,
-                                      const Standard_Integer InitialValue): 
-                                      FirstIndex(First),
-                                      LastIndex(Last),
-                                       Array(First, Last) {
-
-  Standard_RangeError_Raise_if(First > Last, " ");
-  Array.Init(InitialValue);
+math_IntegerVector::math_IntegerVector(const Standard_Integer theFirst,
+                                       const Standard_Integer theLast,
+                                       const Standard_Integer theInitialValue) :
+  FirstIndex(theFirst),
+  LastIndex(theLast),
+  Array(theFirst, theLast)
+{
+  Standard_RangeError_Raise_if(theFirst > theLast, " ");
+  Array.Init(theInitialValue);
 }
 
-
-math_IntegerVector::math_IntegerVector(const Standard_Address Tab,
-                                      const Standard_Integer First,
-                                      const Standard_Integer Last) :
-                                      FirstIndex(First),
-                                      LastIndex(Last),
-                                       Array(*((const Standard_Integer *)Tab), 
-                                            First, Last)
+math_IntegerVector::math_IntegerVector(const Standard_Address theTab,
+                                       const Standard_Integer theFirst,
+                                       const Standard_Integer theLast) :
+  FirstIndex(theFirst),
+  LastIndex(theLast),
+  Array(theTab, theFirst, theLast)
 {
-  Standard_RangeError_Raise_if(First > Last, " ");
+  Standard_RangeError_Raise_if(theFirst > theLast, " ");
 }
 
-
-void math_IntegerVector::Init(const Standard_Integer InitialValue)
+void math_IntegerVector::Init(const Standard_Integer theInitialValue)
 {
-  Array.Init(InitialValue);
+  Array.Init(theInitialValue);
 }
 
-
-math_IntegerVector::math_IntegerVector(const math_IntegerVector& Other):
-                                       FirstIndex(Other.FirstIndex),
-                                       LastIndex(Other.LastIndex),
-                                       Array(Other.Array) {}
-
-
-
-void math_IntegerVector::SetFirst(const Standard_Integer First) {
-  
-  Array.SetLower(First);
-  LastIndex = LastIndex - FirstIndex + First;
-  FirstIndex = First;
+math_IntegerVector::math_IntegerVector(const math_IntegerVector& theOther) :
+  FirstIndex(theOther.FirstIndex),
+  LastIndex(theOther.LastIndex),
+  Array(theOther.Array)
+{
 }
 
+void math_IntegerVector::SetFirst(const Standard_Integer theFirst)
+{
+  Array.SetLower(theFirst);
+  LastIndex = LastIndex - FirstIndex + theFirst;
+  FirstIndex = theFirst;
+}
 
-Standard_Real math_IntegerVector::Norm() const {
+Standard_Real math_IntegerVector::Norm() const
+{
   Standard_Real Result = 0;
-  for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++) {
+  for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++)
+  {
     Result = Result + Array(Index) * Array(Index);
   }
   return Sqrt(Result);
 }
 
-     
-Standard_Real math_IntegerVector::Norm2() const {
+Standard_Real math_IntegerVector::Norm2() const
+{
   Standard_Real Result = 0;
-  for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++) {
+  for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++)
+  {
     Result = Result + Array(Index) * Array(Index);
   }
   return Result;
 }
 
-
-Standard_Integer math_IntegerVector::Max() const {
+Standard_Integer math_IntegerVector::Max() const
+{
   Standard_Integer I=0;
   Standard_Real X = RealFirst();
-  for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++) {
-    if(Array(Index) > X) {
+  for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++)
+  {
+    if(Array(Index) > X)
+    {
       X = Array(Index);
       I = Index;
     }
@@ -110,12 +104,14 @@ Standard_Integer math_IntegerVector::Max() const {
   return I;
 }
 
-
-Standard_Integer math_IntegerVector::Min() const {
+Standard_Integer math_IntegerVector::Min() const
+{
   Standard_Integer I=0;
   Standard_Real X = RealLast();
-  for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++) {
-    if(Array(Index) < X) {
+  for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++)
+  {
+    if(Array(Index) < X)
+    {
       X = Array(Index);
       I = Index;
     }
@@ -123,241 +119,231 @@ Standard_Integer math_IntegerVector::Min() const {
   return I;
 }
 
-
-void math_IntegerVector::Invert() {
-  
+void math_IntegerVector::Invert()
+{
   Standard_Integer J;
   Standard_Integer Temp;
-  
-  for(Standard_Integer Index = FirstIndex; 
-      Index <= FirstIndex + Length() / 2 ; Index++) {
-    J = LastIndex + FirstIndex - Index;
-    Temp = Array(Index);
-    Array(Index) = Array(J);
-    Array(J) = Temp;
+
+  for(Standard_Integer Index = FirstIndex; Index <= FirstIndex + Length() / 2 ; Index++)
+  {
+      J = LastIndex + FirstIndex - Index;
+      Temp = Array(Index);
+      Array(Index) = Array(J);
+      Array(J) = Temp;
   }
 }
 
-
-math_IntegerVector math_IntegerVector::Inverse() const {
-  
+math_IntegerVector math_IntegerVector::Inverse() const
+{
   math_IntegerVector Result = *this;
   Result.Invert();
   return Result;
 }
 
+void math_IntegerVector::Set(const Standard_Integer theI1,
+                             const Standard_Integer theI2,
+                             const math_IntegerVector &theV)
+{
+  Standard_DimensionError_Raise_if((theI1 < FirstIndex) || (theI2 > LastIndex) ||
+    (theI1 > theI2) || (theI2 - theI1 + 1 != theV.Length()), " ");
 
-void math_IntegerVector::Set(const Standard_Integer I1, 
-                            const Standard_Integer I2, 
-                            const math_IntegerVector &V) {
-  
-  Standard_DimensionError_Raise_if((I1 < FirstIndex) || 
-                                  (I2 > LastIndex) || 
-                                  (I1 > I2)         ||
-                                  (I2 - I1 + 1 != V.Length()), " ");
-  
-  Standard_Integer I = V.Lower();
-  for(Standard_Integer Index = I1; Index <= I2; Index++) {
-    Array(Index) = V.Array(I);
+  Standard_Integer I = theV.Lower();
+  for(Standard_Integer Index = theI1; Index <= theI2; Index++)
+  {
+    Array(Index) = theV.Array(I);
     I++;
   }
 }
 
-
-void math_IntegerVector::Multiply(const Standard_Integer Right) {
-  
-  for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++) {
-    Array(Index) = Array(Index) * Right;
+void math_IntegerVector::Multiply(const Standard_Integer theRight)
+{
+  for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++)
+  {
+    Array(Index) = Array(Index) * theRight;
   }
 }
 
+void math_IntegerVector::Add(const math_IntegerVector& theRight)
+{
+  Standard_DimensionError_Raise_if(Length() != theRight.Length(), " ");
 
-void math_IntegerVector::Add(const math_IntegerVector& Right) {
-  
-  Standard_DimensionError_Raise_if(Length() != Right.Length(), " ");
-
-  Standard_Integer I = Right.FirstIndex;
-  for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++) {
-    Array(Index) = Array(Index) + Right.Array(I);
+  Standard_Integer I = theRight.FirstIndex;
+  for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++)
+  {
+    Array(Index) = Array(Index) + theRight.Array(I);
     I++;
   }
-}    
-
+}
 
-void math_IntegerVector::Subtract(const math_IntegerVector& Right) {
-  
-  Standard_DimensionError_Raise_if(Length() != Right.Length(), " ");
-  Standard_Integer I = Right.FirstIndex;
-  for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++) {
-    Array(Index) = Array(Index) - Right.Array(I);
+void math_IntegerVector::Subtract(const math_IntegerVector& theRight)
+{
+  Standard_DimensionError_Raise_if(Length() != theRight.Length(), " ");
+  Standard_Integer I = theRight.FirstIndex;
+  for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++)
+  {
+    Array(Index) = Array(Index) - theRight.Array(I);
     I++;
   }
-}    
-
-
-math_IntegerVector math_IntegerVector::Slice(const Standard_Integer I1, 
-                                            const Standard_Integer I2) const {
-                                              
-  Standard_DimensionError_Raise_if((I1 < FirstIndex) || (I1 > LastIndex) ||
-                                  (I2 < FirstIndex) || (I2 > LastIndex),
-                                  " ");
+}
 
-  if(I2 >= I1) {
-    math_IntegerVector Result(I1, I2);
-    for(Standard_Integer Index = I1; Index <= I2; Index++) {
+math_IntegerVector math_IntegerVector::Slice(const Standard_Integer theI1,
+                                             const Standard_Integer theI2) const
+{
+  Standard_DimensionError_Raise_if((theI1 < FirstIndex) || (theI1 > LastIndex) ||
+    (theI2 < FirstIndex) || (theI2 > LastIndex), " ");
+
+  if(theI2 >= theI1)
+  {
+    math_IntegerVector Result(theI1, theI2);
+    for(Standard_Integer Index = theI1; Index <= theI2; Index++)
+    {
       Result.Array(Index) = Array(Index);
-    }        
-    return Result;  
+    }
+    return Result;
   }
-  else {
-    math_IntegerVector Result(I2, I1);
-    for(Standard_Integer Index = I1; Index >= I2; Index--) {
+  else
+  {
+    math_IntegerVector Result(theI2, theI1);
+    for(Standard_Integer Index = theI1; Index >= theI2; Index--)
+    {
       Result.Array(Index) = Array(Index);
     }
     return Result;
-  }   
+  }
 }
 
-Standard_Integer math_IntegerVector::Multiplied (const math_IntegerVector& Right) const {
-  
+Standard_Integer math_IntegerVector::Multiplied (const math_IntegerVector& theRight) const
+{
   Standard_Integer Result = 0;
-  
-  Standard_DimensionError_Raise_if(Length() != Right.Length(), " ");
 
-  Standard_Integer I = Right.FirstIndex;
-  for(Standard_Integer Index = 0; Index < Length(); Index++) {
-    Result = Result + Array(Index) * Right.Array(I);
+  Standard_DimensionError_Raise_if(Length() != theRight.Length(), " ");
+
+  Standard_Integer I = theRight.FirstIndex;
+  for(Standard_Integer Index = 0; Index < Length(); Index++)
+  {
+    Result = Result + Array(Index) * theRight.Array(I);
     I++;
   }
   return Result;
-}    
-
+}
 
-math_IntegerVector math_IntegerVector::Multiplied (const Standard_Integer Right)const  {
-       
+math_IntegerVector math_IntegerVector::Multiplied (const Standard_Integer theRight)const
+{
   math_IntegerVector Result(FirstIndex, LastIndex);
-  
-  for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++) {
-    Result.Array(Index) = Array(Index) * Right;
+
+  for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++)
+  {
+    Result.Array(Index) = Array(Index) * theRight;
   }
   return Result;
-}    
-     
-math_IntegerVector math_IntegerVector::TMultiplied (const Standard_Integer Right)const  {
-       
+}
+
+math_IntegerVector math_IntegerVector::TMultiplied (const Standard_Integer theRight) const
+{
   math_IntegerVector Result(FirstIndex, LastIndex);
-  
-  for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++) {
-    Result.Array(Index) = Array(Index) * Right;
+
+  for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++)
+  {
+    Result.Array(Index) = Array(Index) * theRight;
   }
   return Result;
-}    
-     
+}
+
+math_IntegerVector math_IntegerVector::Added (const math_IntegerVector& theRight) const
+{
+  Standard_DimensionError_Raise_if(Length() != theRight.Length(), " ");
 
-math_IntegerVector math_IntegerVector::Added (const math_IntegerVector& Right) const {
-       
-  Standard_DimensionError_Raise_if(Length() != Right.Length(), " ");
-  
   math_IntegerVector Result(FirstIndex, LastIndex);
-  
-  Standard_Integer I = Right.FirstIndex;
-  for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++) {
-    Result.Array(Index) = Array(Index) + Right.Array(I);
+
+  Standard_Integer I = theRight.FirstIndex;
+  for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++)
+  {
+    Result.Array(Index) = Array(Index) + theRight.Array(I);
     I++;
   }
   return Result;
-}    
-
+}
 
-     
-math_IntegerVector math_IntegerVector::Opposite() {
-   
+math_IntegerVector math_IntegerVector::Opposite()
+{
   math_IntegerVector Result(FirstIndex, LastIndex);
-  
-  for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++) {
+
+  for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++)
+  {
     Result.Array(Index) = - Array(Index);
   }
   return Result;
-}    
-     
+}
+
+math_IntegerVector math_IntegerVector::Subtracted (const math_IntegerVector& theRight) const
+{
+  Standard_DimensionError_Raise_if(Length() != theRight.Length(), " ");
 
-math_IntegerVector math_IntegerVector::Subtracted (const math_IntegerVector& Right) const {
-  
-  Standard_DimensionError_Raise_if(Length() != Right.Length(), " ");
-  
   math_IntegerVector Result(FirstIndex, LastIndex);
-  
-  Standard_Integer I = Right.FirstIndex;
-  for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++) {
-    Result.Array(Index) = Array(Index) - Right.Array(I);
+
+  Standard_Integer I = theRight.FirstIndex;
+  for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++)
+  {
+    Result.Array(Index) = Array(Index) - theRight.Array(I);
     I++;
   }
   return Result;
-}    
-     
-void math_IntegerVector::Add (const math_IntegerVector& Left, 
-                             const math_IntegerVector& Right) {
-  
-  Standard_DimensionError_Raise_if((Length() != Right.Length()) ||
-                                  (Right.Length() != Left.Length()), " ");
-
-  Standard_Integer I = Left.FirstIndex;
-  Standard_Integer J = Right.FirstIndex;
-  for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++) {
-    Array(Index) = Left.Array(I) + Right.Array(J);
+}
+
+void math_IntegerVector::Add (const math_IntegerVector& theLeft, const math_IntegerVector& theRight)
+{
+  Standard_DimensionError_Raise_if((Length() != theRight.Length()) ||
+    (theRight.Length() != theLeft.Length()), " ");
+
+  Standard_Integer I = theLeft.FirstIndex;
+  Standard_Integer J = theRight.FirstIndex;
+  for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++)
+  {
+    Array(Index) = theLeft.Array(I) + theRight.Array(J);
     I++;
     J++;
   }
-}    
-
-
-void math_IntegerVector::Subtract (const math_IntegerVector& Left, 
-                                   const math_IntegerVector& Right) {
-  
-  Standard_DimensionError_Raise_if((Length() != Right.Length()) ||
-                                  (Right.Length() != Left.Length()), " ");
-  
-  Standard_Integer I = Left.FirstIndex;
-  Standard_Integer J = Right.FirstIndex;
-  for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++) {
-    Array(Index) = Left.Array(I) - Right.Array(J);
+}
+
+void math_IntegerVector::Subtract (const math_IntegerVector& theLeft,
+                                   const math_IntegerVector& theRight)
+{
+  Standard_DimensionError_Raise_if((Length() != theRight.Length()) ||
+    (theRight.Length() != theLeft.Length()), " ");
+
+  Standard_Integer I = theLeft.FirstIndex;
+  Standard_Integer J = theRight.FirstIndex;
+  for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++)
+  {
+    Array(Index) = theLeft.Array(I) - theRight.Array(J);
     I++;
     J++;
   }
-}    
-
+}
 
-void math_IntegerVector::Multiply(const Standard_Integer Left,
-                                 const math_IntegerVector& Right) 
+void math_IntegerVector::Multiply(const Standard_Integer theLeft, const math_IntegerVector& theRight)
 {
-  Standard_DimensionError_Raise_if((Length() != Right.Length()),
-                                  " ");
-  for(Standard_Integer I = FirstIndex; I <= LastIndex; I++) {
-    Array(I) = Left * Right.Array(I);
+  Standard_DimensionError_Raise_if((Length() != theRight.Length()), " ");
+  for(Standard_Integer I = FirstIndex; I <= LastIndex; I++)
+  {
+    Array(I) = theLeft * theRight.Array(I);
   }
 }
 
+math_IntegerVector& math_IntegerVector::Initialized(const math_IntegerVector& theOther)
+{
+  Standard_DimensionError_Raise_if(Length() != theOther.Length(), " ");
 
-math_IntegerVector& math_IntegerVector::Initialized (const math_IntegerVector& Other) {
-
-  Standard_DimensionError_Raise_if(Length() != Other.Length(), " ");
-
-  (Other.Array).Copy(Array);
+  (theOther.Array).Copy(Array);
   return *this;
 }
 
-
-
-void math_IntegerVector::Dump(Standard_OStream& o) const
+void math_IntegerVector::Dump(Standard_OStream& theO) const
 {
-   o << "math_IntegerVector of Range = " << Length() << "\n";
-   for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++) {
-     o << "math_IntegerVector(" << Index << ") = " << Array(Index) << "\n";
-   }
+  theO << "math_IntegerVector of Range = " << Length() << "\n";
+  for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++)
+  {
+    theO << "math_IntegerVector(" << Index << ") = " << Array(Index) << "\n";
+  }
 }
 
-
-
-
-
-
diff --git a/src/math/math_IntegerVector.hxx b/src/math/math_IntegerVector.hxx
new file mode 100644 (file)
index 0000000..2e9563c
--- /dev/null
@@ -0,0 +1,261 @@
+// Copyright (c) 1997-1999 Matra Datavision
+// Copyright (c) 1999-2014 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef _math_IntegerVector_HeaderFile
+#define _math_IntegerVector_HeaderFile
+
+#include <math_SingleTab.hxx>
+
+class Standard_DimensionError;
+class Standard_DivideByZero;
+class Standard_RangeError;
+class math_Matrix;
+
+//! This class implements the real IntegerVector abstract data type.
+//! IntegerVectors can have an arbitrary range which must be define at
+//! the declaration and cannot be changed after this declaration.
+//! Example:
+//! @code
+//!    math_IntegerVector V1(-3, 5); // an IntegerVector with range [-3..5]
+//! @endcode
+//!
+//! IntegerVector is copied through assignement :
+//! @code
+//!    math_IntegerVector V2( 1, 9);
+//!    ....
+//!    V2 = V1;
+//!    V1(1) = 2.0; // the IntegerVector V2 will not be modified.
+//! @endcode
+//!
+//! The Exception RangeError is raised when trying to access outside
+//! the range of an IntegerVector :
+//! @code
+//!    V1(11) = 0 // --> will raise RangeError;
+//! @endcode
+//!
+//! The Exception DimensionError is raised when the dimensions of two
+//! IntegerVectors are not compatible :
+//! @code
+//!    math_IntegerVector V3(1, 2);
+//!    V3 = V1;    // --> will raise DimensionError;
+//!    V1.Add(V3)  // --> will raise DimensionError;
+//! @endcode
+class math_IntegerVector
+{
+public:
+
+  DEFINE_STANDARD_ALLOC
+
+  //! contructs an IntegerVector in the range [Lower..Upper]
+  Standard_EXPORT math_IntegerVector(const Standard_Integer theFirst, const Standard_Integer theLast);
+
+  //! contructs an IntegerVector in the range [Lower..Upper]
+  //! with all the elements set to theInitialValue.
+  Standard_EXPORT math_IntegerVector(const Standard_Integer theFirst, const Standard_Integer theLast, const Standard_Integer theInitialValue);
+
+  //! Initialize an IntegerVector with all the elements
+  //! set to theInitialValue.
+  Standard_EXPORT void Init(const Standard_Integer theInitialValue);
+
+  //! constructs an IntegerVector in the range [Lower..Upper]
+  //! which share the "c array" theTab.
+  Standard_EXPORT math_IntegerVector(const Standard_Address theTab, const Standard_Integer theFirst, const Standard_Integer theLast);
+
+  //! constructs a copy for initialization.
+  //! An exception is raised if the lengths of the IntegerVectors
+  //! are different.
+  Standard_EXPORT math_IntegerVector(const math_IntegerVector& theOther);
+
+  //! returns the length of an IntegerVector
+  inline Standard_Integer Length() const
+  {
+    return LastIndex - FirstIndex +1;
+  }
+
+  //! returns the value of the Lower index of an IntegerVector.
+  inline Standard_Integer Lower() const
+  {
+    return FirstIndex;
+  }
+
+  //! returns the value of the Upper index of an IntegerVector.
+  inline Standard_Integer Upper() const
+  {
+    return LastIndex;
+  }
+
+  //! returns the value of the norm of an IntegerVector.
+  Standard_EXPORT Standard_Real Norm() const;
+
+  //! returns the value of the square of the norm of an IntegerVector.
+  Standard_EXPORT Standard_Real Norm2() const;
+
+  //! returns the value of the Index of the maximum element of an IntegerVector.
+  Standard_EXPORT Standard_Integer Max() const;
+
+  //! returns the value of the Index of the minimum element of an IntegerVector.
+  Standard_EXPORT Standard_Integer Min() const;
+
+  //! inverses an IntegerVector.
+  Standard_EXPORT void Invert();
+
+  //! returns the inverse IntegerVector of an IntegerVector.
+  Standard_EXPORT math_IntegerVector Inverse() const;
+
+  //! sets an IntegerVector from "theI1" to "theI2" to the IntegerVector "theV";
+  //! An exception is raised if "theI1" is less than "LowerIndex" or "theI2" is greater than "UpperIndex" or "theI1" is greater than "theI2".
+  //! An exception is raised if "theI2-theI1+1" is different from the Length of "theV".
+  Standard_EXPORT void Set(const Standard_Integer theI1, const Standard_Integer theI2, const math_IntegerVector& theV);
+
+  //! slices the values of the IntegerVector between "theI1" and "theI2":
+  //! Example: [2, 1, 2, 3, 4, 5] becomes [2, 4, 3, 2, 1, 5] between 2 and 5.
+  //! An exception is raised if "theI1" is less than "LowerIndex" or "theI2" is greater than "UpperIndex".
+  Standard_EXPORT math_IntegerVector Slice(const Standard_Integer theI1, const Standard_Integer theI2) const;
+
+  //! returns the product of an IntegerVector by an integer value.
+  Standard_EXPORT void Multiply(const Standard_Integer theRight);
+
+  void operator *=(const Standard_Integer theRight)
+  {
+    Multiply(theRight);
+  }
+
+  //! returns the product of an IntegerVector by an integer value.
+  Standard_EXPORT math_IntegerVector Multiplied(const Standard_Integer theRight) const;
+
+  math_IntegerVector operator*(const Standard_Integer theRight) const
+  {
+    return Multiplied(theRight);
+  }
+
+  //! returns the product of a vector and a real value.
+  Standard_EXPORT math_IntegerVector TMultiplied(const Standard_Integer theRight) const;
+
+  friend inline math_IntegerVector operator* (const Standard_Integer theLeft, const math_IntegerVector& theRight)
+  {
+    return theRight.Multiplied(theLeft);
+  }
+
+  //! adds the IntegerVector "theRight" to an IntegerVector.
+  //! An exception is raised if the IntegerVectors have not the same length.
+  //! An exception is raised if the lengths are not equal.
+  Standard_EXPORT void Add(const math_IntegerVector& theRight);
+
+  void operator +=(const math_IntegerVector& theRight)
+  {
+    Add(theRight);
+  }
+
+  //! adds the IntegerVector "theRight" to an IntegerVector.
+  //! An exception is raised if the IntegerVectors have not the same length.
+  //! An exception is raised if the lengths are not equal.
+  Standard_EXPORT math_IntegerVector Added(const math_IntegerVector& theRight) const;
+
+  math_IntegerVector operator+(const math_IntegerVector& theRight) const
+  {
+    return Added(theRight);
+  }
+
+  //! sets an IntegerVector to the sum of the IntegerVector
+  //! "theLeft" and the IntegerVector "theRight".
+  //! An exception is raised if the lengths are different.
+  Standard_EXPORT void Add(const math_IntegerVector& theLeft, const math_IntegerVector& theRight);
+
+  //! sets an IntegerVector to the substraction of "theRight" from "theLeft".
+  //! An exception is raised if the IntegerVectors have not the same length.
+  Standard_EXPORT void Subtract(const math_IntegerVector& theLeft, const math_IntegerVector& theRight);
+
+  //! accesses (in read or write mode) the value of index theNum of an IntegerVector.
+  inline Standard_Integer& Value(const Standard_Integer theNum) const
+  {
+    Standard_RangeError_Raise_if(theNum < FirstIndex || theNum > LastIndex, " ");
+    return Array(theNum);
+  }
+
+  Standard_EXPORT Standard_Integer& operator()(const Standard_Integer theNum) const
+  {
+    return Value(theNum);
+  }
+
+  //! Initialises an IntegerVector by copying "theOther".
+  //! An exception is raised if the Lengths are different.
+  Standard_EXPORT math_IntegerVector& Initialized(const math_IntegerVector& theOther);
+
+  math_IntegerVector& operator=(const math_IntegerVector& theOther) 
+  {
+    return Initialized(theOther);
+  }
+
+  //! returns the inner product of 2 IntegerVectors.
+  //! An exception is raised if the lengths are not equal.
+  Standard_EXPORT Standard_Integer Multiplied(const math_IntegerVector& theRight) const;
+
+  Standard_Integer operator*(const math_IntegerVector& theRight) const
+  {
+    return Multiplied(theRight);
+  }
+
+  //! returns the opposite of an IntegerVector.
+  Standard_EXPORT math_IntegerVector Opposite();
+
+  math_IntegerVector operator-()
+  {
+    return Opposite();
+  }
+
+  //! returns the subtraction of "theRight" from "me".
+  //! An exception is raised if the IntegerVectors have not the same length.
+  Standard_EXPORT void Subtract(const math_IntegerVector& theRight);
+
+  void operator-=(const math_IntegerVector& theRight)
+  {
+    Subtract(theRight);
+  }
+
+  //! returns the subtraction of "theRight" from "me".
+  //! An exception is raised if the IntegerVectors have not the same length.
+  Standard_EXPORT math_IntegerVector Subtracted(const math_IntegerVector& theRight) const;
+
+  math_IntegerVector operator-(const math_IntegerVector& theRight) const
+  {
+    return Subtracted(theRight);
+  }
+
+  //! returns the multiplication of an integer by an IntegerVector.
+  Standard_EXPORT void Multiply(const Standard_Integer theLeft,const math_IntegerVector& theRight);
+
+  //! Prints on the stream theO information on the current state of the object.
+  //! Is used to redefine the operator <<.
+  Standard_EXPORT void Dump(Standard_OStream& theO) const;
+
+  friend inline Standard_OStream& operator<<(Standard_OStream& theO, const math_IntegerVector& theVec)
+  {
+    theVec.Dump(theO);
+    return theO;
+  }
+
+protected:
+
+  //! is used internally to set the Lower value of the IntegerVector.
+  void SetFirst(const Standard_Integer theFirst);
+
+private:
+
+  Standard_Integer FirstIndex;
+  Standard_Integer LastIndex;
+  math_SingleTab<Standard_Integer> Array;
+};
+
+#endif
+
index e6ffd3e4c99ed60c9f9e4463456950ebba7c63a2..95949206e3b0cd614e1ca0ce003d28da007a3d48 100644 (file)
@@ -51,7 +51,7 @@ class Matrix from math
 
 
 uses Vector from math,
-     DoubleTabOfReal from math,
+     DoubleTab from math,
      OStream from Standard
 
 raises DimensionError from Standard, RangeError from Standard, 
@@ -562,7 +562,7 @@ LowerRowIndex:      Integer;
 UpperRowIndex:      Integer;
 LowerColIndex:      Integer;
 UpperColIndex:      Integer;
-Array:              DoubleTabOfReal;
+Array:              DoubleTab;
 
 friends
 class Vector from math
index 36228ec32b3b05b71b21cd8b8205d40dfeaf1fc5..7383359baa8d02814724b132e7d44987b5e9e41f 100644 (file)
@@ -85,9 +85,7 @@ math_Matrix::math_Matrix (const Standard_Address Tab,
                          UpperRowIndex(UpperRow),
                          LowerColIndex(LowerCol),
                          UpperColIndex(UpperCol),
-                         Array(*((const Standard_Real *)Tab), 
-                               LowerRow, UpperRow,
-                               LowerCol, UpperCol) 
+                         Array(Tab, LowerRow, UpperRow, LowerCol, UpperCol) 
 { 
   
   Standard_RangeError_Raise_if((LowerRow > UpperRow) ||
index d77983fdaf3d6a4d3898e92d37d747345570d655..cb0d481d38ca4a0b49fa729aafd24f229f7ea6dd 100644 (file)
@@ -20,6 +20,8 @@ deferred class MultipleVarFunction from math
 uses Vector from math
 
 is
+    Delete(me:out) is virtual;
+    ---C++: alias "Standard_EXPORT virtual ~math_MultipleVarFunction(){Delete();}"
 
     NbVariables(me)
        ---Purpose:
index fa5c8323132ec225ce75edbc5aa15561c30ae7b1..b1cb1877c3326df411042f23bdab7cc6d0be3cd1 100644 (file)
@@ -16,3 +16,6 @@
 #include <math_MultipleVarFunction.ixx>
 
 Standard_Integer math_MultipleVarFunction::GetStateNumber() { return 0; }
+
+void math_MultipleVarFunction::Delete()
+{}
index c2bbc398c19886fd9e5c65a1dbb21ee844249f1c..8804416238809d2357a20bcdfad6f676ce0e6020 100644 (file)
@@ -24,7 +24,7 @@ uses Vector from math
 
 is
 
-    Delete(me:out) is virtual;
+    Delete(me:out) is redefined virtual;
     ---C++: alias "Standard_EXPORT virtual ~math_MultipleVarFunctionWithGradient(){Delete();}"
     
     NbVariables(me)
index 4f387e5ed0124089e14bb7768e32641ab875e5ce..b20035f2ec84cee8338b4e8f63c08bd8f6deebaf 100644 (file)
@@ -24,6 +24,9 @@ uses Matrix from math,
 
 is
 
+    Delete(me:out) is redefined virtual;
+    ---C++: alias "Standard_EXPORT virtual ~math_MultipleVarFunctionWithHessian(){Delete();}"
+
     NbVariables(me)
        ---Purpose: returns the number of variables of the function.
 
index 972f474112710ecfdd0c1f2f46625170e2e26585..2c0044e33a48ed79db078e7e5a5132f111ca7389 100644 (file)
@@ -15,3 +15,6 @@
 // commercial license or contractual agreement.
 
 #include <math_MultipleVarFunctionWithHessian.ixx>
+
+void math_MultipleVarFunctionWithHessian::Delete()
+{}
index f3379452202173dab6643715dba7b77a84f06690..7788c6915fd080ca748f2cc9c5524c46184944a2 100644 (file)
@@ -143,12 +143,19 @@ void math_NewtonMinimum::Perform(math_MultipleVarFunctionWithHessian& F,
     }
    
     LU.Solve(TheGradient, TheStep);
-    *suivant = *precedent - TheStep;
-
-
-    //  Gestion de la convergence
-
-    F.Value(*suivant, TheMinimum);
+    Standard_Boolean hasProblem = Standard_False;
+    do
+    {
+      *suivant = *precedent - TheStep;
+
+      //  Gestion de la convergence
+      hasProblem = !(F.Value(*suivant, TheMinimum));
+
+      if (hasProblem)
+      {
+        TheStep /= 2.0;
+      }
+    } while (hasProblem);
 
     if (IsConverged()) { NbConv++; }
     else               { NbConv=0; }
diff --git a/src/math/math_SingleTab.hxx b/src/math/math_SingleTab.hxx
new file mode 100644 (file)
index 0000000..9b6ffd5
--- /dev/null
@@ -0,0 +1,115 @@
+// Copyright (c) 1997-1999 Matra Datavision
+// Copyright (c) 1999-2014 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef _math_SingleTab_HeaderFile
+#define _math_SingleTab_HeaderFile
+
+#include <math_Memory.hxx>
+#include <Standard_OutOfRange.hxx>
+#include <Standard_Failure.hxx>
+
+static const Standard_Integer aLengthOfBuf = 512;
+
+template<class T> class math_SingleTab
+{
+public:
+
+  DEFINE_STANDARD_ALLOC
+
+  math_SingleTab(const Standard_Integer LowerIndex, const Standard_Integer UpperIndex) :
+      Addr(Buf),
+      isAllocated(UpperIndex - LowerIndex + 1 > aLengthOfBuf),
+      First(LowerIndex), Last(UpperIndex)
+  {
+    T* TheAddr = !isAllocated? Buf :
+      (T*) Standard::Allocate((Last-First+1) * sizeof(T));
+    Addr = (Standard_Address) (TheAddr - First);
+  }
+
+  math_SingleTab(const Standard_Address Tab, const Standard_Integer LowerIndex, const Standard_Integer UpperIndex) :
+      Addr((void*)((const T*)Tab - LowerIndex)), 
+      isAllocated(Standard_False),
+      First(LowerIndex), Last(UpperIndex)
+  {
+  }
+
+  void Init(const T InitValue)
+  {
+    for(Standard_Integer i = First; i<= Last; i++)
+    {
+      ((T*)Addr)[i] = InitValue;
+    }
+  }
+
+  math_SingleTab(const math_SingleTab& Other) :
+      isAllocated(Other.Last - Other.First + 1 > aLengthOfBuf),
+      First(Other.First),
+      Last(Other.Last)
+  {
+    T* TheAddr = !isAllocated? Buf : (T*) Standard::Allocate((Last-First+1) * sizeof(T));
+    Addr = (Standard_Address) (TheAddr - First);
+    T* TheOtherAddr = (T*) Other.Addr;
+    memmove((void*) TheAddr, (const void*) (TheOtherAddr + First), (size_t)(Last - First + 1) * sizeof(T));
+  }
+
+  inline void Copy(math_SingleTab& Other) const
+  {
+    memmove((void*) (((T*)Other.Addr) + Other.First),
+      (const void*) (((T*)Addr) + First),
+      (size_t)(Last - First + 1) * sizeof(T));
+  }
+
+  void SetLower(const Standard_Integer LowerIndex)
+  {
+    T* TheAddr = (T*) Addr;
+    Addr = (Standard_Address) (TheAddr + First - LowerIndex);
+    Last = Last - First + LowerIndex;
+    First = LowerIndex;
+  }
+
+  inline T& Value(const Standard_Integer Index) const
+  {
+    return ((T*)Addr)[Index];
+  }
+
+  T& operator()(const Standard_Integer Index) const
+  {
+    return Value(Index);
+  }
+  
+  void Free()
+  {
+    if(isAllocated)
+    {
+      Standard_Address it = (Standard_Address)&((T*)Addr)[First];
+      Standard::Free(it);
+      Addr = 0;
+    }
+  }
+
+  ~math_SingleTab()
+  {
+    Free();
+  }
+
+private:
+  
+  Standard_Address Addr;
+  T Buf[aLengthOfBuf];
+  Standard_Boolean isAllocated;
+  Standard_Integer First;
+  Standard_Integer Last;
+};
+
+#endif
index acf11c8f69f0b3fe639034703243993065ec496e..799b8e57659fe3597f88487927fd3f6c51c6f0c7 100644 (file)
@@ -14,7 +14,7 @@
 
 #include <stdio.h>
 
-#include <math_Vector.ixx>
+#include <math_Vector.hxx>
 #include <math_Matrix.hxx>
 
 #include <Standard_DimensionError.hxx>
 #include <Standard_RangeError.hxx>
 #include <Standard_NullValue.hxx>
 
-
-math_Vector::math_Vector(const Standard_Integer Lower,
-                        const Standard_Integer Upper):
-                        
-                        LowerIndex(Lower),
-                        UpperIndex(Upper),
-                        Array(Lower,Upper) {
-                          Standard_RangeError_Raise_if(Lower > Upper, "");                    
-                        }
-
-math_Vector::math_Vector(const Standard_Integer Lower,
-                        const Standard_Integer Upper,
-                        const Standard_Real    InitialValue):
-                        
-                        LowerIndex(Lower),
-                        UpperIndex(Upper),
-                        Array(Lower,Upper) 
+math_Vector::math_Vector(const Standard_Integer theLower, const Standard_Integer theUpper) :
+  LowerIndex(theLower),
+  UpperIndex(theUpper),
+  Array(theLower,theUpper)
 {
-  Standard_RangeError_Raise_if(Lower > Upper, "");                    
-  Array.Init(InitialValue);
+  Standard_RangeError_Raise_if(theLower > theUpper, "");
 }
 
-math_Vector::math_Vector(const Standard_Address Tab,
-                        const Standard_Integer Lower,
-                        const Standard_Integer Upper) :
-                        
-                        LowerIndex(Lower),
-                        UpperIndex(Upper),
-                        Array(*((const Standard_Real *)Tab), Lower,Upper) 
+math_Vector::math_Vector(const Standard_Integer theLower,
+                         const Standard_Integer theUpper,
+                         const Standard_Real    theInitialValue):
+  LowerIndex(theLower),
+  UpperIndex(theUpper),
+  Array(theLower,theUpper)
 {
-  Standard_RangeError_Raise_if((Lower > Upper) , "");                 
+  Standard_RangeError_Raise_if(theLower > theUpper, "");
+  Array.Init(theInitialValue);
 }
 
-void math_Vector::Init(const Standard_Real InitialValue) {
-  Array.Init(InitialValue);
+math_Vector::math_Vector(const Standard_Address theTab,
+                         const Standard_Integer theLower,
+                         const Standard_Integer theUpper) :
+  LowerIndex(theLower),
+  UpperIndex(theUpper),
+  Array(theTab, theLower,theUpper)
+{
+  Standard_RangeError_Raise_if((theLower > theUpper) , "");
 }
 
-math_Vector::math_Vector(const math_Vector& Other): 
-
-LowerIndex(Other.LowerIndex),
-UpperIndex(Other.UpperIndex),
-Array(Other.Array) {}
-
-
-void math_Vector::SetLower(const Standard_Integer Lower) {
+void math_Vector::Init(const Standard_Real theInitialValue)
+{
+  Array.Init(theInitialValue);
+}
 
-  Array.SetLower(Lower);
-  UpperIndex = UpperIndex - LowerIndex + Lower;
-  LowerIndex = Lower;
+math_Vector::math_Vector(const math_Vector& theOther) :
+  LowerIndex(theOther.LowerIndex),
+  UpperIndex(theOther.UpperIndex),
+  Array(theOther.Array)
+{
 }
 
-Standard_Real math_Vector::Norm() const {
+void math_Vector::SetLower(const Standard_Integer theLower)
+{
+  Array.SetLower(theLower);
+  UpperIndex = UpperIndex - LowerIndex + theLower;
+  LowerIndex = theLower;
+}
 
+Standard_Real math_Vector::Norm() const
+{
   Standard_Real Result = 0;
 
-  for(Standard_Integer Index = LowerIndex; Index <= UpperIndex; Index++) {
+  for(Standard_Integer Index = LowerIndex; Index <= UpperIndex; Index++)
+  {
     Result = Result + Array(Index) * Array(Index);
   }
   return Sqrt(Result);
 }
 
-Standard_Real math_Vector::Norm2() const {
-
+Standard_Real math_Vector::Norm2() const
+{
   Standard_Real Result = 0;
 
-  for(Standard_Integer Index = LowerIndex; Index <= UpperIndex; Index++) {
+  for(Standard_Integer Index = LowerIndex; Index <= UpperIndex; Index++)
+  {
     Result = Result + Array(Index) * Array(Index);
   }
   return Result;
 }
 
-Standard_Integer math_Vector::Max() const {
-
+Standard_Integer math_Vector::Max() const
+{
   Standard_Integer I=0;
   Standard_Real X = RealFirst();
 
-  for(Standard_Integer Index = LowerIndex; Index <= UpperIndex; Index++) {
-    if(Array(Index) > X) {
+  for(Standard_Integer Index = LowerIndex; Index <= UpperIndex; Index++)
+  {
+    if(Array(Index) > X)
+    {
       X = Array(Index);
       I = Index;
     }
@@ -107,13 +108,15 @@ Standard_Integer math_Vector::Max() const {
   return I;
 }
 
-Standard_Integer math_Vector::Min() const {
-
+Standard_Integer math_Vector::Min() const
+{
   Standard_Integer I=0;
   Standard_Real X = RealLast();
 
-  for(Standard_Integer Index = LowerIndex; Index <= UpperIndex; Index++) {
-    if(Array(Index) < X) {
+  for(Standard_Integer Index = LowerIndex; Index <= UpperIndex; Index++)
+  {
+    if(Array(Index) < X)
+    {
       X = Array(Index);
       I = Index;
     }
@@ -121,45 +124,45 @@ Standard_Integer math_Vector::Min() const {
   return I;
 }
 
-void math_Vector::Set(const Standard_Integer I1, 
-                     const Standard_Integer I2, 
-                     const math_Vector &V) {
+void math_Vector::Set(const Standard_Integer theI1,
+                      const Standard_Integer theI2,
+                      const math_Vector &theV)
+{
+  Standard_RangeError_Raise_if((theI1 < LowerIndex) || (theI2 > UpperIndex) ||
+    (theI1 > theI2) || (theI2 - theI1 + 1 != theV.Length()), "");
 
-  Standard_RangeError_Raise_if((I1 < LowerIndex) || 
-                              (I2 > UpperIndex) || 
-                              (I1 > I2)         ||
-                              (I2 - I1 + 1 != V.Length()), "");
-  
-  Standard_Integer I = V.Lower();
-  for(Standard_Integer Index = I1; Index <= I2; Index++) {
-    Array(Index) = V.Array(I);
+  Standard_Integer I = theV.Lower();
+  for(Standard_Integer Index = theI1; Index <= theI2; Index++)
+  {
+    Array(Index) = theV.Array(I);
     I++;
   }
 }
 
-void math_Vector::Normalize() {
-
+void math_Vector::Normalize()
+{
   Standard_Real Result = Norm();
   Standard_NullValue_Raise_if((Result <= RealEpsilon()), "");
-  for(Standard_Integer Index = LowerIndex; Index <= UpperIndex; Index++) {
+  for(Standard_Integer Index = LowerIndex; Index <= UpperIndex; Index++)
+  {
     Array(Index) = Array(Index) / Result;
   }
 }
 
-math_Vector math_Vector::Normalized() const {
-
+math_Vector math_Vector::Normalized() const
+{
   math_Vector Result = *this;
 
   Result.Normalize();
   return Result;
 }
 
-void math_Vector::Invert() {
+void math_Vector::Invert()
+{
   Standard_Integer J;
   Standard_Real Temp;
-  for(Standard_Integer Index = LowerIndex; 
-//      Index <= LowerIndex + (Length()) >> 1 ; Index++) {
-      Index <= (LowerIndex + Length()) >> 1 ; Index++) {
+  for(Standard_Integer Index = LowerIndex; Index <= (LowerIndex + Length()) >> 1 ; Index++)
+  {
     J = UpperIndex + LowerIndex - Index;
     Temp = Array(Index);
     Array(Index) = Array(J);
@@ -167,316 +170,310 @@ void math_Vector::Invert() {
   }
 }
 
-math_Vector math_Vector::Inverse() const {
+math_Vector math_Vector::Inverse() const
+{
   math_Vector Result = *this;
   Result.Invert();
   return Result;
 }
 
-math_Vector math_Vector::Multiplied(const Standard_Real Right) const{
-
+math_Vector math_Vector::Multiplied(const Standard_Real theRight) const
+{
   math_Vector Result (LowerIndex, UpperIndex);
 
-  for(Standard_Integer Index = LowerIndex; Index <= UpperIndex; Index++) {
-    Result.Array(Index) = Array(Index) * Right;
+  for(Standard_Integer Index = LowerIndex; Index <= UpperIndex; Index++)
+  {
+    Result.Array(Index) = Array(Index) * theRight;
   }
   return Result;
 }
 
-math_Vector math_Vector::TMultiplied(const Standard_Real Right) const{
-
+math_Vector math_Vector::TMultiplied(const Standard_Real theRight) const
+{
   math_Vector Result (LowerIndex, UpperIndex);
 
-  for(Standard_Integer Index = LowerIndex; Index <= UpperIndex; Index++) {
-    Result.Array(Index) = Array(Index) * Right;
+  for(Standard_Integer Index = LowerIndex; Index <= UpperIndex; Index++)
+  {
+    Result.Array(Index) = Array(Index) * theRight;
   }
   return Result;
 }
 
-
-void math_Vector::Multiply(const Standard_Real Right) {
-
-  for(Standard_Integer Index = LowerIndex; Index <= UpperIndex; Index++) {
-    Array(Index) = Array(Index) * Right;
+void math_Vector::Multiply(const Standard_Real theRight)
+{
+  for(Standard_Integer Index = LowerIndex; Index <= UpperIndex; Index++)
+  {
+    Array(Index) = Array(Index) * theRight;
   }
 }
 
+void math_Vector::Divide(const Standard_Real theRight)
+{
+  Standard_DivideByZero_Raise_if(Abs(theRight) <= RealEpsilon(), "");
 
-void math_Vector::Divide(const Standard_Real Right) {
-
-  Standard_DivideByZero_Raise_if(Abs(Right) <= RealEpsilon(), "");
-
-  for(Standard_Integer Index =LowerIndex; Index <=UpperIndex; Index++) {
-    Array(Index) = Array(Index) / Right;
+  for(Standard_Integer Index =LowerIndex; Index <=UpperIndex; Index++)
+  {
+    Array(Index) = Array(Index) / theRight;
   }
 }
 
-
-math_Vector math_Vector::Divided (const Standard_Real Right) const {
-  
-  Standard_DivideByZero_Raise_if(Abs(Right) <= RealEpsilon(), "");
-  math_Vector temp = Multiplied(1./Right);
+math_Vector math_Vector::Divided (const Standard_Real theRight) const
+{
+  Standard_DivideByZero_Raise_if(Abs(theRight) <= RealEpsilon(), "");
+  math_Vector temp = Multiplied(1./theRight);
   return temp;
 }
 
+void math_Vector::Add(const math_Vector& theRight)
+{
+  Standard_DimensionError_Raise_if(Length() != theRight.Length(), "");
 
-void math_Vector::Add(const math_Vector& Right) {
-
-  Standard_DimensionError_Raise_if(Length() != Right.Length(), "");
-
-  Standard_Integer I = Right.LowerIndex;
-  for(Standard_Integer Index = LowerIndex; Index <= UpperIndex; Index++) {
-    Array(Index) = Array(Index) + Right.Array(I);
+  Standard_Integer I = theRight.LowerIndex;
+  for(Standard_Integer Index = LowerIndex; Index <= UpperIndex; Index++)
+  {
+    Array(Index) = Array(Index) + theRight.Array(I);
     I++;
   }
-}    
-
-math_Vector math_Vector::Added(const math_Vector& Right) const{
+}
 
-  Standard_DimensionError_Raise_if(Length() != Right.Length(), "");
+math_Vector math_Vector::Added(const math_Vector& theRight) const
+{
+  Standard_DimensionError_Raise_if(Length() != theRight.Length(), "");
 
   math_Vector Result(LowerIndex, UpperIndex);
-  
-  Standard_Integer I = Right.LowerIndex;
-  for(Standard_Integer Index = LowerIndex; Index <= UpperIndex; Index++) {
-    Result.Array(Index) = Array(Index) + Right.Array(I);
+
+  Standard_Integer I = theRight.LowerIndex;
+  for(Standard_Integer Index = LowerIndex; Index <= UpperIndex; Index++)
+  {
+    Result.Array(Index) = Array(Index) + theRight.Array(I);
     I++;
   }
   return Result;
-}    
-
-
-
-void math_Vector::Subtract(const math_Vector& Right) {
+}
 
-  Standard_DimensionError_Raise_if(Length() != Right.Length(), "");
+void math_Vector::Subtract(const math_Vector& theRight)
+{
+  Standard_DimensionError_Raise_if(Length() != theRight.Length(), "");
 
-  Standard_Integer I = Right.LowerIndex;
-  for(Standard_Integer Index = LowerIndex; Index <= UpperIndex; Index++) {
-    Array(Index) = Array(Index) - Right.Array(I);
+  Standard_Integer I = theRight.LowerIndex;
+  for(Standard_Integer Index = LowerIndex; Index <= UpperIndex; Index++)
+  {
+    Array(Index) = Array(Index) - theRight.Array(I);
     I++;
   }
-}    
-
+}
 
-math_Vector math_Vector::Subtracted (const math_Vector& Right) const {
+math_Vector math_Vector::Subtracted (const math_Vector& theRight) const
+{
+  Standard_DimensionError_Raise_if(Length() != theRight.Length(), "");
 
-  Standard_DimensionError_Raise_if(Length() != Right.Length(), "");
-  
   math_Vector Result(LowerIndex, UpperIndex);
-  
-  Standard_Integer I = Right.LowerIndex;
-  for(Standard_Integer Index = LowerIndex; Index <= UpperIndex; Index++) {
-    Result.Array(Index) = Array(Index) - Right.Array(I);
+
+  Standard_Integer I = theRight.LowerIndex;
+  for(Standard_Integer Index = LowerIndex; Index <= UpperIndex; Index++)
+  {
+    Result.Array(Index) = Array(Index) - theRight.Array(I);
     I++;
   }
   return Result;
-}    
-
+}
 
-math_Vector math_Vector::Slice(const Standard_Integer I1, 
-                              const Standard_Integer I2) const 
+math_Vector math_Vector::Slice(const Standard_Integer theI1, const Standard_Integer theI2) const
 {
-  
-  Standard_RangeError_Raise_if((I1 < LowerIndex) ||
-                              (I1 > UpperIndex) ||
-                              (I2 < LowerIndex) ||
-                              (I2 > UpperIndex) , "");
-  
+  Standard_RangeError_Raise_if((theI1 < LowerIndex) || (theI1 > UpperIndex) || (theI2 < LowerIndex) || (theI2 > UpperIndex) , "");
 
-  if(I2 >= I1) {
-    math_Vector Result(I1, I2);
-    for(Standard_Integer Index = I1; Index <= I2; Index++) {
+  if(theI2 >= theI1)
+  {
+    math_Vector Result(theI1, theI2);
+    for(Standard_Integer Index = theI1; Index <= theI2; Index++)
+    {
       Result.Array(Index) = Array(Index);
-    }        
-    return Result;  
+    }
+    return Result;
   }
-  else {
-    math_Vector Result(I2, I1);
-    for(Standard_Integer Index = I1; Index >= I2; Index--) {
+  else
+  {
+    math_Vector Result(theI2, theI1);
+    for(Standard_Integer Index = theI1; Index >= theI2; Index--)
+    {
       Result.Array(Index) = Array(Index);
     }
     return Result;
-  }   
+  }
 }
 
+void math_Vector::Add (const math_Vector& theLeft, const math_Vector& theRight)
+{
+  Standard_DimensionError_Raise_if((Length() != theRight.Length()) || (theRight.Length() != theLeft.Length()), "");
 
-void math_Vector::Add (const math_Vector& Left, const math_Vector& Right) {
-
-  Standard_DimensionError_Raise_if((Length() != Right.Length()) ||
-                                  (Right.Length() != Left.Length()), "");
-
-  
-  Standard_Integer I = Left.LowerIndex;
-  Standard_Integer J = Right.LowerIndex;
-  for(Standard_Integer Index = LowerIndex; Index <= UpperIndex; Index++) {
-    Array(Index) = Left.Array(I) + Right.Array(J);
+  Standard_Integer I = theLeft.LowerIndex;
+  Standard_Integer J = theRight.LowerIndex;
+  for(Standard_Integer Index = LowerIndex; Index <= UpperIndex; Index++)
+  {
+    Array(Index) = theLeft.Array(I) + theRight.Array(J);
     I++;
     J++;
   }
-}    
-
-void math_Vector::Subtract (const math_Vector& Left, 
-                           const math_Vector& Right) {
-
-  Standard_DimensionError_Raise_if((Length() != Right.Length()) ||
-                                  (Right.Length() != Left.Length()), "");
-  
-  Standard_Integer I = Left.LowerIndex;
-  Standard_Integer J = Right.LowerIndex;
-  for(Standard_Integer Index = LowerIndex; Index <= UpperIndex; Index++) {
-    Array(Index) = Left.Array(I) - Right.Array(J);
+}
+
+void math_Vector::Subtract (const math_Vector& theLeft, const math_Vector& theRight)
+{
+  Standard_DimensionError_Raise_if((Length() != theRight.Length()) || (theRight.Length() != theLeft.Length()), "");
+
+  Standard_Integer I = theLeft.LowerIndex;
+  Standard_Integer J = theRight.LowerIndex;
+  for(Standard_Integer Index = LowerIndex; Index <= UpperIndex; Index++)
+  {
+    Array(Index) = theLeft.Array(I) - theRight.Array(J);
     I++;
     J++;
   }
-}    
-
-void math_Vector::Multiply(const math_Matrix& Left, 
-                          const math_Vector& Right) {
+}
 
-  Standard_DimensionError_Raise_if((Length() != Left.RowNumber()) ||
-                                  (Left.ColNumber() != Right.Length()),
-                                  "");
+void math_Vector::Multiply(const math_Matrix& theLeft, const math_Vector& theRight)
+{
+  Standard_DimensionError_Raise_if((Length() != theLeft.RowNumber()) ||
+    (theLeft.ColNumber() != theRight.Length()), "");
 
   Standard_Integer Index = LowerIndex;
-  for(Standard_Integer I = Left.LowerRowIndex; I <= Left.UpperRowIndex; I++) {
+  for(Standard_Integer I = theLeft.LowerRowIndex; I <= theLeft.UpperRowIndex; I++)
+  {
     Array(Index) = 0.0;
-    Standard_Integer K = Right.LowerIndex;
-    for(Standard_Integer J = Left.LowerColIndex; J <= Left.UpperColIndex; J++) {
-      Array(Index) = Array(Index) + Left.Array(I, J) * Right.Array(K);
+    Standard_Integer K = theRight.LowerIndex;
+    for(Standard_Integer J = theLeft.LowerColIndex; J <= theLeft.UpperColIndex; J++)
+    {
+      Array(Index) = Array(Index) + theLeft.Array(I, J) * theRight.Array(K);
       K++;
     }
     Index++;
   }
-}    
-
-void math_Vector::Multiply(const math_Vector& Left,
-                          const math_Matrix& Right) {
+}
 
-  Standard_DimensionError_Raise_if((Length() != Right.ColNumber()) ||
-                                  (Left.Length() != Right.RowNumber()),
-                                  "");
+void math_Vector::Multiply(const math_Vector& theLeft, const math_Matrix& theRight)
+{
+  Standard_DimensionError_Raise_if((Length() != theRight.ColNumber()) ||
+    (theLeft.Length() != theRight.RowNumber()), "");
 
   Standard_Integer Index = LowerIndex;
-  for(Standard_Integer J = Right.LowerColIndex; J <= Right.UpperColIndex; J++) {
+  for(Standard_Integer J = theRight.LowerColIndex; J <= theRight.UpperColIndex; J++)
+  {
     Array(Index) = 0.0;
-    Standard_Integer K = Left.LowerIndex;
-    for(Standard_Integer I = Right.LowerRowIndex; I <= Right.UpperRowIndex; I++) {
-      Array(Index) = Array(Index) + Left.Array(K) * Right.Array(I, J);
+    Standard_Integer K = theLeft.LowerIndex;
+    for(Standard_Integer I = theRight.LowerRowIndex; I <= theRight.UpperRowIndex; I++)
+    {
+      Array(Index) = Array(Index) + theLeft.Array(K) * theRight.Array(I, J);
       K++;
     }
     Index++;
   }
-}    
-
-void math_Vector::TMultiply(const math_Matrix& TLeft,
-                           const math_Vector&  Right) {
+}
 
-  Standard_DimensionError_Raise_if((Length() != TLeft.ColNumber()) ||
-                                  (TLeft.RowNumber() != Right.Length()),
-                                  "");
+void math_Vector::TMultiply(const math_Matrix& theTLeft, const math_Vector&  theRight)
+{
+  Standard_DimensionError_Raise_if((Length() != theTLeft.ColNumber()) ||
+    (theTLeft.RowNumber() != theRight.Length()), "");
 
   Standard_Integer Index = LowerIndex;
-  for(Standard_Integer I = TLeft.LowerColIndex; I <= TLeft.UpperColIndex; I++) {
+  for(Standard_Integer I = theTLeft.LowerColIndex; I <= theTLeft.UpperColIndex; I++)
+  {
     Array(Index) = 0.0;
-    Standard_Integer K = Right.LowerIndex;
-    for(Standard_Integer J = TLeft.LowerRowIndex; J <= TLeft.UpperRowIndex; J++) {
-      Array(Index) = Array(Index) + TLeft.Array(J, I) * Right.Array(K);
+    Standard_Integer K = theRight.LowerIndex;
+    for(Standard_Integer J = theTLeft.LowerRowIndex; J <= theTLeft.UpperRowIndex; J++)
+    {
+      Array(Index) = Array(Index) + theTLeft.Array(J, I) * theRight.Array(K);
       K++;
     }
     Index++;
   }
-}    
-
-void math_Vector::TMultiply(const math_Vector&  Left,
-                           const math_Matrix& TRight) {
+}
 
-  Standard_DimensionError_Raise_if((Length() != TRight.RowNumber()) ||
-                                  (Left.Length() != TRight.ColNumber()),
-                                  "");
+void math_Vector::TMultiply(const math_Vector&  theLeft, const math_Matrix& theTRight)
+{
+  Standard_DimensionError_Raise_if((Length() != theTRight.RowNumber()) ||
+    (theLeft.Length() != theTRight.ColNumber()), "");
 
   Standard_Integer Index = LowerIndex;
-  for(Standard_Integer J = TRight.LowerRowIndex; J <= TRight.UpperRowIndex; J++) {
+  for(Standard_Integer J = theTRight.LowerRowIndex; J <= theTRight.UpperRowIndex; J++)
+  {
     Array(Index) = 0.0;
-    Standard_Integer K = Left.LowerIndex;
-    for(Standard_Integer I = TRight.LowerColIndex; 
-       I <= TRight.UpperColIndex; I++) {
-      Array(Index) = Array(Index) + Left.Array(K) * TRight.Array(J, I);
-      K++;
+    Standard_Integer K = theLeft.LowerIndex;
+    for(Standard_Integer I = theTRight.LowerColIndex;
+      I <= theTRight.UpperColIndex; I++)
+    {
+        Array(Index) = Array(Index) + theLeft.Array(K) * theTRight.Array(J, I);
+        K++;
     }
     Index++;
   }
-}    
-
-
-
+}
 
-Standard_Real math_Vector::Multiplied(const math_Vector& Right) const{
+Standard_Real math_Vector::Multiplied(const math_Vector& theRight) const
+{
   Standard_Real Result = 0;
 
-  Standard_DimensionError_Raise_if(Length() != Right.Length(), "");
+  Standard_DimensionError_Raise_if(Length() != theRight.Length(), "");
 
-  Standard_Integer I = Right.LowerIndex;
-  for(Standard_Integer Index = LowerIndex; Index <= UpperIndex; Index++) {
-    Result = Result + Array(Index) * Right.Array(I);
+  Standard_Integer I = theRight.LowerIndex;
+  for(Standard_Integer Index = LowerIndex; Index <= UpperIndex; Index++)
+  {
+    Result = Result + Array(Index) * theRight.Array(I);
     I++;
   }
   return Result;
-}    
+}
 
-math_Vector math_Vector::Opposite() {
+math_Vector math_Vector::Opposite()
+{
   math_Vector Result(LowerIndex, UpperIndex);
 
-  for(Standard_Integer Index = LowerIndex; Index <= UpperIndex; Index++) {
+  for(Standard_Integer Index = LowerIndex; Index <= UpperIndex; Index++)
+  {
     Result.Array(Index) = - Array(Index);
   }
   return Result;
-}    
-
-math_Vector math_Vector::Multiplied(const math_Matrix& Right)const {    
-  Standard_DimensionError_Raise_if(Length() != Right.RowNumber(), "");
-
-  math_Vector Result(Right.LowerColIndex, Right.UpperColIndex);
-  for(Standard_Integer J2 = Right.LowerColIndex; 
-      J2 <= Right.UpperColIndex; J2++) {
-    Array(J2) = 0.0;
-    Standard_Integer I2 = Right.LowerRowIndex;
-    for(Standard_Integer I = LowerIndex; I <= UpperIndex; I++) {
-      Result.Array(J2) = Result.Array(J2) + Array(I) * 
-       Right.Array(I2, J2);
-      I2++;
-    }
+}
+
+math_Vector math_Vector::Multiplied(const math_Matrix& theRight)const
+{
+  Standard_DimensionError_Raise_if(Length() != theRight.RowNumber(), "");
+
+  math_Vector Result(theRight.LowerColIndex, theRight.UpperColIndex);
+  for(Standard_Integer J2 = theRight.LowerColIndex; J2 <= theRight.UpperColIndex; J2++)
+  {
+      Array(J2) = 0.0;
+      Standard_Integer theI2 = theRight.LowerRowIndex;
+      for(Standard_Integer I = LowerIndex; I <= UpperIndex; I++)
+      {
+        Result.Array(J2) = Result.Array(J2) + Array(I) * theRight.Array(theI2, J2);
+        theI2++;
+      }
   }
   return Result;
-}    
-
+}
 
-void math_Vector::Multiply(const Standard_Real Left,
-                          const math_Vector& Right) 
+void math_Vector::Multiply(const Standard_Real theLeft, const math_Vector& theRight)
 {
-  Standard_DimensionError_Raise_if((Length() != Right.Length()),
-                                  "");
-  for(Standard_Integer I = LowerIndex; I <= UpperIndex; I++) {
-    Array(I) = Left * Right.Array(I);
+  Standard_DimensionError_Raise_if((Length() != theRight.Length()), "");
+  for(Standard_Integer I = LowerIndex; I <= UpperIndex; I++)
+  {
+    Array(I) = theLeft * theRight.Array(I);
   }
 }
 
+math_Vector& math_Vector::Initialized(const math_Vector& theOther)
+{
+  Standard_DimensionError_Raise_if(Length() != theOther.Length(), "");
 
-math_Vector& math_Vector::Initialized(const math_Vector& Other) {
-
-  Standard_DimensionError_Raise_if(Length() != Other.Length(), "");
-  
-  (Other.Array).Copy(Array);
+  (theOther.Array).Copy(Array);
   return *this;
 }
 
-
-
-void math_Vector::Dump(Standard_OStream& o) const
+void math_Vector::Dump(Standard_OStream& theO) const
 {
-  o << "math_Vector of Length = " << Length() << "\n";
-  for(Standard_Integer Index = LowerIndex; 
-      Index <= UpperIndex; Index++) {
-    o << "math_Vector(" << Index << ") = " << Array(Index) << "\n";
+  theO << "math_Vector of Length = " << Length() << "\n";
+  for(Standard_Integer Index = LowerIndex; Index <= UpperIndex; Index++)
+  {
+    theO << "math_Vector(" << Index << ") = " << Array(Index) << "\n";
   }
 }
+
diff --git a/src/math/math_Vector.hxx b/src/math/math_Vector.hxx
new file mode 100644 (file)
index 0000000..e3b1b54
--- /dev/null
@@ -0,0 +1,326 @@
+// Copyright (c) 1997-1999 Matra Datavision
+// Copyright (c) 1999-2014 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef _math_Vector_HeaderFile
+#define _math_Vector_HeaderFile
+
+#include <math_SingleTab.hxx>
+
+class Standard_DimensionError;
+class Standard_DivideByZero;
+class Standard_RangeError;
+class Standard_NullValue;
+class math_Matrix;
+
+//! This class implements the real vector abstract data type.
+//! Vectors can have an arbitrary range which must be defined at
+//! the declaration and cannot be changed after this declaration.
+//! @code
+//!    math_Vector V1(-3, 5); // a vector with range [-3..5]
+//! @endcode
+//!
+//! Vector are copied through assignement :
+//! @code
+//!    math_Vector V2( 1, 9);
+//!    ....
+//!    V2 = V1;
+//!    V1(1) = 2.0; // the vector V2 will not be modified.
+//! @endcode
+//!
+//! The Exception RangeError is raised when trying to access outside
+//! the range of a vector :
+//! @code
+//!    V1(11) = 0.0 // --> will raise RangeError;
+//! @endcode
+//!
+//! The Exception DimensionError is raised when the dimensions of two
+//! vectors are not compatible :
+//! @code
+//!    math_Vector V3(1, 2);
+//!    V3 = V1;    // --> will raise DimensionError;
+//!    V1.Add(V3)  // --> will raise DimensionError;
+//! @endcode
+class math_Vector
+{
+public:
+
+  DEFINE_STANDARD_ALLOC
+
+  //! Contructs a non-initialized vector in the range [theLower..theUpper]
+  //! "theLower" and "theUpper" are the indexes of the lower and upper bounds of the constructed vector.
+  Standard_EXPORT math_Vector(const Standard_Integer theLower, const Standard_Integer theUpper);
+
+  //! Contructs a vector in the range [theLower..theUpper]
+  //! whose values are all initialized with the value "theInitialValue"
+  Standard_EXPORT math_Vector(const Standard_Integer theLower, const Standard_Integer theUpper, const Standard_Real theInitialValue);
+
+  //! Constructs a vector in the range [theLower..theUpper]
+  //! with the "c array" theTab.
+  Standard_EXPORT math_Vector(const Standard_Address theTab, const Standard_Integer theLower, const Standard_Integer theUpper);
+
+  //! Initialize all the elements of a vector with "theInitialValue".
+  Standard_EXPORT void Init(const Standard_Real theInitialValue);
+
+  //! Constructs a copy for initialization.
+  //! An exception is raised if the lengths of the vectors are different.
+  Standard_EXPORT math_Vector(const math_Vector& theOther);
+
+  //! Returns the length of a vector
+  inline Standard_Integer Length() const
+  {
+    return UpperIndex - LowerIndex +1;
+  }
+
+  //! Returns the value of the theLower index of a vector.
+  inline Standard_Integer Lower() const
+  {
+    return LowerIndex;
+  }
+
+  //! Returns the value of the theUpper index of a vector.
+  inline Standard_Integer Upper() const
+  {
+    return UpperIndex;
+  }
+
+  //! Returns the value or the square  of the norm of this vector.
+  Standard_EXPORT Standard_Real Norm() const;
+
+  //! Returns the value of the square of the norm of a vector.
+  Standard_EXPORT Standard_Real Norm2() const;
+
+  //! Returns the value of the "Index" of the maximum element of a vector.
+  Standard_EXPORT Standard_Integer Max() const;
+
+  //! Returns the value of the "Index" of the minimum element  of a vector.
+  Standard_EXPORT Standard_Integer Min() const;
+
+  //! Normalizes this vector (the norm of the result
+  //! is equal to 1.0) and assigns the result to this vector
+  //! Exceptions
+  //! Standard_NullValue if this vector is null (i.e. if its norm is
+  //! less than or equal to Standard_Real::RealEpsilon().
+  Standard_EXPORT void Normalize();
+
+  //! Normalizes this vector (the norm of the result
+  //! is equal to 1.0) and creates a new vector
+  //! Exceptions
+  //! Standard_NullValue if this vector is null (i.e. if its norm is
+  //! less than or equal to Standard_Real::RealEpsilon().
+  Standard_EXPORT math_Vector Normalized() const;
+
+  //! Inverts this vector and assigns the result to this vector.
+  Standard_EXPORT void Invert();
+
+  //! Inverts this vector and creates a new vector.
+  Standard_EXPORT math_Vector Inverse() const;
+
+  //! sets a vector from "theI1" to "theI2" to the vector "theV";
+  //! An exception is raised if "theI1" is less than "LowerIndex" or "theI2" is greater than "UpperIndex" or "theI1" is greater than "theI2".
+  //! An exception is raised if "theI2-theI1+1" is different from the "Length" of "theV".
+  Standard_EXPORT void Set(const Standard_Integer theI1, const Standard_Integer theI2, const math_Vector& theV);
+
+  //!Creates a new vector by inverting the values of this vector
+  //! between indexes "theI1" and "theI2".
+  //! If the values of this vector were (1., 2., 3., 4.,5., 6.),
+  //! by slicing it between indexes 2 and 5 the values
+  //! of the resulting vector are (1., 5., 4., 3., 2., 6.)
+  Standard_EXPORT math_Vector Slice(const Standard_Integer theI1, const Standard_Integer theI2) const;
+
+  //! returns the product of a vector and a real value.
+  Standard_EXPORT void Multiply(const Standard_Real theRight);
+
+  void operator *=(const Standard_Real theRight)
+  {
+    Multiply(theRight);
+  }
+
+  //! returns the product of a vector and a real value.
+  Standard_EXPORT math_Vector Multiplied(const Standard_Real theRight) const;
+
+  math_Vector operator*(const Standard_Real theRight) const
+  {
+    return Multiplied(theRight);
+  }
+
+  //! returns the product of a vector and a real value.
+  Standard_EXPORT math_Vector TMultiplied(const Standard_Real theRight) const;
+
+  friend inline math_Vector operator* (const Standard_Real theLeft, const math_Vector& theRight) 
+  {
+    return theRight.Multiplied(theLeft);
+  }
+
+  //! divides a vector by the value "theRight".
+  //! An exception is raised if "theRight" = 0.
+  Standard_EXPORT void Divide(const Standard_Real theRight);
+
+  void operator /=(const Standard_Real theRight) 
+  {
+    Divide(theRight);
+  }
+
+  //! divides a vector by the value "theRight".
+  //! An exception is raised if "theRight" = 0.
+  Standard_EXPORT math_Vector Divided(const Standard_Real theRight) const;
+
+  math_Vector operator/(const Standard_Real theRight) const
+  {
+    return Divided(theRight);
+  }
+
+  //! adds the vector "theRight" to a vector.
+  //! An exception is raised if the vectors have not the same length.
+  //! Warning
+  //! In order to avoid time-consuming copying of vectors, it
+  //! is preferable to use operator += or the function Add whenever possible.
+  Standard_EXPORT void Add(const math_Vector& theRight);
+
+  void operator +=(const math_Vector& theRight) 
+  {
+    Add(theRight);
+  }
+
+  //! adds the vector theRight to a vector.
+  //! An exception is raised if the vectors have not the same length.
+  //! An exception is raised if the lengths are not equal.
+  Standard_EXPORT math_Vector Added(const math_Vector& theRight) const;
+
+  math_Vector operator+(const math_Vector& theRight) const
+  {
+    return Added(theRight);
+  }
+
+  //! sets a vector to the product of the vector "theLeft"
+  //! with the matrix "theRight".
+  Standard_EXPORT void Multiply(const math_Vector& theLeft, const math_Matrix& theRight);
+
+  //!sets a vector to the product of the matrix "theLeft"
+  //! with the vector "theRight".
+  Standard_EXPORT void Multiply(const math_Matrix& theLeft, const math_Vector& theRight);
+
+  //! sets a vector to the product of the transpose
+  //! of the matrix "theTLeft" by the vector "theRight".
+  Standard_EXPORT void TMultiply(const math_Matrix& theTLeft, const math_Vector& theRight);
+
+  //! sets a vector to the product of the vector
+  //! "theLeft" by the transpose of the matrix "theTRight".
+  Standard_EXPORT void TMultiply(const math_Vector& theLeft, const math_Matrix& theTRight);
+
+  //! sets a vector to the sum of the vector "theLeft"
+  //! and the vector "theRight".
+  //! An exception is raised if the lengths are different.
+  Standard_EXPORT void Add(const math_Vector& theLeft, const math_Vector& theRight);
+
+  //! sets a vector to the Subtraction of the
+  //! vector theRight from the vector theLeft.
+  //! An exception is raised if the vectors have not the same length.
+  //! Warning
+  //! In order to avoid time-consuming copying of vectors, it
+  //! is preferable to use operator -= or the function
+  //! Subtract whenever possible.
+  Standard_EXPORT void Subtract(const math_Vector& theLeft,const math_Vector& theRight);
+
+  //! accesses (in read or write mode) the value of index "theNum" of a vector.
+  inline Standard_Real& Value(const Standard_Integer theNum) const
+  {
+    Standard_RangeError_Raise_if(theNum < LowerIndex || theNum > UpperIndex, " ");
+    return Array(theNum);
+  }
+
+  Standard_Real& operator()(const Standard_Integer theNum) const
+  {
+    return Value(theNum);
+  }
+
+  //! Initialises a vector by copying "theOther".
+  //! An exception is raised if the Lengths are differents.
+  Standard_EXPORT math_Vector& Initialized(const math_Vector& theOther);
+
+  math_Vector& operator=(const math_Vector& theOther)
+  {
+    return Initialized(theOther);
+  }
+
+  //! returns the inner product of 2 vectors.
+  //! An exception is raised if the lengths are not equal.
+  Standard_EXPORT Standard_Real Multiplied(const math_Vector& theRight) const;
+  Standard_Real operator*(const math_Vector& theRight) const
+  {
+    return Multiplied(theRight);
+  }
+
+  //! returns the product of a vector by a matrix.
+  Standard_EXPORT math_Vector Multiplied(const math_Matrix& theRight) const;
+
+  math_Vector operator*(const math_Matrix& theRight) const
+  {
+    return Multiplied(theRight);
+  }
+
+  //! returns the opposite of a vector.
+  Standard_EXPORT math_Vector Opposite();
+
+  math_Vector operator-()
+  {
+    return Opposite();
+  }
+
+  //! returns the subtraction of "theRight" from "me".
+  //! An exception is raised if the vectors have not the same length.
+  Standard_EXPORT void Subtract(const math_Vector& theRight);
+
+  void operator-=(const math_Vector& theRight)
+  {
+    Subtract(theRight);
+  }
+
+  //! returns the subtraction of "theRight" from "me".
+  //! An exception is raised if the vectors have not the same length.
+  Standard_EXPORT math_Vector Subtracted(const math_Vector& theRight) const;
+
+  math_Vector operator-(const math_Vector& theRight) const
+  {
+    return Subtracted(theRight);
+  }
+
+  //! returns the multiplication of a real by a vector.
+  //! "me" = "theLeft" * "theRight"
+  Standard_EXPORT void Multiply(const Standard_Real theLeft,const math_Vector& theRight);
+
+  //! Prints information on the current state of the object.
+  //! Is used to redefine the operator <<.
+  Standard_EXPORT void Dump(Standard_OStream& theO) const;
+
+  friend inline Standard_OStream& operator<<(Standard_OStream& theO, const math_Vector& theVec)
+  {
+    theVec.Dump(theO);
+    return theO;
+  }
+
+  friend class math_Matrix;
+
+protected:
+
+  //! Is used internally to set the "theLower" value of the vector.
+  void SetLower(const Standard_Integer theLower);
+
+private:
+
+  Standard_Integer LowerIndex;
+  Standard_Integer UpperIndex;
+  math_SingleTab<Standard_Real> Array;
+};
+
+#endif